diff --git a/components/smart_display/header_bar.h b/components/smart_display/header_bar.h index 25e7169..f501104 100644 --- a/components/smart_display/header_bar.h +++ b/components/smart_display/header_bar.h @@ -88,11 +88,13 @@ inline std::string ago_text(int64_t then, int64_t now) { return plural(txt::time_years_ago, n(31536000)); } -// "Mo 14 Sep" in English, "ma 14 sep" in Dutch (screen.date.top_bar); day_of_week 1 is Sunday, as ESPHome counts. +// "Mo 14 Sep" in English, "za 19 sep" in Dutch, "sam. 19 sept." in French (screen.date.top_bar, with the language's +// abbreviation as {weekday} or its two letters as {weekday_min}); day_of_week 1 is Sunday, as ESPHome counts. inline std::string date_text(int day_of_week, int day_of_month, int month) { using namespace screen_text; if (day_of_week < 1 || day_of_week > 7 || month < 1 || month > 12) return "—"; - std::string text = fill(txt::date_top_bar, "weekday", tr(txt::date_weekdays_min + day_of_week - 1)); + std::string text = fill(txt::date_top_bar, "weekday", tr(txt::date_weekdays_short + day_of_week - 1)); + text = fill(text, "weekday_min", tr(txt::date_weekdays_min + day_of_week - 1)); text = fill(text, "day", std::to_string(day_of_month)); return fill(text, "month", tr(txt::date_months_short + month - 1)); } diff --git a/components/smart_display/runtime_tiles.h b/components/smart_display/runtime_tiles.h index f14e3a1..eafb915 100644 --- a/components/smart_display/runtime_tiles.h +++ b/components/smart_display/runtime_tiles.h @@ -2617,7 +2617,9 @@ inline void render_forecast(Widgets &w,const Tile &t,bool large,int width,int he auto *icon=part_label(w,0,w.icon_font,0,y+(std::max(icon_h,temp_h)-icon_h)/2,icon_h+4,LV_TEXT_ALIGN_LEFT,t.available()?weather_icon(t.state):"\U000F0595"); lv_obj_set_width(icon,lv_font_get_line_height(w.icon_font)+4); part_label(w,1,temp_font,icon_h+6,y+(std::max(icon_h,temp_h)-temp_h)/2,left-icon_h-6,LV_TEXT_ALIGN_LEFT,std::isfinite(t.current)?b:""); - part_label(w,2,w.value_font,0,y+std::max(icon_h,temp_h)+2,left-4,LV_TEXT_ALIGN_LEFT,weather_text(t.state)); + // Home Assistant's word for the weather can be long ("częściowe zachmurzenie"): it ends in an ellipsis before the days. + auto *condition=part_label(w,2,w.value_font,0,y+std::max(icon_h,temp_h)+2,left-4,LV_TEXT_ALIGN_LEFT,weather_text(t.state)); + if(lv_label_get_long_mode(condition)!=LV_LABEL_LONG_DOT)lv_label_set_long_mode(condition,LV_LABEL_LONG_DOT); int column=(width-left)/5; for(unsigned k=0;k<5;++k){ static const Forecast no_day;int x=left+k*column;bool has=k{for(const l of i)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(i){if(i.ep)return;i.ep=!0;const l=n(i);fetch(i.href,l)}})();function Go(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Re={},Dn=[],Bt=()=>{},hr=()=>!1,Ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ai=e=>e.startsWith("onUpdate:"),et=Object.assign,Jo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Nu=Object.prototype.hasOwnProperty,Te=(e,t)=>Nu.call(e,t),pe=Array.isArray,_n=e=>Hs(e)==="[object Map]",on=e=>Hs(e)==="[object Set]",Il=e=>Hs(e)==="[object Date]",_e=e=>typeof e=="function",We=e=>typeof e=="string",qt=e=>typeof e=="symbol",Pe=e=>e!==null&&typeof e=="object",mr=e=>(Pe(e)||_e(e))&&_e(e.then)&&_e(e.catch),br=Object.prototype.toString,Hs=e=>br.call(e),Fu=e=>Hs(e).slice(8,-1),vr=e=>Hs(e)==="[object Object]",Xo=e=>We(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ys=Go(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pi=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Du=/-\w/g,ct=Pi(e=>e.replace(Du,t=>t.slice(1).toUpperCase())),Uu=/\B([A-Z])/g,Tn=Pi(e=>e.replace(Uu,"-$1").toLowerCase()),Oi=Pi(e=>e.charAt(0).toUpperCase()+e.slice(1)),Yi=Pi(e=>e?`on${Oi(e)}`:""),Wt=(e,t)=>!Object.is(e,t),si=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ii=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ll;const Li=()=>Ll||(Ll=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ue(e){if(pe(e)){const t={};for(let n=0;nn.startsWith("/*")?"":n).split(ju).forEach(n=>{if(n){const s=n.split(Hu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function me(e){let t="";if(We(e))t=e;else if(pe(e))for(let n=0;nMt(n,t))}const yr=e=>!!(e&&e.__v_isRef===!0),d=e=>We(e)?e:e==null?"":pe(e)||Pe(e)&&(e.toString===br||!_e(e.toString))?yr(e)?d(e.value):JSON.stringify(e,wr,2):String(e),wr=(e,t)=>yr(t)?wr(e,t.value):_n(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],l)=>(n[Gi(s,l)+" =>"]=i,n),{})}:on(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Gi(n))}:qt(t)?Gi(t):Pe(t)&&!pe(t)&&!vr(t)?String(t):t,Gi=(e,t="")=>{var n;return qt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Ge;class kr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Ge&&(Ge.active?(this.parent=Ge,this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Ge===this)Ge=this.prevScope;else{let t=Ge;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(ks){let t=ks;for(ks=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ws;){let t=ws;for(ws=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Tr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Er(e){let t,n=e.depsTail,s=n;for(;s;){const i=s.prevDep;s.version===-1?(s===n&&(n=i),tl(s),Ju(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=i}e.deps=t,e.depsTail=n}function _o(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ar(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ar(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ts)||(e.globalVersion=Ts,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_o(e))))return;e.flags|=2;const t=e.dep,n=Ne,s=Lt;Ne=e,Lt=!0;try{Tr(e);const i=e.fn(e._value);(t.version===0||Wt(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{Ne=n,Lt=s,Er(e),e.flags&=-3}}function tl(e,t=!1){const{dep:n,prevSub:s,nextSub:i}=e;if(s&&(s.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let l=n.computed.deps;l;l=l.nextDep)tl(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ju(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Lt=!0;const Pr=[];function ln(){Pr.push(Lt),Lt=!1}function an(){const e=Pr.pop();Lt=e===void 0?!0:e}function Nl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ne;Ne=void 0;try{t()}finally{Ne=n}}}let Ts=0;class Xu{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class nl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Ne||!Lt||Ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ne)n=this.activeLink=new Xu(Ne,this),Ne.deps?(n.prevDep=Ne.depsTail,Ne.depsTail.nextDep=n,Ne.depsTail=n):Ne.deps=Ne.depsTail=n,Or(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Ne.depsTail,n.nextDep=void 0,Ne.depsTail.nextDep=n,Ne.depsTail=n,Ne.deps===n&&(Ne.deps=s)}return n}trigger(t){this.version++,Ts++,this.notify(t)}notify(t){Qo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{el()}}}function Or(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Or(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const yo=new WeakMap,jn=Symbol(""),wo=Symbol(""),Es=Symbol("");function nt(e,t,n){if(Lt&&Ne){let s=yo.get(e);s||yo.set(e,s=new Map);let i=s.get(n);i||(s.set(n,i=new nl),i.map=s,i.key=n),i.track()}}function Zt(e,t,n,s,i,l){const r=yo.get(e);if(!r){Ts++;return}const u=f=>{f&&f.trigger()};if(Qo(),t==="clear")r.forEach(u);else{const f=pe(e),h=f&&Xo(n);if(f&&n==="length"){const p=Number(s);r.forEach((b,v)=>{(v==="length"||v===Es||!qt(v)&&v>=p)&&u(b)})}else switch((n!==void 0||r.has(void 0))&&u(r.get(n)),h&&u(r.get(Es)),t){case"add":f?h&&u(r.get("length")):(u(r.get(jn)),_n(e)&&u(r.get(wo)));break;case"delete":f||(u(r.get(jn)),_n(e)&&u(r.get(wo)));break;case"set":_n(e)&&u(r.get(jn));break}}el()}function Yn(e){const t=xe(e);return t===e||(nt(t,"iterate",Es),St(e))?t:zt(e)?yn(e)?t.map(n=>kn(At(n))):t.map(kn):t.map(At)}function Mi(e){return nt(e=xe(e),"iterate",Es),e}function Ht(e,t){return zt(e)?kn(yn(e)?At(t):t):At(t)}const Zu={__proto__:null,[Symbol.iterator](){return Xi(this,Symbol.iterator,e=>Ht(this,e))},concat(...e){return Yn(this).concat(...e.map(t=>pe(t)?Yn(t):t))},entries(){return Xi(this,"entries",e=>(e[1]=Ht(this,e[1]),e))},every(e,t){return Yt(this,"every",e,t,void 0,arguments)},filter(e,t){return Yt(this,"filter",e,t,n=>n.map(s=>Ht(this,s)),arguments)},find(e,t){return Yt(this,"find",e,t,n=>Ht(this,n),arguments)},findIndex(e,t){return Yt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Yt(this,"findLast",e,t,n=>Ht(this,n),arguments)},findLastIndex(e,t){return Yt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Yt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Zi(this,"includes",e)},indexOf(...e){return Zi(this,"indexOf",e)},join(e){return Yn(this).join(e)},lastIndexOf(...e){return Zi(this,"lastIndexOf",e)},map(e,t){return Yt(this,"map",e,t,void 0,arguments)},pop(){return ds(this,"pop")},push(...e){return ds(this,"push",e)},reduce(e,...t){return Fl(this,"reduce",e,t)},reduceRight(e,...t){return Fl(this,"reduceRight",e,t)},shift(){return ds(this,"shift")},some(e,t){return Yt(this,"some",e,t,void 0,arguments)},splice(...e){return ds(this,"splice",e)},toReversed(){return Yn(this).toReversed()},toSorted(e){return Yn(this).toSorted(e)},toSpliced(...e){return Yn(this).toSpliced(...e)},unshift(...e){return ds(this,"unshift",e)},values(){return Xi(this,"values",e=>Ht(this,e))}};function Xi(e,t,n){const s=Mi(e),i=s[t]();return s!==e&&!St(e)&&(i._next=i.next,i.next=()=>{const l=i._next();return l.done||(l.value=n(l.value)),l}),i}const Qu=Array.prototype;function Yt(e,t,n,s,i,l){const r=Mi(e),u=r!==e&&!St(e),f=r[t];if(f!==Qu[t]){const b=f.apply(e,l);return u?At(b):b}let h=n;r!==e&&(u?h=function(b,v){return n.call(this,Ht(e,b),v,e)}:n.length>2&&(h=function(b,v){return n.call(this,b,v,e)}));const p=f.call(r,h,s);return u&&i?i(p):p}function Fl(e,t,n,s){const i=Mi(e),l=i!==e&&!St(e);let r=n,u=!1;i!==e&&(l?(u=s.length===0,r=function(h,p,b){return u&&(u=!1,h=Ht(e,h)),n.call(this,h,Ht(e,p),b,e)}):n.length>3&&(r=function(h,p,b){return n.call(this,h,p,b,e)}));const f=i[t](r,...s);return u?Ht(e,f):f}function Zi(e,t,n){const s=xe(e);nt(s,"iterate",Es);const i=s[t](...n);return(i===-1||i===!1)&&ol(n[0])?(n[0]=xe(n[0]),s[t](...n)):i}function ds(e,t,n=[]){ln(),Qo();const s=xe(e)[t].apply(e,n);return el(),an(),s}const ed=Go("__proto__,__v_isRef,__isVue"),Ir=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(qt));function td(e){qt(e)||(e=String(e));const t=xe(this);return nt(t,"has",e),t.hasOwnProperty(e)}class Lr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const i=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return l;if(n==="__v_raw")return s===(i?l?dd:Fr:l?Nr:Rr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=pe(t);if(!i){let f;if(r&&(f=Zu[n]))return f;if(n==="hasOwnProperty")return td}const u=Reflect.get(t,n,Qe(t)?t:s);if((qt(n)?Ir.has(n):ed(n))||(i||nt(t,"get",n),l))return u;if(Qe(u)){const f=r&&Xo(n)?u:u.value;return i&&Pe(f)?$o(f):f}return Pe(u)?i?$o(u):qn(u):u}}class Mr extends Lr{constructor(t=!1){super(!1,t)}set(t,n,s,i){let l=t[n];const r=pe(t)&&Xo(n);if(!this._isShallow){const h=zt(l);if(!St(s)&&!zt(s)&&(l=xe(l),s=xe(s)),!r&&Qe(l)&&!Qe(s))return h||(l.value=s),!0}const u=r?Number(n)e,Gs=e=>Reflect.getPrototypeOf(e);function ld(e,t,n){return function(...s){const i=this.__v_raw,l=xe(i),r=_n(l),u=e==="entries"||e===Symbol.iterator&&r,f=e==="keys"&&r,h=i[e](...s),p=n?ko:t?kn:At;return!t&&nt(l,"iterate",f?wo:jn),et(Object.create(h),{next(){const{value:b,done:v}=h.next();return v?{value:b,done:v}:{value:u?[p(b[0]),p(b[1])]:p(b),done:v}}})}}function Js(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ad(e,t){const n={get(i){const l=this.__v_raw,r=xe(l),u=xe(i);e||(Wt(i,u)&&nt(r,"get",i),nt(r,"get",u));const{has:f}=Gs(r),h=t?ko:e?kn:At;if(f.call(r,i))return h(l.get(i));if(f.call(r,u))return h(l.get(u));l!==r&&l.get(i)},get size(){const i=this.__v_raw;return!e&&nt(xe(i),"iterate",jn),i.size},has(i){const l=this.__v_raw,r=xe(l),u=xe(i);return e||(Wt(i,u)&&nt(r,"has",i),nt(r,"has",u)),i===u?l.has(i):l.has(i)||l.has(u)},forEach(i,l){const r=this,u=r.__v_raw,f=xe(u),h=t?ko:e?kn:At;return!e&&nt(f,"iterate",jn),u.forEach((p,b)=>i.call(l,h(p),h(b),r))}};return et(n,e?{add:Js("add"),set:Js("set"),delete:Js("delete"),clear:Js("clear")}:{add(i){const l=xe(this),r=Gs(l),u=xe(i),f=!t&&!St(i)&&!zt(i)?u:i;return r.has.call(l,f)||Wt(i,f)&&r.has.call(l,i)||Wt(u,f)&&r.has.call(l,u)||(l.add(f),Zt(l,"add",f,f)),this},set(i,l){!t&&!St(l)&&!zt(l)&&(l=xe(l));const r=xe(this),{has:u,get:f}=Gs(r);let h=u.call(r,i);h||(i=xe(i),h=u.call(r,i));const p=f.call(r,i);return r.set(i,l),h?Wt(l,p)&&Zt(r,"set",i,l):Zt(r,"add",i,l),this},delete(i){const l=xe(this),{has:r,get:u}=Gs(l);let f=r.call(l,i);f||(i=xe(i),f=r.call(l,i)),u&&u.call(l,i);const h=l.delete(i);return f&&Zt(l,"delete",i,void 0),h},clear(){const i=xe(this),l=i.size!==0,r=i.clear();return l&&Zt(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=ld(i,e,t)}),n}function sl(e,t){const n=ad(e,t);return(s,i,l)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Te(n,i)&&i in s?n:s,i,l)}const rd={get:sl(!1,!1)},cd={get:sl(!1,!0)},ud={get:sl(!0,!1)};const Rr=new WeakMap,Nr=new WeakMap,Fr=new WeakMap,dd=new WeakMap;function fd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qn(e){return zt(e)?e:il(e,!1,sd,rd,Rr)}function pd(e){return il(e,!1,od,cd,Nr)}function $o(e){return il(e,!0,id,ud,Fr)}function il(e,t,n,s,i){if(!Pe(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=i.get(e);if(l)return l;const r=fd(Fu(e));if(r===0)return e;const u=new Proxy(e,r===2?s:n);return i.set(e,u),u}function yn(e){return zt(e)?yn(e.__v_raw):!!(e&&e.__v_isReactive)}function zt(e){return!!(e&&e.__v_isReadonly)}function St(e){return!!(e&&e.__v_isShallow)}function ol(e){return e?!!e.__v_raw:!1}function xe(e){const t=e&&e.__v_raw;return t?xe(t):e}function hd(e){return!Te(e,"__v_skip")&&Object.isExtensible(e)&&gr(e,"__v_skip",!0),e}const At=e=>Pe(e)?qn(e):e,kn=e=>Pe(e)?$o(e):e;function Qe(e){return e?e.__v_isRef===!0:!1}function ke(e){return Dr(e,!1)}function md(e){return Dr(e,!0)}function Dr(e,t){return Qe(e)?e:new bd(e,t)}class bd{constructor(t,n){this.dep=new nl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:xe(t),this._value=n?t:At(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||St(t)||zt(t);t=s?t:xe(t),Wt(t,n)&&(this._rawValue=t,this._value=s?t:At(t),this.dep.trigger())}}function a(e){return Qe(e)?e.value:e}const vd={get:(e,t,n)=>t==="__v_raw"?e:a(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return Qe(i)&&!Qe(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Ur(e){return yn(e)?e:new Proxy(e,vd)}class gd{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new nl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ts-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Ne!==this)return Cr(this,!0),!0}get value(){const t=this.dep.track();return Ar(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function _d(e,t,n=!1){let s,i;return _e(e)?s=e:(s=e.get,i=e.set),new gd(s,i,n)}const Xs={},ai=new WeakMap;let Nn;function yd(e,t=!1,n=Nn){if(n){let s=ai.get(n);s||ai.set(n,s=[]),s.push(e)}}function wd(e,t,n=Re){const{immediate:s,deep:i,once:l,scheduler:r,augmentJob:u,call:f}=n,h=C=>i?C:St(C)||i===!1||i===0?Qt(C,1):Qt(C);let p,b,v,y,I=!1,T=!1;if(Qe(e)?(b=()=>e.value,I=St(e)):yn(e)?(b=()=>h(e),I=!0):pe(e)?(T=!0,I=e.some(C=>yn(C)||St(C)),b=()=>e.map(C=>{if(Qe(C))return C.value;if(yn(C))return h(C);if(_e(C))return f?f(C,2):C()})):_e(e)?t?b=f?()=>f(e,2):e:b=()=>{if(v){ln();try{v()}finally{an()}}const C=Nn;Nn=p;try{return f?f(e,3,[y]):e(y)}finally{Nn=C}}:b=Bt,t&&i){const C=b,B=i===!0?1/0:i;b=()=>Qt(C(),B)}const $=$r(),A=()=>{p.stop(),$&&$.active&&Jo($.effects,p)};if(l&&t){const C=t;t=(...B)=>{const O=C(...B);return A(),O}}let S=T?new Array(e.length).fill(Xs):Xs;const D=C=>{if(!(!(p.flags&1)||!p.dirty&&!C))if(t){const B=p.run();if(C||i||I||(T?B.some((O,E)=>Wt(O,S[E])):Wt(B,S))){v&&v();const O=Nn;Nn=p;try{const E=[B,S===Xs?void 0:T&&S[0]===Xs?[]:S,y];S=B,f?f(t,3,E):t(...E)}finally{Nn=O}}}else p.run()};return u&&u(D),p=new xr(b),p.scheduler=r?()=>r(D,!1):D,y=C=>yd(C,!1,p),v=p.onStop=()=>{const C=ai.get(p);if(C){if(f)f(C,4);else for(const B of C)B();ai.delete(p)}},t?s?D(!0):S=p.run():r?r(D.bind(null,!0),!0):p.run(),A.pause=p.pause.bind(p),A.resume=p.resume.bind(p),A.stop=A,A}function Qt(e,t=1/0,n){if(t<=0||!Pe(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Qe(e))Qt(e.value,t,n);else if(pe(e))for(let s=0;s{Qt(s,t,n)});else if(vr(e)){for(const s in e)Qt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Qt(e[s],t,n)}return e}function Vs(e,t,n,s){try{return s?e(...s):e()}catch(i){Ri(i,t,n)}}function Rt(e,t,n,s){if(_e(e)){const i=Vs(e,t,n,s);return i&&mr(i)&&i.catch(l=>{Ri(l,t,n)}),i}if(pe(e)){const i=[];for(let l=0;l>>1,i=rt[s],l=As(i);l=As(n)?rt.push(e):rt.splice($d(t),0,e),e.flags|=1,Hr()}}function Hr(){ri||(ri=jr.then(Wr))}function xd(e){if(!pe(e))bn&&e.id===-1?bn.splice(Gn+1,0,e):e.flags&1||(Zn.push(e),e.flags|=1);else for(let t=0;tAs(n)-As(s));if(Zn.length=0,bn){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Wr(e){try{for(Ut=0;Ut{s._d&&fi(-1);const l=ci(t),r=Hn.length;let u;try{u=e(...i)}finally{for(let f=Hn.length;f>r;f--)bc();ci(l),s._d&&fi(1)}return u};return s._n=!0,s._c=!0,s._d=!0,s}function Ee(e,t){if(mt===null)return e;const n=ji(mt),s=e.dirs||(e.dirs=[]);for(let i=0;i1)return n&&_e(t)?t.call(s&&s.proxy):t}}const Cd=Symbol.for("v-scx"),Td=()=>$s(Cd);function Ct(e,t,n){return Kr(e,t,n)}function Kr(e,t,n=Re){const{immediate:s,deep:i,flush:l,once:r}=n,u=et({},n),f=t&&s||!t&&l!=="post";let h;if(Is){if(l==="sync"){const y=Td();h=y.__watcherHandles||(y.__watcherHandles=[])}else if(!f){const y=()=>{};return y.stop=Bt,y.resume=Bt,y.pause=Bt,y}}const p=st;u.call=(y,I,T)=>Rt(y,p,I,T);let b=!1;l==="post"?u.scheduler=y=>{dt(y,p&&p.suspense)}:l!=="sync"&&(b=!0,u.scheduler=(y,I)=>{I?y():ll(y)}),u.augmentJob=y=>{t&&(y.flags|=4),b&&(y.flags|=2,p&&(y.id=p.uid,y.i=p))};const v=wd(e,t,u);return Is&&(h?h.push(v):f&&v()),v}function Ed(e,t,n){const s=this.proxy,i=We(e)?e.includes(".")?qr(s,e):()=>s[e]:e.bind(s,s);let l;_e(t)?l=t:(l=t.handler,n=t);const r=Ks(this),u=Kr(i,l.bind(s),n);return r(),u}function qr(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;ie.__isTeleport,Qi=Symbol("_leaveCb");function Pd(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==rn){t=n;break}}return t}function zr(e){if(!rl(e))return Fi(e.type)&&e.children?Pd(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&_e(n.default))return n.default()}}function al(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;al(Fi(n.type)&&zr(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Le(e,t){return _e(e)?et({name:e.name},t,{setup:e}):e}function Yr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ul(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const ui=new WeakMap;function xs(e,t,n,s,i=!1){if(pe(e)){e.forEach((T,$)=>xs(T,t&&(pe(t)?t[$]:t),n,s,i));return}if(Ss(s)&&!i){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&xs(e,t,n,s.component.subTree);return}const l=s.shapeFlag&4?ji(s.component):s.el,r=i?null:l,{i:u,r:f}=e,h=t&&t.r,p=u.refs===Re?u.refs={}:u.refs,b=u.setupState,v=xe(b),y=b===Re?hr:T=>Ul(p,T)?!1:Te(v,T),I=(T,$)=>!($&&Ul(p,$));if(h!=null&&h!==f){if(jl(t),We(h))p[h]=null,y(h)&&(b[h]=null);else if(Qe(h)){const T=t;I(h,T.k)&&(h.value=null),T.k&&(p[T.k]=null)}}if(_e(f))Vs(f,u,12,[r,p]);else{const T=We(f),$=Qe(f);if(T||$){const A=()=>{if(e.f){const S=T?y(f)?b[f]:p[f]:I()||!e.k?f.value:p[e.k];if(i)pe(S)&&Jo(S,l);else if(pe(S))S.includes(l)||S.push(l);else if(T)p[f]=[l],y(f)&&(b[f]=p[f]);else{const D=[l];I(f,e.k)&&(f.value=D),e.k&&(p[e.k]=D)}}else T?(p[f]=r,y(f)&&(b[f]=r)):$&&(I(f,e.k)&&(f.value=r),e.k&&(p[e.k]=r))};if(r){const S=()=>{A(),ui.delete(e)};S.id=-1,ui.set(e,S),dt(S,n)}else jl(e),A()}}}function jl(e){const t=ui.get(e);t&&(t.flags|=8,ui.delete(e))}Li().requestIdleCallback;Li().cancelIdleCallback;const Ss=e=>!!e.type.__asyncLoader,rl=e=>e.type.__isKeepAlive;function Od(e,t){Gr(e,"a",t)}function Id(e,t){Gr(e,"da",t)}function Gr(e,t,n=st){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Di(t,s,n),n){let i=n.parent;for(;i&&i.parent;)rl(i.parent.vnode)&&Ld(s,t,n,i),i=i.parent}}function Ld(e,t,n,s){const i=Di(t,e,s,!0);cl(()=>{Jo(s[t],i)},n)}function Di(e,t,n=st,s=!1){if(n){const i=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...r)=>{ln();const u=Ks(n),f=Rt(t,n,e,r);return u(),an(),f});return s?i.unshift(l):i.push(l),l}}const fn=e=>(t,n=st)=>{(!Is||e==="sp")&&Di(e,(...s)=>t(...s),n)},Md=fn("bm"),En=fn("m"),Rd=fn("bu"),Nd=fn("u"),rs=fn("bum"),cl=fn("um"),Fd=fn("sp"),Dd=fn("rtg"),Ud=fn("rtc");function jd(e,t=st){Di("ec",e,t)}const Jr="components";function Ws(e,t){return Zr(Jr,e,!0,t)||e}const Xr=Symbol.for("v-ndc");function Hd(e){return We(e)?Zr(Jr,e,!1)||e:e||Xr}function Zr(e,t,n=!0,s=!1){const i=mt||st;if(i){const l=i.type;{const u=Sf(l,!1);if(u&&(u===t||u===ct(t)||u===Oi(ct(t))))return l}const r=Hl(i[e]||l[e],t)||Hl(i.appContext[e],t);return!r&&s?l:r}}function Hl(e,t){return e&&(e[t]||e[ct(t)]||e[Oi(ct(t))])}function he(e,t,n,s){let i;const l=n,r=pe(e);if(r||We(e)){const u=r&&yn(e);let f=!1,h=!1;u&&(f=!St(e),h=zt(e),e=Mi(e)),i=new Array(e.length);for(let p=0,b=e.length;pt(u,f,void 0,l));else{const u=Object.keys(e);i=new Array(u.length);for(let f=0,h=u.length;fe?yc(e)?ji(e):xo(e.parent):null,Cs=et(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xo(e.parent),$root:e=>xo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ec(e),$forceUpdate:e=>e.f||(e.f=()=>{ll(e.update)}),$nextTick:e=>e.n||(e.n=Ni.bind(e.proxy)),$watch:e=>Ed.bind(e)}),eo=(e,t)=>e!==Re&&!e.__isScriptSetup&&Te(e,t),Vd={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:l,accessCache:r,type:u,appContext:f}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return l[t]}else{if(eo(s,t))return r[t]=1,s[t];if(i!==Re&&Te(i,t))return r[t]=2,i[t];if(Te(l,t))return r[t]=3,l[t];if(n!==Re&&Te(n,t))return r[t]=4,n[t];So&&(r[t]=0)}}const h=Cs[t];let p,b;if(h)return t==="$attrs"&&nt(e.attrs,"get",""),h(e);if((p=u.__cssModules)&&(p=p[t]))return p;if(n!==Re&&Te(n,t))return r[t]=4,n[t];if(b=f.config.globalProperties,Te(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:l}=e;return eo(i,t)?(i[t]=n,!0):s!==Re&&Te(s,t)?(s[t]=n,!0):Te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,props:l,type:r}},u){let f;return!!(n[u]||e!==Re&&u[0]!=="$"&&Te(e,u)||eo(t,u)||Te(l,u)||Te(s,u)||Te(Cs,u)||Te(i.config.globalProperties,u)||(f=r.__cssModules)&&f[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vl(e){return pe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let So=!0;function Wd(e){const t=ec(e),n=e.proxy,s=e.ctx;So=!1,t.beforeCreate&&Wl(t.beforeCreate,e,"bc");const{data:i,computed:l,methods:r,watch:u,provide:f,inject:h,created:p,beforeMount:b,mounted:v,beforeUpdate:y,updated:I,activated:T,deactivated:$,beforeDestroy:A,beforeUnmount:S,destroyed:D,unmounted:C,render:B,renderTracked:O,renderTriggered:E,errorCaptured:L,serverPrefetch:M,expose:U,inheritAttrs:R,components:Y,directives:te,filters:ye}=t;if(h&&Bd(h,s,null),r)for(const ge in r){const we=r[ge];_e(we)&&(s[ge]=we.bind(n))}if(i){const ge=i.call(n,n);Pe(ge)&&(e.data=qn(ge))}if(So=!0,l)for(const ge in l){const we=l[ge],Ye=_e(we)?we.bind(n,n):_e(we.get)?we.get.bind(n,n):Bt,le=!_e(we)&&_e(we.set)?we.set.bind(n):Bt,ee=k({get:Ye,set:le});Object.defineProperty(s,ge,{enumerable:!0,configurable:!0,get:()=>ee.value,set:ce=>ee.value=ce})}if(u)for(const ge in u)Qr(u[ge],s,n,ge);if(f){const ge=_e(f)?f.call(n):f;Reflect.ownKeys(ge).forEach(we=>{Sd(we,ge[we])})}p&&Wl(p,e,"c");function be(ge,we){pe(we)?we.forEach(Ye=>ge(Ye.bind(n))):we&&ge(we.bind(n))}if(be(Md,b),be(En,v),be(Rd,y),be(Nd,I),be(Od,T),be(Id,$),be(jd,L),be(Ud,O),be(Dd,E),be(rs,S),be(cl,C),be(Fd,M),pe(U))if(U.length){const ge=e.exposed||(e.exposed={});U.forEach(we=>{Object.defineProperty(ge,we,{get:()=>n[we],set:Ye=>n[we]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});B&&e.render===Bt&&(e.render=B),R!=null&&(e.inheritAttrs=R),Y&&(e.components=Y),te&&(e.directives=te),M&&Yr(e)}function Bd(e,t,n=Bt){pe(e)&&(e=Co(e));for(const s in e){const i=e[s];let l;Pe(i)?"default"in i?l=$s(i.from||s,i.default,!0):l=$s(i.from||s):l=$s(i),Qe(l)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[s]=l}}function Wl(e,t,n){Rt(pe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Qr(e,t,n,s){let i=s.includes(".")?qr(n,s):()=>n[s];if(We(e)){const l=t[e];_e(l)&&Ct(i,l)}else if(_e(e))Ct(i,e.bind(n));else if(Pe(e))if(pe(e))e.forEach(l=>Qr(l,t,n,s));else{const l=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(l)&&Ct(i,l,e)}}function ec(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,u=l.get(t);let f;return u?f=u:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(h=>di(f,h,r,!0)),di(f,t,r)),Pe(t)&&l.set(t,f),f}function di(e,t,n,s=!1){const{mixins:i,extends:l}=t;l&&di(e,l,n,!0),i&&i.forEach(r=>di(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const u=Kd[r]||n&&n[r];e[r]=u?u(e[r],t[r]):t[r]}return e}const Kd={data:Bl,props:Kl,emits:Kl,methods:ms,computed:ms,beforeCreate:lt,created:lt,beforeMount:lt,mounted:lt,beforeUpdate:lt,updated:lt,beforeDestroy:lt,beforeUnmount:lt,destroyed:lt,unmounted:lt,activated:lt,deactivated:lt,errorCaptured:lt,serverPrefetch:lt,components:ms,directives:ms,watch:zd,provide:Bl,inject:qd};function Bl(e,t){return t?e?function(){return et(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function qd(e,t){return ms(Co(e),Co(t))}function Co(e){if(pe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ct(t)}Modifiers`]||e[`${Tn(t)}Modifiers`];function Xd(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Re;let i=n;const l=t.startsWith("update:"),r=l&&Jd(s,t.slice(7));r&&(r.trim&&(i=n.map(p=>We(p)?p.trim():p)),r.number&&(i=i.map(Ii)));let u,f=s[u=Yi(t)]||s[u=Yi(ct(t))];!f&&l&&(f=s[u=Yi(Tn(t))]),f&&Rt(f,e,6,i);const h=s[u+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,Rt(h,e,6,i)}}const Zd=new WeakMap;function nc(e,t,n=!1){const s=n?Zd:t.emitsCache,i=s.get(e);if(i!==void 0)return i;const l=e.emits;let r={},u=!1;if(!_e(e)){const f=h=>{const p=nc(h,t,!0);p&&(u=!0,et(r,p))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!l&&!u?(Pe(e)&&s.set(e,null),null):(pe(l)?l.forEach(f=>r[f]=null):et(r,l),Pe(e)&&s.set(e,r),r)}function Ui(e,t){return!e||!Ei(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Te(e,t[0].toLowerCase()+t.slice(1))||Te(e,Tn(t))||Te(e,t))}function ql(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[l],slots:r,attrs:u,emit:f,render:h,renderCache:p,props:b,data:v,setupState:y,ctx:I,inheritAttrs:T}=e,$=ci(e);let A,S;try{if(n.shapeFlag&4){const C=i||s,B=C;A=Vt(h.call(B,C,p,b,y,v,I)),S=u}else{const C=t;A=Vt(C.length>1?C(b,{attrs:u,slots:r,emit:f}):C(b,null)),S=t.props?u:Qd(u)}}catch(C){Hn.length=0,Ri(C,e,1),A=se(rn)}let D=A;if(S&&T!==!1){const C=Object.keys(S),{shapeFlag:B}=D;C.length&&B&7&&(l&&C.some(Ai)&&(S=ef(S,l)),D=ns(D,S,!1,!0))}if(n.dirs&&(D=ns(D,null,!1,!0),D.dirs=D.dirs?D.dirs.concat(n.dirs):n.dirs),n.transition){const C=Fi(D.type)&&zr(D)||D;al(C,n.transition)}return A=D,ci($),A}const Qd=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ei(n))&&((t||(t={}))[n]=e[n]);return t},ef=(e,t)=>{const n={};for(const s in e)(!Ai(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tf(e,t,n){const{props:s,children:i,component:l}=e,{props:r,children:u,patchFlag:f}=t,h=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zl(s,r,h):!!r;if(f&8){const p=t.dynamicProps;for(let b=0;bObject.create(ic),lc=e=>Object.getPrototypeOf(e)===ic;function sf(e,t,n,s=!1){const i={},l=oc();e.propsDefaults=Object.create(null),ac(e,t,i,l);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);n?e.props=s?i:pd(i):e.type.props?e.props=i:e.props=l,e.attrs=l}function of(e,t,n,s){const{props:i,attrs:l,vnode:{patchFlag:r}}=e,u=xe(i),[f]=e.propsOptions;let h=!1;if((s||r>0)&&!(r&16)){if(r&8){const p=e.vnode.dynamicProps;for(let b=0;b{f=!0;const[v,y]=rc(b,t,!0);et(r,v),y&&u.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!l&&!f)return Pe(e)&&s.set(e,Dn),Dn;if(pe(l))for(let p=0;pe==="_"||e==="_ctx"||e==="$stable",dl=e=>pe(e)?e.map(Vt):[Vt(e)],af=(e,t,n)=>{if(t._n)return t;const s=oe((...i)=>dl(t(...i)),n);return s._c=!1,s},cc=(e,t,n)=>{const s=e._ctx;for(const i in e){if(ul(i))continue;const l=e[i];if(_e(l))t[i]=af(i,l,s);else if(l!=null){const r=dl(l);t[i]=()=>r}}},uc=(e,t)=>{const n=dl(t);e.slots.default=()=>n},dc=(e,t,n)=>{for(const s in t)(n||!ul(s))&&(e[s]=t[s])},rf=(e,t,n)=>{const s=e.slots=oc();if(e.vnode.shapeFlag&32){const i=t._;i?(dc(s,t,n),n&&gr(s,"_",i,!0)):cc(t,s)}else t&&uc(e,t)},cf=(e,t,n)=>{const{vnode:s,slots:i}=e;let l=!0,r=Re;if(s.shapeFlag&32){const u=t._;u?n&&u===1?l=!1:dc(i,t,n):(l=!t.$stable,cc(t,i)),r=t}else t&&(uc(e,t),r={default:1});if(l)for(const u in i)!ul(u)&&r[u]==null&&delete i[u]},dt=hf;function uf(e){return df(e)}function df(e,t){const n=Li();n.__VUE__=!0;const{insert:s,remove:i,patchProp:l,createElement:r,createText:u,createComment:f,setText:h,setElementText:p,parentNode:b,nextSibling:v,setScopeId:y=Bt,insertStaticContent:I}=e,T=(w,x,N,q=null,j=null,V=null,X=void 0,J=null,G=!!x.dynamicChildren)=>{if(w===x)return;w&&!fs(w,x)&&(q=ie(w),ce(w,j,V,!0),w=null),x.patchFlag===-2&&(G=!1,x.dynamicChildren=null),x.dynamicChildren&&w&&w.dynamicChildren&&w.dynamicChildren.hasOnce&&(x.dynamicChildren===Dn&&(x.dynamicChildren=[]),x.dynamicChildren.hasOnce=!0);const{type:H,ref:de,shapeFlag:Q}=x;switch(H){case Bs:$(w,x,N,q);break;case rn:A(w,x,N,q);break;case no:w==null&&S(x,N,q,X);break;case z:Y(w,x,N,q,j,V,X,J,G);break;default:Q&1?B(w,x,N,q,j,V,X,J,G):Q&6?te(w,x,N,q,j,V,X,J,G):(Q&64||Q&128)&&H.process(w,x,N,q,j,V,X,J,G,Ln)}de!=null&&j?xs(de,w&&w.ref,V,x||w,!x):de==null&&w&&w.ref!=null&&xs(w.ref,null,V,w,!0)},$=(w,x,N,q)=>{if(w==null)s(x.el=u(x.children),N,q);else{const j=x.el=w.el;x.children!==w.children&&h(j,x.children)}},A=(w,x,N,q)=>{w==null?s(x.el=f(x.children||""),N,q):x.el=w.el},S=(w,x,N,q)=>{[w.el,w.anchor]=I(w.children,x,N,q,w.el,w.anchor)},D=({el:w,anchor:x},N,q)=>{let j;for(;w&&w!==x;)j=v(w),s(w,N,q),w=j;s(x,N,q)},C=({el:w,anchor:x})=>{let N;for(;w&&w!==x;)N=v(w),i(w),w=N;i(x)},B=(w,x,N,q,j,V,X,J,G)=>{if(x.type==="svg"?X="svg":x.type==="math"&&(X="mathml"),w==null)O(x,N,q,j,V,X,J,G);else{const H=w.el&&w.el._isVueCE?w.el:null;try{H&&H._beginPatch(),M(w,x,j,V,X,J,G)}finally{H&&H._endPatch()}}},O=(w,x,N,q,j,V,X,J)=>{let G,H;const{props:de,shapeFlag:Q,transition:Z,dirs:P}=w;if(G=w.el=r(w.type,V,de&&de.is,de),Q&8?p(G,w.children):Q&16&&L(w.children,G,null,q,j,to(w,V),X,J),P&&Mn(w,null,q,"created"),E(G,w,w.scopeId,X,q),de){for(const ue in de)ue!=="value"&&!ys(ue)&&l(G,ue,null,de[ue],V,q);"value"in de&&l(G,"value",null,de.value,V),(H=de.onVnodeBeforeMount)&&Dt(H,q,w)}P&&Mn(w,null,q,"beforeMount");const F=ff(j,Z);F&&Z.beforeEnter(G),s(G,x,N),((H=de&&de.onVnodeMounted)||F||P)&&dt(()=>{H&&Dt(H,q,w),F&&Z.enter(G),P&&Mn(w,null,q,"mounted")},j)},E=(w,x,N,q,j)=>{if(N&&y(w,N),q)for(let V=0;V{for(let H=G;H{const J=x.el=w.el;let{patchFlag:G,dynamicChildren:H,dirs:de}=x;G|=w.patchFlag&16;const Q=w.props||Re,Z=x.props||Re;let P;if(N&&Rn(N,!1),(P=Z.onVnodeBeforeUpdate)&&Dt(P,N,x,w),de&&Mn(x,w,N,"beforeUpdate"),N&&Rn(N,!0),H&&(!w.dynamicChildren||w.dynamicChildren.length!==H.length)&&(G=0,X=!1,H=null),(Q.innerHTML&&Z.innerHTML==null||Q.textContent&&Z.textContent==null)&&p(J,""),H?U(w.dynamicChildren,H,J,N,q,to(x,j),V):X||we(w,x,J,null,N,q,to(x,j),V,!1),G>0){if(G&16)R(J,Q,Z,N,j);else if(G&2&&Q.class!==Z.class&&l(J,"class",null,Z.class,j),G&4&&l(J,"style",Q.style,Z.style,j),G&8){const F=x.dynamicProps;for(let ue=0;ue{P&&Dt(P,N,x,w),de&&Mn(x,w,N,"updated")},q)},U=(w,x,N,q,j,V,X)=>{for(let J=0;J{if(x!==N){if(x!==Re)for(const V in x)!ys(V)&&!(V in N)&&l(w,V,x[V],null,j,q);for(const V in N){if(ys(V))continue;const X=N[V],J=x[V];X!==J&&V!=="value"&&l(w,V,J,X,j,q)}"value"in N&&l(w,"value",x.value,N.value,j)}},Y=(w,x,N,q,j,V,X,J,G)=>{const H=x.el=w?w.el:u(""),de=x.anchor=w?w.anchor:u("");let{patchFlag:Q,dynamicChildren:Z,slotScopeIds:P}=x;P&&(J=J?J.concat(P):P),w==null?(s(H,N,q),s(de,N,q),L(x.children||[],N,de,j,V,X,J,G)):Q>0&&Q&64&&Z&&w.dynamicChildren&&w.dynamicChildren.length===Z.length?(U(w.dynamicChildren,Z,N,j,V,X,J),(x.key!=null||j&&x===j.subTree)&&fc(w,x,!0)):we(w,x,N,de,j,V,X,J,G)},te=(w,x,N,q,j,V,X,J,G)=>{x.slotScopeIds=J,w==null?x.shapeFlag&512?j.ctx.activate(x,N,q,X,G):ye(x,N,q,j,V,X,G):re(w,x,G)},ye=(w,x,N,q,j,V,X)=>{const J=w.component=yf(w,q,j);if(rl(w)&&(J.ctx.renderer=Ln),wf(J,!1,X),J.asyncDep){if(j&&j.registerDep(J,be,X),!w.el){const G=J.subTree=se(rn);A(null,G,x,N),w.placeholder=G.el}}else be(J,w,x,N,j,V,X)},re=(w,x,N)=>{const q=x.component=w.component;if(tf(w,x,N))if(q.asyncDep&&!q.asyncResolved){x.el=w.el,ge(q,x,N);return}else q.next=x,q.update();else x.el=w.el,q.vnode=x},be=(w,x,N,q,j,V,X)=>{const J=()=>{if(w.isMounted){let{next:Q,bu:Z,u:P,parent:F,vnode:ue}=w;{const wt=pc(w);if(wt){Q&&(Q.el=ue.el,ge(w,Q,X)),wt.asyncDep.then(()=>{dt(()=>{w.isUnmounted||H()},j)});return}}let fe=Q,Oe;Rn(w,!1),Q?(Q.el=ue.el,ge(w,Q,X)):Q=ue,Z&&si(Z),(Oe=Q.props&&Q.props.onVnodeBeforeUpdate)&&Dt(Oe,F,Q,ue),Rn(w,!0);const De=ql(w),Ve=w.subTree;w.subTree=De,T(Ve,De,b(Ve.el),ie(Ve),w,j,V),Q.el=De.el,fe===null&&nf(w,De.el),P&&dt(P,j),(Oe=Q.props&&Q.props.onVnodeUpdated)&&dt(()=>Dt(Oe,F,Q,ue),j)}else{let Q;const{el:Z,props:P}=x,{bm:F,m:ue,parent:fe,root:Oe,type:De}=w,Ve=Ss(x);Rn(w,!1),F&&si(F),!Ve&&(Q=P&&P.onVnodeBeforeMount)&&Dt(Q,fe,x),Rn(w,!0);{Oe.ce&&Oe.ce._hasShadowRoot()&&Oe.ce._injectChildStyle(De,w.parent?w.parent.type:void 0);const wt=w.subTree=ql(w);T(null,wt,N,q,w,j,V),x.el=wt.el}if(ue&&dt(ue,j),!Ve&&(Q=P&&P.onVnodeMounted)){const wt=x;dt(()=>Dt(Q,fe,wt),j)}(x.shapeFlag&256||fe&&Ss(fe.vnode)&&fe.vnode.shapeFlag&256)&&w.a&&dt(w.a,j),w.isMounted=!0,x=N=q=null}};w.scope.on();const G=w.effect=new xr(J);w.scope.off();const H=w.update=G.run.bind(G),de=w.job=G.runIfDirty.bind(G);de.i=w,de.id=w.uid,G.scheduler=()=>ll(de),Rn(w,!0),H()},ge=(w,x,N)=>{x.component=w;const q=w.vnode.props;w.vnode=x,w.next=null,of(w,x.props,q,N),cf(w,x.children,N),ln(),Dl(w),an()},we=(w,x,N,q,j,V,X,J,G=!1)=>{const H=w&&w.children,de=w?w.shapeFlag:0,Q=x.children,{patchFlag:Z,shapeFlag:P}=x;if(Z>0){if(Z&128){le(H,Q,N,q,j,V,X,J,G);return}else if(Z&256){Ye(H,Q,N,q,j,V,X,J,G);return}}P&8?(de&16&&ne(H,j,V),Q!==H&&p(N,Q)):de&16?P&16?le(H,Q,N,q,j,V,X,J,G):ne(H,j,V,!0):(de&8&&p(N,""),P&16&&L(Q,N,q,j,V,X,J,G))},Ye=(w,x,N,q,j,V,X,J,G)=>{w=w||Dn,x=x||Dn;const H=w.length,de=x.length,Q=Math.min(H,de);let Z;for(Z=0;Zde?ne(w,j,V,!0,!1,Q):L(x,N,q,j,V,X,J,G,Q)},le=(w,x,N,q,j,V,X,J,G)=>{let H=0;const de=x.length;let Q=w.length-1,Z=de-1;for(;H<=Q&&H<=Z;){const P=w[H],F=x[H]=G?Jt(x[H]):Vt(x[H]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;H++}for(;H<=Q&&H<=Z;){const P=w[Q],F=x[Z]=G?Jt(x[Z]):Vt(x[Z]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;Q--,Z--}if(H>Q){if(H<=Z){const P=Z+1,F=PZ)for(;H<=Q;)ce(w[H],j,V,!0),H++;else{const P=H,F=H,ue=new Map;for(H=F;H<=Z;H++){const ht=x[H]=G?Jt(x[H]):Vt(x[H]);ht.key!=null&&ue.set(ht.key,H)}let fe,Oe=0;const De=Z-F+1;let Ve=!1,wt=0;const zn=new Array(De);for(H=0;H=De){ce(ht,j,V,!0);continue}let Ft;if(ht.key!=null)Ft=ue.get(ht.key);else for(fe=F;fe<=Z;fe++)if(zn[fe-F]===0&&fs(ht,x[fe])){Ft=fe;break}Ft===void 0?ce(ht,j,V,!0):(zn[Ft-F]=H+1,Ft>=wt?wt=Ft:Ve=!0,T(ht,x[Ft],N,null,j,V,X,J,G),Oe++)}const Al=Ve?pf(zn):Dn;for(fe=Al.length-1,H=De-1;H>=0;H--){const ht=F+H,Ft=x[ht],Pl=x[ht+1],Ol=ht+1{const{el:V,type:X,transition:J,children:G,shapeFlag:H}=w;if(H&6){ee(w.component.subTree,x,N,q);return}if(H&128){w.suspense.move(x,N,q);return}if(H&64){X.move(w,x,N,Ln);return}if(X===z){s(V,x,N);for(let Q=0;QJ.enter(V),j));else{const{leave:Q,delayLeave:Z,afterLeave:P}=J,F=()=>{w.ctx.isUnmounted?i(V):s(V,x,N)},ue=()=>{const fe=V._isLeaving||!!V[Qi];V._isLeaving&&V[Qi](!0),J.persisted&&!fe?F():Q(V,()=>{F(),P&&P()})};Z?Z(V,F,ue):ue()}else s(V,x,N)},ce=(w,x,N,q=!1,j=!1)=>{const{type:V,props:X,ref:J,children:G,dynamicChildren:H,shapeFlag:de,patchFlag:Q,dirs:Z,cacheIndex:P,memo:F}=w;if((Q===-2||H&&H.hasOnce)&&(j=!1),J!=null&&(ln(),xs(J,null,N,w,!0),an()),P!=null&&(!w.ctx||w.ctx===x)&&(x.renderCache[P]=void 0),de&256){x.ctx.deactivate(w);return}const ue=de&1&&Z,fe=!Ss(w);let Oe;if(fe&&(Oe=X&&X.onVnodeBeforeUnmount)&&Dt(Oe,x,w),de&6)K(w.component,N,q);else{if(de&128){w.suspense.unmount(N,q);return}ue&&Mn(w,null,x,"beforeUnmount"),de&64?w.type.remove(w,x,N,Ln,q):H&&!H.hasOnce&&(V!==z||Q>0&&Q&64)?ne(H,x,N,!1,!0):(V===z&&Q&384||!j&&de&16)&&ne(G,x,N),q&&tt(w)}const De=F!=null&&P==null;(fe&&(Oe=X&&X.onVnodeUnmounted)||ue||De)&&dt(()=>{Oe&&Dt(Oe,x,w),ue&&Mn(w,null,x,"unmounted"),De&&(w.el=null)},N)},tt=w=>{const{type:x,el:N,anchor:q,transition:j}=w;if(x===z){$e(N,q);return}if(x===no){C(w),j&&!j.persisted&&j.afterLeave&&j.afterLeave();return}const V=()=>{i(N),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(w.shapeFlag&1&&j&&!j.persisted){const{leave:X,delayLeave:J}=j,G=()=>X(N,V);J?J(w.el,V,G):G()}else V()},$e=(w,x)=>{let N;for(;w!==x;)N=v(w),i(w),w=N;i(x)},K=(w,x,N)=>{const{bum:q,scope:j,job:V,subTree:X,um:J,m:G,a:H}=w;Gl(G),Gl(H),q&&si(q),j.stop(),V?(V.flags|=8,ce(X,w,x,N)):w.vnode.el&&X&&(X.transition=w.vnode.transition,ce(X,w,x,N)),J&&dt(J,x),dt(()=>{w.isUnmounted=!0},x)},ne=(w,x,N,q=!1,j=!1,V=0)=>{for(let X=V;X{if(w.shapeFlag&6)return ie(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const x=v(w.anchor||w.el),N=x&&x[Ad];return N?v(N):x};let yt=!1;const In=(w,x,N)=>{let q;w==null?x._vnode&&(ce(x._vnode,null,null,!0),q=x._vnode.component):T(x._vnode||null,w,x,null,null,null,N),x._vnode=w,yt||(yt=!0,Dl(q),Vr(),yt=!1)},Ln={p:T,um:ce,m:ee,r:tt,mt:ye,mc:L,pc:we,pbc:U,n:ie,o:e};return{render:In,hydrate:void 0,createApp:Gd(In)}}function to({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Rn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ff(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function fc(e,t,n=!1){const s=e.children,i=t.children;if(pe(s)&&pe(i))for(let l=0;l>1,e[n[u]]0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function pc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pc(t)}function Gl(e){if(e)for(let t=0;te.__isSuspense;function hf(e,t){t&&t.pendingBranch?pe(e)?t.effects.push(...e):t.effects.push(e):xd(e)}const z=Symbol.for("v-fgt"),Bs=Symbol.for("v-txt"),rn=Symbol.for("v-cmt"),no=Symbol.for("v-stc"),Hn=[];let bt=null;function g(e=!1){Hn.push(bt=e?null:[])}function bc(){Hn.pop(),bt=Hn[Hn.length-1]||null}let Ps=1;function fi(e,t=!1){Ps+=e,e<0&&bt&&t&&(bt.hasOnce=!0)}function vc(e){return e.dynamicChildren=Ps>0?bt||Dn:null,bc(),Ps>0&&bt&&bt.push(e),e}function _(e,t,n,s,i,l){return vc(o(e,t,n,s,i,l,!0))}function it(e,t,n,s,i){return vc(se(e,t,n,s,i,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function fs(e,t){return e.type===t.type&&e.key===t.key}const gc=({key:e})=>e??null,ii=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?We(e)||Qe(e)||_e(e)?{i:mt,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,s=0,i=null,l=e===z?0:1,r=!1,u=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&gc(t),ref:t&&ii(t),scopeId:Br,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:mt};return u?(hi(f,n),l&128&&e.normalize(f)):n&&(f.shapeFlag|=We(n)?8:16),Ps>0&&!r&&bt&&(f.patchFlag>0||l&6)&&f.patchFlag!==32&&bt.push(f),f}const se=mf;function mf(e,t=null,n=null,s=0,i=null,l=!1){if((!e||e===Xr)&&(e=rn),pi(e)){const u=ns(e,t,!0);return n&&hi(u,n),Ps>0&&!l&&bt&&(u.shapeFlag&6?bt[bt.indexOf(e)]=u:bt.push(u)),u.patchFlag=-2,u}if(Cf(e)&&(e=e.__vccOpts),t){t=bf(t);let{class:u,style:f}=t;u&&!We(u)&&(t.class=me(u)),Pe(f)&&(ol(f)&&!pe(f)&&(f=et({},f)),t.style=Ue(f))}const r=We(e)?1:mc(e)?128:Fi(e)?64:Pe(e)?4:_e(e)?2:0;return o(e,t,n,s,i,r,l,!0)}function bf(e){return e?ol(e)||lc(e)?et({},e):e:null}function ns(e,t,n=!1,s=!1){const{props:i,ref:l,patchFlag:r,children:u,transition:f}=e,h=t?vf(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&gc(h),ref:t&&t.ref?n&&l?pe(l)?l.concat(ii(t)):[l,ii(t)]:ii(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==z?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ns(e.ssContent),ssFallback:e.ssFallback&&ns(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return f&&s&&al(p,f.clone(p)),p}function Me(e=" ",t=0){return se(Bs,null,e,t)}function W(e="",t=!1){return t?(g(),it(rn,null,e)):se(rn,null,e)}function Vt(e){return e==null||typeof e=="boolean"?se(rn):pe(e)?se(z,null,e.slice()):pi(e)?Jt(e):se(Bs,null,String(e))}function Jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ns(e)}function hi(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(pe(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),hi(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!lc(t)?t._ctx=mt:i===3&&mt&&(mt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(_e(t)){if(s&65){hi(e,{default:t});return}t={default:t,_ctx:mt},n=32}else t=String(t),s&64?(n=16,t=[Me(t)]):n=8;e.children=t,e.shapeFlag|=n}function vf(...e){const t={};for(let n=0;nst||mt;let mi,Os;{const e=Li(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),l=>{i.length>1?i.forEach(r=>r(l)):i[0](l)}};mi=t("__VUE_INSTANCE_SETTERS__",n=>st=n),Os=t("__VUE_SSR_SETTERS__",n=>Is=n)}const Ks=e=>{const t=st;return mi(e),e.scope.on(),()=>{e.scope.off(),mi(t)}},Jl=()=>{st&&st.scope.off(),mi(null)};function yc(e){return e.vnode.shapeFlag&4}let Is=!1;function wf(e,t=!1,n=!1){t&&Os(t);const{props:s,children:i}=e.vnode,l=yc(e);sf(e,s,l,t),rf(e,i,n||t);const r=l?kf(e,t):void 0;return t&&Os(!1),r}function kf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vd);const{setup:s}=n;if(s){ln();const i=e.setupContext=s.length>1?xf(e):null,l=Ks(e),r=Vs(s,e,0,[e.props,i]),u=mr(r);if(an(),l(),(u||e.sp)&&!Ss(e)&&Yr(e),u){if(r.then(Jl,Jl),t)return r.then(f=>{Os(!0);try{Xl(e,f,t)}finally{Os(!1)}}).catch(f=>{Ri(f,e,0)});e.asyncDep=r}else Xl(e,r)}else wc(e)}function Xl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Pe(t)&&(e.setupState=Ur(t)),wc(e)}function wc(e,t,n){const s=e.type;e.render||(e.render=s.render||Bt);{const i=Ks(e);ln();try{Wd(e)}finally{an(),i()}}}const $f={get(e,t){return nt(e,"get",""),e[t]}};function xf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,$f),slots:e.slots,emit:e.emit,expose:t}}function ji(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ur(hd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cs)return Cs[n](e)},has(t,n){return n in t||n in Cs}})):e.proxy}function Sf(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function Cf(e){return _e(e)&&"__vccOpts"in e}const k=(e,t)=>_d(e,t,Is);function bi(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Pe(t)&&!pe(t)?pi(t)?se(e,null,[t]):se(e,t):se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pi(n)&&(n=[n]),se(e,t,n))}finally{fi(1)}}const Tf="3.5.43";let Eo;const Zl=typeof window<"u"&&window.trustedTypes;if(Zl)try{Eo=Zl.createPolicy("vue",{createHTML:e=>e})}catch{}const kc=Eo?e=>Eo.createHTML(e):e=>e,Ef="http://www.w3.org/2000/svg",Af="http://www.w3.org/1998/Math/MathML",Gt=typeof document<"u"?document:null,Ql=Gt&&Gt.createElement("template"),Pf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?Gt.createElementNS(Ef,e):t==="mathml"?Gt.createElementNS(Af,e):n?Gt.createElement(e,{is:n}):Gt.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>Gt.createTextNode(e),createComment:e=>Gt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Gt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,l){const r=n?n.previousSibling:t.lastChild;if(i&&(i===l||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===l||!(i=i.nextSibling)););else{Ql.innerHTML=kc(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const u=Ql.content;if(s==="svg"||s==="mathml"){const f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Of=Symbol("_vtc");function If(e,t,n){const s=e[Of];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ea=Symbol("_vod"),Lf=Symbol("_vsh"),Mf=Symbol(""),Rf=/(?:^|;)\s*display\s*:/;function Nf(e,t,n){const s=e.style,i=We(n);let l=!1;if(n&&!i){if(t)if(We(t))for(const r of t.split(";")){const u=r.slice(0,r.indexOf(":")).trim();n[u]==null&&bs(s,u,"")}else for(const r in t)n[r]==null&&bs(s,r,"");for(const r in n){r==="display"&&(l=!0);const u=n[r];u!=null?Df(e,r,!We(t)&&t?t[r]:void 0,u)||bs(s,r,u):bs(s,r,"")}}else if(i){if(t!==n){const r=s[Mf];r&&(n+=";"+r),s.cssText=n,l=Rf.test(n)}}else t&&e.removeAttribute("style");ea in e&&(e[ea]=l?s.display:"",e[Lf]&&(s.display="none"))}const Zs=/\s*!important$/;function bs(e,t,n){if(pe(n))n.forEach(s=>bs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))Zs.test(n)?e.setProperty(t,n.replace(Zs,""),"important"):e.setProperty(t,n);else{const s=Ff(e,t);Zs.test(n)?e.setProperty(Tn(s),n.replace(Zs,""),"important"):e[s]=n}}const ta=["Webkit","Moz","ms"],so={};function Ff(e,t){const n=so[t];if(n)return n;let s=ct(t);if(s!=="filter"&&s in e)return so[t]=s;s=Oi(s);for(let i=0;iio||(Bf.then(()=>io=0),io=Date.now());function qf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const i=n.value;if(pe(i)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=i.slice(),u=[s];for(let f=0;fe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,zf=(e,t,n,s,i,l)=>{const r=i==="svg";t==="class"?If(e,s,r):t==="style"?Nf(e,n,s):Ei(t)?Ai(t)||jf(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yf(e,t,s,r))?(ia(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&sa(e,t,s,r,l,t!=="value")):e._isVueCE&&(Gf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!We(s)))?ia(e,ct(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),sa(e,t,s,r))};function Yf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&la(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return la(t)&&We(n)?!1:t in e}function Gf(e,t){const n=e._def.props;if(!n)return!1;const s=ct(t);return Array.isArray(n)?n.some(i=>ct(i)===s):Object.keys(n).some(i=>ct(i)===s)}const $n=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pe(t)?n=>si(t,n):t};function Jf(e){e.target.composing=!0}function aa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vt=Symbol("_assign"),Qs=Symbol("_initialValue");function oo(e,t,n){return t&&(e=e.trim()),n&&(e=Ii(e)),e}const Je={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e.parentNode&&(e.type==="text"?e[Qs]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Qs]=e.defaultValue.replace(/\r\n?/g,` -`))),e[vt]=$n(i);const l=s||i.props&&i.props.type==="number";en(e,t?"change":"input",r=>{r.target.composing||e[vt](oo(e.value,n,l))}),(n||l)&&en(e,"change",()=>{e.value=oo(e.value,n,l)}),t||(en(e,"compositionstart",Jf),en(e,"compositionend",aa),en(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const i=t??"",l=e[Qs];delete e[Qs],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[vt](oo(e.value,n,s)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:l}},r){if(e[vt]=$n(r),e.composing)return;const u=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ii(e.value):e.value,f=t??"";if(u===f)return;const h=e.getRootNode();(h instanceof Document||h instanceof ShadowRoot)&&h.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f)}},Xf={deep:!0,created(e,t,n){e[vt]=$n(n),en(e,"change",()=>{const s=e._modelValue,i=ss(e),l=e.checked,r=e[vt];if(pe(s)){const u=Zo(s,i),f=u!==-1;if(l&&!f)r(s.concat(i));else if(!l&&f){const h=[...s];h.splice(u,1),r(h)}}else if(on(s)){const u=new Set(s);l?u.add(i):u.delete(i),r(u)}else r($c(e,l))})},mounted:ra,beforeUpdate(e,t,n){e[vt]=$n(n),ra(e,t,n)}};function ra(e,{value:t,oldValue:n},s){e._modelValue=t;let i;if(pe(t))i=Zo(t,s.props.value)>-1;else if(on(t))i=t.has(s.props.value);else{if(t===n)return;i=Mt(t,$c(e,!0))}e.checked!==i&&(e.checked=i)}const ca={created(e,{value:t},n){e.checked=Mt(t,n.props.value),e[vt]=$n(n),en(e,"change",()=>{e[vt](ss(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vt]=$n(s),t!==n&&(e.checked=Mt(t,s.props.value))}},Vn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,en(e,"change",()=>{const i=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>n?Ii(ss(f)):ss(f)),l=e.multiple,r=l?on(e._modelValue)?new Set(i):i:i[0],u=e._pendingValue=[l,l?pe(r)?i.slice():i:r];try{e[vt](r)}finally{Ni(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[vt]=$n(s)},mounted(e,{value:t}){ua(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[vt]=$n(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Zf(t,n[1],n[0]))&&ua(e,t)}};function Zf(e,t,n){if(!n||pe(e))return Mt(e,t);if(on(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function ua(e,t){const n=e.multiple,s=pe(t);if(!(n&&!s&&!on(t))){for(let i=0,l=e.options.length;iString(h)===String(u)):r.selected=Zo(t,u)>-1}else r.selected=t.has(u);else if(Mt(ss(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function ss(e){return"_value"in e?e._value:e.value}function $c(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Qf=["ctrl","shift","alt","meta"],ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qf.some(n=>e[`${n}Key`]&&!t.includes(n))},Pt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((i,...l)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(i=>{if(!("key"in i))return;const l=Tn(i.key);if(t.some(r=>r===l||tp[r]===l))return e(i)}))},np=et({patchProp:zf},Pf);let da;function sp(){return da||(da=uf(np))}const ip=((...e)=>{const t=sp().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=lp(s);if(!i)return;const l=t._component;!_e(l)&&!l.render&&!l.template&&(l.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,op(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function op(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lp(e){return We(e)?document.querySelector(e):e}const ap="modulepreload",rp=function(e,t){return new URL(e,t).href},fa={},pn=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){let h=function(p){return Promise.all(p.map(b=>Promise.resolve(b).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const r=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),f=u?.nonce||u?.getAttribute("nonce");i=h(n.map(p=>{if(p=rp(p,s),p in fa)return;fa[p]=!0;const b=p.endsWith(".css"),v=b?'[rel="stylesheet"]':"";if(s)for(let I=r.length-1;I>=0;I--){const T=r[I];if(T.href===p&&(!b||T.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${p}"]${v}`))return;const y=document.createElement("link");if(y.rel=b?"stylesheet":ap,b||(y.as="script"),y.crossOrigin="",y.href=p,f&&y.setAttribute("nonce",f),document.head.appendChild(y),b)return new Promise((I,T)=>{y.addEventListener("load",I),y.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${p}`)))})}))}function l(r){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=r,window.dispatchEvent(u),!u.defaultPrevented)throw r}return i.then(r=>{for(const u of r||[])u.status==="rejected"&&l(u.reason);return t().catch(l)})},cp={de:{name:"Deutsch",english:"German",script:"latin",plural:"one_other",clock:"24",checked:!1},"en-GB":{name:"English (UK)",english:"English (UK)",script:"latin",plural:"one_other",clock:"24",checked:!0},en:{name:"English (US)",english:"English (US)",script:"latin",plural:"one_other",clock:"12",checked:!0},es:{name:"Español",english:"Spanish",script:"latin",plural:"one_other",clock:"24",checked:!1},fr:{name:"Français",english:"French",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},it:{name:"Italiano",english:"Italian",script:"latin",plural:"one_other",clock:"24",checked:!1},nl:{name:"Nederlands",english:"Dutch",script:"latin",plural:"one_other",clock:"24",checked:!1},pl:{name:"Polski",english:"Polish",script:"latin",plural:"slavic_pl",clock:"24",checked:!1},pt:{name:"Português",english:"Portuguese",script:"latin",plural:"one_other",clock:"24",checked:!1}};const vi=typeof window<"u",An=(e,t=!1)=>t?Symbol.for(e):Symbol(e),up=(e,t,n)=>dp({l:e,k:t,s:n}),dp=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),ze=e=>typeof e=="number"&&isFinite(e),Sc=e=>pl(e)==="[object Date]",gi=e=>pl(e)==="[object RegExp]",fl=e=>Fe(e)&&Object.keys(e).length===0,ot=Object.assign,fp=Object.create,Ie=(e=null)=>fp(e);let pa;const pp=()=>pa||(pa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Ie()),hp=Object.prototype.hasOwnProperty;function xt(e,t){return hp.call(e,t)}const je=Array.isArray,Be=e=>typeof e=="function",ae=e=>typeof e=="string",Ke=e=>typeof e=="boolean",Se=e=>e!==null&&typeof e=="object",mp=e=>Se(e)&&Be(e.then)&&Be(e.catch),Cc=Object.prototype.toString,pl=e=>Cc.call(e),Fe=e=>pl(e)==="[object Object]",bp=e=>e==null?"":je(e)||Fe(e)&&e.toString===Cc?JSON.stringify(e,null,2):String(e);function vp(e,t=""){return e.reduce((n,s,i)=>i===0?n+s:n+t+s,"")}function gp(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}function ha(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function _p(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}const yp=/^javascript:/i,wp=/^(?:href|src|action|formaction)$/i,kp=/&#(?:x([0-9a-f]+)|(\d+));?/gi,$p=/&(?:Tab|NewLine);/g,xp=/:?/gi,Sp=/[\u0000-\u0020\u007f-\u009f]/g,Cp=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Tp=/(^|[\s"'<>/])on(\w+\s*=)/gi,Ep=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function Ap(e,t,n){const s=t||n;if(!s)return e;const i=Number.parseInt(s,t?16:10);return i<=127?String.fromCharCode(i):e}function hl(e){const t=e.replace(kp,Ap).replace($p,"").replace(xp,":").replace(Sp,"");return yp.test(t)}function Pp(e){const t=/url\s*\(/gi;let n="",s=0,i;for(;(i=t.exec(e))!==null;){const l=i.index,r=t.lastIndex-1;let u=r+1,f=1,h=null;for(;u`${n}="${ma(n,s)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(t,n,s)=>`${n}='${ma(n,s)}'`),Cp.test(e)&&(e=e.replace(Tp,"$1on$2")),e=e.replace(Ep,(t,n,s,i)=>hl(i)?`${n}${s}about:blank`:t),e}const ba=e=>!Se(e)||je(e);function oi(e,t){if(ba(e)||ba(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:s,des:i}=n.pop();Object.keys(s).forEach(l=>{if(l==="__proto__")return;const r=s[l];if(je(r)){const u=[];u.length=r.length,i[l]=u,n.push({src:r,des:u})}else Se(r)?((!Se(i[l])||je(i[l]))&&(i[l]=Ie()),n.push({src:r,des:i[l]})):i[l]=r})}}const Ip=17;function Tc(e,t,n={}){const{domain:s,messages:i,args:l}=n,r=e,u=new SyntaxError(String(r));return u.code=e,u.domain=s,u}function Kt(e){return Se(e)&&ml(e)===0&&(xt(e,"b")||xt(e,"body"))}const Ec=["b","body"];function Lp(e){return Pn(e,Ec)}const Ac=["c","cases"];function Mp(e){return Pn(e,Ac,[])}const Pc=["s","static"];function Rp(e){return Pn(e,Pc)}const Oc=["i","items"];function Np(e){return Pn(e,Oc,[])}const Ic=["t","type"];function ml(e){return Pn(e,Ic)}const Lc=["v","value"];function ei(e,t){const n=Pn(e,Lc);if(n!=null)return n;throw Ls(t)}const Mc=["m","modifier"];function Fp(e){return Pn(e,Mc)}const Rc=["k","key"];function Dp(e){const t=Pn(e,Rc);if(t)return t;throw Ls(6)}function Pn(e,t,n){for(let s=0;sUp(n,e)}function Up(e,t){const n=Lp(t);if(n==null)throw Ls(0);if(ml(n)===1){const l=Mp(n);return e.plural(l.reduce((r,u)=>[...r,ga(e,u)],[]))}else return ga(e,n)}function ga(e,t){const n=Rp(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const s=Np(t).reduce((i,l)=>[...i,Ao(e,l)],[]);return e.normalize(s)}}function Ao(e,t){const n=ml(t);switch(n){case 3:return ei(t,n);case 9:return ei(t,n);case 4:{const s=t;if(xt(s,"k")&&s.k)return e.interpolate(e.named(s.k));if(xt(s,"key")&&s.key)return e.interpolate(e.named(s.key));throw Ls(n)}case 5:{const s=t;if(xt(s,"i")&&ze(s.i))return e.interpolate(e.list(s.i));if(xt(s,"index")&&ze(s.index))return e.interpolate(e.list(s.index));throw Ls(n)}case 6:{const s=t,i=Fp(s),l=Dp(s);return e.linked(Ao(e,l),i?Ao(e,i):void 0,e.type)}case 7:return ei(t,n);case 8:return ei(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}let _a=Ie();function jp(e,t){{const n=e.cacheKey;if(n){const s=_a[n];return s||(_a[n]=va(e))}else return va(e)}}const tn={INVALID_ARGUMENT:Ip,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},Hp=24;function nn(e){return Tc(e,null,void 0)}function bl(e,t){return t.locale!=null?ya(t.locale):ya(e.locale)}let lo;function ya(e){if(ae(e))return e;if(Be(e)){if(e.resolvedOnce&&lo!=null)return lo;if(e.constructor.name==="Function"){const t=e();if(mp(t))throw nn(tn.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return lo=t}else throw nn(tn.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw nn(tn.NOT_SUPPORT_LOCALE_TYPE)}function Vp(e,t,n){return[...new Set([n,...je(t)?t:Se(t)?Object.keys(t).filter(s=>s!=="default"):ae(t)?[t]:[n]])]}function Po(e,t,n){const s=ae(n)?n:_i,i=e;let l;Se(t)?(i.__localeChainObjectCache||(i.__localeChainObjectCache=new WeakMap),l=i.__localeChainObjectCache.get(t),l||(l=new Map,i.__localeChainObjectCache.set(t,l))):(i.__localeChainCache||(i.__localeChainCache=new Map),l=i.__localeChainCache.get(t),l||(l=new Map,i.__localeChainCache.set(t,l)));const r=l.get(s);if(r)return r;const u=[];let f=[n];for(;je(f);)f=wa(u,f,t);const h=je(t)||!Fe(t)?t:t.default?t.default:null;return f=ae(h)?[h]:h,je(f)&&wa(u,f,!1),l.set(s,u),u}function wa(e,t,n){let s=!0;for(let i=0;i{r===void 0?r=u:r+=u},v[1]=()=>{r!==void 0&&(t.push(r),r=void 0)},v[2]=()=>{v[0](),i++},v[3]=()=>{if(i>0)i--,s=4,v[0]();else{if(i=0,r===void 0||(r=Gp(r),r===!1))return!1;v[1]()}};function y(){const I=e[n+1];if(s===5&&I==="'"||s===6&&I==='"')return n++,u="\\"+I,v[0](),!0}for(;s!==null;)if(n++,l=e[n],!(l==="\\"&&y())){if(f=Yp(l),b=On[s],h=b[f]||b.l||8,h===8||(s=h[0],h[1]!==void 0&&(p=v[h[1]],p&&(u=l,p()===!1))))return;if(s===7)return t}}const ka=new Map;function Xp(e,t){return Se(e)?e[t]:null}function Zp(e,t){if(!Se(e))return null;let n=ka.get(t);if(n||(n=Jp(t),n&&ka.set(t,n)),!n)return null;const s=n.length;let i=e,l=0;for(;l`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function eh(){return{upper:(e,t)=>t==="text"&&ae(e)?e.toUpperCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&ae(e)?e.toLowerCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&ae(e)?$a(e):t==="vnode"&&Se(e)&&"__v_isVNode"in e?$a(e.children):e}}let Fc;function th(e){Fc=e}let Dc;function nh(e){Dc=e}let Uc;function sh(e){Uc=e}let jc=null;const xa=e=>{jc=e},Sa=()=>jc;let Ca=0;function ih(e={}){const t=Be(e.onWarn)?e.onWarn:gp,n=ae(e.version)?e.version:Qp,s=ae(e.locale)||Be(e.locale)?e.locale:_i,i=Be(s)?_i:s,l=je(e.fallbackLocale)||Fe(e.fallbackLocale)||ae(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,r=Fe(e.messages)?e.messages:ao(i),u=Fe(e.datetimeFormats)?e.datetimeFormats:ao(i),f=Fe(e.numberFormats)?e.numberFormats:ao(i),h=ot(Ie(),e.modifiers,eh()),p=e.pluralRules||Ie(),b=Be(e.missing)?e.missing:null,v=Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=!!e.fallbackFormat,T=!!e.unresolving,$=Be(e.postTranslation)?e.postTranslation:null,A=Fe(e.processor)?e.processor:null,S=Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,D=!!e.escapeParameter,C=Be(e.messageCompiler)?e.messageCompiler:Fc,B=Be(e.messageResolver)?e.messageResolver:Dc||Xp,O=Be(e.localeFallbacker)?e.localeFallbacker:Uc||Vp,E=Se(e.fallbackContext)?e.fallbackContext:void 0,L=e,M=Se(L.__datetimeFormatters)?L.__datetimeFormatters:new Map,U=Se(L.__numberFormatters)?L.__numberFormatters:new Map,R=Se(L.__meta)?L.__meta:{};Ca++;const Y={version:n,cid:Ca,locale:s,fallbackLocale:l,messages:r,modifiers:h,pluralRules:p,missing:b,missingWarn:v,fallbackWarn:y,fallbackFormat:I,unresolving:T,postTranslation:$,processor:A,warnHtmlMessage:S,escapeParameter:D,messageCompiler:C,messageResolver:B,localeFallbacker:O,fallbackContext:E,onWarn:t,__meta:R};return Y.datetimeFormats=u,Y.numberFormats=f,Y.__datetimeFormatters=M,Y.__numberFormatters=U,Y}const ao=e=>({[e]:Ie()});function Hc(e,t,n,s,i){const{missing:l,onWarn:r}=e;if(l!==null){const u=l(e,n,t,i);return ae(u)?u:t}else return t}function Ta(e,t){const n=e;Se(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ti(e,t,n){Ta(e,n),e.fallbackContext&&Ta(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function oh(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function lh(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let s=n+1;s{s.includes(f)?u[f]=i[f]:t[f]=i[f]}),ae(l)?t.locale=l:Fe(l)&&(u=l),Fe(r)&&(u=r),u}function Ea(e,...t){const{datetimeFormats:n,unresolving:s,onWarn:i}=e,{__datetimeFormatters:l}=e;if(!ae(t[0])&&!Sc(t[0])&&!ze(t[0]))return yi;const[r,u,f,h]=Oo(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.DateTimeFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"datetime format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.DateTimeFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const qc=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Oo(...e){const[t]=e,n=Ie(),s=Ie();let i;if(ae(t)){const r=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!r)throw nn(tn.INVALID_ISO_DATE_ARGUMENT);const u=r[3]?r[3].trim().startsWith("T")?`${r[1].trim()}${r[3].trim()}`:`${r[1].trim()}T${r[3].trim()}`:r[1].trim();i=new Date(u);try{i.toISOString()}catch{throw nn(tn.INVALID_ISO_DATE_ARGUMENT)}}else if(Sc(t)){if(isNaN(t.getTime()))throw nn(tn.INVALID_DATE_ARGUMENT);i=t}else if(ze(t))i=t;else throw nn(tn.INVALID_ARGUMENT);const l=Kc(e,n,s,qc);return[n.key||"",i,n,l]}function Aa(e,t,n){Bc(e.__datetimeFormatters,t,n)}function Pa(e,...t){const{numberFormats:n,unresolving:s,onWarn:i}=e,{__numberFormatters:l}=e;if(!ze(t[0]))return yi;const[r,u,f,h]=Io(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.NumberFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"number format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.NumberFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const zc=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Io(...e){const[t]=e,n=Ie(),s=Ie();if(!ze(t))throw nn(tn.INVALID_ARGUMENT);const i=t,l=Kc(e,n,s,zc);return[n.key||"",i,n,l]}function Oa(e,t,n){Bc(e.__numberFormatters,t,n)}const ah=e=>e,rh=e=>"",ch="text",uh=e=>e.length===0?"":vp(e),dh=bp;function ro(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function fh(e){const t=ze(e.pluralIndex)?e.pluralIndex:-1;return ze(e.named?.count)?e.named.count:ze(e.named?.n)?e.named.n:t}function ph(e={}){const t=e.locale,n=fh(e),s=ae(t)&&Be(e.pluralRules?.[t])?e.pluralRules[t]:ro,i=s===ro?void 0:ro,l=A=>A[s(n,A.length,i)],r=e.list||[],u=A=>r[A],f=e.named||Ie();ze(e.pluralIndex)&&(f.count||=e.pluralIndex,f.n||=e.pluralIndex);const h=A=>f[A];function p(A,S){const D=Be(e.messages)?e.messages(A,!!S):Se(e.messages)?e.messages[A]:!1;return D||(e.parent?e.parent.message(A):rh)}const b=A=>e.modifiers?e.modifiers[A]:ah,v=Be(e.processor?.normalize)?e.processor.normalize:uh,y=Be(e.processor?.interpolate)?e.processor.interpolate:dh,I=ae(e.processor?.type)?e.processor.type:ch,$={list:u,named:h,plural:l,linked:(A,...S)=>{const[D,C]=S;let B="text",O="";S.length===1?Se(D)?(O=D.modifier||O,B=D.type||B):ae(D)&&(O=D||O):S.length===2&&(ae(D)&&(O=D||O),ae(C)&&(B=C||B));const E=p(A,!0)($),L=E===""||E===void 0?A:E,M=B==="vnode"&&je(L)&&O?L[0]:L;return O?b(O)(M,B):M},message:p,type:I,interpolate:y,normalize:v,values:ot(Ie(),r,f)};return $}const Ia=()=>"",sn=e=>Be(e);function La(e,...t){const{fallbackFormat:n,postTranslation:s,unresolving:i,messageCompiler:l,fallbackLocale:r,messages:u}=e,[f,h]=Lo(...t),p=Ke(h.missingWarn)?h.missingWarn:e.missingWarn,b=Ke(h.fallbackWarn)?h.fallbackWarn:e.fallbackWarn,v=Ke(h.escapeParameter)?h.escapeParameter:e.escapeParameter,y=!!h.resolvedMessage,I=ae(h.default)||Ke(h.default)?Ke(h.default)?l?f:()=>f:h.default:n?l?f:()=>f:null,T=n||I!=null&&(ae(I)||Be(I)),$=bl(e,h);v&&hh(h);let[A,S,D]=y?[f,$,u[$]||Ie()]:Yc(e,f,$,r,b,p),C=A,B=f;if(!y&&!(ae(C)||Kt(C)||sn(C))&&T&&(C=I,B=C),!y&&(!(ae(C)||Kt(C)||sn(C))||!ae(S)))return i?Hi:f;let O=!1;const E=()=>{O=!0},L=sn(C)?C:Gc(e,f,S,C,B,E);if(O)return C;const M=vh(e,S,D,h),U=ph(M),R=mh(e,L,U);let Y=s?s(R,f):R;return v&&ae(Y)&&(Y=Op(Y)),Y}function hh(e){je(e.list)?e.list=e.list.map(t=>ae(t)?ha(t):t):Se(e.named)&&Object.keys(e.named).forEach(t=>{ae(e.named[t])&&(e.named[t]=ha(e.named[t]))})}function Yc(e,t,n,s,i,l){const{messages:r,onWarn:u,messageResolver:f,localeFallbacker:h}=e,p=h(e,s,n);let b=Ie(),v,y=null;const I="translate";for(let T=0;Ts);return h.locale=n,h.key=t,h}const f=r(s,bh(e,n,i,s,u,l));return f.locale=n,f.key=t,f.source=s,f}function mh(e,t,n){return t(n)}function Lo(...e){const[t,n,s]=e,i=Ie();if(!ae(t)&&!ze(t)&&!sn(t)&&!Kt(t))throw nn(tn.INVALID_ARGUMENT);const l=ze(t)?String(t):(sn(t),t);return ze(n)?i.plural=n:ae(n)?i.default=n:Fe(n)&&!fl(n)?i.named=n:je(n)&&(i.list=n),ze(s)?i.plural=s:ae(s)?i.default=s:Fe(s)&&ot(i,s),[l,i]}function bh(e,t,n,s,i,l){return{locale:t,key:n,warnHtmlMessage:i,onError:r=>{throw l&&l(r),r},onCacheKey:r=>up(t,n,r)}}function vh(e,t,n,s){const{modifiers:i,pluralRules:l,messageResolver:r,fallbackLocale:u,fallbackWarn:f,missingWarn:h,fallbackContext:p}=e,v={locale:t,modifiers:i,pluralRules:l,messages:(y,I)=>{let T=r(n,y);if(T==null&&(p||I)){const[$,,A]=Yc(p||e,y,t,u,f,h);T=$??r(A,y)}if(ae(T)||Kt(T)){let $=!1;const S=Gc(e,y,t,T,y,()=>{$=!0});return $?Ia:S}else return sn(T)?T:Ia}};return e.processor&&(v.processor=e.processor),s.list&&(v.list=s.list),s.named&&(v.named=s.named),ze(s.plural)&&(v.pluralIndex=s.plural),v}const gh="11.4.12",gt={UNEXPECTED_RETURN_TYPE:Hp,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Tt(e,...t){return Tc(e,null,void 0)}const Mo=An("__translateVNode"),Ro=An("__datetimeParts"),No=An("__numberParts"),_h=An("__setPluralRules"),yh=An("__injectWithOption"),Xn=An("__dispose");let Jc=null;{const e=pp().__VUE_INSTANCE_SETTERS__;je(e)&&e.push(t=>{Jc=t})}function Ms(e){if(!Se(e)||Kt(e))return e;for(const t in e)if(xt(e,t))if(!t.includes("."))Se(e[t])&&Ms(e[t]);else{const n=t.split("."),s=n.length-1;let i=e,l=!1;for(let r=0;r{if("locale"in u&&"resource"in u){const{locale:f,resource:h}=u;f?(r[f]=r[f]||Ie(),oi(h,r[f])):oi(h,r)}else ae(u)&&oi(JSON.parse(u),r)}),i==null&&l)for(const u in r)xt(r,u)&&Ms(r[u]);return r}function wh(e){return e.type}function kh(e,t,n){let s=Se(t.messages)?t.messages:Ie();"__i18nGlobal"in n&&(s=Xc(e.locale.value,{messages:s,__i18n:n.__i18nGlobal}));const i=Object.keys(s);i.length&&i.forEach(l=>{e.mergeLocaleMessage(l,s[l])});{if(Se(t.datetimeFormats)){const l=Object.keys(t.datetimeFormats);l.length&&l.forEach(r=>{e.mergeDateTimeFormat(r,t.datetimeFormats[r])})}if(Se(t.numberFormats)){const l=Object.keys(t.numberFormats);l.length&&l.forEach(r=>{e.mergeNumberFormat(r,t.numberFormats[r])})}}}function Ma(e){return se(Bs,null,e,0)}function Zc(){return Jc??_c()}const Ra=()=>[],$h=()=>!1;let Na=0;function Fa(e){return((t,n,s,i)=>e(n,s,Zc()||void 0,i))}function Fo(e={}){const{__root:t,__injectWithOption:n}=e,s=t===void 0,i=e.flatJson,l=vi?ke:md;let r=Ke(e.inheritLocale)?e.inheritLocale:!0;const u=l(t&&r?t.locale.value:ae(e.locale)?e.locale:_i),f=l(t&&r?t.fallbackLocale.value:ae(e.fallbackLocale)||je(e.fallbackLocale)||Fe(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),h=l(Xc(u.value,e)),p=l(Fe(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),b=l(Fe(e.numberFormats)?e.numberFormats:{[u.value]:{}});let v=t?t.missingWarn:Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=t?t.fallbackWarn:Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=t?t.fallbackRoot:Ke(e.fallbackRoot)?e.fallbackRoot:!0,T=!!e.fallbackFormat,$=Be(e.missing)?e.missing:null,A=Be(e.missing)?Fa(e.missing):null,S=Be(e.postTranslation)?e.postTranslation:null,D=t?t.warnHtmlMessage:Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,C=!!e.escapeParameter;const B=t?t.modifiers:Fe(e.modifiers)?e.modifiers:{};let O=e.pluralRules||t&&t.pluralRules,E;E=(()=>{s&&xa(null);const P={version:gh,locale:u.value,fallbackLocale:f.value,messages:h.value,modifiers:B,pluralRules:O,missing:A===null?void 0:A,missingWarn:v,fallbackWarn:y,fallbackFormat:T,unresolving:!0,postTranslation:S===null?void 0:S,warnHtmlMessage:D,escapeParameter:C,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};P.datetimeFormats=p.value,P.numberFormats=b.value,P.__datetimeFormatters=Fe(E)?E.__datetimeFormatters:void 0,P.__numberFormatters=Fe(E)?E.__numberFormatters:void 0;const F=ih(P);return s&&xa(F),F})(),ti(E,u.value,f.value);function M(){return[u.value,f.value,h.value,p.value,b.value]}const U=k({get:()=>u.value,set:P=>{E.locale=P,u.value=P}});function R(P){s||(E.fallbackContext=t?Sa():void 0);try{ti(E,u.value,P)}finally{s||(E.fallbackContext=void 0)}}const Y=k({get:()=>f.value,set:P=>{f.value=P,E.fallbackLocale=f.value,R(f.value)}}),te=k(()=>h.value),ye=k(()=>p.value),re=k(()=>b.value);function be(){return Be(S)?S:null}function ge(P){S=P,E.postTranslation=P}function we(){return $}function Ye(P){P!==null&&(A=Fa(P)),$=P,E.missing=A}const le=(P,F,ue,fe,Oe,De)=>{M();let Ve;try{s||(E.fallbackContext=t?Sa():void 0),Ve=P(E)}finally{s||(E.fallbackContext=void 0)}if(ue!=="translate exists"&&ze(Ve)&&Ve===Hi||ue==="translate exists"&&!Ve){const[wt,zn]=F();return t&&I?fe(t):Oe(wt)}else{if(De(Ve))return Ve;throw Tt(gt.UNEXPECTED_RETURN_TYPE)}};function ee(...P){return le(F=>Reflect.apply(La,null,[F,...P]),()=>Lo(...P),"translate",F=>Reflect.apply(F.t,F,[...P]),F=>F,F=>ae(F))}function ce(...P){const[F,ue,fe]=P;if(fe&&!Se(fe))throw Tt(gt.INVALID_ARGUMENT);return ee(F,ue,ot({resolvedMessage:!0},fe||{}))}function tt(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>Reflect.apply(F.d,F,[...P]),()=>yi,F=>ae(F)||je(F))}function $e(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>Reflect.apply(F.n,F,[...P]),()=>yi,F=>ae(F)||je(F))}function K(P){return P.map(F=>ae(F)||ze(F)||Ke(F)?Ma(String(F)):F)}const ie={normalize:K,interpolate:P=>P,type:"vnode"};function yt(...P){return le(F=>{let ue;const fe=F;try{fe.processor=ie,ue=Reflect.apply(La,null,[fe,...P])}finally{fe.processor=null}return ue},()=>Lo(...P),"translate",F=>F[Mo](...P),F=>[Ma(F)],F=>je(F))}function In(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>F[No](...P),Ra,F=>ae(F)||je(F))}function Ln(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>F[Ro](...P),Ra,F=>ae(F)||je(F))}function El(P){O=P,E.pluralRules=O}function w(P,F){return le(()=>{if(!P)return!1;const ue=ae(F)?F:u.value,fe=ae(F)?[ue]:Po(E,f.value,ue);for(let Oe=0;Oe[P],"translate exists",ue=>Reflect.apply(ue.te,ue,[P,F]),$h,ue=>Ke(ue))}function x(P){let F=null;const ue=Po(E,f.value,u.value);for(let fe=0;feR(f.value),{deep:!0,flush:"sync"}),t&&vi&&(Ct(t.locale,P=>{r&&(u.value=P,E.locale=P,ti(E,u.value,f.value))}),Ct(t.fallbackLocale,P=>{r&&(f.value=P,E.fallbackLocale=f.value,ti(E,u.value,f.value))}));const Z={id:Na,locale:U,fallbackLocale:Y,get inheritLocale(){return r},set inheritLocale(P){r=P,P&&t&&(U.value=t.locale.value,Y.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(h.value).sort()},messages:te,get modifiers(){return B},get pluralRules(){return O||{}},get isGlobal(){return s},get missingWarn(){return v},set missingWarn(P){v=P,E.missingWarn=v},get fallbackWarn(){return y},set fallbackWarn(P){y=P,E.fallbackWarn=y},get fallbackRoot(){return I},set fallbackRoot(P){I=P},get fallbackFormat(){return T},set fallbackFormat(P){T=P,E.fallbackFormat=T},get warnHtmlMessage(){return D},set warnHtmlMessage(P){D=P,E.warnHtmlMessage=P},get escapeParameter(){return C},set escapeParameter(P){C=P,E.escapeParameter=P},t:ee,getLocaleMessage:q,setLocaleMessage:j,mergeLocaleMessage:V,getPostTranslationHandler:be,setPostTranslationHandler:ge,getMissingHandler:we,setMissingHandler:Ye,[_h]:El};return Z.datetimeFormats=ye,Z.numberFormats=re,Z.rt=ce,Z.te=w,Z.tm=N,Z.d=tt,Z.n=$e,Z.getDateTimeFormat=X,Z.setDateTimeFormat=J,Z.mergeDateTimeFormat=G,Z.getNumberFormat=H,Z.setNumberFormat=de,Z.mergeNumberFormat=Q,Z[yh]=n,Z[Mo]=yt,Z[Ro]=Ln,Z[No]=In,Z}const vl={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function xh({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((s,i)=>[...s,...i.type===z?i.children:[i]],[]):t.reduce((n,s)=>{const i=e[s];return i&&(n[s]=i()),n},Ie())}function Qc(){return z}const Sh=Le({name:"i18n-t",props:ot({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>ze(e)||!isNaN(e)}},vl),setup(e,t){const{slots:n,attrs:s}=t,i=e.i18n||gl({useScope:e.scope,__useComponent:!0});return()=>{const l=()=>{const f=Object.keys(n).filter(b=>b[0]!=="_"),h=Ie();e.locale&&(h.locale=e.locale),e.plural!==void 0&&(h.plural=ae(e.plural)?+e.plural:e.plural);const p=xh(t,f);return i[Mo](e.keypath,p,h)},r=ot(Ie(),s),u=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(u)?bi(u,r,{default:l}):bi(u,r,l())}}}),Da=Sh;function Ch(e){return je(e)&&!ae(e[0])}function eu(e,t,n,s){const{slots:i,attrs:l}=t;return()=>{const r=()=>{const h={part:!0};let p=Ie();e.locale&&(h.locale=e.locale),ae(e.format)?h.key=e.format:Se(e.format)&&(ae(e.format.key)&&(h.key=e.format.key),p=Object.keys(e.format).reduce((y,I)=>n.includes(I)?ot(Ie(),y,{[I]:e.format[I]}):y,Ie()));const b=s(e.value,h,p);let v=[h.key];return je(b)?v=b.map((y,I)=>{const T=i[y.type],$=T?T({[y.type]:y.value,index:I,parts:b}):[y.value];return Ch($)&&($[0].key=`${y.type}-${I}`),$}):ae(b)&&(v=[b]),v},u=ot(Ie(),l),f=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(f)?bi(f,u,{default:r}):bi(f,u,r())}}const Th=Le({name:"i18n-n",props:ot({value:{type:Number,required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,zc,(...s)=>n[No](...s))}}),Ua=Th;function Eh(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const s=n.__getInstance(t);return s!=null?s.__composer:e.global.__composer}}function Ah(e){const t=r=>{const{instance:u,value:f}=r;if(!u||!u.$)throw Tt(gt.UNEXPECTED_ERROR);const h=Eh(e,u.$),p=ja(f);return[Reflect.apply(h.t,h,[...Ha(p)]),h]};return{created:(r,u)=>{const[f,h]=t(u);vi&&(r.__i18nWatcher=Ct(h.locale,()=>{u.instance&&u.instance.$forceUpdate()})),r.__composer=h,r.textContent=f},unmounted:r=>{vi&&r.__i18nWatcher&&(r.__i18nWatcher(),r.__i18nWatcher=void 0,delete r.__i18nWatcher),r.__composer&&(r.__composer=void 0,delete r.__composer)},beforeUpdate:(r,{value:u})=>{if(r.__composer){const f=r.__composer,h=ja(u);r.textContent=Reflect.apply(f.t,f,[...Ha(h)])}},getSSRProps:r=>{const[u]=t(r);return{textContent:u}}}}function ja(e){if(ae(e))return{path:e};if(Fe(e)){if(!("path"in e))throw Tt(gt.REQUIRED_VALUE,"path");return e}else throw Tt(gt.INVALID_VALUE)}function Ha(e){const{path:t,locale:n,args:s,choice:i,plural:l}=e,r={},u=s||{};return ae(n)&&(r.locale=n),ze(i)&&(r.plural=i),ze(l)&&(r.plural=l),[t,u,r]}function Ph(e,t,...n){const s=Fe(n[0])?n[0]:{};(!Ke(s.globalInstall)||s.globalInstall)&&([Da.name,"I18nT"].forEach(l=>e.component(l,Da)),[Ua.name,"I18nN"].forEach(l=>e.component(l,Ua)),[Ba.name,"I18nD"].forEach(l=>e.component(l,Ba))),e.directive("t",Ah(t))}const Oh=An("global-vue-i18n");function Ih(e={}){const t=Ke(e.globalInjection)?e.globalInjection:!0,n=new Map,[s,i]=Lh(e),l=An("");function r(p){return n.get(p)||null}function u(p,b){n.set(p,b)}function f(p){n.delete(p)}const h={get mode(){return"composition"},async install(p,...b){if(p.__VUE_I18N_SYMBOL__=l,p.provide(p.__VUE_I18N_SYMBOL__,h),Fe(b[0])){const I=b[0];h.__composerExtend=I.__composerExtend,h.__vueI18nExtend=I.__vueI18nExtend}let v=null;t&&(v=jh(p,h.global)),Ph(p,h,...b);const y=p.unmount;p.unmount=()=>{v&&v(),h.dispose(),y()}},get global(){return i},dispose(){s.stop()},__instances:n,__getInstance:r,__setInstance:u,__deleteInstance:f};return h}function gl(e={}){const t=Zc();if(t==null)throw Tt(gt.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Tt(gt.NOT_INSTALLED);const n=Mh(t),s=Nh(n),i=wh(t),l=Rh(e,i);if(l==="global")return kh(s,e,i),s;if(l==="parent"){let f=Va(n,t,e.__useComponent);return f==null&&(f=s),f}if(l==="isolated"){if(n.mode!=="composition")throw Tt(gt.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const f=n,h=ot({},e),p=Va(n,t);h.__root=p||s;const b=Fo(h);return f.__composerExtend&&(b[Xn]=f.__composerExtend(b)),$r()&&Gu(()=>{const y=b[Xn];y&&(y(),delete b[Xn])}),b}const r=n;let u=r.__getInstance(t);if(u==null){const f=ot({},e);"__i18n"in i&&(f.__i18n=i.__i18n),s&&(f.__root=s),u=Fo(f),r.__composerExtend&&(u[Xn]=r.__composerExtend(u)),Dh(r,t,u),r.__setInstance(t,u)}return u}function Lh(e,t){const n=Yu(),s=n.run(()=>Fo(e));if(s==null)throw Tt(gt.UNEXPECTED_ERROR);return[n,s]}function Mh(e){const t=$s(e.isCE?Oh:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Tt(e.isCE?gt.NOT_INSTALLED_WITH_PROVIDE:gt.UNEXPECTED_ERROR);return t}function Rh(e,t){return fl(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Nh(e){return e.mode==="composition"?e.global:e.global.__composer}function Va(e,t,n=!1){let s=null;const i=t.root;let l=Fh(t,n);for(;l!=null;){const r=e;if(e.mode==="composition"&&(s=r.__getInstance(l)),s!=null||i===l)break;l=l.parent}return s}function Fh(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Dh(e,t,n){En(()=>{},t),cl(()=>{const s=n;e.__deleteInstance(t);const i=s[Xn];i&&(i(),delete s[Xn])},t)}const Uh=["locale","fallbackLocale","availableLocales"],Wa=["t","rt","d","n","tm","te"];function jh(e,t){const n=Object.create(null);return Uh.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l)throw Tt(gt.UNEXPECTED_ERROR);const r=Qe(l.value)?{get(){return l.value.value},set(u){l.value.value=u}}:{get(){return l.get&&l.get()}};Object.defineProperty(n,i,r)}),e.config.globalProperties.$i18n=n,Wa.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l||!l.value)throw Tt(gt.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,l)}),()=>{delete e.config.globalProperties.$i18n,Wa.forEach(i=>{delete e.config.globalProperties[`$${i}`]})}}const Hh=Le({name:"i18n-d",props:ot({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,qc,(...s)=>n[Ro](...s))}}),Ba=Hh;th(jp);nh(Zp);sh(Po);const Vh={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Undo"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"unknown"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Unsaved changes"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancel"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Open Devices & services"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Save & send"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Saving…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Read current data"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 result. Keep typing to narrow it down."},{t:2,i:[{t:4,k:"n"},{t:3,v:" results. Keep typing to narrow it down."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Close"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Change"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Loading…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Back"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"New screen"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work. Refresh the page and try again."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API key copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API key is selected. Copy with Ctrl+C or Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON is selected. Copy with Ctrl+C or Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Action name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Action name is selected. Copy with Ctrl+C or Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is selected. Copy with Ctrl+C or Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icon name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icon name is selected. Copy with Ctrl+C or Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Empty color copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Empty color is selected. Copy with Ctrl+C or Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Color name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Color name is selected. Copy with Ctrl+C or Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Management page unreachable · retrying…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connected"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconnecting to Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Refresh"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Queued for the update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found with this device name."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"What's new"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Full log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"The IP address, once; new firmware reports it itself."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP address, e.g. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP address"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Start"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installed, but not yet in Home Assistant. Add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and turn on “Allow the device to perform Home Assistant actions” under Configure."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware downloaded, not yet in Home Assistant. Put it on the screen with ESPHome Web, then add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and allow the Home Assistant actions under Configure."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Not yet in Home Assistant. Already flashed? Add the ESPHome device under Settings → Devices & services, then allow the Home Assistant actions under Configure. Not flashed yet? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copy API key"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Add to this screen"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet and a test alert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nothing to save"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify this screen"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Blinks the backlight and shows a card"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs a newer firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Download and copy as JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Search screens, entities, actions…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nothing matches. Type part of a screen, entity or action."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Choose a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Pick one of your screens on the left to change its tiles, top bar and settings."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Start with a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Connect a CYD or Guition via USB to your Home Assistant machine. Profile, firmware, and the first flash happen in one go."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Install new screen"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"You have unsaved changes. Open a different screen anyway?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with a copy of the other screen's?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with the imported one?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your screen is being updated."}},other:{t:0,b:{t:2,i:[{t:3,v:"Saved. "},{t:4,k:"name"},{t:3,v:" is being updated."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The screen is being updated."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your newest change isn't sent yet: press Save & send again."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" blinks and shows a card for a few seconds."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · changes are saved"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Screen settings"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Saved · sent to screen"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"All saved"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"blink the screen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs firmware 0.2.31 or newer"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"from Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy layout from…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" screen"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" screens"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"no other screen"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tile"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tiles"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Import layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"advanced"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found for this screen"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"There is no room for this tile on page "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"No page is free for a full-page tile. Free a page first."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"This screen already has a tile that goes to page "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied. Save & send when it looks right."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout imported. Save & send when it looks right."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout imported: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"That isn't JSON. Export a layout first, or paste one from another ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"No tiles in this file. Expected a layout exported from ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Add your first light, scene, or device from the library."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tap the top bar or a tile to change it. Drag to move; drop on the next page for a new one."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Empty slots and fixed positions work from firmware 0.2.26. This screen (firmware "},{t:4,k:"firmware"},{t:3,v:") shifts the tiles up to the first free slot until that update."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Screen layout"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Add page"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 page is the most"},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages is the most"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove page"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"The pages after this one shift up one slot"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edit top bar"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Empty slot. Click to add a tile here, or drag one over."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Empty slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:": add the next tile here"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Next tile goes here"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Empty"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Library"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entity"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entities"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, device, or room…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Add an entity"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"All"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lights"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switches"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fans"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Covers"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scenes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensors"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Values"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selects"}},person:{t:0,b:{t:2,i:[{t:3}],s:"People"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Room"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"All rooms"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Hide placed"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Hide what is already on this screen"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Everything here is already on this screen."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found. Try a different name, room or filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile; update its firmware for 48."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles; update its firmware for 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Drag onto a page, or tap + to add to the first free slot. ⌘K searches everything."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Light"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cover"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Person"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Image"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entity"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"graph"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analog clock"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"sun path"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"double"}},full:{t:0,b:{t:2,i:[{t:3}],s:"full page"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Name on the screen"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (from Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (default)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows a chosen icon from firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Goes to page"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (empty)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigation tiles need firmware 0.2.62: press Update on the screen first."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"This screen has no page "},{t:4,k:"page"},{t:3,v:", so a tap opens its last page. Choose another page."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"A tap on the tile opens that page."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Display"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analog clock"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Name and status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Graph"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sun path"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has no numbers for this entity, so the graph stays empty. Choose another display."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"This weather service has no daily forecast in Home Assistant. Choose another display."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Size"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Double-width"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Full page"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Full page: one big button that lights up while on; a slider, controls or a graph sit at the bottom of it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"A full-page tile needs firmware 0.2.62: press Update on the screen first."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Page"}},new:{t:0,b:{t:2,i:[{t:3}],s:"New page"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Direct control on the tile"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this control for this entity, so it stays empty on the screen. Choose another one."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"At the bottom of the full-page tile; a tap anywhere else works as set below."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"On the right of the double-width tile, like the rows in Home Assistant. Tapping the name works as set below."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows direct control from firmware 0.2.19; until then the tile stays as it was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"On tap"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatic"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Open control"}},none:{t:0,b:{t:2,i:[{t:3}],s:"View only"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"On / off"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Perform action"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant can't turn this on and off, so a tap does nothing. Choose another option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen switches this from firmware 0.2.58: press Update on the screen. Until then a tap opens its card."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Hold the tile to open its card."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Small slider on the tile"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Yes, control directly"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has nothing a slider can change for this entity. Choose No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"History"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hour"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastel background"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Background: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:". Enter: configure, arrow keys: move"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove tile"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Asking Home Assistant which actions this entity has…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant isn't answering right now. Try again in a moment."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose an action"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example toggle, position, or play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an action"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No action found."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this action for this entity any more, so a tap does nothing. Choose another one."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Not set"}},on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant needs "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen performs an action from firmware 0.2.58: press Update on the screen. Until then a tap works as Automatic."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"No icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example lamp, music, or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"No icon, text only"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No icon found."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Current data"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connection, status, and supported properties"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Reading…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Fetching current HA status…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Small slider: "},{t:4,k:"slider"},{t:3,v:" · Display: "},{t:4,k:"display"},{t:3,v:" · Size: "},{t:4,k:"size"},{t:3,v:" · Control: "},{t:4,k:"control"},{t:3,v:" · Background: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"yes"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"none"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Default"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Read again"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed from the top bar"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"The top bar has room for 1 item."},{t:2,i:[{t:3,v:"The top bar has room for "},{t:4,k:"n"},{t:3,v:" items."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"This is already in the top bar."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Top bar"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Top bar: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself, also works without Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" item"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" items"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Left: name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"For example: Living room"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Right: time, sensors, or a clock"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:". Enter: configure, arrows: move"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"},{t:3,v:" from the top bar"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximum 1 item"},{t:2,i:[{t:3,v:"Maximum "},{t:4,k:"n"},{t:3,v:" items"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Add the time, date, analog clock, or an entity"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Add time, date, or an entity"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Not everything fits next to the name: the screen drops the dashed items. Remove one or choose a shorter name."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Drag to reorder; tap an item to configure it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensors, the date, and the analog clock appear from firmware "},{t:4,k:"version"},{t:3,v:"; until that update, this screen shows the name and, if the time is in the bar, the clock."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden: not active right now"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't fit next to the name"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Dial"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden right now: not active"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't currently fit next to the name"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"How it looks on the screen"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Small dial with the time"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"What to show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Last changed keeps counting on the screen itself: “Just now”, “5 min ago”, “Yesterday”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (like Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Only when active hides the item as long as it's off, closed, away, or 0. Handy for an open door, a running washing machine, or who's home."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24 hour clock · change under "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12 hour clock · change under "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings → Language & region"}},date_hint:{t:0,b:{t:2,i:[{t:4,k:"date"},{t:3,v:" today. The date follows the screen's own clock."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Up"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Down"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Add to the top bar"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slot used"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slots used"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Already added"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggestions from Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"An entity"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, room, or entity, e.g. temperature or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an entity for the top bar"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Night"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Dark mode"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto standby"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby after"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Standby brightness"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Night mode"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Starts"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Ends"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Night brightness"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Back to page 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"After"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Also on standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Swipe between pages"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotation"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Still saving the other screen's settings. Try again in a moment."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons and swiping are off, so only Go to page tiles change the page."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"page "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pages "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"You have no Go to page tiles."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"The tiles to "},{t:4,k:"pages"},{t:3,v:" are only on pages you can't reach."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"From "},{t:4,k:"pages"},{t:3,v:" no tile leads back to page 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"This screen is offline. Its settings can change once it's back."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply on the screen at once, and show up here when they change there."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply at once. Firmware 0.2.49 lets the screen keep them itself."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"This entity is off in Home Assistant, or the screen is restarting."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lower"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" higher"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Starting update…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building the firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Writing the firmware over Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Building and installing…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Waiting for the screen to come back…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Checking that it stays stable…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"New language: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Screens will now update automatically at night."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatic updates are off."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Updating to firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"No screen paired yet. New screens get firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"All screens have firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Update 1 screen"},{t:2,i:[{t:3,v:"Update all "},{t:4,k:"n"},{t:3,v:" screens"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"What's new in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Update automatically every night"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Between 03:00 and 06:00, one screen at a time. Stops on an error and reports it in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Claude Code picks it up right away."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Restart Claude Code once so it finds the new skills folder."}},text:{t:0,b:{t:2,i:[{t:3}],s:'Teach Claude about ESP Screens, then ask: "Show an alert on all my screens when the mailbox is full." Claude knows the alert events, every field, color, and icon.'}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install for Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Install again"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update the skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Not installed"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installed"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installed · a newer version is ready"}},writes:{t:0,b:{t:2,i:[{t:3,v:"For Claude Code in Home Assistant. Writes one file to "},{t:4,k:"path"},{t:3,v:"; installing again replaces it."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download for claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload the zip in Claude under Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Everything around your screens."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← My screens"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Add a screen, or build and reinstall the firmware of one you already have."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Build and install via USB or Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Language & region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Screen language"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant's language ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant's language"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"The screens use English until Home Assistant's language is available."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not checked yet, help welcome"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is not checked yet, help welcome: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"how to translate"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"After a change every screen needs a firmware update, one build each: with its Update button, or in the nightly updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Time format"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 hour"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 hour"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Number format"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Your Home Assistant profile: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Use these"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"The editor itself follows the language of your Home Assistant profile."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Every screen takes the new language with its next update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"A card over the whole screen from an automation, on one screen or on all of them. The cheatsheet has the action names, fields, icons, and colors, and a form to try one."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Full-screen notifications, from an automation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Build and install screen firmware"}},intro:{t:0,b:{t:2,i:[{t:3,v:"The built-in ESPHome CLI uses your own profile (YAML with keys) and secrets. Choose the screen's profile, then a USB port (screen connected to the Home Assistant machine), "},{t:4,k:"ota"},{t:3,v:" with the hostname, or "},{t:4,k:"download"},{t:3,v:" to put the firmware on the screen from your own computer. "},{t:4,k:"check"},{t:3,v:" only validates, "},{t:4,k:"build"},{t:3,v:" compiles, "},{t:4,k:"install"},{t:3,v:" puts the firmware on the screen. Your tiles stay as they are in ESP Screens. The first build takes a few minutes."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Check"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Build only"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Build & install"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Build & download"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing. Update the app to 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose the intended profile, then a USB port, an IP address, or Download."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome profile"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Install to"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · no board found on the Home Assistant machine yet"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Download · flash from your own computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP address or hostname"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Download "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Put it on the screen with "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome or Edge: Connect, choose the screen's USB port, Install, and select this file. It holds your Wi-Fi password and the screen's keys: keep it to yourself."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profile saved."}},running:{t:0,b:{t:2,i:[{t:3}],s:"One moment…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to download."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens creates the screen's own profile with unique keys and builds the firmware. Connect the screen with a USB data cable to the machine running Home Assistant, or download the firmware and put it on the screen from your own computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Which screen do you have?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2.8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Living room screen"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Device name"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"customize"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Every screen gets its own profile with its own keys. Four screens? Go through this four times with a different name."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lowercase letters, digits, and dashes. A different name for each screen."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi name (2.4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi password"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Fill in once: ESP Screens saves this in ESPHome secrets.yaml, later screens use it automatically."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Your ESPHome secrets.yaml is still missing Wi-Fi details. ESP Screens only fills in the missing lines."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi comes from your ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in the ESPHome folder isn't valid YAML. Fix the file first; it won't be overwritten."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Install via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · save profile only"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Connect the screen with a USB data cable to the Home Assistant machine; the list refreshes on its own. Or choose Download to use your own computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download the firmware and put it on the screen from your own computer, in Chrome or Edge. After that, updates go over Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"The profile goes into the ESPHome folder. You can install later via Firmware & USB, or from ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"More than one board connected: choose this screen's port."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Once over USB; after that, everything is wireless."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Save profile"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A build or installation is already running ("},{t:4,k:"file"},{t:3,v:"). Wait for it to finish."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing from this installation; only saving the profile is possible."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" is in the ESPHome folder"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Writing firmware to "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware for "},{t:4,k:"name"},{t:3,v:" is ready"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware is on "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Build failed"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Install failed"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Install it later from Firmware & USB: choose this profile, then the USB port of the Home Assistant machine, or Download to put the firmware on the screen from your own computer. Save the API key for pairing:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Don't disconnect the USB cable yet."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the installation keeps running and you'll find it again under New screen."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the build keeps running and you'll find it again under New screen."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Put it on the screen from your own computer, then pair the screen with Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. Pair it with Home Assistant now:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs. Pair it with Home Assistant now:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"See the log below."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" with a USB data cable."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plug the screen into your computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome or Edge, click Connect and choose the screen's USB port."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Click Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"The file holds your Wi-Fi password and the screen's keys: keep it to yourself."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API key"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" This happens outside ESP Screens. Home Assistant discovers "},{t:4,k:"name"},{t:3,v:" as an ESPHome device; click Add. Not discovered? Add ESPHome manually with the screen's IP address."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Go to Home Assistant → Settings → Devices & services."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" above when Home Assistant asks for an encryption key."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Paste the API key"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome integration → Configure → “Allow the device to perform Home Assistant actions”. Without this, the screen sees everything but controls nothing."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allow HA actions:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Back in ESP Screens, the screen appears in the list on the left within about thirty seconds; until then it's shown there as “not yet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Choose your tiles."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome log"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Retry"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Install another screen"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Start over"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"A full-screen notification, from an automation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Every screen has the "},{t:4,k:"action"},{t:3,v:" action. It places a card over everything, wakes the screen, and keeps the backlight at normal brightness until someone taps the button or the timeout runs out. Home Assistant itself shows no explanation or dropdowns for ESPHome actions; everything you can fill in is listed here."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"The cheatsheet is still loading; one moment."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Someone is at the door"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Door 3, back"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Coming"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sections"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Try it"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Your screens"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In an automation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"All screens"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"The fields"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icons"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colors"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Behavior"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Events"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Send one alert now, with the same fields an automation sends. The screen shows the card and, with blinking on, flashes its backlight."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},all:{t:0,b:{t:2,i:[{t:3,v:"All screens ("},{t:4,k:"ready"},{t:3,v:" ready)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not ready"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Title"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtitle"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Color"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Button text"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconds, 0 waits for the button)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Blink the backlight"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Four times when the alert arrives."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Sending…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Send alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Sent to the screen."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 skipped (offline or old firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" skipped (offline or old firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Left empty: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"No screen could show it: check that a screen is online with firmware "},{t:4,k:"version"},{t:3,v:" or newer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"White (default)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Every screen has its own action, with the device name in it. From firmware "},{t:4,k:"version"},{t:3,v:"; update an older screen with its Update button under Screens."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"No screen paired yet. Install one via New screen; the action appears once Home Assistant sees the screen."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update needed · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Device name unknown · update the screen"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Show alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Dismiss alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" and search for "},{t:4,k:"esphome"},{t:3,v:`. Choose your screen's action: Home Assistant calls it "Performs the action show_alert of the node `},{t:4,k:"device"},{t:3,v:'".'}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Add action"}},device:{t:0,b:{t:2,i:[{t:3}],s:"device name"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant asks for all seven; leave what you don't use empty ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", off)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fill in the fields."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefer YAML? Choose "},{t:4,k:"edit"},{t:3,v:" on the action and paste the example below."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Example for"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"a screen (not paired yet)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edit in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copy YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"All screens at once"}},text:{t:0,b:{t:2,i:[{t:3,v:"Fire the event "},{t:4,k:"show"},{t:3,v:" with the same fields, and ESP Screens passes the alert on to every screen that is online, including screens you add later. "},{t:4,k:"dismiss"},{t:3,v:" clears it everywhere. In an automation, add the "},{t:4,k:"event"},{t:3,v:" action or paste the example under "},{t:4,k:"edit"},{t:3,v:". Leave out the fields you don't use. ESP Screens has to be running for this."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Fire manual event"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Text is free-form; the limit is in bytes, and an accented letter counts as two. What doesn't fit gets an ellipsis (title) or is dropped (subtitle)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Field"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"What it does"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Example"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"text"}},int:{t:0,b:{t:2,i:[{t:3}],s:"number"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"on / off"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entity"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 to 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:", for example "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" and the hex codepoint ("},{t:4,k:"hex"},{t:3,v:") also work. Only these icons are included in the firmware; any other name shows the warning triangle. Tap an icon to copy its name."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handy for notifications"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name or description…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Also available: control and weather icons"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copy "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:'No icon for "'},{t:4,k:"query"},{t:3,v:'". Unknown names show the warning triangle ('},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:". These are the pastel shades of the tiles, with dark text. Empty or unknown gives the white card. Tap to copy."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" An alert immediately wakes a dimmed or dark screen and appears above every page, every open light card, and the standby layer."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wakes the screen."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" As long as the card is showing, the backlight stays at normal brightness. Standby and night hours wait. After the button, the regular standby time starts again."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"On until the button."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" waits for the button, however long that takes. With "},{t:4,k:"minute"},{t:3,v:" the card disappears after a minute, but the button closes it sooner."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" blinks the backlight four times when the alert arrives (about a second) and leaves the screen on afterward."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Blinking."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" A new alert replaces the current one; there's no stack. The replaced alert reports itself as "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Replacing."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" clears the card, for example if the door is already open. Without an alert, that action does nothing."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Closing remotely."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" does nothing; only the button closes it. That way a wake-up tap never accidentally dismisses the alert."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tapping beside the card"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Every end fires the event "},{t:4,k:"event"},{t:3,v:" with "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (the device name) and the "},{t:4,k:"device_id"},{t:3,v:" that Home Assistant adds. Visible under Settings → Tools → Events."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"When"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Waiting until someone presses the button"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use a "},{t:4,k:"bold"},{t:3,v:': orange for the door, red for smoke or water, green for "done". The text always stays dark and readable.'}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"color per kind of notification"}},short:{t:0,b:{t:2,i:[{t:3,v:"Keep the title "},{t:4,k:"bold"},{t:3,v:"; a screen shows about twenty characters on one line and ends a longer title with an ellipsis. Put details in the subtitle."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"short"}},button:{t:0,b:{t:2,i:[{t:3,v:"A "},{t:4,k:"bold"},{t:3,v:' turns the notification into a question: "Coming", "Seen", "Turn off". The event then tells you who responded.'}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"custom button text"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"For an alert that resolves itself (the door opens, the laundry gets taken out) close it in the same automation with "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Every screen? Fire "},{t:4,k:"event"},{t:3,v:" once (see All screens at once). The screens still work independently and each reports with its own "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Rather "},{t:4,k:"bold"},{t:3,v:" for the automation? Install the ESP Screens skill under Settings → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"ask Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Doorbell: show the alert and wait until someone presses the button."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Someone is coming to the door."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Advanced · local override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Override YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"This small file is yours. It is loaded after the shared screen package and stays in place when ESP Screens updates. Change hardware-specific details here, such as a display model."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"What is safe to change?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pins and other device details. Name, Wi-Fi, API, OTA and package links remain managed."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Active"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to attach"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Local override YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Use example"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 character"},{t:2,i:[{t:4,k:"n"},{t:3,v:" characters"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 line"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lines"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Save & check"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Save override"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile was found for this screen."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Changes here apply on the next build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Save once to attach this file to the profile."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Checking and saving…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The override is kept during firmware updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML saved."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Saved. ESPHome is checking the complete profile…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome is checking the profile…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome is checking the profile… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"The complete profile is valid. Safe to build and install."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome rejected the complete profile. See Firmware & USB for the full log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Replace the current text with the example?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Example loaded. Save it when you are ready."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear the local override?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"The override will be empty after you save."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Unknown"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Unavailable"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heat"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Cool"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heat/Cool"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Fan only"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heating"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Cooling"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drying"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preheating"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Opening"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Closing"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Playing"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Away"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Above horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Below horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Docked"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Cleaning"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Returning to dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sunny"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Clear, night"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Cloudy"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Partly cloudy"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Rainy"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Pouring"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy, rainy"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Fog"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hail"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Lightning"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lightning, rainy"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windy"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Not charging"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Cold"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connected"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnected"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Hot"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Light detected"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"No light"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Unlocked"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Locked"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Wet"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Moving"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Not moving"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Plugged in"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Unplugged"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Running"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Not running"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsafe"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Safe"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update available"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activate"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Run"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Press"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Just now"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min ago"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 hour ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours ago"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Yesterday"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 day ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" days ago"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weeks ago"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 month ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" months ago"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 year ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" years ago"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 hour"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" hours"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Tomorrow"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 day"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" days"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sunday"}},{t:0,b:{t:2,i:[{t:3}],s:"Monday"}},{t:0,b:{t:2,i:[{t:3}],s:"Tuesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Wednesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Thursday"}},{t:0,b:{t:2,i:[{t:3}],s:"Friday"}},{t:0,b:{t:2,i:[{t:3}],s:"Saturday"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},{t:0,b:{t:2,i:[{t:3}],s:"Mon"}},{t:0,b:{t:2,i:[{t:3}],s:"Tue"}},{t:0,b:{t:2,i:[{t:3}],s:"Wed"}},{t:0,b:{t:2,i:[{t:3}],s:"Thu"}},{t:0,b:{t:2,i:[{t:3}],s:"Fri"}},{t:0,b:{t:2,i:[{t:3}],s:"Sat"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"Su"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Tu"}},{t:0,b:{t:2,i:[{t:3}],s:"We"}},{t:0,b:{t:2,i:[{t:3}],s:"Th"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"January"}},{t:0,b:{t:2,i:[{t:3}],s:"February"}},{t:0,b:{t:2,i:[{t:3}],s:"March"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"June"}},{t:0,b:{t:2,i:[{t:3}],s:"July"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"October"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"December"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan"}},{t:0,b:{t:2,i:[{t:3}],s:"Feb"}},{t:0,b:{t:2,i:[{t:3}],s:"Mar"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"Jun"}},{t:0,b:{t:2,i:[{t:3}],s:"Jul"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug"}},{t:0,b:{t:2,i:[{t:3}],s:"Sep"}},{t:0,b:{t:2,i:[{t:3}],s:"Oct"}},{t:0,b:{t:2,i:[{t:3}],s:"Nov"}},{t:0,b:{t:2,i:[{t:3}],s:"Dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:"."}},group:{t:0,b:{t:2,i:[{t:3}],s:","}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}},Wh=Vh,Ka=e=>e%10>=2&&e%10<=4&&(e%100<12||e%100>14),qa={one_other:e=>e===1?0:1,one_upto_1:e=>Math.abs(e)<=1?0:1,slavic_pl:e=>e===1?0:Ka(e)?1:2,east_slavic:e=>e%10===1&&e%100!==11?0:Ka(e)?1:2,none:()=>0},Bh=Object.assign({"../../screen_manager/translations/de.json":()=>pn(()=>import("./de-Cl47viL4.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/en-GB.json":()=>pn(()=>import("./en-GB-v9zPRS2K.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/es.json":()=>pn(()=>import("./es-2dmn4vz_.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/fr.json":()=>pn(()=>import("./fr-hu4FKHEL.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/it.json":()=>pn(()=>import("./it-XNNJYTR_.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/nl.json":()=>pn(()=>import("./nl-CwiIFXXi.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pl.json":()=>pn(()=>import("./pl-CMPJmoaL.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pt.json":()=>pn(()=>import("./pt-Brrep2mC.js"),[],import.meta.url).then(e=>e.default)}),Kh=Object.fromEntries(Object.entries(Bh).map(([e,t])=>[e.slice(e.lastIndexOf("/")+1,-5),t])),Rs={...cp},tu=new Set(["en"]),_l={},nu=e=>_l[e]=(t,n)=>Math.min((qa[Rs[e]?.plural]||qa.one_other)(t),n-1),yl=()=>["en",...Object.keys(Rs).filter(e=>e!=="en").sort()];yl().forEach(nu);const cs=Ih({locale:"en",fallbackLocale:"en",messages:{en:Wh},pluralRules:_l,missingWarn:!1,fallbackWarn:!1,missing:(e,t)=>{}}),c=cs.global.t,qh=(e,t="en")=>cs.global.te(e,t),wl=()=>cs.global.locale.value,zh=e=>Rs[e];function Yh(e=window){try{if(e.parent!==e){const t=e.parent.document.documentElement.lang;if(t)return t}}catch{}return e.navigator.language||"en"}function su(e,t=yl()){const n=i=>t.find(l=>l.toLowerCase()===i.toLowerCase()),s=(e||"").trim();return s?n(s)||n(s.split("-")[0]):void 0}const iu=(e,t=yl())=>su(e,t)||"en";function Gh(e,t,n=Rs[e]){n&&(Rs[e]=n),_l[e]||nu(e),cs.global.setLocaleMessage(e,t),tu.add(e)}const za={};function ou(e){if(tu.has(e))return Promise.resolve(!0);const t=Kh[e];return t?za[e]??=t().then(n=>(Gh(e,n),!0),()=>(delete za[e],!1)):Promise.resolve(!1)}async function Jh(e=iu(Yh())){const t=await ou(e)?e:"en";return cs.global.locale.value=t,document.documentElement.lang=t,t}const is={point:{decimal:".",group:",",from:4},comma:{decimal:",",group:".",from:4},space:{decimal:",",group:" ",from:4}};function lu(e,t){const n=String(e),s=/^(-?)(\d+)(?:\.(\d+))?$/.exec(n);if(!s)return n;const i=s[2].length>=t.from?s[2].replace(/\B(?=(\d{3})+$)/g,t.group):s[2];return`${s[1]}${i}${s[3]!==void 0?t.decimal+s[3]:""}`}const Ya={comma_decimal:"point",decimal_comma:"comma",space_comma:"space"};function Xh(e=window){try{if(e.parent===e)return{};const t=e.parent.document.querySelector("home-assistant")?.hass?.locale,n=["12","24"].includes(t?.time_format)?t.time_format:void 0;return{...n?{clock:n}:{},...Ya[t?.number_format]?{numbers:Ya[t.number_format]}:{}}}catch{return{}}}const Zh=(e,t=wl())=>new Intl.ListFormat(t==="en"?"en-GB":t,{type:"conjunction"}).format(e.map(String)),qe=6,cn=8,Ns=cn*qe,au=["single","wide","full"],xn=e=>e===!0?"wide":e===!1?"single":e,us=e=>/^screen\.page_[1-8]$/.test(e)?Number(e.slice(-1)):0,ut=e=>au.includes(e.options?.size)?e.options.size:"single",Do=e=>ut(e)!=="single",ru=e=>ut(e)==="full",cu=e=>e-e%qe,uu=e=>e-e%2,Et=e=>Math.floor(e/qe),kl=e=>xn(e)==="full"?qe:xn(e)==="wide"?2:1,Wn=(e,t)=>xn(t)==="full"?Array.from({length:qe},(n,s)=>cu(e)+s):xn(t)==="wide"?[e,e+1]:[e],Ga=(e,t)=>xn(t)==="full"?cu(e):xn(t)==="wide"?uu(e):e,Xe=e=>e.tiles.map(t=>({tile:t,slot:t.slot}));function du(e){let t=0;return e.map(n=>{const s=ut(n);s==="full"&&t%qe?t+=qe-t%qe:s==="wide"&&t%2===1&&t++;const i=t;return t+=kl(s),i})}function Qh(e){const t=du(e);return e.some((n,s)=>n.slot!==t[s])}function Vi(e){if(e.tiles.some(t=>!Number.isInteger(t.slot))){const t=du(e.tiles);e.tiles.forEach((n,s)=>n.slot=t[s])}e.tiles.sort((t,n)=>t.slot-n.slot)}function es(e){const t=new Set;for(const{tile:n,slot:s}of e)for(const i of Wn(s,ut(n)))t.add(i);return t}const Fs=(e,t,n)=>Number.isInteger(t)&&t>=0&&t!e.has(s));function wi(e,t,n=0){for(let s=n;si.includes(h))?u.push(f):r.push({tile:f,slot:f.slot}));for(const f of u){const h=ut(f),p=es(r);let b=l.map(v=>Ga(v,h)).find(v=>Fs(p,v,h));if(b===void 0&&(b=fu(p,h,f.slot)),b<0)return null;r.push({tile:f,slot:b})}return r.sort((f,h)=>f.slot-h.slot)}function Ot(e,t=1){const n=Math.max(0,...e.map(({tile:s,slot:i})=>i+kl(ut(s))));return Math.min(cn,Math.max(1,Math.ceil(n/qe),t||1))}function em(e,t){const n=Array.from({length:t},()=>new Set);let s=0;for(const{tile:h,slot:p}of e){const b=us(h.entity)-1,v=Et(p);b<0||b>=t||v>=t||(s++,n[v].add(b))}const i=h=>{const p=new Set([0]),b=[0];for(;b.length;)for(const v of h(b.shift()))p.has(v)||(p.add(v),b.push(v));return p},l=i(h=>[...n[h]]),r=i(h=>n.flatMap((p,b)=>p.has(h)?[b]:[])),u=Array.from({length:t},(h,p)=>p),f=h=>h.map(p=>p+1);return{tiles:s,targets:f(u.filter(h=>n.some(p=>p.has(h)))),unreachable:f(u.filter(h=>!l.has(h))),noWayBack:f(u.filter(h=>l.has(h)&&!r.has(h)))}}function tm(e){const t=e.split(".")[0];return t==="sun"?{options:{display:"sunpath",size:"wide"}}:t==="weather"?{options:{display:"forecast",size:"wide"}}:us(e)?{}:t==="screen"?{options:{display:"digital",size:"wide"}}:{}}const hu=e=>({entity:e,name:"",slot:-1,...tm(e)});function mu(e,t){const n=e.entity.split(".")[0],s=t.controls?.[n],i=e.options||{};if(!s||!["wide","full"].includes(i.size)||(i.display||"standard")!=="standard"||i.inline==="slider")return null;const l=i.controls??(i.size==="full"?"none":s.default);return l==="none"?null:l}function nm(e,t){const n=mu(e,t);return n?t.controls?.[e.entity.split(".")[0]]?.choices.find(s=>s.key===n)?.label||n:c("editor.inspect.control_none")}const Uo=e=>(/^(\d+)\.(\d+)\.(\d+)$/.exec(e||"")||[]).slice(1).map(Number);function un(e,t){const[n,s]=[Uo(e),Uo(t)];if(n.length!==3||s.length!==3)return!1;for(let i=0;i<3;i++)if(n[i]!==s[i])return n[i]>s[i];return!0}const sm=(e,t,n,s)=>un(e,`${t}.${n}.${s}`),im=Ns;function om(e){return Uo(e).length!==3?10:un(e,"0.2.62")?im:un(e,"0.2.7")?20:10}const lm=["standard","watch","forecast","graph","digital","analog","sunpath"],bu=e=>lm.includes(e)?c(`editor.displays.${e}`):e,am=e=>c(`editor.sizes.${au.includes(e)?e:"single"}`),Ja=["light","switch","input_boolean","fan","media_player","climate"],rm=["light","fan","cover","number","input_number","media_player"],cm={light:["☀","#ad7600","#fff3d3"],climate:["❄","#c86620","#ffebdc"],vacuum:["◉","#008577","#def3ed"],fan:["✣","#008aab","#def5fa"],cover:["▤","#8053af","#eee5f8"],media_player:["▶","#007cad","#def2fc"],sensor:["⌁","#3476b1","#e5effa"],binary_sensor:["◈","#ad7600","#fff3d3"],switch:["⏻","#ad7600","#fff3d3"],input_boolean:["⏻","#ad7600","#fff3d3"],scene:["✦","#8053af","#eee5f8"],script:["▷","#8053af","#eee5f8"],weather:["☁","#007cad","#def2fc"],number:["±","#008577","#def3ed"],input_number:["±","#008577","#def3ed"],select:["≡","#5862af","#eaecfa"],input_select:["≡","#5862af","#eaecfa"],button:["↗","#5862af","#eaecfa"],input_button:["↗","#5862af","#eaecfa"],screen:["◷","#25282c","#e9ecf1"],sun:["☼","#c86620","#ffebdc"],timer:["⏱","#008577","#def3ed"],person:["☺","#2f7d32","#e1f2e2"],camera:["◧","#3d4a57","#e6ebf0"],image:["◧","#3d4a57","#e6ebf0"]};function jt(e){const t=e.split(".")[0],n=cm[t];return n?[c(`editor.domains.${t}`),...n]:[c("editor.domains.entity"),"◇","#637184","#edf0f4"]}const vu={clock:"clock-outline",analog:"clock-outline",date:"calendar"},at=e=>JSON.stringify(e),Ae=e=>String.fromCodePoint(parseInt(e,16));function Wi(e,t=new Date){let n=t.getHours();return e||(n=n%12||12),`${String(n).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}const $l=(e=new Date,t="en")=>c("screen.date.top_bar",{weekday:c(`screen.date.weekdays_min.${e.getDay()}`,{},{locale:t}),day:e.getDate(),month:c(`screen.date.months_short.${e.getMonth()}`,{},{locale:t})},{locale:t});function um(e,t=Math.floor(Date.now()/1e3),n="en"){const s=t-e,i=Math.abs(s),l=u=>Math.floor(i/u),r=(u,f)=>f===void 0?c(`screen.time.${u}`,{},{locale:n}):c(`screen.time.${u}`,f,{locale:n});return s<0?i<3600?r("in_minutes",Math.max(1,l(60))):i<86400?r("in_hours",l(3600)):i<172800?r("tomorrow"):r("in_days",l(86400)):i<60?r("just_now"):i<3600?r("minutes_ago",l(60)):i<86400?r("hours_ago",l(3600)):i<172800?r("yesterday"):i<604800?r("days_ago",l(86400)):i<2592e3?r("weeks_ago",l(604800)):i<31536e3?r("months_ago",l(2592e3)):r("years_ago",l(31536e3))}const dm={guition:{width:448,top:36,name:27,text:21,icon:26},cyd:{width:298,top:24,name:18,text:14,icon:18}};let ps;const jo=new Map,fm=()=>jo.clear();function Fn(e,t){const n=`${t}|${e}`;let s=jo.get(n);if(!s){if(ps===void 0&&(ps=document.createElement("canvas").getContext("2d")),ps){ps.font=t;const i=ps.measureText(e);s={left:-i.actualBoundingBoxLeft,right:i.actualBoundingBoxRight,top:-i.actualBoundingBoxAscent,bottom:i.actualBoundingBoxDescent,advance:i.width}}else{const i=Number(/(\d+(?:\.\d+)?)px/.exec(t)?.[1]||14),l=[...e].length*i*.55;s={left:0,right:l,top:-i*.72,bottom:i*.02,advance:l}}jo.set(n,s)}return s}const pm=e=>({name:`500 ${e.name}px "Bar Roboto"`,text:`400 ${e.text}px "Bar Roboto"`,icon:`${e.icon}px "Tile Icons"`});function hm(e){return{icon:Math.max(2,Math.floor((e*4+5)/10)),item:Math.max(6,Math.floor((e*125+50)/100)),name:Math.max(8,Math.floor((e*16+5)/10))}}function gu(e,t,n,s){const i=pm(t),l=Fn("0",i.text),r=Math.round(l.bottom-l.top),u=hm(r),f=Fn(String.fromCodePoint(983376),i.icon),h=Math.round(f.bottom-f.top),p=e.map((C,B)=>{const O=s(C),E={index:B,item:C,view:O,shown:O.shown,width:0};return O.analog?(E.dial=h,E.width=h,E):(O.icon&&(E.icon={glyph:Ae(O.icon),ink:Fn(Ae(O.icon),i.icon)},E.width+=E.icon.ink.right-E.icon.ink.left),O.text&&(E.text={value:O.text,ink:Fn(O.text,i.text)},E.width+=(E.icon?u.icon:0)+E.text.ink.right-E.text.ink.left),E)}),b=p.filter(C=>C.shown),v=Fn(n,i.name).advance,y=Math.min(v,Math.floor(t.width*35/100)),I=C=>C.reduce((B,O)=>B+O.width,0)+Math.max(0,C.length-1)*u.item;let T=0;for(;Tt.width;)T++;const $=b.slice(T),A=new Set(b.slice(0,T).map(C=>C.index));let S=t.width-I($);for(const C of $)C.x=S,S+=C.width+u.item;const D=$.length?$[0].x-u.name:t.width;return{metrics:t,fonts:i,cap:r,zero:l,gaps:u,parts:p,placed:$,dropped:A,nameText:n,natural:v,nameRoom:D}}function mm(e,t,n){if(Fn(e,t).advance<=n)return e;const s=[...e];for(;s.length&&Fn(s.join("")+"...",t).advance>n;)s.pop();return s.join("")+"..."}function bm(e){"fonts"in document&&Promise.all([document.fonts.load('500 27px "Bar Roboto"',"Studio 0"),document.fonts.load('400 21px "Bar Roboto"',"Away 0"),document.fonts.load('26px "Tile Icons"',String.fromCodePoint(983376))]).then(()=>{fm(),e()}).catch(()=>{})}let _u="";function vm(e){_u=e||""}async function xl(e,t={}){const n=await fetch(`api/${e}`,{...t,headers:{"Content-Type":"application/json","X-Screen-CSRF":_u,"X-ESP-Screens-Language":wl(),...t.headers}});if(!n.ok){let s=c("editor.api.failed");try{const i=(await n.json())?.error;typeof i=="string"&&i.trim()&&(s=i)}catch{}throw new Error(s)}return n}const Nt=async e=>(await xl(e)).json(),ft=async(e,t,n,s={})=>{const l=await(await xl(e,{method:t,body:n===void 0?void 0:JSON.stringify(n),...s})).text();return l?JSON.parse(l):null},m=qn({inventory:{screens:[],entities:[]},connected:!1,reachable:!0,selected:null,layout:null,dirty:!1,busy:!1,saved:0,tab:"layout",selectedTile:null,inspector:null,iconPickerOpen:!1,actionPickerOpen:!1,actionSearch:"",insertAt:-1,filter:"",search:"",capabilities:{},entityActions:{},topbarPreviews:{},topbarAdded:null,topbarOverflow:[],settingEdits:{},settingPending:!1,updating:[],toast:null,now:Date.now(),fontsVersion:0,route:location.hash,overrideProfile:null,overrideFriendly:"",drag:{active:!1,moving:null,preview:null},menuOpen:!1,liveStates:{},room:"",hidePlaced:!1,palette:!1,firmwareJob:null}),_t=k(()=>m.inventory.screens.find(e=>e.id===m.selected)),os=e=>(e&&"firmware_known"in e?e.firmware_known:e?.firmware)||"",yu=k(()=>os(_t.value)),wn=(e,t,n)=>sm(yu.value,e,t,n),Bn=k(()=>{const e=_t.value?.tile_limit;return typeof e=="number"&&Number.isInteger(e)&&e>0?e:om(yu.value)}),Xa=k(()=>{const e=_t.value?.full_page;return typeof e=="boolean"?e:wn(0,2,62)}),gm=k(()=>{const e=_t.value?.page_tiles_repeat;return typeof e=="boolean"?e:wn(0,2,65)}),Bi=e=>gm.value&&us(e)>0,Sl=k(()=>_t.value?.board==="guition"),wu=k(()=>dm[Sl.value?"guition":"cyd"]),co=k(()=>m.selectedTile&&m.layout?.tiles.includes(m.selectedTile)?m.selectedTile:void 0),Cl=e=>!!m.selectedTile&&xe(m.selectedTile)===xe(e);let Za=0;function Ce(e,t){m.toast={message:e,action:t},clearTimeout(Za),Za=window.setTimeout(()=>m.toast=null,t?8e3:5e3)}function _m(){m.toast=null}async function It(e,t,n="api_key"){try{if(!navigator.clipboard||!window.isSecureContext)throw new Error;await navigator.clipboard.writeText(e),Ce(c(`editor.copy.${n}.copied`))}catch{if(t){const s=document.createRange();s.selectNodeContents(t);const i=window.getSelection();i?.removeAllRanges(),i?.addRange(s)}Ce(c(document.execCommand("copy")?`editor.copy.${n}.copied`:`editor.copy.${n}.selected`))}}function ki(){const e="/config/integrations/dashboard";try{window.top.location.assign(e)}catch{window.open(e,"_blank")}}const ym=["","#settings","#new-screen","#firmware","#alerts","#override"],$t=k(()=>ym.includes(m.route)?m.route:"");function He(e){if(location.hash===e){m.route=e;return}location.hash=e}window.addEventListener("hashchange",()=>{m.route=location.hash,window.scrollTo(0,0)});function qs(e){return m.inventory.entities.find(t=>t.id===e)?.name||m.inventory.builtin?.find(t=>t.id===e)?.name||e}let uo={source:null,byName:{}};function zs(e){return uo.source!==m.inventory.icons&&(uo={source:m.inventory.icons,byName:Object.fromEntries((m.inventory.icons?.groups||[]).flatMap(t=>t.icons.map(n=>[n.name,n])))}),e?uo.byName[e]:void 0}function Sn(e){const t=m.inventory.icons;if(!t)return"F0335";const n=m.inventory.entities.find(i=>i.id===e),s=e.split(".")[0];return t.builtin?.[e]?t.builtin[e]:n?.icon?n.icon:s==="weather"?t.weather[n?.state||""]||t.weather.partlycloudy:s==="sun"?t.sun[n?.state||""]||t.sun.below_horizon:t.defaults[s]||t.fallback}const vs=e=>zs(e.options?.icon)?.cp||Sn(e.entity),fo=new Set;async function Ki(e){const t=[...new Set(e)].filter(n=>!fo.has(n)&&!n.startsWith("screen."));if(t.length){t.forEach(n=>fo.add(n));try{for(let n=0;n`entity=${encodeURIComponent(i)}`).join("&");Object.assign(m.capabilities,(await Nt(`capabilities?${s}`)).capabilities||{})}}catch{t.forEach(n=>fo.delete(n))}}}const po=new Set;async function wm(e){if(!po.has(e)){po.add(e);try{m.entityActions[e]=(await Nt(`entity-actions?entity=${encodeURIComponent(e)}`)).actions}catch{po.delete(e)}}}let ho=!1;async function qi(){const e=[...new Set((m.layout?.tiles||[]).map(t=>t.entity).filter(t=>!t.startsWith("screen.")))];if(!(!e.length||ho)){ho=!0;try{for(let t=0;t`entity=${encodeURIComponent(s)}`).join("&");Object.assign(m.liveStates,(await Nt(`states?${n}`)).states||{})}}catch{}finally{ho=!1}}}function km(e){const t=m.liveStates[e];if(t)return t;const n=m.inventory.entities.find(s=>s.id===e);return n?.state?{state:n.state,word:null,a:{}}:null}let Ho=0;function pt(){m.dirty=!0,m.saved=0,Ho++}function ku(e){if(e===m.selected&&m.layout&&m.dirty){Ze(),m.tab="layout",m.menuOpen=!1,He("");return}if(e!==m.selected&&m.dirty&&!confirm(c("editor.screen_view.confirm.switch")))return;e!==m.selected&&(Us(),m.settingEdits={}),m.selected=e,m.selectedTile=null,m.inspector=null,m.tab="layout",m.menuOpen=!1;const t=m.inventory.screens.find(s=>s.id===e);if(!t){m.layout=null;return}const n=JSON.parse(JSON.stringify(t.layout));Vi(n),n.pages=Ot(Xe(n),n.pages),m.layout=n,m.insertAt=-1,m.dirty=!1,m.saved=0,zi(0),Ki(n.tiles.map(s=>s.entity)),qi(),He("")}const $m=()=>m.layout?Xe(m.layout):[];function xm(e){const t=m.layout,n=t.tiles.map(i=>`${i.entity}@${i.slot}`).join();for(const{tile:i,slot:l}of e)i.slot=l,t.tiles.includes(i)||t.tiles.push(i);Vi(t),t.pages=Ot(Xe(t),t.pages);const s=t.tiles.map(i=>`${i.entity}@${i.slot}`).join()!==n;return s&&pt(),s}function Ys(e,t){if(!m.layout)return!1;Ki([e.entity]);const n=pu(m.layout.tiles,e,t),s=n?xm(n):!1;return s&&!m.liveStates[e.entity]&&qi(),s}function $u(e){const t=m.layout;if(!t||!Bi(e)&&t.tiles.some(i=>i.entity===e)||t.tiles.length>=Bn.value)return;const n=hu(e),s=m.insertAt>=0?m.insertAt:wi(es(Xe(t)),ut(n));m.insertAt=-1,s>=0&&Ys(n,s)&&Vo(n)}function xu(e){const t=m.layout;if(!t)return;const n=t.tiles.indexOf(e);n<0||(t.tiles.splice(n,1),Cl(e)&&Ze(),pt(),t.pages=Ot(Xe(t),t.pages),Ce(c("editor.layout.removed",{name:e.name||qs(e.entity)}),{label:c("editor.common.undo"),run:()=>Ys(e,e.slot)}))}function Qa(){const e=m.layout;e&&(e.pages=Math.min(cn,Ot(Xe(e),e.pages)+1),pt())}function Sm(e){const t=m.layout;if(t){for(const n of t.tiles)Et(n.slot)>e&&(n.slot-=qe);t.pages=Math.max(1,Ot(Xe(t),t.pages)-1),pt()}}function Cm(e,t){const n=m.layout;if(!n||!Number.isInteger(t)||t<0||t>=cn||t===Et(e.slot))return!1;const s=wi(es(Xe(n).filter(l=>l.tile!==e)),ut(e),t*qe),i=Ys(e,s>=0&&Et(s)===t?s:t*qe);return i||Ce(c("editor.layout.no_room",{page:t+1})),i}function Tm(){const e=m.layout;if(!e)return 1;const t=m.drag.preview||Xe(e),n=Ot(t,e.pages);return m.drag.active&&nh.key!=="none"&&i.controls.includes(h.key))?.key||"none"),pt();const f=m.layout;if(f){if(ru(e)&&r!=="full"){const h=Et(e.slot),p=f.tiles.filter(y=>y!==e&&Et(y.slot)===h),b=es(Xe(f).filter(y=>y.tile!==e&&!p.includes(y.tile))),v=[];for(const y of p){const I=wi(b,ut(y),(h+1)*qe);if(I<0){v.length=0;break}v.push([y,I]);for(const T of Wn(I,ut(y)))b.add(T)}if(v.length===p.length){for(const[y,I]of v)y.slot=I;e.slot=h*qe}else{const y=wi(es(Xe(f).filter(I=>I.tile!==e)),"full");y>=0?e.slot=y:(e.options.size=r,Ce(c("editor.layout.no_free_page")))}}else if(Do(e)&&!l){const h=es(Xe(f).filter(v=>v.tile!==e)),p=uu(e.slot),b=Fs(h,p,"wide")?p:fu(h,"wide",p);b>=0&&(e.slot=b)}Vi(f),f.pages=Ot(Xe(f),f.pages)}}function Em(e,t){const n=`screen.page_${t}`,s=m.layout;return!s||n===e.entity||!us(n)?!1:!Bi(n)&&s.tiles.some(i=>i.entity===n)?(Ce(c("editor.layout.page_taken",{page:t})),!1):(e.entity=n,s.pages=Math.max(Ot(Xe(s),s.pages),t),pt(),!0)}function Vo(e){Cl(e)||(m.iconPickerOpen=!1,m.actionPickerOpen=!1,m.actionSearch=""),m.selectedTile=e,m.inspector={kind:"tile"},Ki([e.entity])}function Xt(e){m.inspector?.kind==="bar"&&m.inspector.index===e||(m.iconPickerOpen=!1),m.selectedTile=null,m.inspector={kind:"bar",index:e}}function er(){m.selectedTile=null,m.inspector={kind:"bar-add"}}function Ze(){m.inspector=null,m.selectedTile=null}async function Wo(){if(m.busy||!m.layout||!m.selected)return;m.busy=!0;const e=Ho,t=m.selected;try{const{settings:n,...s}=m.layout;if(await ft(`screens/${encodeURIComponent(m.selected)}`,"PUT",s),m.selected!==t){const i=m.inventory.screens.find(l=>l.id===t)?.name;Ce(i?c("editor.screen_view.saved.other",{name:i}):c("editor.screen_view.saved.other_unnamed"))}else Ho===e?(m.dirty=!1,m.saved=Date.now(),Ce(c("editor.screen_view.saved.current"))):Ce(c("editor.screen_view.saved.newer_edit"));await Cn()}catch(n){Ce(n.message)}finally{m.busy=!1}}const Kn=e=>!!(e&&e.alert_action&&un(os(e),m.inventory.alerts?.min_firmware||"0.2.31"));async function Su(e){try{await ft(`screens/${encodeURIComponent(e.id)}/identify`,"POST"),Ce(c("editor.screen_view.identified",{name:e.name}))}catch(t){Ce(t.message)}}async function Am(e,t){return await ft("alerts/test","POST",{screen:e,data:t})}const Pm=["title","tiles","header","pages"];function Cu(e,t){const n=m.layout;if(!n)return;const s=(Array.isArray(e.tiles)?e.tiles:[]).filter(u=>!!(u&&typeof u=="object"&&typeof u.entity=="string"&&u.entity.includes("."))).map(u=>({entity:u.entity,name:typeof u.name=="string"?u.name:"",slot:Number.isInteger(u.slot)?u.slot:-1,...u.options&&typeof u.options=="object"?{options:{...u.options}}:{}})),i=new Set,l=s.filter(u=>Bi(u.entity)||!i.has(u.entity)&&i.add(u.entity)),r=l.slice(0,Bn.value);n.tiles=r,e.header&&Array.isArray(e.header.items)?n.header={items:e.header.items.map(u=>({...u}))}:delete n.header,n.pages=Number.isInteger(e.pages)?e.pages:1,Vi(n),n.pages=Ot(Xe(n),n.pages),Ze(),pt(),Ki(r.map(u=>u.entity)),qi(),zi(0),Ce(t(r.lengthn.id===e);!t||!m.layout||Cu(JSON.parse(JSON.stringify(t.layout)),n=>n?c("editor.layout.copied_part",{name:t.name,...n}):c("editor.layout.copied",{name:t.name}))}function Im(){const e=m.layout;if(!e)return"";const t={esp_screens_layout:1};for(const n of Pm)e[n]!==void 0&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Tu(){const e=Im();if(!e)return;const t=`${(_t.value?.name||"screen").toLowerCase().replace(/[^a-z0-9]+/g,"-")}.layout.json`,n=URL.createObjectURL(new Blob([e],{type:"application/json"})),s=document.createElement("a");s.href=n,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(n),5e3),It(e,void 0,"layout_json")}function Lm(e){let t;try{t=JSON.parse(e)}catch{Ce(c("editor.layout.not_json"));return}if(!t||typeof t!="object"||!Array.isArray(t.tiles)){Ce(c("editor.layout.no_tiles_in_file"));return}Cu(t,n=>n?c("editor.layout.imported_part",n):c("editor.layout.imported"))}function Mm(e){const t=m.inventory.updates?.target,n=m.inventory.changelog;if(!Array.isArray(n)||!t)return[];const s=os(e),i=[];for(const l of n)if(!(un(l.firmware,t)&&l.firmware!==t)&&!(s&&un(s,l.firmware)))for(const r of l.lines)i.includes(r)||i.push(r);return i}let mo=!1;async function Rm(){if(!mo){mo=!0;try{const e=await Nt("firmware");m.firmwareJob={job:e.job,logs:e.logs||[]}}catch{}finally{mo=!1}}}const Bo=()=>m.inventory.screens.some(e=>e.update?.state==="running")||m.updating.length>0;function Jn(e){const t=e.update||{};if(!(t.state==="running"||m.updating.includes(e.id)))return null;const n=m.firmwareJob?.job?.stage;return t.phase==="verify"?{percent:78,text:_s("verify")}:t.phase==="settle"?{percent:92,text:_s("settle")}:t.phase==="install"||!t.phase?n==="upload"?{percent:66,text:c("editor.update.writing")}:n?{percent:40,text:c("editor.update.building")}:{percent:12,text:_s("install")}:{percent:12,text:_s(t.phase)}}const dn=()=>m.layout?.header?.items??(m.layout?.settings?.show_clock??!0?[{type:"clock"}]:[]),vn=()=>m.inventory.header?.max_items||6;function Ds(e){m.layout&&(m.layout.header={items:e},pt(),zi())}let tr=0;function zi(e=150){clearTimeout(tr),tr=window.setTimeout(async()=>{const t=dn();if(t.some(n=>n.type==="entity"))try{const n=await ft("header-preview","POST",{header:{items:t}});t.forEach((s,i)=>m.topbarPreviews[at(s)]=n.items[i])}catch{}},e)}function gs(e){return e.type==="entity"?qs(e.entity):m.inventory.header?.builtin.find(t=>t.type===e.type)?.label||e.type}function mn(e){const t=new Date(m.now);if(e.type==="clock")return{text:Wi(as.value,t),shown:!0};if(e.type==="date")return{text:$l(t,ls.value),shown:!0};if(e.type==="analog")return{analog:!0,shown:!0};const n=m.topbarPreviews[at(e)];return n?{icon:n.i||null,text:n.k==="ago"?um(n.e,Math.floor(m.now/1e3),ls.value):n.t,color:n.c?`#${n.c}`:null,shown:n.shown}:{icon:e.icon==="none"?null:zs(e.icon)?.cp||Sn(e.entity),text:"…",shown:!0,loading:!0}}function bo(e,t){const n=[...dn()];return t<0||t>=n.length||e===t?!1:(n.splice(t,0,...n.splice(e,1)),Ds(n),!0)}function nr(e){const t=[...dn()],[n]=t.splice(e,1);n&&(m.inspector?.kind==="bar"&&Ze(),Ds(t),Ce(c("editor.topbar.removed",{name:gs(n)}),{label:c("editor.common.undo"),run:()=>{const s=[...dn()];s.splice(Math.min(e,s.length),0,n),Ds(s)}}))}function vo(e){const t=dn();if(t.length>=vn())return Ce(c("editor.topbar.full",vn()));if(t.some(n=>at(n)===at(e)))return Ce(c("editor.topbar.already"));m.topbarAdded={key:at(e),time:Date.now()},Ds([...t,e]),Xt(t.length)}const Nm=[{group:"brightness",icon:"F0599",rows:[{key:"brightness",kind:"number",min:5,max:100,step:5,unit:"%"},{key:"dark_mode",kind:"toggle"},{key:"standby_enabled",kind:"toggle"},{key:"standby_seconds",kind:"duration",min:60,max:86400,needs:"standby_enabled"},{key:"standby_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"standby_enabled",cap:"brightness"}]},{group:"night",icon:"F0594",rows:[{key:"night_enabled",kind:"toggle"},{key:"night_start",kind:"moment",needs:"night_enabled"},{key:"night_end",kind:"moment",needs:"night_enabled"},{key:"night_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"night_enabled",cap:"brightness"}]},{group:"screen",icon:"F0379",rows:[{key:"auto_home",kind:"toggle"},{key:"auto_home_seconds",kind:"duration",min:30,max:3600,needs:"auto_home"},{key:"home_on_standby",kind:"toggle"},{key:"swipe_pages",kind:"toggle"},{key:"page_buttons",kind:"toggle"},{key:"rotation",kind:"choice",options:[0,90,180,270]}]}],go=e=>c(`editor.screen_settings.rows.${e.key}`),Fm=(e,t)=>`${t}°`;function Eu(e=$m(),t=m.layout?Ot(e,m.layout.pages):1){const n=xi();if(t<2||n.page_buttons!==!1||n.swipe_pages!==!1)return"";const{tiles:s,targets:i,unreachable:l,noWayBack:r}=em(e,t);if(!l.length&&!r.length)return"";const u=v=>c("editor.screen_settings.reach.pages",{list:Zh(v)},v.length),f=l.filter(v=>!i.includes(v)),h=l.filter(v=>i.includes(v)),p=f.length===1?"one":"more",b=[c("editor.screen_settings.reach.intro")];return s&&f.length?b.push(c(`editor.screen_settings.reach.tiles_missing_${p}`,{targets:u(i),missing:u(f)},s)):s?b.push(c("editor.screen_settings.reach.tiles",{targets:u(i)},s)):f.length?b.push(c(`editor.screen_settings.reach.none_missing_${p}`,{missing:u(f)})):b.push(c("editor.screen_settings.reach.none")),h.length&&b.push(c("editor.screen_settings.reach.cut_off",{pages:u(h)})),r.length&&b.push(c("editor.screen_settings.reach.no_way_back",{pages:u(r)})),b.join(" ")}const Au=4e3;let gn={},ts=null,$i=0,li=null;const Tl=()=>_t.value?.settings;function xi(){const e=Tl(),t={...e?.values||{}};for(const[n,s]of Object.entries(m.settingEdits))t[n]=s.value;return t}const Dm=e=>e<300?30:e<900?60:e<3600?300:e<7200?900:1800;function sr(e,t,n,s,i){if(e.kind==="moment"){let u=s&&t%60?Math.floor(t/60)*60+(n>0?60:0):t+n*(s?60:15);return u%=1440,u<0?u+1440:u}const l=e.kind==="duration"?Dm(n<0?t-1:t):e.step,r=e.cap?Math.min(e.max,i[e.cap]):e.max;return Math.min(r,Math.max(e.min,t+n*l))}function Um(e){if(e<60)return c("editor.screen_settings.duration.seconds",{n:e});if(e<3600)return c("editor.screen_settings.duration.minutes",{n:Math.floor(e/60)});const t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n?c("editor.screen_settings.duration.hours_minutes",{h:t,m:String(n).padStart(2,"0")}):c("editor.screen_settings.duration.hours",{n:t})}function jm(e,t){const n=Math.floor(e/60),s=String(e%60).padStart(2,"0");return t?`${String(n).padStart(2,"0")}:${s}`:c(n<12?"editor.screen_settings.time.am":"editor.screen_settings.time.pm",{time:`${n%12||12}:${s}`})}function Hm(e,t){const n=t[e.key];return n==null?"—":e.kind==="number"?`${n}${e.unit||""}`:e.kind==="duration"?Um(n):e.kind==="moment"?jm(n,as.value):""}function ni(e,t,n){if(ts&&ts!==m.selected&&Object.keys(gn).length){Us(),Ce(c("editor.screen_settings.other_screen_busy"));return}ts=m.selected;const s=xi();if(m.settingEdits[e]={value:t,at:Date.now()},gn[e]=t,e==="brightness")for(const i of["standby_brightness","night_brightness"])s[i]>t&&(m.settingEdits[i]={value:t,at:Date.now()});m.settingPending=!0,clearTimeout($i),$i=window.setTimeout(()=>Us(),n)}async function Us(e=!1){if(clearTimeout($i),li||!Object.keys(gn).length||!ts)return;const t=ts,n=gn;gn={};const s=xl(`screens/${encodeURIComponent(t)}/settings`,{method:"PUT",body:JSON.stringify({settings:n}),keepalive:e});li=s;try{const i=await(await s).json(),l=m.inventory.screens.find(r=>r.id===t);l&&(l.settings=i)}catch(i){if(Ce(i.message),t===m.selected)for(const l of Object.keys(n))delete m.settingEdits[l];if(t===m.selected&&n.brightness!==void 0)for(const l of["standby_brightness","night_brightness"])delete m.settingEdits[l]}finally{li=null,Object.keys(gn).length?$i=window.setTimeout(()=>Us(),150):ts=null,m.settingPending=!!Object.keys(gn).length,t===m.selected&&Si(),setTimeout(()=>{t===m.selected&&Si()},Au+100)}}function Si(){const e=Tl();for(const[t,n]of Object.entries(m.settingEdits))gn[t]!==void 0||li||(e&&e.values[t]===n.value||Date.now()-n.at>Au)&&delete m.settingEdits[t]}const _s=e=>["install","verify","settle"].includes(e||"")?c(`editor.update.phases.${e}`):c("editor.update.starting");async function Ko(e,t){m.updating.push(e.id);try{await ft(`screens/${encodeURIComponent(e.id)}/update`,"POST",t?{host:t}:{}),await Cn()}catch(n){m.updating=m.updating.filter(s=>s!==e.id),Ce(n.message)}}async function ir(){try{await ft("updates/run","POST"),await Cn()}catch(e){Ce(e.message)}}async function Vm(e){try{await ft("updates","PUT",{auto:e}),m.inventory.updates&&(m.inventory.updates.auto=e),Ce(c(e?"editor.settings.updates.auto_on":"editor.settings.updates.auto_off"))}catch(t){Ce(t.message)}}async function Wm(){try{m.inventory.claude_skill=await ft("claude-skill","POST"),Ce(c(m.inventory.claude_skill?.restart?"editor.settings.claude.installed_restart":"editor.settings.claude.installed"))}catch(e){Ce(e.message)}}const ls=k(()=>iu(m.inventory.language?.effective));Ct(ls,e=>ou(e),{immediate:!0});const Un=(e,t={})=>c(e,t,{locale:ls.value}),Bm=e=>m.inventory.language?.languages?.find(t=>t.code===e)?.name||zh(e||"")?.name||e||"",Pu=e=>!!(e.update?.available||e.update?.language),or=()=>c("editor.update.new_language",{name:Bm(m.inventory.language?.effective)}),as=k(()=>m.inventory.language?.clock_effective!=="12"),Km=k(()=>{const e=m.inventory.language;return{...is[e?.numbers_effective||"point"]||is.point,from:(e?.group_min||1)>=2?5:4}}),qm=k(()=>{const e=m.inventory.language;return{...is[e?.numbers_auto||"point"]||is.point,from:(e?.group_min_auto||1)>=2?5:4}});function lr(e){return!e||e==="°"?e||"":e==="%"?m.inventory.language?.percent_space?" %":"%":` ${e}`}const zm=e=>m.inventory.builtin?.find(t=>t.id===e)?.screen_name;async function ar(e){try{const t=await ft("language","PUT",e);return t?.language&&(m.inventory.language=t.language),Ce(c(e.setting===void 0?"editor.settings.language.saved":"editor.settings.language.saved_language")),await Cn(),!0}catch(t){return Ce(t.message),!1}}async function Cn(e=!0){try{const t=await Nt(e?"inventory":"inventory?light=1");m.inventory=e?t:{...m.inventory,...t},t.csrf&&vm(t.csrf),m.connected=!!m.inventory.connected,m.reachable=!0;for(const n of m.inventory.screens)n.update?.state==="running"&&(m.updating=m.updating.filter(s=>s!==n.id));m.selected&&Si()}catch{m.reachable=!1}}function Ym(e){m.inventory={...m.inventory,...e},m.connected=!!m.inventory.connected;for(const t of m.inventory.screens)t.update?.state==="running"&&(m.updating=m.updating.filter(n=>n!==t.id));m.selected&&Si()}let rr=0,qo=Date.now(),Ci=!1,hs=null;function Gm(){hs||typeof EventSource>"u"||(hs=new EventSource(`api/events?language=${encodeURIComponent(wl())}`),hs.onopen=()=>{Ci=!0,js()},hs.onmessage=e=>{document.hidden||Ym(JSON.parse(e.data))},hs.onerror=()=>{Ci=!1,js()})}function js(){clearTimeout(rr);const e=Ci?6e4:m.inventory.updates?.busy?3e3:1e4;rr=window.setTimeout(async()=>{if(!document.hidden){const t=Date.now()-qo>=3e5;t&&(qo=Date.now()),(t||!Ci)&&await Cn(t)}js()},e)}let cr=!1;function Jm(){cr||(cr=!0,Cn(),Gm(),js(),bm(()=>m.fontsVersion++),setInterval(()=>{!m.layout||document.hidden||m.drag.active||(m.now=Date.now(),zi(0))},3e4),setInterval(()=>{!document.hidden&&m.layout&&m.tab==="layout"&&$t.value===""&&qi()},8e3),setInterval(()=>{!document.hidden&&Bo()?Rm():m.firmwareJob&&!Bo()&&(m.firmwareJob=null)},3e3),document.addEventListener("visibilitychange",async()=>{document.hidden||(qo=Date.now(),m.now=Date.now(),await Cn(),js())}),window.addEventListener("pagehide",()=>Us(!0)),window.addEventListener("beforeunload",e=>{m.dirty&&(e.preventDefault(),e.returnValue="")}))}const Xm={class:"side"},Zm={class:"label"},Qm={id:"screens"},eb=["aria-current","onClick"],tb={class:"txt"},nb=["aria-label","title"],sb={key:1,class:"pill"},ib={key:2,class:"spin small"},ob=["onSubmit"],lb=["placeholder","aria-label"],ab={type:"submit",class:"btn mini primary"},rb=["aria-label"],cb=["disabled","title","onClick"],ub={key:2,class:"whatsnew"},db=["aria-valuenow"],fb={class:"progress-text"},pb=["title"],hb=["title"],mb={id:"pending"},bb={class:"pending-actions"},vb=["onClick"],gb=["aria-current"],_b={class:"txt"},yb={class:"more"},wb={class:"label"},kb=["aria-current"],$b={class:"mdi"},xb={class:"txt"},Sb=["aria-current"],Cb={class:"mdi"},Tb={class:"txt"},Eb=["aria-current"],Ab={class:"mdi"},Pb={class:"txt"},Ob={class:"txt"},Ib=Le({__name:"Sidebar",setup(e){const t=ke(null),n=ke(""),s=p=>{const b=p.update||{};return!!b.language&&(!b.target||un(os(p),b.target))};function i(p){const b=p.update||{};return b.state==="running"||m.updating.includes(p.id)?{kind:"running",text:_s(b.phase)}:b.state==="queued"?{kind:"queued",text:c("editor.sidebar.update.queued")}:Pu(p)&&p.online?{kind:"available",text:s(p)?or():c("editor.sidebar.update.available",{version:b.target})}:b.result&&Date.now()/1e3-b.result.time<86400?{kind:b.result.state==="failed"?"failed":"done",text:b.result.message}:null}const l=p=>[...p.update?.language&&!s(p)?[or()]:[],...Mm(p)];function r(p){const b=p.update||{};b.host&&b.profile?Ko(p):b.profile&&(t.value=p.id,n.value="")}function u(p){const b=n.value.trim();b&&(t.value=null,Ko(p,b))}const f=()=>{const p=m.firmwareJob?.logs||[];return p.length?p[p.length-1]:""},h=p=>p.installed?c("editor.sidebar.pending.installed"):p.downloaded?c("editor.sidebar.pending.downloaded"):c("editor.sidebar.pending.not_flashed",{file:p.file});return(p,b)=>(g(),_("aside",Xm,[b[13]||(b[13]=o("div",{class:"brand"},[o("span",{class:"mark"},"▦"),o("span",null,"ESP Screens")],-1)),o("span",{id:"connection",class:me(["conn",{online:a(m).connected}]),role:"status"},d(a(m).reachable?a(m).connected?a(c)("editor.sidebar.connection.connected"):a(c)("editor.sidebar.connection.reconnecting"):a(c)("editor.sidebar.connection.unreachable")),3),o("button",{type:"button",class:"search-btn",id:"open-palette",onClick:b[0]||(b[0]=v=>a(m).palette=!0)},[Me("⌕ "+d(a(c)("editor.sidebar.search")),1),b[10]||(b[10]=o("kbd",null,"⌘K",-1))]),o("div",Zm,d(a(c)("editor.sidebar.screens")),1),o("div",Qm,[(g(!0),_(z,null,he(a(m).inventory.screens,v=>(g(),_("div",{key:v.id,class:me(["screen-item",{selected:v.id===a(m).selected&&a($t)===""}])},[o("button",{type:"button",class:"nav-item","aria-current":v.id===a(m).selected&&a($t)===""?"true":"false",onClick:y=>a(ku)(v.id)},[o("span",{class:me(["dot",{off:!v.online}])},null,2),o("span",tb,[o("span",null,d(v.name),1),o("small",null,d(v.online?a(c)("editor.common.online"):a(c)("editor.common.offline"))+d(v.area?" · "+v.area:"")+" · "+d(v.firmware||a(c)("editor.common.unknown")),1)]),v.id===a(m).selected&&a(m).dirty?(g(),_("span",{key:0,class:"unsaved",role:"img","aria-label":a(c)("editor.common.unsaved"),title:a(c)("editor.common.unsaved")},null,8,nb)):W("",!0),i(v)?.kind==="available"?(g(),_("span",sb,d(a(c)("editor.sidebar.update.pill")),1)):i(v)?.kind==="running"?(g(),_("span",ib)):W("",!0)],8,eb),i(v)?(g(),_("div",{key:0,class:me(["screen-update",i(v).kind])},[i(v).kind==="available"?(g(),_(z,{key:0},[t.value===v.id?(g(),_(z,{key:0},[o("small",null,d(a(c)("editor.sidebar.host.hint")),1),o("form",{class:"screen-host",onSubmit:Pt(y=>u(v),["prevent"])},[Ee(o("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>n.value=y),placeholder:a(c)("editor.sidebar.host.placeholder"),required:"",pattern:"[A-Za-z0-9][A-Za-z0-9.\\-]*","aria-label":a(c)("editor.sidebar.host.label"),autofocus:""},null,8,lb),[[Je,n.value]]),o("button",ab,d(a(c)("editor.sidebar.host.start")),1),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.cancel"),onClick:b[2]||(b[2]=y=>t.value=null)},"✕",8,rb)],40,ob)],64)):(g(),_(z,{key:1},[o("small",null,d(i(v).text),1),o("button",{type:"button",class:"btn mini primary",disabled:!v.update?.profile,title:v.update?.profile?"":a(c)("editor.sidebar.update.no_profile"),onClick:y=>r(v)},d(a(c)("editor.sidebar.update.button")),9,cb)],64)),l(v).length?(g(),_("details",ub,[o("summary",null,d(a(c)("editor.sidebar.update.whats_new")),1),o("ul",null,[(g(!0),_(z,null,he(l(v).slice(0,8),y=>(g(),_("li",{key:y},d(y),1))),128))])])):W("",!0)],64)):i(v).kind==="running"&&a(Jn)(v)?(g(),_(z,{key:1},[o("div",{class:"progress",role:"progressbar","aria-valuenow":a(Jn)(v).percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:a(Jn)(v).percent+"%"})},null,4)],8,db),o("div",fb,[o("span",null,d(a(Jn)(v).percent)+" %",1),o("span",{title:f()},d(a(Jn)(v).text),9,pb)]),f()?(g(),_("small",{key:0,title:f(),style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},d(f()),9,hb)):W("",!0),o("button",{type:"button",class:"btn link mini",style:{"justify-self":"start"},onClick:b[3]||(b[3]=y=>a(He)("#firmware"))},d(a(c)("editor.sidebar.update.full_log")),1)],64)):(g(),_("small",{key:2,class:me({failed:i(v).kind==="failed"})},d(i(v).text),3))],2)):W("",!0)],2))),128))]),o("div",mb,[(g(!0),_(z,null,he(a(m).inventory.pending||[],v=>(g(),_("div",{key:v.file,class:"pending"},[o("strong",null,d(v.friendly),1),o("small",null,d(h(v)),1),o("div",bb,[o("button",{type:"button",class:"btn mini quiet",onClick:b[4]||(b[4]=(...y)=>a(ki)&&a(ki)(...y))},d(a(c)("editor.common.open_integrations")),1),v.api_key?(g(),_("button",{key:0,type:"button",class:"btn mini quiet",onClick:y=>a(It)(v.api_key)},d(a(c)("editor.sidebar.copy_api_key")),9,vb)):W("",!0)])]))),128))]),o("button",{id:"new-screen",type:"button",class:"nav-item ghost","aria-current":a($t)==="#new-screen"?"true":"false",onClick:b[5]||(b[5]=v=>a(He)("#new-screen"))},[b[11]||(b[11]=o("span",{class:"plus"},"+",-1)),o("span",_b,d(a(c)("editor.nav.new_screen")),1)],8,gb),b[14]||(b[14]=o("div",{class:"spacer"},null,-1)),o("div",yb,[o("div",wb,d(a(c)("editor.sidebar.more")),1),o("button",{id:"open-firmware",type:"button",class:"nav-item","aria-current":a($t)==="#firmware"?"true":"false",onClick:b[6]||(b[6]=v=>a(He)("#firmware"))},[o("span",$b,d(a(Ae)("F0241")),1),o("span",xb,d(a(c)("editor.nav.firmware")),1)],8,kb),o("button",{id:"open-alerts",type:"button",class:"nav-item","aria-current":a($t)==="#alerts"?"true":"false",onClick:b[7]||(b[7]=v=>a(He)("#alerts"))},[o("span",Cb,d(a(Ae)("F0594")),1),o("span",Tb,d(a(c)("editor.nav.alerts")),1)],8,Sb),o("button",{id:"open-settings",type:"button",class:"nav-item","aria-current":a($t)==="#settings"?"true":"false",onClick:b[8]||(b[8]=v=>a(He)("#settings"))},[o("span",Ab,d(a(Ae)("F0493")),1),o("span",Pb,d(a(c)("editor.nav.settings")),1)],8,Eb),o("button",{id:"refresh",type:"button",class:"nav-item ghost",onClick:b[9]||(b[9]=v=>a(Cn)())},[b[12]||(b[12]=o("span",{class:"plus"},"↻",-1)),o("span",Ob,d(a(c)("editor.sidebar.refresh")),1)])])]))}}),Lb={key:0,id:"toast",class:"toast",role:"status"},Mb=Le({__name:"Toast",setup(e){return(t,n)=>a(m).toast?(g(),_("div",Lb,[o("span",null,d(a(m).toast.message),1),a(m).toast.action?(g(),_("button",{key:0,type:"button",onClick:n[0]||(n[0]=s=>{a(m).toast.action.run(),a(_m)()})},d(a(m).toast.action.label),1)):W("",!0)])):W("",!0)}}),Rb=["aria-label"],Nb=["placeholder","aria-label"],Fb={class:"palette-list"},Db={class:"palette-group"},Ub=["onMouseenter","onClick"],jb={key:0,class:"mdi"},Hb={key:1,class:"glyph"},Vb={class:"tx"},Wb={key:0},Bb={key:2,class:"hint-key"},Kb={key:0,class:"palette-empty"},qb=Le({__name:"CommandPalette",setup(e){const t=ke(""),n=ke(0),s=ke(null),i=k(()=>{const h=t.value.trim().toLocaleLowerCase(),p=[],b=c("editor.palette.groups.screens"),v=c("editor.palette.groups.actions");for(const T of m.inventory.screens)p.push({group:b,label:T.name,detail:`${T.online?c("editor.common.online"):c("editor.common.offline")} · ${T.firmware||c("editor.common.unknown")}`,glyphText:"▦",run:()=>ku(T.id)});const y=_t.value,I=[{group:v,label:c("editor.nav.new_screen"),detail:c("editor.nav.new_screen_detail"),glyphText:"+",run:()=>He("#new-screen")},{group:v,label:c("editor.nav.firmware"),icon:"F0241",run:()=>He("#firmware")},{group:v,label:c("editor.nav.alerts"),detail:c("editor.palette.alerts_detail"),icon:"F0594",run:()=>He("#alerts")},{group:v,label:c("editor.nav.settings"),detail:c("editor.palette.settings_detail"),icon:"F0493",run:()=>He("#settings")}];if(y&&m.layout&&I.unshift({group:v,label:c("editor.common.save_send"),detail:m.dirty?c("editor.common.unsaved"):c("editor.palette.nothing_to_save"),key:"⌘S",run:()=>Wo()},{group:v,label:c("editor.screen_view.tabs.layout"),detail:y.name,run:()=>{He(""),m.tab="layout"}},{group:v,label:c("editor.screen_view.tabs.settings"),detail:y.name,run:()=>{He(""),m.tab="settings"}},{group:v,label:c("editor.palette.identify"),detail:Kn(y)?c("editor.palette.identify_detail"):c("editor.palette.identify_needs"),run:()=>{Kn(y)&&Su(y)}},{group:v,label:c("editor.palette.export"),detail:c("editor.palette.export_detail"),run:Tu}),p.push(...I),y&&m.layout&&h){const T=new Set(m.layout.tiles.map(A=>A.entity)),$=m.layout.tiles.length>=Bn.value;for(const A of m.inventory.entities)if(!(A.tile===!1||T.has(A.id))&&`${A.name} ${A.id} ${A.area||""} ${A.device||""}`.toLocaleLowerCase().includes(h)&&(p.push({group:c("editor.palette.groups.add"),label:A.name,detail:[jt(A.id)[0],A.area].filter(Boolean).join(" · "),icon:m.inventory.icons?Sn(A.id):void 0,run:()=>{$||$u(A.id)}}),p.length>60))break}return h?p.filter(T=>`${T.label} ${T.detail||""}`.toLocaleLowerCase().includes(h)):p}),l=k(()=>{const h=[];return i.value.forEach((p,b)=>{(h.find(y=>y.group===p.group)||(h.push({group:p.group,items:[]}),h[h.length-1])).items.push({item:p,index:b})}),h});function r(){m.palette=!1}function u(h){r(),h.run()}function f(h){if(h.key==="Escape")h.preventDefault(),r();else if(h.key==="ArrowDown")h.preventDefault(),n.value=Math.min(i.value.length-1,n.value+1);else if(h.key==="ArrowUp")h.preventDefault(),n.value=Math.max(0,n.value-1);else if(h.key==="Enter"){h.preventDefault();const p=i.value[n.value];p&&u(p)}}return Ct(t,()=>n.value=0),Ct(()=>m.palette,async h=>{h&&(t.value="",n.value=0,await Ni(),s.value?.focus())}),(h,p)=>a(m).palette?(g(),_("div",{key:0,class:"palette-backdrop",onClick:r},[o("div",{class:"palette",role:"dialog","aria-label":a(c)("editor.sidebar.search"),onClick:p[1]||(p[1]=Pt(()=>{},["stop"])),onKeydown:f},[Ee(o("input",{ref_key:"input",ref:s,"onUpdate:modelValue":p[0]||(p[0]=b=>t.value=b),id:"palette-input",placeholder:a(c)("editor.palette.placeholder"),"aria-label":a(c)("editor.sidebar.search"),autocomplete:"off"},null,8,Nb),[[Je,t.value]]),o("div",Fb,[(g(!0),_(z,null,he(l.value,b=>(g(),_(z,{key:b.group},[o("div",Db,d(b.group),1),(g(!0),_(z,null,he(b.items,({item:v,index:y})=>(g(),_("button",{key:y,type:"button",class:me(["palette-item",{active:y===n.value}]),onMouseenter:I=>n.value=y,onClick:I=>u(v)},[v.icon?(g(),_("span",jb,d(a(Ae)(v.icon)),1)):(g(),_("span",Hb,d(v.glyphText||"›"),1)),o("span",Vb,[o("span",null,d(v.label),1),v.detail?(g(),_("small",Wb,d(v.detail),1)):W("",!0)]),v.key?(g(),_("kbd",Bb,d(v.key),1)):W("",!0)],42,Ub))),128))],64))),128)),i.value.length?W("",!0):(g(),_("p",Kb,d(a(c)("editor.palette.empty")),1))])],40,Rb)])):W("",!0)}}),ve={source:null,element:null,ghost:null,timer:0,start:null,offset:{x:0,y:0},pointerId:null,suppressUntil:0,last:null,scroller:0,target:null},Ou={mounted(e,t){e.__dragSource=t.value,e.addEventListener("pointerdown",s=>{const i=e.__dragSource;if(!(s.button!==0||e.disabled||s.target.closest(".remove"))){s.pointerType!=="touch"&&s.preventDefault(),Object.assign(ve,{source:i,element:e,start:{x:s.clientX,y:s.clientY},pointerId:s.pointerId});try{e.setPointerCapture(s.pointerId)}catch{}clearTimeout(ve.timer),s.pointerType==="touch"&&(ve.timer=window.setTimeout(()=>ur(s),260))}}),e.addEventListener("pointermove",s=>{if(m.drag.active||!ve.start||ve.element!==e)return;const i=Math.hypot(s.clientX-ve.start.x,s.clientY-ve.start.y);if(s.pointerType==="touch"){i>10&&(clearTimeout(ve.timer),ve.start=null);return}i>=6&&ur(s)});const n=()=>{ve.element===e&&!m.drag.active&&(clearTimeout(ve.timer),ve.start=null)};e.addEventListener("pointerup",n),e.addEventListener("pointercancel",n)},updated(e,t){e.__dragSource=t.value}};function ur(e){if(m.drag.active||!ve.start||!ve.source||!ve.element)return;m.drag.active=!0,m.drag.moving=ve.source.kind==="tile"?ve.source.tile:hu(ve.source.id),m.drag.preview=null,ve.target=null,getSelection()?.removeAllRanges();const t=ve.element.getBoundingClientRect(),n=ve.element.cloneNode(!0);n.classList.add("drag-ghost"),n.style.width=`${t.width}px`,n.style.height=`${t.height}px`,ve.offset={x:e.clientX-t.left,y:e.clientY-t.top},document.body.append(n),ve.ghost=n,document.addEventListener("pointermove",zo),document.addEventListener("pointerup",Ti),document.addEventListener("pointercancel",Ti);try{ve.element.releasePointerCapture(ve.pointerId)}catch{}try{document.documentElement.setPointerCapture(ve.pointerId)}catch{}document.addEventListener("touchmove",Iu,{passive:!1}),ve.scroller=window.setInterval(()=>{if(!ve.last)return;const{x:s,y:i}=zb(document),l=s?pr(ve.last.x,fr(s,"x")):0,r=i?pr(ve.last.y,fr(i,"y")):0;l&&s.scrollBy(l,0),r&&i.scrollBy(0,r),(l||r)&&Yo(Lu(ve.last.x,ve.last.y))},16),Yo(-1),zo(e)}function dr(e,t){if(!e)return!1;const n=t==="x"?e.scrollWidth>e.clientWidth:e.scrollHeight>e.clientHeight,s=getComputedStyle(e)[t==="x"?"overflowX":"overflowY"];return n&&(s==="auto"||s==="scroll")}function zb(e){const t=e.querySelector(".pages"),n=e.querySelector(".canvas");return{x:dr(t,"x")?t:n,y:dr(n,"y")?n:e.scrollingElement}}function fr(e,t){const n=t==="x"?window.innerWidth:window.innerHeight;if(e===e.ownerDocument.scrollingElement)return[0,n];const s=e.getBoundingClientRect();return t==="x"?[Math.max(s.left,0),Math.min(s.right,n)]:[Math.max(s.top,0),Math.min(s.bottom,n)]}function pr(e,[t,n]){return en-60?12:0}function Iu(e){m.drag.active&&e.preventDefault()}function Ti(e){e.pointerId===ve.pointerId&&Yb(e.type==="pointerup")}function zo(e){!ve.ghost||e.pointerId!==ve.pointerId||(ve.last={x:e.clientX,y:e.clientY},ve.ghost.style.transform=`translate(${e.clientX-ve.offset.x}px, ${e.clientY-ve.offset.y}px)`,Yo(Lu(e.clientX,e.clientY)))}function Lu(e,t){let n=null,s=1/0;for(const l of document.querySelectorAll(".pages [data-slot]")){const r=l.getBoundingClientRect(),u=Math.hypot(Math.max(r.left-e,0,e-r.right),Math.max(r.top-t,0,t-r.bottom));u16)return-1;let i=Number(n.cell.dataset.slot);return n.cell.classList.contains("wide")&&e>(n.r.left+n.r.right)/2&&(i+=1),i}function Yo(e){ve.target===e||!m.layout||!m.drag.moving||(ve.target=e,m.drag.preview=e>=0?pu(m.layout.tiles,m.drag.moving,e):null)}function Yb(e){const t=m.drag.preview,n=m.drag.moving;document.removeEventListener("pointermove",zo),document.removeEventListener("pointerup",Ti),document.removeEventListener("pointercancel",Ti),document.removeEventListener("touchmove",Iu);try{document.documentElement.releasePointerCapture(ve.pointerId)}catch{}if(ve.ghost?.remove(),Object.assign(ve,{ghost:null,suppressUntil:Date.now()+400,last:null,start:null,target:null,element:null,source:null}),clearInterval(ve.scroller),m.drag.active=!1,m.drag.preview=null,m.drag.moving=null,e&&t&&n&&m.layout){const s=m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join(),i=!m.layout.tiles.includes(n);for(const{tile:l,slot:r}of t)l.slot=r,m.layout.tiles.includes(l)||m.layout.tiles.push(l);m.layout.tiles.sort((l,r)=>l.slot-r.slot),m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join()!==s&&pt(),i&&Ys(n,n.slot)}}window.addEventListener("click",e=>{Date.now()t.tile.name||b.value==="screen"&&zm(t.tile.entity)||qs(t.tile.entity)),s=k(()=>ru(t.tile)),i=k(()=>Do(t.tile)&&!s.value),l=k(()=>us(t.tile.entity)),r=k(()=>m.inventory.backgrounds?.[t.tile.options?.background||""]?.color),u=k(()=>t.tile.options?.background==="none"),f=k(()=>t.tile.options?.display||"standard"),h=k(()=>f.value!=="standard"?bu(f.value):""),p=k(()=>mu(t.tile,m.inventory)),b=k(()=>t.tile.entity.split(".")[0]),v=k(()=>m.inventory.icons?.controls||{}),y=K=>v.value[K]?Ae(v.value[K]):"",I=k(()=>Cl(t.tile)&&m.inspector?.kind==="tile"),T=k(()=>!t.placeholder&&m.layout?.tiles.includes(t.tile)),$=k(()=>c("editor.tile_card.label",{name:n.value,slot:t.slot%qe+1,page:Et(t.slot)+1})),A=k(()=>new Date(m.now)),S=k(()=>(A.value.getHours()%12+A.value.getMinutes()/60)*30),D=k(()=>A.value.getMinutes()*6),C=k(()=>b.value==="screen"?null:km(t.tile.entity)),B=k(()=>!C.value||["unavailable","unknown",""].includes(C.value.state)),O=k(()=>!!C.value&&!B.value&&C.value.state!=="off"&&C.value.state!=="closed"&&C.value.state!=="standby"&&C.value.state!=="idle"&&C.value.state!=="docked"),E=k(()=>["light","switch","input_boolean","fan"].includes(b.value)&&C.value?.state==="on"),L=k(()=>C.value?.a?.unit_of_measurement),M=K=>K.charAt(0).toUpperCase()+K.slice(1).replace(/_/g," "),U=K=>lu(K,Km.value),R=["number","input_number","counter"],Y=K=>L.value||R.includes(b.value)?`${U(K)}${lr(L.value)}`:K,te={climate:"climate",cover:"cover",media_player:"media",person:"person",sun:"sun",vacuum:"vacuum",weather:"weather"};function ye(K){const ne=yt=>qh(`screen.ha.${yt}`)?Un(`screen.ha.${yt}`):"",ie=K.state==="windy-variant"?"windy":K.state.replace(/-/g,"_");return b.value==="binary_sensor"&&["on","off"].includes(ie)?ne(`binary.${K.a?.device_class}_${ie}`)||ne(ie):te[b.value]?ne(`${te[b.value]}.${ie}`)||(["on","off"].includes(ie)?ne(ie):""):["on","off"].includes(ie)?ne(ie):""}const re=["scene","script","button","input_button"],be=k(()=>{const K=C.value;if(!K||re.includes(b.value))return h.value;if(B.value)return Un(K.state==="unknown"?"editor.mockup.unknown":"screen.ha.unavailable");const ne=K.a||{},ie=K.word||ye(K)||M(K.state);return b.value==="climate"?`${ne.current_temperature!==void 0?`${U(ne.current_temperature)}° · `:""}${ie}`:b.value==="weather"?`${ie}${ne.temperature!==void 0?` · ${U(ne.temperature)}°`:""}`:b.value==="cover"&&ne.current_position!==void 0&&ne.current_position>0&&ne.current_position<100?`${ie} · ${ne.current_position}${lr("%")}`:b.value==="media_player"&&ne.media_title?`${ie} · ${ne.media_title}`:b.value==="sensor"||R.includes(b.value)?Y(K.state):ie}),ge=k(()=>C.value&&!B.value?L.value||R.includes(b.value)?U(C.value.state):C.value.state:"—"),we=k(()=>{const K=C.value;if(!K||B.value)return 0;const ne=K.a||{};if(b.value==="light")return K.state==="on"?ne.brightness!==void 0?Math.round(ne.brightness/255*100):100:0;if(b.value==="fan")return K.state==="on"?ne.percentage??100:0;if(b.value==="cover")return 100-(ne.current_position??(K.state==="open"?100:0));if(b.value==="media_player")return Math.round((ne.volume_level??0)*100);if(b.value==="number"||b.value==="input_number"){const ie=Number(K.state),yt=Number(ne.min??0),In=Number(ne.max??100);return Number.isFinite(ie)&&In>yt?Math.round((ie-yt)/(In-yt)*100):0}return 0}),Ye=k(()=>Un(`screen.ha.button.${{scene:"activate",script:"run"}[b.value]||"press"}`)),le=k(()=>`${Un("screen.tile.page",{n:l.value})} ›`),ee=k(()=>({background:`linear-gradient(to right, ${we.value?"#ffbf38":"#c9ccd1"} ${we.value}%, ${we.value?"#fff1d3":"#e6e8ec"} ${we.value}%)`})),ce=k(()=>({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})),tt=k(()=>{const K=C.value?.a?.temperature;return K!=null?`${U(K)}°`:"—"});async function $e(K){if(K.key==="Enter"||K.key===" "){K.preventDefault(),Vo(t.tile);return}const ne={ArrowLeft:-1,ArrowRight:1,ArrowUp:-2,ArrowDown:2}[K.key];ne&&(K.preventDefault(),Ys(t.tile,t.tile.slot+(s.value?Math.sign(ne)*qe:i.value?Math.sign(ne)*2:ne))&&(await Ni(),document.querySelector(`.pages [data-slot="${t.tile.slot}"]`)?.focus()))}return(K,ne)=>Ee((g(),_("div",{class:me(["tile",{wide:i.value,full:s.value,bare:u.value,placeholder:e.placeholder||!T.value,chosen:I.value}]),"data-slot":e.slot,style:Ue(r.value&&!u.value?{backgroundColor:r.value}:void 0),tabindex:T.value?0:-1,role:T.value?"button":void 0,"aria-label":T.value?$.value:void 0,onClick:ne[1]||(ne[1]=ie=>T.value&&a(Vo)(e.tile)),onKeydown:ne[2]||(ne[2]=ie=>T.value&&$e(ie))},[f.value==="analog"?(g(),_(z,{key:0},[(g(),_("svg",Jb,[ne[3]||(ne[3]=o("circle",{cx:"30",cy:"30",r:"27",fill:"#fff",stroke:"#c9ccd1"},null,-1)),(g(),_(z,null,he([0,90,180,270],ie=>o("line",{key:ie,x1:"30",y1:"5",x2:"30",y2:"9",stroke:"#1b1b1b","stroke-width":"1.5",transform:`rotate(${ie} 30 30)`},null,8,Xb)),64)),o("line",{x1:"30",y1:"30",x2:"30",y2:"16",stroke:"#1b1b1b","stroke-width":"2.4","stroke-linecap":"round",transform:`rotate(${S.value} 30 30)`},null,8,Zb),o("line",{x1:"30",y1:"30",x2:"30",y2:"11",stroke:"#1b1b1b","stroke-width":"1.6","stroke-linecap":"round",transform:`rotate(${D.value} 30 30)`},null,8,Qb),ne[4]||(ne[4]=o("circle",{cx:"30",cy:"30",r:"1.8",fill:"#1b1b1b"},null,-1))])),i.value?(g(),_("span",ev,[o("span",tv,[o("span",nv,d(n.value),1),o("span",sv,d(h.value),1)])])):W("",!0)],64)):f.value==="digital"&&b.value==="screen"?(g(),_(z,{key:1},[o("span",iv,d(a(Ae)(a(vs)(e.tile))),1),o("span",ov,[o("span",lv,d(a(Wi)(a(as),A.value)),1),o("span",av,d(n.value),1)])],64)):s.value?(g(),_(z,{key:2},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",rv,[o("span",cv,d(n.value),1),l.value?(g(),_("span",uv,d(le.value),1)):f.value==="watch"?(g(),_("span",dv,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",fv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",pv,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",hv,[o("span",mv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",bv,d(y("plus")||"+"),1)])):p.value==="volume"?(g(),_(z,{key:2},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",vv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(z,{key:3},[o("span",gv,d(y("skip-previous")),1),o("span",_v,d(y(O.value?"pause":"play")||y("play")),1),o("span",yv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(z,{key:4},[o("span",wv,d(y("arrow-expand-horizontal")),1),o("span",kv,d(y("stop")),1),o("span",$v,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="run"?(g(),_("span",xv,d(Ye.value),1)):(g(),_("span",{key:6,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):i.value?(g(),_(z,{key:3},[o("span",Sv,[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",Cv,[o("span",Tv,d(n.value),1),l.value?(g(),_("span",Ev,d(le.value),1)):f.value==="watch"?(g(),_("span",Av,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",Pv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",Ov,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",Iv,[o("span",Lv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",Mv,d(y("plus")||"+"),1)])):p.value==="stepper"&&b.value.endsWith("select")?(g(),_(z,{key:2},[o("span",Rv,d(y("chevron-left")),1),o("span",Nv,d(y("chevron-right")),1)],64)):p.value==="stepper"?(g(),_("span",Fv,[o("span",Dv,d(y("minus")||"−"),1),o("b",null,d(ge.value),1),o("span",Uv,d(y("plus")||"+"),1)])):p.value==="mode"?(g(),_(z,{key:4},[o("span",jv,d(y("power")),1),o("span",Hv,d(y("fire")),1),o("span",Vv,d(y("snowflake")),1)],64)):p.value==="volume"?(g(),_(z,{key:5},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",Wv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(z,{key:6},[o("span",Bv,d(y("skip-previous")),1),o("span",Kv,d(y(O.value?"pause":"play")||y("play")),1),o("span",qv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(z,{key:7},[o("span",zv,d(y("arrow-expand-horizontal")),1),o("span",Yv,d(y("stop")),1),o("span",Gv,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="buttons"&&b.value==="vacuum"?(g(),_(z,{key:8},[o("span",Jv,d(y("play")),1),o("span",Xv,d(y("stop")),1),o("span",Zv,d(y("home-map-marker")),1)],64)):p.value==="buttons"&&b.value==="timer"?(g(),_(z,{key:9},[o("span",Qv,d(y("play")),1),o("span",eg,d(y("close")),1)],64)):p.value==="run"?(g(),_("span",tg,d(Ye.value),1)):(g(),_("span",{key:11,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):(g(),_(z,{key:4},[o("span",{class:me(["head",{top:f.value==="watch"}])},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",ng,[o("span",sg,d(n.value),1),l.value?(g(),_("span",ig,d(le.value),1)):f.value!=="watch"&&be.value?(g(),_("span",{key:1,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])],2),f.value==="watch"?(g(),_("span",og,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",lg,d(L.value),1)):W("",!0)])):W("",!0),e.tile.options?.inline==="slider"?(g(),_("span",{key:1,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0)],64)),T.value?(g(),_("button",{key:5,type:"button",class:"remove",title:a(c)("editor.tile_card.remove"),"aria-label":a(c)("editor.tile_card.remove_named",{name:n.value}),onClick:ne[0]||(ne[0]=Pt(ie=>a(xu)(e.tile),["stop"]))},"✕",8,ag)):W("",!0)],46,Gb)),[[a(Ou),{kind:"tile",tile:e.tile}]])}}),cg=["viewBox","aria-label"],ug=["y"],dg=["cx","cy","r","stroke","stroke-width"],fg=["x1","y1","x2","y2","stroke","stroke-width"],pg=["x","y","fill"],hg=["x","y"],Mu=Le({__name:"TopbarSvg",props:{items:{},nameText:{},single:{type:Boolean}},setup(e,{expose:t}){const n=e,s=k(()=>{m.fontsVersion,m.now,m.topbarPreviews;const $=n.items||dn();return gu($,wu.value,n.nameText??(m.layout?.title||Un("editor.mockup.home")),mn)}),i=k(()=>s.value.metrics),l=k(()=>n.single?Math.round(i.value.text*1.4):i.value.top+Math.round(i.value.name*.45)),r=k(()=>n.single?Math.round(i.value.text*1.05):i.value.top),u=k(()=>{if(!n.single)return s.value.placed;const $=s.value.parts[0];return $&&($.x=0),$?[$]:[]}),f=k(()=>n.single?`-2 0 ${Math.max(1,u.value[0]?.width||1)+4} ${l.value}`:`0 0 ${i.value.width} ${l.value}`),h=k(()=>r.value+(s.value.zero.top+s.value.zero.bottom)/2),p=k(()=>mm(s.value.nameText,s.value.fonts.name,Math.min(s.value.natural,s.value.nameRoom))),b=k(()=>new Date(m.now));function v($){const A=b.value;return[[(A.getHours()%12+A.getMinutes()/60)*30,$*.24],[A.getMinutes()*6,$*.34]].map(([S,D])=>{const C=S*Math.PI/180;return{x2:D*Math.sin(C),y2:-D*Math.cos(C)}})}const y=$=>$.x-$.icon.ink.left,I=$=>($.icon?$.x+($.icon.ink.right-$.icon.ink.left)+s.value.gaps.icon:$.x)-$.text.ink.left,T=k(()=>`${(Math.max(1,u.value[0]?.width||1)+4)*(26/i.value.icon)}px`);return t({lay:s}),($,A)=>(g(),_("svg",{viewBox:f.value,role:"img","aria-label":e.single?a(c)("editor.topbar.live.looks"):a(c)("editor.topbar.aria",{name:s.value.nameText}),style:Ue(e.single?{width:T.value}:void 0)},[e.single?W("",!0):(g(),_("text",{key:0,x:"0",y:i.value.top,fill:"#1b1b1b",style:Ue({font:s.value.fonts.name})},d(p.value),13,ug)),o("g",null,[(g(!0),_(z,null,he(u.value,S=>(g(),_(z,{key:S.index},[S.dial?(g(),_(z,{key:0},[o("circle",{cx:S.x+S.dial/2,cy:h.value,r:S.dial/2-Math.max(1,Math.round(S.dial/10))/2,fill:"none",stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial/10))},null,8,dg),(g(!0),_(z,null,he(v(S.dial),(D,C)=>(g(),_("line",{key:C,x1:S.x+S.dial/2,y1:h.value,x2:S.x+S.dial/2+D.x2,y2:h.value+D.y2,stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial*.075)),"stroke-linecap":"round"},null,8,fg))),128))],64)):(g(),_(z,{key:1},[S.icon?(g(),_("text",{key:0,x:y(S),y:h.value-(S.icon.ink.top+S.icon.ink.bottom)/2,fill:S.view.color||"#46525e",style:Ue({font:s.value.fonts.icon})},d(S.icon.glyph),13,pg)):W("",!0),S.text?(g(),_("text",{key:1,x:I(S),y:r.value,fill:"#46525e",style:Ue({font:s.value.fonts.text})},d(S.text.value),13,hg)):W("",!0)],64))],64))),128))])],12,cg))}}),mg={class:"page"},bg={class:"page-label"},vg=["title"],gg={key:1},_g=["title"],yg={class:"tiles"},wg=["data-slot","title","aria-label","onClick"],kg=Le({__name:"DevicePage",props:{page:{},entries:{},pages:{},moving:{}},setup(e){const t=e,n=k(()=>new Map(t.entries.map(h=>[h.slot,h]))),s=k(()=>new Set(t.entries.flatMap(h=>Wn(h.slot,ut(h.tile)).slice(1)))),i=k(()=>Array.from({length:qe},(h,p)=>t.page*qe+p).filter(h=>!s.value.has(h))),l=k(()=>t.pages>1&&!t.entries.some(h=>Et(h.slot)===t.page)),r=k(()=>m.inspector?.kind==="bar"||m.inspector?.kind==="bar-add"),u=k(()=>t.entries.filter(h=>Et(h.slot)===t.page).reduce((h,p)=>h+kl(ut(p.tile)),0));function f(h){const p=m.insertAt===h;m.insertAt=p?-1:h,m.insertAt>=0&&document.querySelector("#search")?.focus()}return(h,p)=>(g(),_("div",mg,[o("div",bg,[o("span",null,d(a(c)("editor.page.label",{page:e.page+1})),1),l.value?(g(),_("button",{key:0,type:"button",class:"btn mini",title:a(c)("editor.page.remove_title"),onClick:p[0]||(p[0]=b=>a(Sm)(e.page))},d(a(c)("editor.page.remove")),9,vg)):(g(),_("span",gg,d(u.value)+" / "+d(a(qe)),1))]),o("div",{class:me(["device",{cyd:!a(Sl)}])},[o("div",{class:me(["bar-wrap",{selected:r.value}]),title:a(c)("editor.page.edit_bar"),role:"button",tabindex:"0",onClick:p[1]||(p[1]=b=>a(Xt)(0)),onKeydown:p[2]||(p[2]=xc(Pt(b=>a(Xt)(0),["prevent"]),["enter"]))},[se(Mu)],42,_g),o("div",yg,[(g(!0),_(z,null,he(i.value,b=>(g(),_(z,{key:b},[n.value.get(b)?(g(),it(rg,{key:0,tile:n.value.get(b).tile,slot:b,placeholder:n.value.get(b).tile===e.moving},null,8,["tile","slot","placeholder"])):(g(),_("button",{key:1,type:"button",class:me(["cell",{"insert-here":a(m).insertAt===b}]),"data-slot":b,title:a(c)("editor.page.cell.title"),"aria-label":a(c)("editor.page.cell.aria",{slot:b%a(qe)+1,page:e.page+1}),onClick:v=>f(b)},[p[3]||(p[3]=o("span",null,"+",-1)),o("small",null,d(a(m).insertAt===b?a(c)("editor.page.cell.next"):a(c)("editor.page.cell.empty")),1)],10,wg))],64))),128))])],2)]))}}),$g={class:"library",id:"library"},xg={class:"lib-head"},Sg={class:"lib-title"},Cg=["placeholder","aria-label"],Tg={class:"filters",id:"filters"},Eg=["aria-pressed","onClick"],Ag={class:"lib-row"},Pg=["aria-label"],Og={value:""},Ig=["value"],Lg=["aria-pressed","title"],Mg={class:"lib-list",id:"results","aria-live":"polite"},Rg=["title","disabled","onClick"],Ng={class:"tx"},Fg={key:0,class:"hint"},Dg={key:1,class:"hint"},Ug={class:"lib-foot"},jg=Le({__name:"Library",setup(e){const t=["","light","climate","switch","binary_sensor","button","script","fan","cover","scene","vacuum","sensor","media_player","weather","number","select","person","timer","screen"],n={switch:"input_boolean",number:"input_number",select:"input_select",weather:"sun",button:"input_button"},s=k(()=>new Set(m.layout?.tiles.map(p=>p.entity)||[])),i=p=>s.value.has(p)&&!Bi(p),l=k(()=>[...new Set(m.inventory.entities.map(p=>p.area).filter(p=>!!p))].sort((p,b)=>p.localeCompare(b))),r=k(()=>{const p=m.search.toLocaleLowerCase(),b=m.filter,v=m.room;return[...m.inventory.builtin||[],...m.inventory.entities].filter(y=>y.tile!==!1&&(Sl.value||!["camera","image"].includes(y.id.split(".")[0]))&&(!b||y.id.startsWith(b+".")||n[b]===y.id.split(".")[0])&&(!v||y.area===v)&&(!m.hidePlaced||!i(y.id))&&`${y.name} ${y.id} ${y.device||""} ${y.area||""}`.toLocaleLowerCase().includes(p))}),u=k(()=>(m.layout?.tiles.length||0)>=Bn.value),f=k(()=>m.inventory.entities.length),h=p=>{const b=p.id.split(".")[0];return p.state==="unavailable"||p.state==="unknown"?"gone":["light","switch","input_boolean","fan"].includes(b)&&p.state==="on"?"on":""};return(p,b)=>(g(),_("aside",$g,[o("div",xg,[o("div",Sg,[Me(d(a(c)("editor.library.title"))+" ",1),o("small",null,d(a(c)("editor.library.entities",f.value)),1)]),Ee(o("input",{id:"search","onUpdate:modelValue":b[0]||(b[0]=v=>a(m).search=v),type:"search",placeholder:a(c)("editor.library.search"),autocomplete:"off","aria-label":a(c)("editor.library.search_label")},null,8,Cg),[[Je,a(m).search]]),o("div",Tg,[(g(),_(z,null,he(t,v=>o("button",{key:v,type:"button","aria-pressed":a(m).filter===v?"true":"false",onClick:y=>a(m).filter=v},[v?(g(),_("span",{key:0,class:"domain-icon",style:Ue({color:a(jt)(v+".")[2],background:a(jt)(v+".")[3]}),"aria-hidden":"true"},d(a(jt)(v+".")[1]),5)):W("",!0),Me(d(a(c)(`editor.library.filters.${v||"all"}`)),1)],8,Eg)),64))]),o("div",Ag,[Ee(o("select",{id:"room","onUpdate:modelValue":b[1]||(b[1]=v=>a(m).room=v),"aria-label":a(c)("editor.library.room")},[o("option",Og,d(a(c)("editor.library.all_rooms")),1),(g(!0),_(z,null,he(l.value,v=>(g(),_("option",{key:v,value:v},d(v),9,Ig))),128))],8,Pg),[[Vn,a(m).room]]),o("button",{type:"button",class:"chip-toggle",id:"hide-placed","aria-pressed":a(m).hidePlaced?"true":"false",title:a(c)("editor.library.hide_placed_title"),onClick:b[2]||(b[2]=v=>a(m).hidePlaced=!a(m).hidePlaced)},d(a(c)("editor.library.hide_placed")),9,Lg)])]),o("div",Mg,[(g(!0),_(z,null,he(r.value.slice(0,80),v=>Ee((g(),_("button",{key:v.id,type:"button",class:"ent",title:v.id,disabled:i(v.id)||u.value,onClick:y=>a($u)(v.id)},[o("span",{class:me(["av mdi",h(v)]),style:Ue({color:a(jt)(v.id)[2],background:a(jt)(v.id)[3]})},d(a(m).inventory.icons?a(Ae)(a(Sn)(v.id)):a(jt)(v.id)[1]),7),o("span",Ng,[o("b",null,d(v.name),1),o("small",null,d([a(jt)(v.id)[0],v.area,v.device].filter(Boolean).join(" · ")),1)]),o("span",{class:me(["add",{done:i(v.id)}])},d(i(v.id)?"✓":"+"),3)],8,Rg)),[[a(Ou),{kind:"entity",id:v.id}]])),128)),r.value.length?r.value.length>80?(g(),_("p",Dg,d(a(c)("editor.common.results",r.value.length)),1)):W("",!0):(g(),_("p",Fg,d(a(m).hidePlaced&&!a(m).search&&!a(m).filter&&!a(m).room?a(c)("editor.library.all_placed"):a(c)("editor.library.none_found")),1))]),o("div",Ug,d(u.value?a(c)(a(Bn)<48?"editor.library.full_update":"editor.library.full",a(Bn)):a(c)("editor.library.hint")),1)]))}}),Hg={class:"canvas-head"},Vg={id:"count"},Wg={key:0,id:"no-tiles"},Bg={key:1},Kg={key:2,id:"positions-hint",class:"warn"},qg={key:3,id:"page-reach-hint",class:"warn"},zg=["aria-label"],Yg={class:"page-label"},Gg=["tabindex"],Jg=Le({__name:"LayoutView",setup(e){const t=k(()=>m.layout),n=k(()=>m.drag.preview||Xe(t.value)),s=k(()=>Ot(n.value,t.value.pages)),i=k(()=>Tm()),l=k(()=>s.valueQh(t.value.tiles)&&!wn(0,2,26)?c("editor.layout.positions_hint",{firmware:_t.value?.firmware||c("editor.common.unknown")}):""),u=k(()=>Eu(n.value,s.value));function f(h){h.target.closest(".device, .page-label, .canvas-head")||m.inspector&&Ze()}return(h,p)=>(g(),_(z,null,[o("div",{class:"canvas",id:"canvas",onClick:f},[o("div",Hg,[o("b",Vg,d(a(c)("editor.layout.count",{tiles:t.value.tiles.length,limit:a(Bn)},s.value)),1),t.value.tiles.length?(g(),_("span",Bg,d(a(c)("editor.layout.how_to")),1)):(g(),_("span",Wg,d(a(c)("editor.layout.no_tiles")),1)),r.value?(g(),_("span",Kg,d(r.value),1)):W("",!0),u.value?(g(),_("span",qg,d(u.value),1)):W("",!0)]),o("div",{class:"pages",id:"layout-preview","aria-label":a(c)("editor.layout.aria")},[(g(!0),_(z,null,he(i.value,b=>(g(),it(kg,{key:b,page:b-1,entries:n.value,pages:s.value,moving:a(m).drag.moving},null,8,["page","entries","pages","moving"]))),128)),o("div",{class:me(["page ghost",{disabled:!l.value}])},[o("div",Yg,[o("span",null,d(a(c)("editor.page.label",{page:i.value+1})),1)]),o("div",{class:me(["device",{cyd:a(_t)?.board!=="guition"}]),id:"add-page",role:"button",tabindex:l.value?0:-1,onClick:p[0]||(p[0]=b=>l.value&&a(Qa)()),onKeydown:p[1]||(p[1]=xc(Pt(b=>l.value&&a(Qa)(),["prevent"]),["enter"]))},d(l.value?a(c)("editor.layout.add_page"):a(c)("editor.layout.max_pages",a(cn))),43,Gg)],2)],8,zg)]),se(jg)],64))}}),Xg={class:"status",id:"settings-status",role:"status"},Zg={key:0,class:"set-grid",id:"settings-groups"},Qg={class:"mdi"},e_=["data-setting","title","onClick"],t_=["id"],n_={class:"s-control"},s_=["id","aria-checked","aria-labelledby","disabled","onClick"],i_=["aria-labelledby"],o_=["aria-pressed","disabled","onClick"],l_={key:2,class:"step"},a_=["aria-label","disabled","onPointerdown","onClick"],r_={class:"mdi"},c_=["id","aria-labelledby"],u_=["aria-label","disabled","onPointerdown","onClick"],d_={class:"mdi"},f_={key:0,class:"hint warn",id:"settings-page-reach"},p_=Le({__name:"SettingsTab",setup(e){const t=k(()=>Tl()),n=k(()=>xi()),s=k(()=>t.value?.owner==="screen"&&!_t.value?.online),i=k(()=>Nm.map(T=>({...T,rows:T.rows.filter($=>t.value?.keys.includes($.key))})).filter(T=>T.rows.length)),l=k(()=>Eu()),r=T=>s.value||!!t.value?.unavailable.includes(T.key),u=T=>T.needs?!!n.value[T.needs]:!0,f=k(()=>s.value?c("editor.screen_settings.status.offline"):m.settingPending?c("editor.common.saving"):t.value?.owner==="screen"?c("editor.screen_settings.status.screen"):c("editor.screen_settings.status.app")),h=(T,$)=>{const A=n.value[T.key];return r(T)||!u(T)||A===null||A===void 0?!0:T.kind!=="moment"&&sr(T,A,$,!1,n.value)===A},p=new WeakMap;function b(T,$,A){const S=xi(),D=sr(T,S[T.key],$,A,S);D!==S[T.key]&&ni(T.key,D,600)}function v(T,$,A){const S=T.currentTarget;if(S.disabled||T.button!==0)return;const D={timer:0,held:!1};p.set(S,D);let C=0;D.timer=window.setTimeout(function B(){D.held=!0,C+=1,b($,A,C>5),D.timer=window.setTimeout(B,180)},450)}function y(T){const $=p.get(T.currentTarget);$&&clearTimeout($.timer)}function I(T,$,A){const S=p.get(T.currentTarget);if(S?.held){S.held=!1;return}b($,A,!1)}return(T,$)=>(g(),_("div",{class:me(["settings",{offline:s.value}]),id:"general-settings"},[o("span",Xg,d(f.value),1),t.value?(g(),_("div",Zg,[(g(!0),_(z,null,he(i.value,A=>(g(),_("section",{key:A.group,class:"set-card"},[o("h4",null,[o("span",Qg,d(a(Ae)(A.icon)),1),Me(d(a(c)(`editor.screen_settings.groups.${A.group}`)),1)]),(g(!0),_(z,null,he(A.rows,S=>(g(),_("div",{key:S.key,class:me(["srow",[`setting-${S.kind}`,{inactive:!u(S)||r(S)}]]),"data-setting":S.key,title:r(S)&&!s.value?a(c)("editor.screen_settings.unavailable"):"",onClick:D=>S.kind==="toggle"&&D.target.closest(".srow")===D.currentTarget&&!D.target.closest("button")&&!r(S)&&a(ni)(S.key,!n.value[S.key],150)},[o("span",{class:"s-label",id:`setting-label-${S.key}`},d(a(go)(S)),9,t_),o("div",n_,[S.kind==="toggle"?(g(),_("button",{key:0,type:"button",class:me(["switch",{unknown:n.value[S.key]===null||n.value[S.key]===void 0}]),role:"switch",id:`setting-${S.key}`,"aria-checked":n.value[S.key]?"true":"false","aria-labelledby":`setting-label-${S.key}`,disabled:r(S),onClick:Pt(D=>a(ni)(S.key,!n.value[S.key],150),["stop"])},null,10,s_)):S.kind==="choice"?(g(),_("div",{key:1,class:"seg",role:"group","aria-labelledby":`setting-label-${S.key}`},[(g(!0),_(z,null,he(S.options,D=>(g(),_("button",{key:String(D),type:"button","aria-pressed":n.value[S.key]===D?"true":"false",disabled:r(S),onClick:C=>a(ni)(S.key,D,150)},d(a(Fm)(S,D)),9,o_))),128))],8,i_)):(g(),_("div",l_,[o("button",{type:"button","aria-label":a(c)("editor.screen_settings.lower",{name:a(go)(S)}),disabled:h(S,-1),onPointerdown:D=>v(D,S,-1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,-1)},[o("span",r_,d(a(Ae)("F0374")),1)],40,a_),o("output",{id:`setting-${S.key}`,"aria-labelledby":`setting-label-${S.key}`},d(a(Hm)(S,n.value)),9,c_),o("button",{type:"button","aria-label":a(c)("editor.screen_settings.higher",{name:a(go)(S)}),disabled:h(S,1),onPointerdown:D=>v(D,S,1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,1)},[o("span",d_,d(a(Ae)("F0415")),1)],40,u_)]))])],10,e_))),128)),l.value&&A.rows.some(S=>S.key==="page_buttons")?(g(),_("p",f_,d(l.value),1)):W("",!0)]))),128))])):W("",!0)],2))}}),h_={class:"seg wrap",role:"group"},m_=["disabled","aria-pressed","onClick"],kt=Le({__name:"Segmented",props:{choices:{},value:{},disabled:{type:Boolean}},emits:["pick"],setup(e,{emit:t}){const n=t;return(s,i)=>(g(),_("div",h_,[(g(!0),_(z,null,he(e.choices,([l,r])=>(g(),_("button",{key:String(l),type:"button",disabled:e.disabled,"aria-pressed":String(l)===String(e.value)?"true":"false",onClick:u=>n("pick",l)},d(r),9,m_))),128))]))}}),b_={class:"f"},v_={class:"f-label"},g_={key:0},__={key:1,class:"warn"},y_=["aria-expanded"],w_={class:"tx"},k_={key:0,class:"mono"},$_={class:"link"},x_={key:0,class:"picker"},S_=["placeholder","aria-label"],C_={class:"action-list"},T_=["aria-pressed","onClick"],E_={key:0,class:"hint"},A_={key:1,class:"warn"},P_={class:"f-label"},O_=["aria-label","value","onChange"],I_={value:""},L_=["value"],M_={key:3,class:"action-number"},R_=["aria-label","value","onInput"],N_=["onClick"],F_={key:4,class:"action-number"},D_=["aria-label","min","max","step","value","placeholder","onInput"],U_={key:0},j_=["aria-label","value","placeholder","onInput"],H_={key:6},V_={key:0,class:"warn"},W_={key:3},B_=Le({__name:"ActionPicker",props:{tile:{}},setup(e){const t=e,n=k(()=>m.entityActions[t.tile.entity]),s=k(()=>t.tile.options?.action),i=k(()=>n.value?.find(C=>C.action===s.value?.action)),l=k(()=>m.actionPickerOpen||!s.value),r=k(()=>{const C=m.actionSearch.trim().toLocaleLowerCase();return(n.value||[]).filter(B=>`${B.name} ${B.action} ${B.description}`.toLocaleLowerCase().includes(C))});n.value===void 0&&wm(t.tile.entity);function u(C){const B=C.action===s.value?.action;t.tile.options={...t.tile.options,action:B?s.value:{action:C.action}},m.actionPickerOpen=!1,pt()}function f(C,B){const O={...t.tile.options?.action?.data||{}};B===void 0?delete O[C]:O[C]=B,t.tile.options={...t.tile.options,action:{action:s.value.action,...Object.keys(O).length?{data:O}:{}}},pt()}const h=k(()=>{if(!i.value)return[];const C=t.tile.options?.action?.data||{};return i.value.fields.filter(B=>B.required&&C[B.key]===void 0).map(B=>B.name)}),p=C=>Object.keys(C.selector||{})[0]||"text",b=C=>(C.selector||{})[p(C)]||{},v=C=>C.example===void 0?"":typeof C.example=="string"?C.example:JSON.stringify(C.example);function y(C){const B=b(C),O=p(C);return Array.isArray(C.options)?C.options.map(E=>[E,E]):O==="select"&&Array.isArray(B.options)&&!B.multiple?B.options.map(E=>E&&typeof E=="object"?[String(E.value),String(E.label??E.value)]:[String(E),String(E)]):null}const I=C=>"#"+C.map(B=>Math.max(0,Math.min(255,Number(B)||0)).toString(16).padStart(2,"0")).join(""),T=C=>Array.isArray(C)&&C.length===3?I(C):"#ffffff",$=C=>C===void 0?"":typeof C=="string"?C:JSON.stringify(C);function A(C,B){const O=B.trim();if(!O)return f(C.key,void 0);if(p(C)==="text")return f(C.key,B);try{f(C.key,JSON.parse(O))}catch{f(C.key,B)}}function S(C,B){f(C.key,B===""||!Number.isFinite(Number(B))?void 0:Number(B))}const D=C=>b(C).unit_of_measurement||p(C)==="color_temp"&&b(C).unit||"";return(C,B)=>(g(),_("div",b_,[o("span",v_,d(a(c)("editor.action.label")),1),n.value===void 0?(g(),_("small",g_,d(a(c)("editor.action.asking")),1)):n.value===null?(g(),_("small",__,d(a(c)("editor.action.not_answering")),1)):(g(),_(z,{key:2},[o("button",{type:"button",class:"row","aria-expanded":l.value?"true":"false",onClick:B[0]||(B[0]=O=>a(m).actionPickerOpen=!l.value)},[o("span",w_,[o("b",null,d(i.value?i.value.name:s.value?s.value.action:a(c)("editor.action.choose")),1),s.value?(g(),_("small",k_,d(s.value.action),1)):W("",!0)]),o("span",$_,d(l.value?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,y_),l.value?(g(),_("div",x_,[Ee(o("input",{"onUpdate:modelValue":B[1]||(B[1]=O=>a(m).actionSearch=O),type:"search",placeholder:a(c)("editor.action.search"),"aria-label":a(c)("editor.action.search_label")},null,8,S_),[[Je,a(m).actionSearch]]),o("div",C_,[(g(!0),_(z,null,he(r.value,O=>(g(),_("button",{key:O.action,type:"button",class:"action-choice","aria-pressed":O.action===s.value?.action?"true":"false",onClick:E=>u(O)},[o("strong",null,d(O.name),1),o("small",null,d(O.description?`${O.action} · ${O.description}`:O.action),1)],8,T_))),128)),r.value.length?W("",!0):(g(),_("p",E_,d(a(c)("editor.action.none_found")),1))])])):W("",!0),s.value&&!i.value?(g(),_("small",A_,d(a(c)("editor.action.gone")),1)):W("",!0),i.value&&!l.value?(g(),_(z,{key:2},[(g(!0),_(z,null,he(i.value.fields,O=>(g(),_("div",{key:O.key,class:"f"},[o("span",P_,d(O.required?O.name:a(c)("editor.action.optional",{name:O.name})),1),p(O)==="boolean"?(g(),it(kt,{key:0,choices:[["",a(c)("editor.action.not_set")],["true",a(c)("editor.action.on")],["false",a(c)("editor.action.off")]],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E==="true")},null,8,["choices","value","onPick"])):y(O)&&y(O).length<=4?(g(),it(kt,{key:1,choices:[["",a(c)("editor.action.not_set")],...y(O)],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E)},null,8,["choices","value","onPick"])):y(O)?(g(),_("select",{key:2,"aria-label":O.name,value:String(s.value?.data?.[O.key]??""),onChange:E=>f(O.key,E.target.value===""?void 0:E.target.value)},[o("option",I_,d(a(c)("editor.action.not_set")),1),(g(!0),_(z,null,he(y(O),([E,L])=>(g(),_("option",{key:E,value:E},d(L),9,L_))),128))],40,O_)):p(O)==="color_rgb"?(g(),_("div",M_,[o("input",{type:"color","aria-label":O.name,value:T(s.value?.data?.[O.key]),onInput:E=>f(O.key,[1,3,5].map(L=>parseInt(E.target.value.slice(L,L+2),16)))},null,40,R_),o("button",{type:"button",class:"btn quiet mini",onClick:E=>f(O.key,void 0)},d(a(c)("editor.action.not_set")),9,N_)])):p(O)==="number"||p(O)==="color_temp"?(g(),_("div",F_,[o("input",{type:"number","aria-label":O.name,min:b(O).min,max:b(O).max,step:b(O).step==="any"?"any":b(O).step,value:s.value?.data?.[O.key]??"",placeholder:v(O),onInput:E=>S(O,E.target.value)},null,40,D_),D(O)?(g(),_("span",U_,d(D(O)),1)):W("",!0)])):(g(),_("input",{key:5,type:"text","aria-label":O.name,value:$(s.value?.data?.[O.key]),placeholder:v(O),onInput:E=>A(O,E.target.value)},null,40,j_)),O.description?(g(),_("small",H_,d(O.description),1)):W("",!0)]))),128)),h.value.length?(g(),_("small",V_,d(a(c)("editor.action.needs",{fields:h.value.join(", ")})),1)):W("",!0)],64)):W("",!0),a(wn)(0,2,58)?W("",!0):(g(),_("small",W_,d(a(c)("editor.action.needs_firmware")),1))],64))]))}}),K_={class:"f"},q_={class:"f-label"},z_=["aria-expanded"],Y_={class:"av mdi"},G_={class:"tx"},J_={class:"link"},X_={key:0,class:"picker"},Z_=["placeholder","aria-label"],Q_=["aria-pressed","title"],ey={class:"mdi"},ty=["aria-pressed","title"],ny={class:"icon-list"},sy={class:"icon-grid"},iy=["title","aria-label","aria-pressed","onClick"],oy={class:"mdi"},ly={key:0,class:"hint"},ay={key:1},Ru=Le({__name:"IconPicker",props:{selected:{},automatic:{},autoLabel:{},allowNone:{type:Boolean},note:{}},emits:["pick"],setup(e,{emit:t}){const n=e,s=t,i=ke(""),l=k(()=>zs(n.selected)),r=k(()=>n.selected==="none"?"":Ae(l.value?.cp||n.automatic)),u=k(()=>n.selected==="none"?c("editor.icon.none"):l.value?.label||n.autoLabel),f=k(()=>{const h=i.value.trim().toLocaleLowerCase();return(m.inventory.icons?.groups||[]).map(p=>({label:p.label,icons:p.icons.filter(b=>!h||`${b.label} ${b.name.replaceAll("-"," ")} ${p.label}`.toLocaleLowerCase().includes(h))})).filter(p=>p.icons.length)});return(h,p)=>(g(),_("div",K_,[o("span",q_,d(a(c)("editor.icon.label")),1),o("button",{type:"button",class:"row","aria-expanded":a(m).iconPickerOpen?"true":"false",onClick:p[0]||(p[0]=b=>a(m).iconPickerOpen=!a(m).iconPickerOpen)},[o("span",Y_,d(r.value),1),o("span",G_,[o("b",null,d(u.value),1)]),o("span",J_,d(a(m).iconPickerOpen?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,z_),a(m).iconPickerOpen?(g(),_("div",X_,[Ee(o("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>i.value=b),type:"search",placeholder:a(c)("editor.icon.search"),"aria-label":a(c)("editor.icon.search_label")},null,8,Z_),[[Je,i.value]]),o("button",{type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="auto"?"true":"false",title:e.autoLabel,onClick:p[2]||(p[2]=b=>s("pick","auto"))},[o("span",ey,d(a(Ae)(e.automatic)),1),o("span",null,d(e.autoLabel),1)],8,Q_),e.allowNone?(g(),_("button",{key:0,type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="none"?"true":"false",title:a(c)("editor.icon.none"),onClick:p[3]||(p[3]=b=>s("pick","none"))},[p[4]||(p[4]=o("span",{class:"mdi"},null,-1)),o("span",null,d(a(c)("editor.icon.none_text_only")),1)],8,ty)):W("",!0),o("div",ny,[(g(!0),_(z,null,he(f.value,b=>(g(),_("section",{key:b.label},[o("small",null,d(b.label),1),o("div",sy,[(g(!0),_(z,null,he(b.icons,v=>(g(),_("button",{key:v.name,type:"button",class:"icon-choice",title:v.label,"aria-label":a(c)("editor.icon.aria",{name:v.label}),"aria-pressed":e.selected===v.name?"true":"false",onClick:y=>s("pick",v.name)},[o("span",oy,d(a(Ae)(v.cp)),1)],8,iy))),128))])]))),128)),f.value.length?W("",!0):(g(),_("p",ly,d(a(c)("editor.icon.none_found")),1))])])):W("",!0),e.note?(g(),_("small",ay,d(e.note),1)):W("",!0)]))}}),ry={class:"dr-head"},cy={class:"tx"},uy={class:"mono"},dy=["aria-label"],fy={class:"dr-body"},py={class:"f"},hy={class:"f-label",for:"tile-name"},my=["value","placeholder"],by={key:1,class:"f"},vy={class:"f-label"},gy={key:2,class:"f"},_y={class:"f-label"},yy={key:0,class:"warn"},wy={class:"f"},ky={class:"f-label"},$y={key:0},xy={key:3,class:"f"},Sy={class:"f-label"},Cy={key:4,class:"f"},Ty={class:"f-label"},Ey={key:5,class:"f"},Ay={class:"f-label"},Py={key:7,class:"f"},Oy={class:"f-label"},Iy={key:0,class:"warn"},Ly={key:8,class:"f"},My={class:"f-label"},Ry={class:"f"},Ny={class:"f-label"},Fy={class:"sw"},Dy=["aria-label","aria-pressed","onClick"],Uy={class:"dr-foot"},jy=Le({__name:"TileInspector",props:{tile:{}},setup(e){const t=e,n=k(()=>t.tile.entity.split(".")[0]),s=k(()=>qs(t.tile.entity)),i=k(()=>us(t.tile.entity)),l=k(()=>m.layout?Ot(Xe(m.layout),m.layout.pages):1),r=k(()=>Et(t.tile.slot)+1),u=le=>!m.layout?.tiles.some(ee=>Et(ee.slot)===le-1),f=k(()=>{const le=Array.from({length:Math.min(cn,l.value+1)},(ee,ce)=>ce+1);return i.value>le.length&&le.push(i.value),le.map(ee=>[ee,u(ee)?c("editor.tile.goes_to.empty",{page:ee}):String(ee)])}),h=k(()=>Xa.value?i.value>l.value?{text:c("editor.tile.goes_to.no_page",{page:i.value}),warn:!0}:{text:c("editor.tile.goes_to.hint"),warn:!1}:{text:c("editor.tile.goes_to.needs_firmware"),warn:!1}),p=k(()=>!m.layout?.tiles.some(le=>xe(le)!==xe(t.tile)&&Et(le.slot)===r.value-1)),b=k(()=>{const le=Array.from({length:l.value},(ee,ce)=>[ce+1,String(ce+1)]);return l.value(i.value?["single","wide"]:["single","wide","full"]).map(le=>[le,c(`editor.tile.size.${le}`)])),y=k(()=>i.value?"":Xa.value?c("editor.tile.size.full_hint"):c("editor.tile.size.needs_firmware")),I=k(()=>m.capabilities[t.tile.entity]),T=(le,ee)=>t.tile.options?.[le]??ee,$=k(()=>T("display",n.value==="screen"?"digital":"standard")),A=k(()=>{const le=n.value==="screen"?["digital","analog"]:["standard","watch"],ee=I.value;return n.value==="weather"&&(!ee||ee.displays.includes("forecast")||$.value==="forecast")&&le.push("forecast"),n.value==="sensor"&&(!ee||ee.displays.includes("graph")||$.value==="graph")&&le.push("graph"),n.value==="sun"&&le.push("sunpath"),le.map(ce=>[ce,c(`editor.tile.display.${ce}`)])}),S=k(()=>{const le=I.value;return le&&$.value==="graph"&&!le.displays.includes("graph")?c("editor.tile.display.no_graph"):le&&$.value==="forecast"&&!le.displays.includes("forecast")?c("editor.tile.display.no_forecast"):""}),D=k(()=>T("size","single")),C=k(()=>m.inventory.controls?.[n.value]),B=k(()=>T("controls",D.value==="full"?"none":C.value?.default)),O=k(()=>{const le=I.value;return(C.value?.choices||[]).filter(ee=>!le||ee.key==="none"||ee.key===B.value||le.controls.includes(ee.key)).map(ee=>[ee.key,ee.label])}),E=k(()=>{const le=I.value;return le&&B.value!=="none"&&!le.controls.includes(B.value)?{text:c("editor.tile.controls.not_offered"),warn:!0}:{text:wn(0,2,19)?c(D.value==="full"?"editor.tile.controls.full_hint":"editor.tile.controls.wide_hint"):c("editor.tile.controls.needs_firmware"),warn:!1}}),L=k(()=>T("tap","auto")),M=k(()=>{const le=["auto","detail","none"];return((I.value?I.value.toggle:Ja.includes(n.value))||L.value==="toggle")&&le.push("toggle"),le.push("action"),le.map(ee=>[ee,c(`editor.tile.tap.${ee}`)])}),U=k(()=>L.value==="toggle"&&I.value&&!I.value.toggle?{text:c("editor.tile.tap.no_toggle"),warn:!0}:L.value==="toggle"&&!Ja.includes(n.value)&&!wn(0,2,58)?{text:c("editor.tile.tap.toggle_needs_firmware"),warn:!1}:L.value==="toggle"?{text:c("editor.tile.tap.hold"),warn:!1}:null),R=k(()=>T("inline","none")),Y=k(()=>rm.includes(n.value)&&(!I.value||I.value.inline||R.value==="slider")),te=k(()=>R.value==="slider"&&I.value&&!I.value.inline),ye=k(()=>T("history_hours",24)),re=k(()=>Object.entries(m.inventory.backgrounds||{})),be=k(()=>!!m.inventory.entities.find(le=>le.id===t.tile.entity)?.icon),ge=k(()=>!!m.inventory.icons&&(n.value!=="screen"||i.value>0)&&!["forecast","sunpath"].includes($.value));function we(le){t.tile.name=le,pt()}function Ye(){m.inspector={kind:"inspect",entity:t.tile.entity}}return(le,ee)=>(g(),_(z,null,[o("div",ry,[o("span",{class:"av mdi",style:Ue({color:a(jt)(e.tile.entity)[2],background:a(jt)(e.tile.entity)[3]})},d(a(Ae)(a(vs)(e.tile))),5),o("span",cy,[o("b",null,d(e.tile.name||s.value),1),o("small",uy,d(e.tile.entity),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:ee[0]||(ee[0]=(...ce)=>a(Ze)&&a(Ze)(...ce))},"✕",8,dy)]),o("div",fy,[o("div",py,[o("label",hy,d(a(c)("editor.tile.name")),1),o("input",{id:"tile-name",value:e.tile.name,placeholder:s.value,maxlength:"60",onInput:ee[1]||(ee[1]=ce=>we(ce.target.value))},null,40,my)]),ge.value?(g(),it(Ru,{key:0,selected:e.tile.options?.icon||"auto",automatic:a(Sn)(e.tile.entity),"auto-label":a(c)(be.value?"editor.tile.icon.auto_ha":"editor.tile.icon.auto_default"),note:a(wn)(0,2,18)?"":a(c)("editor.tile.icon.needs_firmware"),onPick:ee[2]||(ee[2]=ce=>a(hn)(e.tile,"icon",ce))},null,8,["selected","automatic","auto-label","note"])):W("",!0),i.value?(g(),_("div",by,[o("span",vy,d(a(c)("editor.tile.goes_to.label")),1),se(kt,{choices:f.value,value:i.value,onPick:ee[3]||(ee[3]=ce=>a(Em)(e.tile,Number(ce)))},null,8,["choices","value"]),o("small",{class:me({warn:h.value.warn})},d(h.value.text),3)])):(g(),_("div",gy,[o("span",_y,d(a(c)("editor.tile.display.label")),1),se(kt,{choices:A.value,value:$.value,onPick:ee[4]||(ee[4]=ce=>a(hn)(e.tile,"display",ce))},null,8,["choices","value"]),S.value?(g(),_("small",yy,d(S.value),1)):W("",!0)])),o("div",wy,[o("span",ky,d(a(c)("editor.tile.size.label")),1),se(kt,{choices:v.value,value:D.value,onPick:ee[5]||(ee[5]=ce=>a(hn)(e.tile,"size",ce))},null,8,["choices","value"]),y.value?(g(),_("small",$y,d(y.value),1)):W("",!0)]),b.value.length>1?(g(),_("div",xy,[o("span",Sy,d(a(c)("editor.tile.page.label")),1),se(kt,{choices:b.value,value:r.value,onPick:ee[6]||(ee[6]=ce=>a(Cm)(e.tile,Number(ce)-1))},null,8,["choices","value"])])):W("",!0),C.value&&D.value!=="single"&&!i.value?(g(),_("div",Cy,[o("span",Ty,d(a(c)("editor.tile.controls.label")),1),se(kt,{choices:O.value,value:B.value,onPick:ee[7]||(ee[7]=ce=>a(hn)(e.tile,"controls",ce))},null,8,["choices","value"]),o("small",{class:me({warn:E.value.warn})},d(E.value.text),3)])):W("",!0),n.value!=="screen"&&!i.value?(g(),_("div",Ey,[o("span",Ay,d(a(c)("editor.tile.tap.label")),1),se(kt,{choices:M.value,value:L.value,onPick:ee[8]||(ee[8]=ce=>a(hn)(e.tile,"tap",ce))},null,8,["choices","value"]),U.value?(g(),_("small",{key:0,class:me({warn:U.value.warn})},d(U.value.text),3)):W("",!0)])):W("",!0),n.value!=="screen"&&!i.value&&L.value==="action"?(g(),it(B_,{key:6,tile:e.tile},null,8,["tile"])):W("",!0),Y.value&&!i.value?(g(),_("div",Py,[o("span",Oy,d(a(c)("editor.tile.slider.label")),1),se(kt,{choices:[["none",a(c)("editor.tile.slider.no")],["slider",a(c)("editor.tile.slider.yes")]],value:R.value,onPick:ee[9]||(ee[9]=ce=>a(hn)(e.tile,"inline",ce))},null,8,["choices","value"]),te.value?(g(),_("small",Iy,d(a(c)("editor.tile.slider.nothing")),1)):W("",!0)])):W("",!0),n.value==="sensor"&&!i.value?(g(),_("div",Ly,[o("span",My,d(a(c)("editor.tile.history.label")),1),se(kt,{choices:[1,6,24].map(ce=>[ce,a(c)("editor.tile.history.hours",ce)]),value:ye.value,onPick:ee[10]||(ee[10]=ce=>a(hn)(e.tile,"history_hours",Number(ce)))},null,8,["choices","value"])])):W("",!0),o("div",Ry,[o("span",Ny,d(a(c)("editor.tile.background.label")),1),o("div",Fy,[(g(!0),_(z,null,he(re.value,([ce,tt])=>(g(),_("button",{key:ce,type:"button","aria-label":a(c)("editor.tile.background.aria",{name:tt.label}),"aria-pressed":(e.tile.options?.background||"auto")===ce?"true":"false",onClick:$e=>a(hn)(e.tile,"background",ce)},[o("i",{class:me(tt.color?"":ce==="none"?"none":"auto"),style:Ue(tt.color?{background:tt.color}:void 0)},null,6),Me(d(tt.label),1)],8,Dy))),128))])])]),o("div",Uy,[o("button",{type:"button",class:"btn danger",onClick:ee[11]||(ee[11]=ce=>a(xu)(e.tile))},d(a(c)("editor.common.remove")),1),ee[12]||(ee[12]=o("span",{class:"spacer"},null,-1)),n.value!=="screen"?(g(),_("button",{key:0,type:"button",class:"btn quiet",onClick:Ye},d(a(c)("editor.common.read_current_data")),1)):W("",!0)])],64))}}),Hy={class:"dr-head"},Vy={class:"av mdi",style:{background:"var(--seg)",color:"var(--ink-2)"}},Wy={class:"tx"},By=["aria-label"],Ky={class:"dr-body"},qy={class:"f"},zy={class:"f-label",for:"title"},Yy=["value","placeholder"],Gy={class:"f"},Jy={class:"f-label",id:"topbar-caption"},Xy={style:{"text-transform":"none","letter-spacing":"0","font-weight":"500"}},Zy={class:"items",id:"topbar-chips",role:"list","aria-labelledby":"topbar-caption"},Qy=["data-index","aria-label","onPointerdown","onClick","onKeydown"],e0={class:"tx"},t0=["aria-label","onClick"],n0=["disabled","title"],s0={class:"live",id:"topbar-live"},i0={class:"f"},o0={class:"f-label"},l0={class:"f"},a0={class:"f-label"},r0={href:"#settings"},c0={key:2},u0={key:0,class:"dr-foot"},d0=["disabled"],f0=["disabled"],p0=Le({__name:"TopbarInspector",props:{index:{}},setup(e){const t=e,n=k(()=>dn()),s=k(()=>n.value[t.index]),i=k(()=>(m.fontsVersion,m.now,m.topbarPreviews,gu(n.value,wu.value,m.layout?.title||Un("editor.mockup.home"),mn))),l=k(()=>i.value.dropped),r=k(()=>m.inventory.header?.min_firmware||"0.2.32"),u=k(()=>{const[Y,te,ye]=r.value.split(".").map(Number);return wn(Y,te,ye)}),f=k(()=>u.value?c(l.value.size?"editor.topbar.hint.overflow":"editor.topbar.hint.reorder"):c("editor.topbar.hint.needs_firmware",{version:r.value})),h=(Y,te)=>{const ye=mn(Y);return ye.shown?l.value.has(te)?c("editor.topbar.detail.overflow"):ye.analog?c("editor.topbar.detail.dial"):ye.text:c("editor.topbar.detail.hidden")},p=Y=>{const te=mn(Y);return te.analog||Y.type!=="entity"?zs(vu[Y.type])?.cp:te.icon},b=Y=>m.topbarAdded?.key===at(Y)&&Date.now()-m.topbarAdded.time<1200;function v(Y){m.layout&&(m.layout.title=Y,pt())}function y(Y){const te=[...n.value];te[t.index]={...te[t.index],...Y},Ds(te)}const I=k(()=>s.value?mn(s.value).shown?l.value.has(t.index)?c("editor.topbar.live.overflow"):c("editor.topbar.live.looks"):c("editor.topbar.live.hidden"):""),T=k(()=>({clock:Wi(as.value,new Date(m.now)),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),ls.value)})),$=ke({index:-1,active:!1,moved:!1});let A=null,S=0,D=null,C=0;function B(Y,te){Y.button!==0||Y.target.closest(".x")||(Y.pointerType!=="touch"&&Y.preventDefault(),$.value={index:te,active:!1,moved:!1},A={x:Y.clientX,y:Y.clientY},D=Y.pointerId,clearTimeout(S),Y.pointerType==="touch"&&(S=window.setTimeout(O,260)),document.addEventListener("pointermove",L),document.addEventListener("pointerup",M),document.addEventListener("pointercancel",M))}function O(){$.value.active=!0,document.addEventListener("touchmove",E,{passive:!1})}function E(Y){$.value.active&&Y.preventDefault()}function L(Y){if(Y.pointerId!==D||!A)return;if(!$.value.active){const re=Math.hypot(Y.clientX-A.x,Y.clientY-A.y);if(Y.pointerType==="touch"){re>10&&(clearTimeout(S),A=null);return}if(re<6)return;O()}const te=[...document.querySelectorAll(".items .item[data-index]")];let ye=$.value.index;if(te.forEach((re,be)=>{const ge=re.getBoundingClientRect();be<$.value.index&&Y.clientY$.value.index&&Y.clientY>ge.top+ge.height/2&&(ye=Math.max(ye,be))}),ye!==$.value.index&&m.layout){const re=[...n.value];re.splice(ye,0,...re.splice($.value.index,1)),m.layout.header={items:re};const be=t.index===$.value.index;$.value.index=ye,$.value.moved=!0,be&&Xt(ye)}}function M(Y){Y.pointerId===D&&(clearTimeout(S),document.removeEventListener("pointermove",L),document.removeEventListener("pointerup",M),document.removeEventListener("pointercancel",M),document.removeEventListener("touchmove",E),$.value.active&&(C=Date.now()+400,$.value.moved&&pt()),$.value={index:-1,active:!1,moved:!1},A=null,D=null)}function U(Y){Date.now(){const ye=Ws("i18n-t");return g(),_(z,null,[o("div",Hy,[o("span",Vy,d(s.value?a(Ae)(p(s.value)||"F0150"):a(Ae)("F0150")),1),o("span",Wy,[o("b",null,d(s.value?s.value.type==="entity"?a(qs)(s.value.entity):a(gs)(s.value):a(c)("editor.topbar.title")),1),o("small",{class:me({mono:s.value?.type==="entity"})},d(s.value?s.value.type==="entity"?s.value.entity:a(c)("editor.topbar.builtin"):a(c)("editor.topbar.items",{used:n.value.length},a(vn)())),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:te[0]||(te[0]=(...re)=>a(Ze)&&a(Ze)(...re))},"✕",8,By)]),o("div",Ky,[o("div",qy,[o("label",zy,d(a(c)("editor.topbar.name")),1),o("input",{id:"title",value:a(m).layout?.title,maxlength:"60",placeholder:a(c)("editor.topbar.name_placeholder"),onInput:te[1]||(te[1]=re=>v(re.target.value))},null,40,Yy)]),o("div",Gy,[o("span",Jy,[Me(d(a(c)("editor.topbar.right"))+" ",1),o("span",Xy," · "+d(n.value.length)+" / "+d(a(vn)()),1)]),o("div",Zy,[(g(!0),_(z,null,he(n.value,(re,be)=>(g(),_("div",{key:a(at)(re)+be,class:me(["item",{selected:be===e.index,"is-hidden":!a(mn)(re).shown,"is-overflow":l.value.has(be),"just-added":b(re),"dragging-chip":$.value.active&&$.value.index===be}]),role:"listitem",tabindex:"0","data-index":be,"aria-label":a(c)("editor.topbar.item_label",{name:a(gs)(re),slot:be+1}),onPointerdown:ge=>B(ge,be),onClick:ge=>U(be),onKeydown:ge=>R(ge,be)},[te[9]||(te[9]=o("span",{class:"grip","aria-hidden":"true"},"⋮⋮",-1)),o("span",{class:"av mdi",style:Ue(a(mn)(re).color?{color:a(mn)(re).color}:void 0)},d(p(re)?a(Ae)(p(re)):""),5),o("span",e0,[o("b",null,d(a(gs)(re)),1),o("small",null,d(h(re,be)),1)]),o("button",{type:"button",class:"x","aria-label":a(c)("editor.topbar.remove_named",{name:a(gs)(re)}),onClick:Pt(ge=>a(nr)(be),["stop"])},"✕",8,t0)],42,Qy))),128)),o("button",{type:"button",class:"ghost-btn",id:"topbar-add",disabled:n.value.length>=a(vn)(),title:n.value.length>=a(vn)()?a(c)("editor.topbar.max",a(vn)()):a(c)("editor.topbar.add_title"),onClick:te[2]||(te[2]=(...re)=>a(er)&&a(er)(...re))},d(a(c)("editor.topbar.add_button")),9,n0)]),o("small",{id:"topbar-hint",class:me({warn:l.value.size>0&&u.value})},d(f.value),3)]),s.value?(g(),_(z,{key:0},[o("div",s0,[o("small",null,d(I.value),1),se(Mu,{items:[s.value],single:""},null,8,["items"])]),s.value.type==="entity"?(g(),_(z,{key:0},[o("div",i0,[o("span",o0,d(a(c)("editor.topbar.content.label")),1),se(kt,{choices:(a(m).inventory.header?.contents||[]).map(re=>[re.key,re.label]),value:s.value.content,onPick:te[3]||(te[3]=re=>y({content:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.content.hint")),1)]),se(Ru,{selected:s.value.icon||"auto",automatic:a(m).topbarPreviews[a(at)(s.value)]?.auto_icon||a(Sn)(s.value.entity),"auto-label":a(c)("editor.topbar.auto_icon"),"allow-none":"",onPick:te[4]||(te[4]=re=>y({icon:re}))},null,8,["selected","automatic","auto-label"]),o("div",l0,[o("span",a0,d(a(c)("editor.topbar.show.label")),1),se(kt,{choices:(a(m).inventory.header?.shows||[]).map(re=>[re.key,re.label]),value:s.value.show,onPick:te[5]||(te[5]=re=>y({show:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.show.hint")),1)])],64)):s.value.type!=="date"?(g(),it(ye,{key:1,keypath:a(as)?"editor.topbar.clock_24":"editor.topbar.clock_12",tag:"small",id:"topbar-clock",scope:"global"},{settings:oe(()=>[o("a",r0,d(a(c)("editor.topbar.clock_settings")),1)]),_:1},8,["keypath"])):(g(),_("small",c0,d(a(c)("editor.topbar.date_hint",{date:T.value.date})),1))],64)):W("",!0)]),s.value?(g(),_("div",u0,[o("button",{type:"button",class:"btn danger",onClick:te[6]||(te[6]=re=>a(nr)(e.index))},d(a(c)("editor.common.remove")),1),te[10]||(te[10]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",disabled:e.index===0,onClick:te[7]||(te[7]=re=>a(bo)(e.index,e.index-1)&&a(Xt)(e.index-1))},d(a(c)("editor.topbar.up")),9,d0),o("button",{type:"button",class:"btn quiet",disabled:e.index>=n.value.length-1,onClick:te[8]||(te[8]=re=>a(bo)(e.index,e.index+1)&&a(Xt)(e.index+1))},d(a(c)("editor.topbar.down")),9,f0)])):W("",!0)],64)}}}),h0={class:"dr-head"},m0={class:"tx"},b0=["aria-label"],v0={class:"dr-body"},g0={class:"f"},_0={class:"f-label"},y0={class:"options"},w0=["disabled","onClick"],k0={class:"mdi"},$0={class:"tx"},x0={key:0,class:"f"},S0={class:"f-label"},C0={class:"options"},T0=["disabled","onClick"],E0={class:"mdi"},A0={class:"tx"},P0={class:"f"},O0={class:"f-label",for:"topbar-search"},I0=["placeholder","aria-label"],L0={class:"options"},M0=["disabled","onClick"],R0={class:"mdi"},N0={class:"tx"},F0={key:0,class:"hint"},D0={key:1,class:"hint"},U0={class:"dr-foot"},j0=Le({__name:"TopbarAdd",setup(e){const t=ke(""),n=k(()=>new Set(dn().map(at))),s=k(()=>({clock:Wi(as.value,new Date(m.now)),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),ls.value)})),i=k(()=>m.inventory.header?.suggestions?.[m.selected||""]||[]),l=k(()=>{const u=t.value.trim().toLocaleLowerCase();return m.inventory.entities.filter(f=>`${f.name} ${f.id} ${f.area||""} ${f.device||""}`.toLocaleLowerCase().includes(u))}),r=u=>({type:"entity",entity:u,content:"state",icon:"auto",show:"always"});return(u,f)=>(g(),_(z,null,[o("div",h0,[f[3]||(f[3]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"18px"}},"+",-1)),o("span",m0,[o("b",null,d(a(c)("editor.topbar.add.title")),1),o("small",null,d(a(c)("editor.topbar.add.slots",{used:a(dn)().length},a(vn)())),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,b0)]),o("div",v0,[o("div",g0,[o("span",_0,d(a(c)("editor.topbar.add.builtin")),1),o("div",y0,[(g(!0),_(z,null,he(a(m).inventory.header?.builtin||[],h=>(g(),_("button",{key:h.type,type:"button",class:"option",disabled:n.value.has(a(at)({type:h.type})),onClick:p=>a(vo)({type:h.type})},[o("span",k0,d(a(Ae)(a(zs)(a(vu)[h.type])?.cp||"F0150")),1),o("span",$0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)({type:h.type}))?a(c)("editor.topbar.add.added"):s.value[h.type]),1)])],8,w0))),128))])]),i.value.length?(g(),_("div",x0,[o("span",S0,d(a(c)("editor.topbar.add.suggestions")),1),o("div",C0,[(g(!0),_(z,null,he(i.value,h=>(g(),_("button",{key:a(at)(h.item),type:"button",class:"option",disabled:n.value.has(a(at)(h.item)),onClick:p=>a(vo)(h.item)},[o("span",E0,d(a(Ae)(h.icon||a(Sn)(h.item.entity))),1),o("span",A0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)(h.item))?a(c)("editor.topbar.add.added"):[h.name,h.area].filter(Boolean).join(" · ")),1)])],8,T0))),128))])])):W("",!0),o("div",P0,[o("label",O0,d(a(c)("editor.topbar.add.entity")),1),Ee(o("input",{id:"topbar-search","onUpdate:modelValue":f[1]||(f[1]=h=>t.value=h),type:"search",placeholder:a(c)("editor.topbar.add.search"),"aria-label":a(c)("editor.topbar.add.search_label")},null,8,I0),[[Je,t.value]]),o("div",L0,[(g(!0),_(z,null,he(l.value.slice(0,40),h=>(g(),_("button",{key:h.id,type:"button",class:"option",disabled:n.value.has(a(at)(r(h.id))),onClick:p=>a(vo)(r(h.id))},[o("span",R0,d(a(Ae)(a(Sn)(h.id))),1),o("span",N0,[o("strong",null,d(h.name),1),o("small",null,d([h.area,h.id].filter(Boolean).join(" · ")),1)])],8,M0))),128)),l.value.length?l.value.length>40?(g(),_("p",D0,d(a(c)("editor.common.results",l.value.length)),1)):W("",!0):(g(),_("p",F0,d(a(c)("editor.topbar.add.none_found")),1))])])]),o("div",U0,[f[4]||(f[4]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",onClick:f[2]||(f[2]=(...h)=>a(Ze)&&a(Ze)(...h))},d(a(c)("editor.common.cancel")),1)])],64))}}),H0={class:"dr-head"},V0={class:"tx"},W0=["aria-label"],B0={class:"dr-body",id:"inspector-section"},K0={id:"inspection-summary"},q0={key:0,class:"hint warn"},z0={key:1,class:"hint"},Y0={id:"inspection"},G0={class:"dr-foot"},J0=Le({__name:"InspectPanel",props:{entity:{}},setup(e){const t=e,n=ke(null),s=ke(c("editor.inspect.reading")),i=ke("");async function l(){if(m.selected){n.value=null,i.value="",s.value=c("editor.inspect.fetching");try{const u=await Nt(`screens/${encodeURIComponent(m.selected)}/inspect`),f=t.entity?u.tiles.filter(h=>h.entity===t.entity):u.tiles;n.value=f,s.value=JSON.stringify(t.entity?f[0]:u,null,2)}catch(u){i.value=u.message,s.value="",Ce(u.message)}}}const r=u=>{const f=m.layout?.tiles.find(h=>h.entity===u)?.options||{};return c("editor.inspect.options",{slider:c(f.inline==="slider"?"editor.inspect.yes":"editor.inspect.no"),display:bu(f.display||"standard"),size:am(f.size),control:nm({entity:u,options:f},m.inventory),background:m.inventory.backgrounds?.[f.background||"auto"]?.label||c("editor.inspect.background_default")})};return En(l),Ct(()=>t.entity,l),(u,f)=>(g(),_(z,null,[o("div",H0,[f[1]||(f[1]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"16px"}},"⌕",-1)),o("span",V0,[o("b",null,d(a(c)("editor.inspect.title")),1),o("small",{class:me({mono:e.entity})},d(e.entity||a(c)("editor.inspect.subtitle")),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,W0)]),o("div",B0,[o("div",K0,[i.value?(g(),_("p",q0,d(i.value),1)):n.value?W("",!0):(g(),_("p",z0,d(a(c)("editor.inspect.fetching")),1)),(g(!0),_(z,null,he(n.value||[],(h,p)=>(g(),_("article",{key:p,class:"inspection-tile"},[o("strong",null,d(h.entity),1),o("span",null,d(a(c)("editor.inspect.status",{status:h.word||h.state})),1),o("small",null,d(r(h.entity)),1)]))),128))]),o("pre",Y0,d(s.value),1)]),o("div",G0,[o("button",{type:"button",class:"btn quiet",onClick:l},d(a(c)("editor.inspect.read_again")),1),f[2]||(f[2]=o("span",{class:"spacer"},null,-1))])],64))}}),X0=["aria-hidden"],Z0=Le({__name:"Drawer",setup(e){const t=k(()=>!!(m.inspector&&(m.inspector.kind!=="tile"||co.value)));return(n,s)=>(g(),_("aside",{class:me(["drawer",{open:t.value}]),id:"tile-sheet","aria-hidden":t.value?"false":"true",onClick:s[0]||(s[0]=Pt(()=>{},["stop"]))},[a(m).inspector?(g(),_(z,{key:0},[a(m).inspector.kind==="tile"&&a(co)?(g(),it(jy,{key:0,tile:a(co)},null,8,["tile"])):a(m).inspector.kind==="bar"?(g(),it(p0,{key:1,index:a(m).inspector.index},null,8,["index"])):a(m).inspector.kind==="bar-add"?(g(),it(j0,{key:2})):a(m).inspector.kind==="inspect"?(g(),it(J0,{key:3,entity:a(m).inspector.entity},null,8,["entity"])):W("",!0)],64)):W("",!0)],10,X0))}}),Q0={class:"main-head"},e1={class:"eyebrow",id:"screen-name"},t1=["title"],n1={class:"head-right"},s1={class:"seg",role:"tablist"},i1=["aria-pressed"],o1=["aria-pressed"],l1={key:1,id:"dirty",class:"chip dirty"},a1=["disabled"],r1={key:0,class:"spin small"},c1=["aria-label","aria-expanded"],u1={key:3,class:"menu",role:"menu"},d1=["disabled","title"],f1=["disabled","aria-expanded"],p1={key:0,class:"sub"},h1=["onClick"],m1=["disabled","title"],b1={class:"body",id:"body"},v1=Le({__name:"ScreenView",setup(e){const t=k(()=>_t.value),n=k(()=>t.value.online?`${t.value.delivery} · ${t.value.status}`:c("editor.screen_view.offline")),s=k(()=>Pu(t.value)&&t.value.online&&t.value.update?.profile&&t.value.update?.host),i=k(()=>m.inventory.screens.filter(T=>T.id!==t.value.id&&T.layout?.tiles?.length)),l=ke(!1),r=ke(null);function u(){m.menuOpen=!1,l.value=!1}function f(){u(),m.overrideProfile=t.value.update?.profile||null,m.overrideFriendly=t.value.name,He("#override")}function h(){u(),m.selectedTile=null,m.inspector={kind:"inspect"}}function p(T){u(),!(m.dirty&&!confirm(c("editor.screen_view.confirm.copy")))&&Om(T)}function b(){u(),r.value?.click()}async function v(T){const $=T.target,A=$.files?.[0];$.value="",A&&(m.dirty&&!confirm(c("editor.screen_view.confirm.import"))||Lm(await A.text()))}function y(T){if(T.key==="Escape")if(m.menuOpen)u();else{if(m.palette)return;m.inspector&&!T.target?.closest?.(".picker")&&Ze()}else(T.metaKey||T.ctrlKey)&&T.key.toLowerCase()==="s"&&(T.preventDefault(),m.dirty&&Wo())}function I(T){m.menuOpen&&!T.target.closest(".head-right .menu, #more")&&u()}return En(()=>{document.addEventListener("keydown",y),document.addEventListener("click",I)}),rs(()=>{document.removeEventListener("keydown",y),document.removeEventListener("click",I)}),(T,$)=>(g(),_(z,null,[o("header",Q0,[o("div",null,[o("span",e1,d(t.value.name),1),o("h1",null,d(a(m).layout?.title||a(Un)("editor.mockup.home")),1)]),o("span",{id:"delivery",class:me(["chip",{off:!t.value.online}]),title:n.value},[$[9]||($[9]=o("span",{class:"dot"},null,-1)),Me(d(n.value),1)],10,t1),o("div",n1,[o("div",s1,[o("button",{type:"button",id:"tab-layout",role:"tab","aria-pressed":a(m).tab==="layout"?"true":"false",onClick:$[0]||($[0]=A=>a(m).tab="layout")},d(a(c)("editor.screen_view.tabs.layout")),9,i1),o("button",{type:"button",id:"tab-settings",role:"tab","aria-pressed":a(m).tab==="settings"?"true":"false",onClick:$[1]||($[1]=A=>{a(m).tab="settings",a(Ze)()})},d(a(c)("editor.screen_view.tabs.settings")),9,o1)]),a(m).dirty?(g(),_("span",l1,d(a(c)("editor.common.unsaved")),1)):(g(),_("span",{key:0,id:"dirty",class:me(["chip",{sent:a(m).saved}])},d(a(m).saved?a(c)("editor.screen_view.sent"):a(c)("editor.screen_view.all_saved")),3)),a(m).dirty?(g(),_("button",{key:2,id:"save",type:"button",class:"btn primary",disabled:a(m).busy,title:"⌘S",onClick:$[2]||($[2]=A=>a(Wo)())},[a(m).busy?(g(),_("span",r1)):W("",!0),Me(d(a(m).busy?a(c)("editor.common.saving"):a(c)("editor.common.save_send")),1)],8,a1)):W("",!0),o("button",{id:"more",type:"button",class:"icon-btn","aria-label":a(c)("editor.screen_view.more"),"aria-haspopup":"menu","aria-expanded":a(m).menuOpen?"true":"false",onClick:$[3]||($[3]=Pt(A=>{a(m).menuOpen=!a(m).menuOpen,l.value=!1},["stop"]))},"···",8,c1),a(m).menuOpen?(g(),_("div",u1,[o("button",{type:"button",role:"menuitem",id:"identify",disabled:!a(Kn)(t.value)||!t.value.online,title:a(Kn)(t.value)?"":a(c)("editor.screen_view.menu.identify_needs"),onClick:$[4]||($[4]=A=>{u(),a(Su)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.identify"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.identify_hint")),1)],8,d1),o("button",{type:"button",role:"menuitem",id:"inspect",onClick:h},[Me(d(a(c)("editor.common.read_current_data"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.inspect_hint")),1)]),$[12]||($[12]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"copy-layout",disabled:!i.value.length,"aria-expanded":l.value?"true":"false",onClick:$[5]||($[5]=Pt(A=>l.value=!l.value,["stop"]))},[Me(d(a(c)("editor.screen_view.menu.copy"))+" ",1),o("small",null,d(i.value.length?a(c)("editor.screen_view.menu.copy_screens",i.value.length):a(c)("editor.screen_view.menu.copy_none")),1)],8,f1),l.value?(g(),_("div",p1,[(g(!0),_(z,null,he(i.value,A=>(g(),_("button",{key:A.id,type:"button",role:"menuitem",onClick:S=>p(A.id)},[Me(d(A.name)+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.copy_tiles",A.layout.tiles.length)),1)],8,h1))),128))])):W("",!0),o("button",{type:"button",role:"menuitem",id:"export-layout",onClick:$[6]||($[6]=A=>{u(),a(Tu)()})},[Me(d(a(c)("editor.screen_view.menu.export"))+" ",1),$[10]||($[10]=o("small",null,"JSON",-1))]),o("button",{type:"button",role:"menuitem",id:"import-layout",onClick:b},[Me(d(a(c)("editor.screen_view.menu.import"))+" ",1),$[11]||($[11]=o("small",null,"JSON",-1))]),$[13]||($[13]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"open-override",disabled:!t.value.update?.profile,title:t.value.update?.profile?"":a(c)("editor.screen_view.menu.override_none"),onClick:f},[Me(d(a(c)("editor.screen_view.menu.override"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.override_hint")),1)],8,m1),o("button",{type:"button",role:"menuitem",onClick:$[7]||($[7]=A=>{u(),a(He)("#firmware")})},d(a(c)("editor.nav.firmware")),1),s.value?(g(),_("button",{key:1,type:"button",role:"menuitem",onClick:$[8]||($[8]=A=>{u(),a(Ko)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.update"))+" ",1),o("small",null,d(t.value.update?.target),1)])):W("",!0)])):W("",!0),o("input",{ref_key:"fileInput",ref:r,type:"file",accept:"application/json,.json",hidden:"",onChange:v},null,544)])]),o("div",b1,[a(m).tab==="layout"?(g(),it(Jg,{key:0})):(g(),it(p_,{key:1})),se(Z0)])],64))}}),g1={key:0,id:"choose",class:"empty"},_1={key:1,id:"empty",class:"empty"},y1=Le({__name:"EmptyState",setup(e){return(t,n)=>a(m).inventory.screens.length?(g(),_("section",g1,[n[1]||(n[1]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.choose.title")),1),o("p",null,d(a(c)("editor.empty.choose.text")),1)])):(g(),_("section",_1,[n[2]||(n[2]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.start.title")),1),o("p",null,d(a(c)("editor.empty.start.text")),1),o("button",{id:"start",type:"button",class:"btn primary",onClick:n[0]||(n[0]=s=>a(He)("#new-screen"))},d(a(c)("editor.empty.start.button")),1)]))}}),w1={class:"panel",id:"settings-view"},k1={class:"panel-head"},$1={class:"tx"},x1={class:"eyebrow"},S1={id:"settings-title"},C1={class:"card-grid"},T1={class:"card"},E1={class:"tools"},A1={class:"tx"},P1={class:"tx"},O1={key:0,class:"card updates",id:"updates"},I1={id:"updates-hint"},L1=["aria-valuenow"],M1={class:"progress-text"},R1={key:0,class:"log-lines"},N1={key:2,class:"whatsnew"},F1={class:"check"},D1=["checked"],U1={key:1,class:"card",id:"language"},j1={class:"field"},H1={class:"f-label",for:"screen-language"},V1=["value","disabled"],W1={value:"auto"},B1=["value"],K1={key:0,id:"language-ha-missing"},q1={class:"field"},z1={class:"f-label",for:"time-format"},Y1=["value","disabled"],G1={value:"auto"},J1={value:"24"},X1={value:"12"},Z1={class:"field"},Q1={class:"f-label",for:"number-format"},e2=["value","disabled"],t2={value:"auto"},n2=["value"],s2={key:0,class:"actions",id:"language-profile"},i2=["disabled"],o2={class:"card"},l2={class:"tools"},a2={class:"tx"},r2={class:"card",id:"claude"},c2={class:"actions"},u2=["disabled"],d2={id:"claude-path"},f2={class:"actions"},p2={class:"btn quiet",id:"claude-download",href:"api/claude-skill.zip",download:"esp-screens.zip"},h2="https://github.com/MaxGramser/homeassistant_espscreen/blob/main/docs/TRANSLATING.md",m2=Le({__name:"AppSettingsView",setup(e){const t=k(()=>m.inventory.updates),n=k(()=>m.inventory.screens.filter(E=>E.update?.available).length),s=k(()=>t.value?t.value.busy?c("editor.settings.updates.busy",{version:t.value.target}):m.inventory.screens.length?n.value?c("editor.settings.updates.available",{version:t.value.target},n.value):c("editor.settings.updates.current",{version:t.value.target}):c("editor.settings.updates.no_screens",{version:t.value.target}):""),i=k(()=>m.inventory.screens.find(E=>E.update?.state==="running"||m.updating.includes(E.id))),l=k(()=>i.value?Jn(i.value):null),r=k(()=>(m.firmwareJob?.logs||[]).slice(-12).join(` -`)),u=k(()=>{const E=m.inventory.changelog,L=t.value?.target;return!Array.isArray(E)||!L?[]:E.filter(M=>M.firmware===L).flatMap(M=>M.lines).slice(0,10)}),f=k(()=>m.inventory.claude_skill),h=ke(!1);async function p(){h.value=!0;try{await Wm()}finally{h.value=!1}}const b=["point","comma","space"],v=k(()=>m.inventory.language),y=k(()=>{const E=v.value,L=E?.ha?su(E.ha,E.languages.map(M=>M.code)):void 0;return E?.languages.find(M=>M.code===L)?.name}),I=k(()=>v.value?.languages.find(E=>E.code===v.value.effective&&!E.checked)),T=E=>c(E==="12"?"editor.settings.language.clock_12":"editor.settings.language.clock_24"),$=E=>lu("1234.5",E),A=Xh(),S=k(()=>{const E=v.value;return E?{...A.clock&&A.clock!==(E.clock_effective||"24")?{clock:A.clock}:{},...A.numbers&&A.numbers!==(E.numbers_effective||"point")?{numbers:A.numbers}:{}}:{}}),D=k(()=>[S.value.clock&&T(S.value.clock),S.value.numbers&&$(is[S.value.numbers])].filter(Boolean).join(" · ")),C=ke(!1);async function B(E,L){const M=L.target;C.value=!0;const U=await ar({[E]:M.value});C.value=!1,U||(M.value=String(v.value?.[E]??"auto"))}async function O(){C.value=!0,await ar(S.value),C.value=!1}return(E,L)=>{const M=Ws("i18n-t");return g(),_("div",w1,[o("div",k1,[o("div",$1,[o("span",x1,d(a(c)("editor.nav.settings")),1),o("h1",S1,d(a(c)("editor.settings.title")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-settings",onClick:L[0]||(L[0]=U=>a(He)(""))},d(a(c)("editor.settings.back")),1)]),o("div",C1,[o("section",T1,[o("h2",null,d(a(c)("editor.settings.screens.title")),1),o("p",null,d(a(c)("editor.settings.screens.text")),1),o("div",E1,[o("button",{type:"button",class:"tool",onClick:L[1]||(L[1]=U=>a(He)("#new-screen"))},[L[9]||(L[9]=o("span",{class:"tool-icon"},"+",-1)),o("span",A1,[o("b",null,d(a(c)("editor.nav.new_screen")),1),o("small",null,d(a(c)("editor.nav.new_screen_detail")),1)])]),o("button",{type:"button",class:"tool",onClick:L[2]||(L[2]=U=>a(He)("#firmware"))},[L[10]||(L[10]=o("span",{class:"tool-icon"},"⇪",-1)),o("span",P1,[o("b",null,d(a(c)("editor.nav.firmware")),1),o("small",null,d(a(c)("editor.settings.screens.firmware_detail")),1)])])])]),t.value?(g(),_("section",O1,[o("h2",null,d(a(c)("editor.settings.updates.title")),1),o("p",I1,d(s.value),1),i.value&&l.value?(g(),_(z,{key:0},[o("div",{class:"progress",role:"progressbar","aria-valuenow":l.value.percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:l.value.percent+"%"})},null,4)],8,L1),o("div",M1,[o("span",null,d(i.value.name)+" · "+d(l.value.percent)+" %",1),o("span",null,d(l.value.text),1)]),r.value?(g(),_("pre",R1,d(r.value),1)):W("",!0)],64)):W("",!0),t.value.pending&&!t.value.busy&&t.value.pending>=2?(g(),_("button",{key:1,id:"update-all",type:"button",class:"btn primary",onClick:L[3]||(L[3]=(...U)=>a(ir)&&a(ir)(...U))},d(a(c)("editor.settings.updates.all",t.value.pending)),1)):W("",!0),u.value.length&&!a(Bo)()?(g(),_("details",N1,[o("summary",null,d(a(c)("editor.settings.updates.whats_new",{version:t.value.target})),1),o("ul",null,[(g(!0),_(z,null,he(u.value,U=>(g(),_("li",{key:U},d(U),1))),128))])])):W("",!0),o("label",F1,[o("input",{type:"checkbox",id:"auto-update",checked:!!t.value.auto,onChange:L[4]||(L[4]=U=>a(Vm)(U.target.checked))},null,40,D1),o("span",null,[Me(d(a(c)("editor.settings.updates.auto_label")),1),o("small",null,d(a(c)("editor.settings.updates.auto_hint")),1)])])])):W("",!0),v.value?(g(),_("section",U1,[o("h2",null,d(a(c)("editor.settings.language.title")),1),o("div",j1,[o("label",H1,d(a(c)("editor.settings.language.screen_language")),1),o("select",{id:"screen-language",value:v.value.setting,disabled:C.value,onChange:L[5]||(L[5]=U=>B("setting",U))},[o("option",W1,d(y.value?a(c)("editor.settings.language.auto",{name:y.value}):a(c)("editor.settings.language.auto_plain")),1),(g(!0),_(z,null,he(v.value.languages,U=>(g(),_("option",{key:U.code,value:U.code},d(U.checked?U.name:a(c)("editor.settings.language.unchecked",{name:U.name})),9,B1))),128))],40,V1),v.value.setting==="auto"&&!y.value?(g(),_("small",K1,d(a(c)("editor.settings.language.ha_missing")),1)):W("",!0),I.value?(g(),it(M,{key:1,keypath:"editor.settings.language.help",tag:"small",id:"language-help",scope:"global"},{name:oe(()=>[Me(d(I.value.name),1)]),guide:oe(()=>[o("a",{href:h2,target:"_blank",rel:"noopener"},d(a(c)("editor.settings.language.guide")),1)]),_:1})):W("",!0),o("small",null,d(a(c)("editor.settings.language.update_hint")),1)]),o("div",q1,[o("label",z1,d(a(c)("editor.settings.language.time")),1),o("select",{id:"time-format",value:v.value.clock||"auto",disabled:C.value,onChange:L[6]||(L[6]=U=>B("clock",U))},[o("option",G1,d(a(c)("editor.settings.language.time_auto",{clock:T(v.value.clock_auto||v.value.clock_effective)})),1),o("option",J1,d(T("24")),1),o("option",X1,d(T("12")),1)],40,Y1)]),o("div",Z1,[o("label",Q1,d(a(c)("editor.settings.language.numbers")),1),o("select",{id:"number-format",value:v.value.numbers||"auto",disabled:C.value,onChange:L[7]||(L[7]=U=>B("numbers",U))},[o("option",t2,d(a(c)("editor.settings.language.numbers_auto",{example:$(a(qm))})),1),(g(),_(z,null,he(b,U=>o("option",{key:U,value:U},d($(a(is)[U])),9,n2)),64))],40,e2)]),D.value?(g(),_("div",s2,[o("small",null,d(a(c)("editor.settings.language.profile",{formats:D.value})),1),o("button",{type:"button",class:"btn quiet mini",disabled:C.value,onClick:O},d(a(c)("editor.settings.language.use_profile")),9,i2)])):W("",!0),o("small",null,d(a(c)("editor.settings.language.editor_hint")),1)])):W("",!0),o("section",o2,[o("h2",null,d(a(c)("editor.nav.alerts")),1),o("p",null,d(a(c)("editor.settings.alerts.text")),1),o("div",l2,[o("button",{type:"button",class:"tool",onClick:L[8]||(L[8]=U=>a(He)("#alerts"))},[L[11]||(L[11]=o("span",{class:"tool-icon"},"!",-1)),o("span",a2,[o("b",null,d(a(c)("editor.nav.alerts")),1),o("small",null,d(a(c)("editor.settings.alerts.detail")),1)])])])]),o("section",r2,[L[12]||(L[12]=o("h2",null,"Claude",-1)),o("p",null,d(a(c)("editor.settings.claude.text")),1),o("div",c2,[o("button",{type:"button",id:"claude-install",class:me(["btn",f.value?.installed&&f.value.current?"quiet":"primary"]),disabled:!f.value||h.value,onClick:p},d(!f.value||!f.value.installed?a(c)("editor.settings.claude.install"):f.value.current?a(c)("editor.settings.claude.install_again"):a(c)("editor.settings.claude.update")),11,u2),o("span",{id:"claude-status",class:me(["chip",f.value&&f.value.installed?f.value.current?"good":"update":""]),role:"status"},d(f.value?f.value.installed?f.value.current?a(c)("editor.settings.claude.installed_chip"):a(c)("editor.settings.claude.newer"):a(c)("editor.settings.claude.not_installed"):a(c)("editor.common.loading")),3)]),se(M,{keypath:"editor.settings.claude.writes",tag:"small",scope:"global"},{path:oe(()=>[o("code",d2,d(f.value?.path||"/homeassistant/.claude/skills/esp-screens"),1)]),_:1}),o("div",f2,[o("a",p2,d(a(c)("editor.settings.claude.download")),1),o("small",null,d(a(c)("editor.settings.claude.upload")),1)])])])])}}}),b2={class:"panel",id:"installer"},v2={class:"panel-head"},g2={class:"tx"},_2={class:"eyebrow"},y2={id:"install-title"},w2={key:0},k2=["aria-label"],$2={class:"boards"},x2={class:"board"},S2={class:"board"},C2={class:"field"},T2={class:"f-label",for:"friendly_name"},E2=["placeholder"],A2={class:"node-line"},P2={id:"node-preview"},O2={key:0,class:"field",id:"node-label"},I2={class:"f-label",for:"node-name"},L2={key:1,id:"wifi-fields",class:"wifi"},M2={class:"hint",id:"wifi-status"},R2={key:0,class:"field",id:"wifi-ssid-label"},N2={class:"f-label",for:"wifi_ssid"},F2={key:1,class:"field",id:"wifi-password-label"},D2={class:"f-label",for:"wifi_password"},U2={class:"field"},j2={class:"f-label",for:"install-target"},H2={key:0,value:"usb"},V2=["value"],W2={value:"download"},B2={value:""},K2={id:"target-hint"},q2={key:2,class:"hint",id:"install-note"},z2={class:"actions"},Y2=["disabled"],G2={id:"install-status",class:"status-line error",role:"status"},J2={key:1,id:"install-progress",class:"card"},X2={class:"progress-head"},Z2={key:0,class:"spin",id:"progress-spin"},Q2={id:"progress-title"},ew={id:"progress-detail"},tw={key:0,id:"install-download",class:"card",style:{background:"var(--surface-2)"}},nw=["href","download"],sw={class:"steps",id:"download-steps"},iw={key:1,id:"install-result",class:"field"},ow={class:"key-box"},lw={class:"steps",id:"install-steps"},aw=["open"],rw={id:"install-log",class:"log"},cw={class:"actions"},uw="https://web.esphome.io/?dashboard_install",dw=Le({__name:"InstallerView",setup(e){const t=qn({board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),n=qn({view:"setup",file:null,friendly:"",board:"cyd",target:"",apiKey:null,nodeEdited:!1,jobState:null,picked:!1,action:null}),s=ke(!1),i=ke(null),l=ke(null),r=ke([]),u=ke(""),f=ke(""),h=ke(!1),p=ke(!1),b=ke(null);let v=0;function y($e){return $e.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^[^a-z]+/,"").slice(0,30).replace(/-+$/,"")||"screen"}function I($e){const K=$e.replace(/^\/dev\/serial\/by-id\/usb-/,"").replace(/-if\d+(-port\d+)?$/,"").replace(/_/g," ");return`USB · ${K===$e?$e.replace(/^\/dev\//,""):K}`}Ct(()=>t.friendly_name,()=>{n.nodeEdited||(t.name=y(t.friendly_name))});const T=k(()=>t.name||"…"),$=k(()=>i.value?.ports||[]),A=k(()=>i.value?.wifi),S=k(()=>A.value?.state==="new"||A.value?.state==="missing"),D=k(()=>A.value?.missing||[]),C=k(()=>c(A.value?.state==="new"?"editor.installer.wifi.new":"editor.installer.wifi.missing")),B=k(()=>A.value?.state==="ready"?c("editor.installer.wifi.ready"):A.value?.state==="invalid"?c("editor.installer.wifi.invalid"):""),O=k(()=>c(t.target==="usb"?"editor.installer.target.usb":t.target==="download"?"editor.installer.target.download":t.target?$.value.length>1?"editor.installer.target.several":"editor.installer.target.once":"editor.installer.target.later")),E=k(()=>t.target==="download"?c("editor.firmware.build_download"):t.target?c("editor.installer.install"):c("editor.installer.save_profile")),L=k(()=>i.value?.job?.state==="running"&&!(n.file&&i.value.job.file===n.file)),M=k(()=>h.value||A.value?.state==="invalid"||t.target==="usb"||!!t.target&&(L.value||!i.value?.available));function U(){const $e=t.target;($e==="download"||$e===""?n.picked:$.value.includes($e))||(t.target=$.value[0]||"usb")}async function R(){let $e;try{$e=await Nt("firmware")}catch(ie){u.value=ie.message;return}i.value=$e;const K=$e.job,ne=K&&n.file&&K.file===n.file;if(ne&&(n.jobState=K.state),n.view==="setup"){if(ne&&K.state==="running"){Y(K,$e.logs||[]);return}U(),u.value=L.value?c("editor.installer.busy",{file:K.file}):!$e.available&&t.target?c("editor.installer.no_cli"):B.value}else n.view==="progress"&&ne&&(l.value=K,r.value=$e.logs||[],K.state!=="running"&&K.state!=="success"&&(p.value=!0))}function Y($e,K){n.view="progress",n.jobState=$e.state,n.action=$e.action,l.value=$e,r.value=K}const te=k(()=>l.value?.state==="running"),ye=k(()=>n.view==="done"||l.value?.state==="success"),re=k(()=>n.action==="download"),be=k(()=>c(n.view==="done"?"editor.installer.title.saved":te.value?"editor.installer.title.running":ye.value?re.value?"editor.installer.title.ready":"editor.installer.title.done":"editor.installer.title.failed")),ge=k(()=>n.view==="done"?c("editor.installer.progress.saved",{file:n.file}):te.value?l.value?.stage==="upload"?c("editor.installer.progress.writing",{name:n.friendly}):c("editor.installer.progress.building"):ye.value?re.value?c("editor.installer.progress.ready",{name:n.friendly}):c("editor.installer.progress.installed",{name:n.friendly}):c(re.value?"editor.installer.progress.build_failed":"editor.installer.progress.install_failed")),we=k(()=>n.view==="done"?c("editor.installer.detail.saved"):te.value?l.value?.stage==="upload"?c("editor.installer.detail.uploading"):c(re.value?"editor.installer.detail.building_download":"editor.installer.detail.building"):ye.value?re.value?c("editor.installer.detail.downloaded"):c(n.board==="cyd"?"editor.installer.detail.booted_cyd":"editor.installer.detail.booted"):r.value.filter($e=>/error/i.test($e)).pop()||r.value.filter($e=>/failed/i.test($e)).pop()||c("editor.installer.detail.see_log")),Ye=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.file||"")}/download`,name:(n.file||"").replace(/\.yaml$/,"")+".factory.bin"}));async function le($e){const K=$e.target;if(n.nodeEdited||(t.name=y(t.friendly_name)),!!K.reportValidity()){h.value=!0,f.value="";try{const ne={board:t.board,friendly_name:t.friendly_name,name:t.name,target:t.target};S.value&&(D.value.includes("wifi_ssid")&&(ne.wifi_ssid=t.wifi_ssid),D.value.includes("wifi_password")&&(ne.wifi_password=t.wifi_password));const ie=await ft("firmware/profiles","POST",ne);Object.assign(n,{file:ie.file,apiKey:ie.api_key,friendly:t.friendly_name.trim(),board:t.board,target:t.target}),t.wifi_password="",ie.job?Y(ie.job,[]):n.view="done"}catch(ne){f.value=ne.message}finally{h.value=!1}}}async function ee(){try{if(!re.value){const{ports:K}=await Nt("firmware");!K.includes(n.target)&&K.length===1&&(n.target=K[0])}const $e=await ft("firmware/jobs","POST",re.value?{file:n.file,action:"download"}:{file:n.file,action:"install",target:n.target});Y($e,[])}catch($e){Ce($e.message)}}function ce(){Object.assign(n,{view:"setup",file:null,apiKey:null,nodeEdited:!1,jobState:null,target:"",picked:!1,action:null}),Object.assign(t,{board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),s.value=!1,l.value=null,r.value=[],f.value="",u.value="",p.value=!1,R()}function tt(){n.view==="progress"&&n.jobState!=="running"&&(n.view="done"),He("")}return En(()=>{R(),v=window.setInterval(R,3e3)}),rs(()=>clearInterval(v)),($e,K)=>{const ne=Ws("i18n-t");return g(),_("div",b2,[o("div",v2,[o("div",g2,[o("span",_2,d(a(c)("editor.nav.new_screen")),1),o("h1",y2,d(n.view==="setup"?a(c)("editor.installer.title.setup"):be.value),1),n.view==="setup"?(g(),_("p",w2,d(a(c)("editor.installer.intro")),1)):W("",!0)]),o("button",{type:"button",class:"btn quiet",id:"close-install","aria-label":a(c)("editor.common.close"),onClick:tt},d(a(c)("editor.common.back")),9,k2)]),n.view==="setup"?(g(),_("form",{key:0,id:"install-form",class:"card",onSubmit:Pt(le,["prevent"])},[o("fieldset",null,[o("legend",null,d(a(c)("editor.installer.board")),1),o("div",$2,[o("label",x2,[Ee(o("input",{type:"radio",name:"board",value:"cyd","onUpdate:modelValue":K[0]||(K[0]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_cyd")),1),K[13]||(K[13]=o("small",null,"ESP32-2432S028 · 320 × 240",-1))])]),o("label",S2,[Ee(o("input",{type:"radio",name:"board",value:"guition","onUpdate:modelValue":K[1]||(K[1]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_guition")),1),K[14]||(K[14]=o("small",null,"ESP32-S3-4848S040 · 480 × 480 · GT911",-1))])])])]),o("div",C2,[o("label",T2,d(a(c)("editor.installer.name")),1),Ee(o("input",{id:"friendly_name",name:"friendly_name","onUpdate:modelValue":K[2]||(K[2]=ie=>t.friendly_name=ie),required:"",maxlength:"60",placeholder:a(c)("editor.installer.name_placeholder"),autocomplete:"off"},null,8,E2),[[Je,t.friendly_name]]),o("small",A2,[Me(d(a(c)("editor.installer.device_name"))+" ",1),o("code",P2,d(T.value),1),o("button",{type:"button",class:"btn link mini",id:"edit-node",onClick:K[3]||(K[3]=ie=>{n.nodeEdited=!0,s.value=!0})},d(a(c)("editor.installer.customize")),1)]),o("small",null,d(a(c)("editor.installer.name_hint")),1)]),s.value?(g(),_("div",O2,[o("label",I2,d(a(c)("editor.installer.device_name")),1),Ee(o("input",{id:"node-name",name:"name","onUpdate:modelValue":K[4]||(K[4]=ie=>t.name=ie),pattern:"[a-z][a-z0-9\\-]{0,29}",maxlength:"30",autocomplete:"off",onInput:K[5]||(K[5]=ie=>n.nodeEdited=!0)},null,544),[[Je,t.name]]),o("small",null,d(a(c)("editor.installer.device_name_hint")),1)])):W("",!0),S.value?(g(),_("fieldset",L2,[o("legend",null,d(a(c)("editor.installer.wifi.title")),1),o("p",M2,d(C.value),1),D.value.includes("wifi_ssid")?(g(),_("div",R2,[o("label",N2,d(a(c)("editor.installer.wifi.ssid")),1),Ee(o("input",{id:"wifi_ssid",name:"wifi_ssid","onUpdate:modelValue":K[6]||(K[6]=ie=>t.wifi_ssid=ie),autocomplete:"off"},null,512),[[Je,t.wifi_ssid]])])):W("",!0),D.value.includes("wifi_password")?(g(),_("div",F2,[o("label",D2,d(a(c)("editor.installer.wifi.password")),1),Ee(o("input",{id:"wifi_password",name:"wifi_password",type:"password","onUpdate:modelValue":K[7]||(K[7]=ie=>t.wifi_password=ie),autocomplete:"new-password"},null,512),[[Je,t.wifi_password]])])):W("",!0)])):W("",!0),o("div",U2,[o("label",j2,d(a(c)("editor.installer.install_via")),1),Ee(o("select",{id:"install-target",name:"target","onUpdate:modelValue":K[8]||(K[8]=ie=>t.target=ie),onChange:K[9]||(K[9]=ie=>{n.picked=!0,R()})},[$.value.length?W("",!0):(g(),_("option",H2,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(z,null,he($.value,ie=>(g(),_("option",{key:ie,value:ie},d(I(ie)),9,V2))),128)),o("option",W2,d(a(c)("editor.firmware.download_target")),1),o("option",B2,d(a(c)("editor.installer.later")),1)],544),[[Vn,t.target]]),o("small",K2,d(O.value),1)]),u.value?(g(),_("p",q2,d(u.value),1)):W("",!0),o("div",z2,[o("button",{type:"submit",class:"btn primary",id:"install-go",disabled:M.value},d(E.value),9,Y2),o("span",G2,d(f.value),1)])],32)):(g(),_("div",J2,[o("div",X2,[te.value?(g(),_("span",Z2)):(g(),_("span",{key:1,class:me(["outcome",ye.value?"ok":"bad"]),id:"progress-mark"},d(ye.value?"✓":"✕"),3)),o("strong",Q2,d(ge.value),1)]),o("p",ew,d(we.value),1),ye.value&&re.value&&n.view!=="done"?(g(),_("div",tw,[o("a",{class:"btn primary",id:"download-firmware",href:Ye.value.href,download:Ye.value.name},d(a(c)("editor.firmware.download_file",{name:Ye.value.name})),9,nw),o("ol",sw,[o("li",null,[se(ne,{keypath:"editor.installer.download_steps.plug",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.plug_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.download_steps.open",scope:"global"},{bold:oe(()=>[o("b",null,[se(ne,{keypath:"editor.installer.download_steps.open_bold",scope:"global"},{esphome_web:oe(()=>[o("a",{href:uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])]),_:1})]),o("li",null,[se(ne,{keypath:n.board==="cyd"?"editor.installer.download_steps.install_cyd":"editor.installer.download_steps.install",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.install_bold")),1)]),file:oe(()=>[Me(d(Ye.value.name),1)]),_:1},8,["keypath"])])]),o("small",null,d(a(c)("editor.installer.download_keep")),1)])):W("",!0),ye.value?(g(),_("div",iw,[o("div",ow,[o("span",null,d(a(c)("editor.installer.api_key")),1),o("code",{id:"api-key",ref_key:"keyBox",ref:b},d(n.apiKey||""),513),o("button",{type:"button",class:"btn quiet mini",id:"copy-key",onClick:K[10]||(K[10]=ie=>a(It)(n.apiKey||"",b.value))},d(a(c)("editor.common.copy")),1)]),o("ol",lw,[o("li",null,[se(ne,{keypath:"editor.installer.pairing.ha",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.ha_bold")),1)]),name:oe(()=>[Me(d(n.friendly),1)]),_:1}),K[15]||(K[15]=Me()),o("button",{type:"button",class:"btn quiet mini",onClick:K[11]||(K[11]=(...ie)=>a(ki)&&a(ki)(...ie))},d(a(c)("editor.common.open_integrations")),1)]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.key",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.key_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.actions",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.actions_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.tiles",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.tiles_bold")),1)]),_:1})])])])):W("",!0),n.view!=="done"?(g(),_("details",{key:2,id:"install-log-wrap",class:"log-wrap",open:p.value,onToggle:K[12]||(K[12]=ie=>p.value=ie.target.open)},[o("summary",null,d(a(c)("editor.installer.log")),1),o("pre",rw,d(r.value.join(` -`)),1)],40,aw)):W("",!0),o("div",cw,[!te.value&&!ye.value?(g(),_("button",{key:0,type:"button",class:"btn primary",id:"install-retry",onClick:ee},d(a(c)("editor.installer.retry")),1)):W("",!0),o("button",{type:"button",class:"btn quiet",id:"install-close",onClick:ce},d(ye.value?a(c)("editor.installer.another"):a(c)("editor.installer.start_over")),1),o("button",{type:"button",class:me(["btn",ye.value?"primary":"quiet"]),onClick:tt},d(ye.value?a(c)("editor.installer.done"):a(c)("editor.common.close")),3)])]))])}}}),fw={class:"panel",id:"firmware-dialog"},pw={class:"panel-head"},hw={class:"tx"},mw={class:"eyebrow"},bw={class:"card"},vw={class:"card-grid"},gw={class:"field"},_w={class:"f-label",for:"firmware-file"},yw=["value"],ww={class:"field"},kw={class:"f-label",for:"firmware-port"},$w={value:"ota"},xw={key:0,value:"usb"},Sw=["value"],Cw={value:"download"},Tw={key:0,class:"field",id:"firmware-host-label"},Ew={class:"f-label",for:"firmware-host"},Aw=["placeholder"],Pw={class:"actions"},Ow=["disabled"],Iw=["disabled"],Lw=["disabled"],Mw={key:0,class:"spin"},Rw={id:"firmware-status",class:"status-line",role:"status"},Nw={key:0,id:"firmware-download",class:"card",style:{background:"var(--surface-2)"}},Fw=["href","download"],Dw={id:"firmware-log",class:"log"},Uw="https://web.esphome.io/?dashboard_install",jw=Le({__name:"FirmwareView",setup(e){const t=ke(null),n=ke(""),s=ke("ota"),i=ke("");let l=0;async function r(T=!1){try{const $=await Nt("firmware");t.value=$,(T||!n.value)&&(n.value=$.profiles[0]?.file||"");const A=$.ports||[];s.value.startsWith("/")&&!A.includes(s.value)&&(s.value=A[0]||"usb"),s.value==="usb"&&A.length&&(s.value=A[0])}catch($){Ce($.message)}}const u=k(()=>t.value?.job?.state==="running"),f=k(()=>!t.value||u.value||!t.value.available||!t.value.profiles?.length),h=k(()=>f.value||s.value==="usb"),p=k(()=>t.value?.ports||[]),b=k(()=>t.value?t.value.available?t.value.job?`${t.value.job.file} · ${t.value.job.action} · ${t.value.job.state}`:c("editor.firmware.choose"):c("editor.firmware.no_cli"):c("editor.common.loading")),v=k(()=>s.value==="download"&&!!n.value&&!!t.value?.downloads?.includes(n.value)),y=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.value)}/download`,name:n.value.replace(/\.yaml$/,"")+".factory.bin"}));async function I(T){try{await ft("firmware/jobs","POST",{file:n.value,action:T==="validate"?"validate":T==="build"?"build":s.value==="download"?"download":"install",target:s.value==="ota"?i.value.trim():s.value==="download"?"":s.value}),await r()}catch($){Ce($.message)}}return En(()=>{r(!0),l=window.setInterval(()=>r(),3e3)}),rs(()=>clearInterval(l)),(T,$)=>{const A=Ws("i18n-t");return g(),_("div",fw,[o("div",pw,[o("div",hw,[o("span",mw,d(a(c)("editor.nav.firmware")),1),o("h1",null,d(a(c)("editor.firmware.title")),1),se(A,{keypath:"editor.firmware.intro",tag:"p",scope:"global"},{ota:oe(()=>[o("b",null,d(a(c)("editor.firmware.ota")),1)]),download:oe(()=>[o("b",null,d(a(c)("editor.firmware.download")),1)]),check:oe(()=>[o("b",null,d(a(c)("editor.firmware.check")),1)]),build:oe(()=>[o("b",null,d(a(c)("editor.firmware.build")),1)]),install:oe(()=>[o("b",null,d(a(c)("editor.firmware.install")),1)]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-firmware",onClick:$[0]||($[0]=S=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",bw,[o("div",vw,[o("div",gw,[o("label",_w,d(a(c)("editor.firmware.profile")),1),Ee(o("select",{id:"firmware-file","onUpdate:modelValue":$[1]||($[1]=S=>n.value=S)},[(g(!0),_(z,null,he(t.value?.profiles||[],S=>(g(),_("option",{key:S.file,value:S.file},d(S.file),9,yw))),128))],512),[[Vn,n.value]])]),o("div",ww,[o("label",kw,d(a(c)("editor.firmware.install_to")),1),Ee(o("select",{id:"firmware-port","onUpdate:modelValue":$[2]||($[2]=S=>s.value=S)},[o("option",$w,d(a(c)("editor.firmware.ota")),1),p.value.length?W("",!0):(g(),_("option",xw,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(z,null,he(p.value,S=>(g(),_("option",{key:S,value:S},d(S),9,Sw))),128)),o("option",Cw,d(a(c)("editor.firmware.download_target")),1)],512),[[Vn,s.value]])]),s.value==="ota"?(g(),_("div",Tw,[o("label",Ew,d(a(c)("editor.firmware.host")),1),Ee(o("input",{id:"firmware-host","onUpdate:modelValue":$[3]||($[3]=S=>i.value=S),placeholder:n.value?n.value.replace(/\.yaml$/,".local"):"screen-livingroom.local"},null,8,Aw),[[Je,i.value]])])):W("",!0)]),o("div",Pw,[o("button",{type:"button",class:"btn quiet",id:"firmware-validate",disabled:f.value,onClick:$[4]||($[4]=S=>I("validate"))},d(a(c)("editor.firmware.check")),9,Ow),o("button",{type:"button",class:"btn quiet",id:"firmware-build",disabled:f.value,onClick:$[5]||($[5]=S=>I("build"))},d(a(c)("editor.firmware.build")),9,Iw),o("button",{type:"button",class:"btn primary",id:"firmware-install",disabled:h.value,onClick:$[6]||($[6]=S=>I("install"))},d(s.value==="download"?a(c)("editor.firmware.build_download"):a(c)("editor.firmware.install")),9,Lw),u.value?(g(),_("span",Mw)):W("",!0)]),o("p",Rw,d(b.value),1),v.value?(g(),_("div",Nw,[o("a",{class:"btn primary",id:"firmware-download-link",href:y.value.href,download:y.value.name},d(a(c)("editor.firmware.download_file",{name:y.value.name})),9,Fw),se(A,{keypath:"editor.firmware.download_how",tag:"small",scope:"global"},{esphome_web:oe(()=>[o("a",{href:Uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])):W("",!0)]),o("pre",Dw,d((t.value?.logs||[]).join(` -`)),1)])}}}),Hw={class:"panel wide alerts",id:"alerts-dialog"},Vw={class:"panel-head"},Ww={class:"tx"},Bw={class:"eyebrow"},Kw={key:0,class:"hint"},qw={class:"alert-hero"},zw={class:"alert-mock",id:"alert-mock","aria-hidden":"true"},Yw={class:"mdi alert-mock-icon",id:"alert-mock-icon"},Gw={id:"alert-mock-title"},Jw={id:"alert-mock-subtitle"},Xw={class:"fake",id:"alert-mock-button"},Zw=["aria-label"],Qw=["data-jump","onClick"],ek={id:"alerts-try",class:"card"},tk={class:"field"},nk={class:"f-label",for:"try-screen"},sk={value:"all"},ik=["value","disabled"],ok={class:"field"},lk={class:"f-label",for:"try-title"},ak={class:"field"},rk={class:"f-label",for:"try-subtitle"},ck={class:"field"},uk={class:"f-label",for:"try-icon"},dk={id:"try-icons"},fk=["value"],pk={class:"field"},hk={class:"f-label",for:"try-color"},mk={value:""},bk=["value"],vk={class:"field"},gk={class:"f-label",for:"try-button"},_k={class:"field"},yk={class:"f-label",for:"try-timeout"},wk={class:"check field"},kk={class:"actions field wide"},$k=["disabled"],xk={class:"status-line",id:"try-result",role:"status"},Sk={id:"alerts-screens",class:"card"},Ck={id:"alerts-min-firmware"},Tk={id:"alerts-screen-list",class:"options"},Ek={key:0,class:"hint"},Ak={class:"alert-screen-head"},Pk={class:"copy-label"},Ok=["onClick"],Ik={id:"alerts-howto",class:"card"},Lk={class:"steps"},Mk={class:"field"},Rk={class:"f-label",for:"alerts-example-screen"},Nk=["value"],Fk={key:0,value:""},Dk={class:"copy-line"},Uk={id:"alerts-example"},jk={id:"alerts-all",class:"card"},Hk={id:"alerts-all-event"},Vk={id:"alerts-all-dismiss"},Wk={class:"copy-line"},Bk={id:"alerts-all-example"},Kk={id:"alerts-fields",class:"card"},qk={class:"table-scroll"},zk={id:"alerts-field-table"},Yk={key:0},Gk={id:"alerts-icons",class:"card"},Jk={class:"subhead"},Xk={class:"chips",id:"alerts-suggested"},Zk=["onClick"],Qk={class:"mdi"},e3={class:"field"},t3={class:"f-label",for:"alerts-icon-search"},n3=["placeholder"],s3={id:"alerts-icon-groups"},i3={class:"subhead"},o3={class:"alert-icon-grid"},l3=["title","onClick"],a3={class:"mdi"},r3={key:0},c3={key:0,class:"hint"},u3={id:"alerts-colors",class:"card"},d3={class:"swatches",id:"alerts-swatches"},f3=["onClick"],p3={id:"alerts-behaviour",class:"card"},h3={class:"alerts-list"},m3={id:"alerts-events",class:"card"},b3={id:"alerts-event-name"},v3={class:"table-scroll"},g3={id:"alerts-ending-table"},_3={class:"subhead"},y3={class:"copy-line"},w3={id:"alerts-wait-example"},k3={id:"alerts-tips",class:"card"},$3={class:"alerts-list"},x3=Le({__name:"AlertsView",setup(e){const t=k(()=>m.inventory.alerts),n=qn({screen:"all",title:c("editor.alerts.example.title"),subtitle:c("editor.alerts.example.subtitle"),icon:"doorbell",color:"orange",button_text:c("editor.alerts.example.button"),timeout:30,flash:!0}),s=ke(!1),i=ke(""),l=k(()=>m.inventory.screens.filter(L=>Kn(L)&&L.online));async function r(){s.value=!0,i.value="";try{const{screen:L,...M}=n,U=await Am(L,M),R=m.inventory.screens.find(te=>te.id===L)?.name,Y=L==="all"?c("editor.alerts.try.sent_all",U.sent):R?c("editor.alerts.try.sent_to",{name:R}):c("editor.alerts.try.sent_one");i.value=U.sent?[Y,U.skipped?c("editor.alerts.try.skipped",U.skipped):"",U.unusable?.length?c("editor.alerts.try.left_empty",{fields:U.unusable.join(", ")}):""].filter(Boolean).join(" "):c("editor.alerts.try.nothing",{version:t.value?.min_firmware||"0.2.31"})}catch(L){i.value=L.message}finally{s.value=!1}}const u=k(()=>m.inventory.icons),f=ke(""),h=ke(""),p=L=>`"${String(L).replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,b=L=>L.type==="string"?/^[a-z][a-z0-9-]*$/.test(L.example)?L.example:p(L.example):L.example===!0?"true":L.example===!1?"false":String(L.example),v=k(()=>m.inventory.screens.filter(L=>L.alert_action)),y=k(()=>f.value||v.value[0]?.alert_action||""),I=k(()=>{const L=(t.value?.fields||[]).map(M=>` ${M.name}: ${b(M)}`);return`action: ${y.value||"esphome._show_alert"} +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(i){if(i.ep)return;i.ep=!0;const l=n(i);fetch(i.href,l)}})();function Go(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Re={},Un=[],Bt=()=>{},hr=()=>!1,Ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ai=e=>e.startsWith("onUpdate:"),et=Object.assign,Jo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Nu=Object.prototype.hasOwnProperty,Te=(e,t)=>Nu.call(e,t),pe=Array.isArray,yn=e=>Hs(e)==="[object Map]",ln=e=>Hs(e)==="[object Set]",Il=e=>Hs(e)==="[object Date]",_e=e=>typeof e=="function",We=e=>typeof e=="string",qt=e=>typeof e=="symbol",Pe=e=>e!==null&&typeof e=="object",mr=e=>(Pe(e)||_e(e))&&_e(e.then)&&_e(e.catch),br=Object.prototype.toString,Hs=e=>br.call(e),Fu=e=>Hs(e).slice(8,-1),vr=e=>Hs(e)==="[object Object]",Xo=e=>We(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ys=Go(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pi=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Du=/-\w/g,ct=Pi(e=>e.replace(Du,t=>t.slice(1).toUpperCase())),Uu=/\B([A-Z])/g,En=Pi(e=>e.replace(Uu,"-$1").toLowerCase()),Oi=Pi(e=>e.charAt(0).toUpperCase()+e.slice(1)),Yi=Pi(e=>e?`on${Oi(e)}`:""),Wt=(e,t)=>!Object.is(e,t),si=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ii=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ll;const Li=()=>Ll||(Ll=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ue(e){if(pe(e)){const t={};for(let n=0;nn.startsWith("/*")?"":n).split(ju).forEach(n=>{if(n){const s=n.split(Hu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function me(e){let t="";if(We(e))t=e;else if(pe(e))for(let n=0;nMt(n,t))}const yr=e=>!!(e&&e.__v_isRef===!0),d=e=>We(e)?e:e==null?"":pe(e)||Pe(e)&&(e.toString===br||!_e(e.toString))?yr(e)?d(e.value):JSON.stringify(e,wr,2):String(e),wr=(e,t)=>yr(t)?wr(e,t.value):yn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],l)=>(n[Gi(s,l)+" =>"]=i,n),{})}:ln(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Gi(n))}:qt(t)?Gi(t):Pe(t)&&!pe(t)&&!vr(t)?String(t):t,Gi=(e,t="")=>{var n;return qt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Ge;class kr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Ge&&(Ge.active?(this.parent=Ge,this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Ge===this)Ge=this.prevScope;else{let t=Ge;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(ks){let t=ks;for(ks=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ws;){let t=ws;for(ws=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Tr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Er(e){let t,n=e.depsTail,s=n;for(;s;){const i=s.prevDep;s.version===-1?(s===n&&(n=i),tl(s),Ju(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=i}e.deps=t,e.depsTail=n}function _o(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ar(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ar(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ts)||(e.globalVersion=Ts,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_o(e))))return;e.flags|=2;const t=e.dep,n=Ne,s=Lt;Ne=e,Lt=!0;try{Tr(e);const i=e.fn(e._value);(t.version===0||Wt(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{Ne=n,Lt=s,Er(e),e.flags&=-3}}function tl(e,t=!1){const{dep:n,prevSub:s,nextSub:i}=e;if(s&&(s.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let l=n.computed.deps;l;l=l.nextDep)tl(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ju(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Lt=!0;const Pr=[];function an(){Pr.push(Lt),Lt=!1}function rn(){const e=Pr.pop();Lt=e===void 0?!0:e}function Nl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ne;Ne=void 0;try{t()}finally{Ne=n}}}let Ts=0;class Xu{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class nl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Ne||!Lt||Ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ne)n=this.activeLink=new Xu(Ne,this),Ne.deps?(n.prevDep=Ne.depsTail,Ne.depsTail.nextDep=n,Ne.depsTail=n):Ne.deps=Ne.depsTail=n,Or(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Ne.depsTail,n.nextDep=void 0,Ne.depsTail.nextDep=n,Ne.depsTail=n,Ne.deps===n&&(Ne.deps=s)}return n}trigger(t){this.version++,Ts++,this.notify(t)}notify(t){Qo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{el()}}}function Or(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Or(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const yo=new WeakMap,Hn=Symbol(""),wo=Symbol(""),Es=Symbol("");function nt(e,t,n){if(Lt&&Ne){let s=yo.get(e);s||yo.set(e,s=new Map);let i=s.get(n);i||(s.set(n,i=new nl),i.map=s,i.key=n),i.track()}}function Zt(e,t,n,s,i,l){const r=yo.get(e);if(!r){Ts++;return}const u=f=>{f&&f.trigger()};if(Qo(),t==="clear")r.forEach(u);else{const f=pe(e),h=f&&Xo(n);if(f&&n==="length"){const p=Number(s);r.forEach((b,v)=>{(v==="length"||v===Es||!qt(v)&&v>=p)&&u(b)})}else switch((n!==void 0||r.has(void 0))&&u(r.get(n)),h&&u(r.get(Es)),t){case"add":f?h&&u(r.get("length")):(u(r.get(Hn)),yn(e)&&u(r.get(wo)));break;case"delete":f||(u(r.get(Hn)),yn(e)&&u(r.get(wo)));break;case"set":yn(e)&&u(r.get(Hn));break}}el()}function Gn(e){const t=xe(e);return t===e||(nt(t,"iterate",Es),St(e))?t:zt(e)?wn(e)?t.map(n=>$n(At(n))):t.map($n):t.map(At)}function Mi(e){return nt(e=xe(e),"iterate",Es),e}function Ht(e,t){return zt(e)?$n(wn(e)?At(t):t):At(t)}const Zu={__proto__:null,[Symbol.iterator](){return Xi(this,Symbol.iterator,e=>Ht(this,e))},concat(...e){return Gn(this).concat(...e.map(t=>pe(t)?Gn(t):t))},entries(){return Xi(this,"entries",e=>(e[1]=Ht(this,e[1]),e))},every(e,t){return Yt(this,"every",e,t,void 0,arguments)},filter(e,t){return Yt(this,"filter",e,t,n=>n.map(s=>Ht(this,s)),arguments)},find(e,t){return Yt(this,"find",e,t,n=>Ht(this,n),arguments)},findIndex(e,t){return Yt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Yt(this,"findLast",e,t,n=>Ht(this,n),arguments)},findLastIndex(e,t){return Yt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Yt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Zi(this,"includes",e)},indexOf(...e){return Zi(this,"indexOf",e)},join(e){return Gn(this).join(e)},lastIndexOf(...e){return Zi(this,"lastIndexOf",e)},map(e,t){return Yt(this,"map",e,t,void 0,arguments)},pop(){return ds(this,"pop")},push(...e){return ds(this,"push",e)},reduce(e,...t){return Fl(this,"reduce",e,t)},reduceRight(e,...t){return Fl(this,"reduceRight",e,t)},shift(){return ds(this,"shift")},some(e,t){return Yt(this,"some",e,t,void 0,arguments)},splice(...e){return ds(this,"splice",e)},toReversed(){return Gn(this).toReversed()},toSorted(e){return Gn(this).toSorted(e)},toSpliced(...e){return Gn(this).toSpliced(...e)},unshift(...e){return ds(this,"unshift",e)},values(){return Xi(this,"values",e=>Ht(this,e))}};function Xi(e,t,n){const s=Mi(e),i=s[t]();return s!==e&&!St(e)&&(i._next=i.next,i.next=()=>{const l=i._next();return l.done||(l.value=n(l.value)),l}),i}const Qu=Array.prototype;function Yt(e,t,n,s,i,l){const r=Mi(e),u=r!==e&&!St(e),f=r[t];if(f!==Qu[t]){const b=f.apply(e,l);return u?At(b):b}let h=n;r!==e&&(u?h=function(b,v){return n.call(this,Ht(e,b),v,e)}:n.length>2&&(h=function(b,v){return n.call(this,b,v,e)}));const p=f.call(r,h,s);return u&&i?i(p):p}function Fl(e,t,n,s){const i=Mi(e),l=i!==e&&!St(e);let r=n,u=!1;i!==e&&(l?(u=s.length===0,r=function(h,p,b){return u&&(u=!1,h=Ht(e,h)),n.call(this,h,Ht(e,p),b,e)}):n.length>3&&(r=function(h,p,b){return n.call(this,h,p,b,e)}));const f=i[t](r,...s);return u?Ht(e,f):f}function Zi(e,t,n){const s=xe(e);nt(s,"iterate",Es);const i=s[t](...n);return(i===-1||i===!1)&&ol(n[0])?(n[0]=xe(n[0]),s[t](...n)):i}function ds(e,t,n=[]){an(),Qo();const s=xe(e)[t].apply(e,n);return el(),rn(),s}const ed=Go("__proto__,__v_isRef,__isVue"),Ir=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(qt));function td(e){qt(e)||(e=String(e));const t=xe(this);return nt(t,"has",e),t.hasOwnProperty(e)}class Lr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const i=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return l;if(n==="__v_raw")return s===(i?l?dd:Fr:l?Nr:Rr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=pe(t);if(!i){let f;if(r&&(f=Zu[n]))return f;if(n==="hasOwnProperty")return td}const u=Reflect.get(t,n,Qe(t)?t:s);if((qt(n)?Ir.has(n):ed(n))||(i||nt(t,"get",n),l))return u;if(Qe(u)){const f=r&&Xo(n)?u:u.value;return i&&Pe(f)?$o(f):f}return Pe(u)?i?$o(u):zn(u):u}}class Mr extends Lr{constructor(t=!1){super(!1,t)}set(t,n,s,i){let l=t[n];const r=pe(t)&&Xo(n);if(!this._isShallow){const h=zt(l);if(!St(s)&&!zt(s)&&(l=xe(l),s=xe(s)),!r&&Qe(l)&&!Qe(s))return h||(l.value=s),!0}const u=r?Number(n)e,Gs=e=>Reflect.getPrototypeOf(e);function ld(e,t,n){return function(...s){const i=this.__v_raw,l=xe(i),r=yn(l),u=e==="entries"||e===Symbol.iterator&&r,f=e==="keys"&&r,h=i[e](...s),p=n?ko:t?$n:At;return!t&&nt(l,"iterate",f?wo:Hn),et(Object.create(h),{next(){const{value:b,done:v}=h.next();return v?{value:b,done:v}:{value:u?[p(b[0]),p(b[1])]:p(b),done:v}}})}}function Js(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ad(e,t){const n={get(i){const l=this.__v_raw,r=xe(l),u=xe(i);e||(Wt(i,u)&&nt(r,"get",i),nt(r,"get",u));const{has:f}=Gs(r),h=t?ko:e?$n:At;if(f.call(r,i))return h(l.get(i));if(f.call(r,u))return h(l.get(u));l!==r&&l.get(i)},get size(){const i=this.__v_raw;return!e&&nt(xe(i),"iterate",Hn),i.size},has(i){const l=this.__v_raw,r=xe(l),u=xe(i);return e||(Wt(i,u)&&nt(r,"has",i),nt(r,"has",u)),i===u?l.has(i):l.has(i)||l.has(u)},forEach(i,l){const r=this,u=r.__v_raw,f=xe(u),h=t?ko:e?$n:At;return!e&&nt(f,"iterate",Hn),u.forEach((p,b)=>i.call(l,h(p),h(b),r))}};return et(n,e?{add:Js("add"),set:Js("set"),delete:Js("delete"),clear:Js("clear")}:{add(i){const l=xe(this),r=Gs(l),u=xe(i),f=!t&&!St(i)&&!zt(i)?u:i;return r.has.call(l,f)||Wt(i,f)&&r.has.call(l,i)||Wt(u,f)&&r.has.call(l,u)||(l.add(f),Zt(l,"add",f,f)),this},set(i,l){!t&&!St(l)&&!zt(l)&&(l=xe(l));const r=xe(this),{has:u,get:f}=Gs(r);let h=u.call(r,i);h||(i=xe(i),h=u.call(r,i));const p=f.call(r,i);return r.set(i,l),h?Wt(l,p)&&Zt(r,"set",i,l):Zt(r,"add",i,l),this},delete(i){const l=xe(this),{has:r,get:u}=Gs(l);let f=r.call(l,i);f||(i=xe(i),f=r.call(l,i)),u&&u.call(l,i);const h=l.delete(i);return f&&Zt(l,"delete",i,void 0),h},clear(){const i=xe(this),l=i.size!==0,r=i.clear();return l&&Zt(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=ld(i,e,t)}),n}function sl(e,t){const n=ad(e,t);return(s,i,l)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Te(n,i)&&i in s?n:s,i,l)}const rd={get:sl(!1,!1)},cd={get:sl(!1,!0)},ud={get:sl(!0,!1)};const Rr=new WeakMap,Nr=new WeakMap,Fr=new WeakMap,dd=new WeakMap;function fd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function zn(e){return zt(e)?e:il(e,!1,sd,rd,Rr)}function pd(e){return il(e,!1,od,cd,Nr)}function $o(e){return il(e,!0,id,ud,Fr)}function il(e,t,n,s,i){if(!Pe(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=i.get(e);if(l)return l;const r=fd(Fu(e));if(r===0)return e;const u=new Proxy(e,r===2?s:n);return i.set(e,u),u}function wn(e){return zt(e)?wn(e.__v_raw):!!(e&&e.__v_isReactive)}function zt(e){return!!(e&&e.__v_isReadonly)}function St(e){return!!(e&&e.__v_isShallow)}function ol(e){return e?!!e.__v_raw:!1}function xe(e){const t=e&&e.__v_raw;return t?xe(t):e}function hd(e){return!Te(e,"__v_skip")&&Object.isExtensible(e)&&gr(e,"__v_skip",!0),e}const At=e=>Pe(e)?zn(e):e,$n=e=>Pe(e)?$o(e):e;function Qe(e){return e?e.__v_isRef===!0:!1}function ke(e){return Dr(e,!1)}function md(e){return Dr(e,!0)}function Dr(e,t){return Qe(e)?e:new bd(e,t)}class bd{constructor(t,n){this.dep=new nl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:xe(t),this._value=n?t:At(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||St(t)||zt(t);t=s?t:xe(t),Wt(t,n)&&(this._rawValue=t,this._value=s?t:At(t),this.dep.trigger())}}function a(e){return Qe(e)?e.value:e}const vd={get:(e,t,n)=>t==="__v_raw"?e:a(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return Qe(i)&&!Qe(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Ur(e){return wn(e)?e:new Proxy(e,vd)}class gd{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new nl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ts-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Ne!==this)return Cr(this,!0),!0}get value(){const t=this.dep.track();return Ar(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function _d(e,t,n=!1){let s,i;return _e(e)?s=e:(s=e.get,i=e.set),new gd(s,i,n)}const Xs={},ai=new WeakMap;let Fn;function yd(e,t=!1,n=Fn){if(n){let s=ai.get(n);s||ai.set(n,s=[]),s.push(e)}}function wd(e,t,n=Re){const{immediate:s,deep:i,once:l,scheduler:r,augmentJob:u,call:f}=n,h=C=>i?C:St(C)||i===!1||i===0?Qt(C,1):Qt(C);let p,b,v,y,I=!1,T=!1;if(Qe(e)?(b=()=>e.value,I=St(e)):wn(e)?(b=()=>h(e),I=!0):pe(e)?(T=!0,I=e.some(C=>wn(C)||St(C)),b=()=>e.map(C=>{if(Qe(C))return C.value;if(wn(C))return h(C);if(_e(C))return f?f(C,2):C()})):_e(e)?t?b=f?()=>f(e,2):e:b=()=>{if(v){an();try{v()}finally{rn()}}const C=Fn;Fn=p;try{return f?f(e,3,[y]):e(y)}finally{Fn=C}}:b=Bt,t&&i){const C=b,B=i===!0?1/0:i;b=()=>Qt(C(),B)}const $=$r(),A=()=>{p.stop(),$&&$.active&&Jo($.effects,p)};if(l&&t){const C=t;t=(...B)=>{const O=C(...B);return A(),O}}let S=T?new Array(e.length).fill(Xs):Xs;const D=C=>{if(!(!(p.flags&1)||!p.dirty&&!C))if(t){const B=p.run();if(C||i||I||(T?B.some((O,E)=>Wt(O,S[E])):Wt(B,S))){v&&v();const O=Fn;Fn=p;try{const E=[B,S===Xs?void 0:T&&S[0]===Xs?[]:S,y];S=B,f?f(t,3,E):t(...E)}finally{Fn=O}}}else p.run()};return u&&u(D),p=new xr(b),p.scheduler=r?()=>r(D,!1):D,y=C=>yd(C,!1,p),v=p.onStop=()=>{const C=ai.get(p);if(C){if(f)f(C,4);else for(const B of C)B();ai.delete(p)}},t?s?D(!0):S=p.run():r?r(D.bind(null,!0),!0):p.run(),A.pause=p.pause.bind(p),A.resume=p.resume.bind(p),A.stop=A,A}function Qt(e,t=1/0,n){if(t<=0||!Pe(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Qe(e))Qt(e.value,t,n);else if(pe(e))for(let s=0;s{Qt(s,t,n)});else if(vr(e)){for(const s in e)Qt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Qt(e[s],t,n)}return e}function Vs(e,t,n,s){try{return s?e(...s):e()}catch(i){Ri(i,t,n)}}function Rt(e,t,n,s){if(_e(e)){const i=Vs(e,t,n,s);return i&&mr(i)&&i.catch(l=>{Ri(l,t,n)}),i}if(pe(e)){const i=[];for(let l=0;l>>1,i=rt[s],l=As(i);l=As(n)?rt.push(e):rt.splice($d(t),0,e),e.flags|=1,Hr()}}function Hr(){ri||(ri=jr.then(Wr))}function xd(e){if(!pe(e))vn&&e.id===-1?vn.splice(Jn+1,0,e):e.flags&1||(Qn.push(e),e.flags|=1);else for(let t=0;tAs(n)-As(s));if(Qn.length=0,vn){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Wr(e){try{for(Ut=0;Ut{s._d&&fi(-1);const l=ci(t),r=Vn.length;let u;try{u=e(...i)}finally{for(let f=Vn.length;f>r;f--)bc();ci(l),s._d&&fi(1)}return u};return s._n=!0,s._c=!0,s._d=!0,s}function Ee(e,t){if(mt===null)return e;const n=ji(mt),s=e.dirs||(e.dirs=[]);for(let i=0;i1)return n&&_e(t)?t.call(s&&s.proxy):t}}const Cd=Symbol.for("v-scx"),Td=()=>$s(Cd);function Ct(e,t,n){return Kr(e,t,n)}function Kr(e,t,n=Re){const{immediate:s,deep:i,flush:l,once:r}=n,u=et({},n),f=t&&s||!t&&l!=="post";let h;if(Is){if(l==="sync"){const y=Td();h=y.__watcherHandles||(y.__watcherHandles=[])}else if(!f){const y=()=>{};return y.stop=Bt,y.resume=Bt,y.pause=Bt,y}}const p=st;u.call=(y,I,T)=>Rt(y,p,I,T);let b=!1;l==="post"?u.scheduler=y=>{dt(y,p&&p.suspense)}:l!=="sync"&&(b=!0,u.scheduler=(y,I)=>{I?y():ll(y)}),u.augmentJob=y=>{t&&(y.flags|=4),b&&(y.flags|=2,p&&(y.id=p.uid,y.i=p))};const v=wd(e,t,u);return Is&&(h?h.push(v):f&&v()),v}function Ed(e,t,n){const s=this.proxy,i=We(e)?e.includes(".")?qr(s,e):()=>s[e]:e.bind(s,s);let l;_e(t)?l=t:(l=t.handler,n=t);const r=Ks(this),u=Kr(i,l.bind(s),n);return r(),u}function qr(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;ie.__isTeleport,Qi=Symbol("_leaveCb");function Pd(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==cn){t=n;break}}return t}function zr(e){if(!rl(e))return Fi(e.type)&&e.children?Pd(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&_e(n.default))return n.default()}}function al(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;al(Fi(n.type)&&zr(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Le(e,t){return _e(e)?et({name:e.name},t,{setup:e}):e}function Yr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ul(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const ui=new WeakMap;function xs(e,t,n,s,i=!1){if(pe(e)){e.forEach((T,$)=>xs(T,t&&(pe(t)?t[$]:t),n,s,i));return}if(Ss(s)&&!i){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&xs(e,t,n,s.component.subTree);return}const l=s.shapeFlag&4?ji(s.component):s.el,r=i?null:l,{i:u,r:f}=e,h=t&&t.r,p=u.refs===Re?u.refs={}:u.refs,b=u.setupState,v=xe(b),y=b===Re?hr:T=>Ul(p,T)?!1:Te(v,T),I=(T,$)=>!($&&Ul(p,$));if(h!=null&&h!==f){if(jl(t),We(h))p[h]=null,y(h)&&(b[h]=null);else if(Qe(h)){const T=t;I(h,T.k)&&(h.value=null),T.k&&(p[T.k]=null)}}if(_e(f))Vs(f,u,12,[r,p]);else{const T=We(f),$=Qe(f);if(T||$){const A=()=>{if(e.f){const S=T?y(f)?b[f]:p[f]:I()||!e.k?f.value:p[e.k];if(i)pe(S)&&Jo(S,l);else if(pe(S))S.includes(l)||S.push(l);else if(T)p[f]=[l],y(f)&&(b[f]=p[f]);else{const D=[l];I(f,e.k)&&(f.value=D),e.k&&(p[e.k]=D)}}else T?(p[f]=r,y(f)&&(b[f]=r)):$&&(I(f,e.k)&&(f.value=r),e.k&&(p[e.k]=r))};if(r){const S=()=>{A(),ui.delete(e)};S.id=-1,ui.set(e,S),dt(S,n)}else jl(e),A()}}}function jl(e){const t=ui.get(e);t&&(t.flags|=8,ui.delete(e))}Li().requestIdleCallback;Li().cancelIdleCallback;const Ss=e=>!!e.type.__asyncLoader,rl=e=>e.type.__isKeepAlive;function Od(e,t){Gr(e,"a",t)}function Id(e,t){Gr(e,"da",t)}function Gr(e,t,n=st){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Di(t,s,n),n){let i=n.parent;for(;i&&i.parent;)rl(i.parent.vnode)&&Ld(s,t,n,i),i=i.parent}}function Ld(e,t,n,s){const i=Di(t,e,s,!0);cl(()=>{Jo(s[t],i)},n)}function Di(e,t,n=st,s=!1){if(n){const i=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...r)=>{an();const u=Ks(n),f=Rt(t,n,e,r);return u(),rn(),f});return s?i.unshift(l):i.push(l),l}}const pn=e=>(t,n=st)=>{(!Is||e==="sp")&&Di(e,(...s)=>t(...s),n)},Md=pn("bm"),An=pn("m"),Rd=pn("bu"),Nd=pn("u"),rs=pn("bum"),cl=pn("um"),Fd=pn("sp"),Dd=pn("rtg"),Ud=pn("rtc");function jd(e,t=st){Di("ec",e,t)}const Jr="components";function Ws(e,t){return Zr(Jr,e,!0,t)||e}const Xr=Symbol.for("v-ndc");function Hd(e){return We(e)?Zr(Jr,e,!1)||e:e||Xr}function Zr(e,t,n=!0,s=!1){const i=mt||st;if(i){const l=i.type;{const u=Sf(l,!1);if(u&&(u===t||u===ct(t)||u===Oi(ct(t))))return l}const r=Hl(i[e]||l[e],t)||Hl(i.appContext[e],t);return!r&&s?l:r}}function Hl(e,t){return e&&(e[t]||e[ct(t)]||e[Oi(ct(t))])}function he(e,t,n,s){let i;const l=n,r=pe(e);if(r||We(e)){const u=r&&wn(e);let f=!1,h=!1;u&&(f=!St(e),h=zt(e),e=Mi(e)),i=new Array(e.length);for(let p=0,b=e.length;pt(u,f,void 0,l));else{const u=Object.keys(e);i=new Array(u.length);for(let f=0,h=u.length;fe?yc(e)?ji(e):xo(e.parent):null,Cs=et(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xo(e.parent),$root:e=>xo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ec(e),$forceUpdate:e=>e.f||(e.f=()=>{ll(e.update)}),$nextTick:e=>e.n||(e.n=Ni.bind(e.proxy)),$watch:e=>Ed.bind(e)}),eo=(e,t)=>e!==Re&&!e.__isScriptSetup&&Te(e,t),Vd={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:l,accessCache:r,type:u,appContext:f}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return l[t]}else{if(eo(s,t))return r[t]=1,s[t];if(i!==Re&&Te(i,t))return r[t]=2,i[t];if(Te(l,t))return r[t]=3,l[t];if(n!==Re&&Te(n,t))return r[t]=4,n[t];So&&(r[t]=0)}}const h=Cs[t];let p,b;if(h)return t==="$attrs"&&nt(e.attrs,"get",""),h(e);if((p=u.__cssModules)&&(p=p[t]))return p;if(n!==Re&&Te(n,t))return r[t]=4,n[t];if(b=f.config.globalProperties,Te(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:l}=e;return eo(i,t)?(i[t]=n,!0):s!==Re&&Te(s,t)?(s[t]=n,!0):Te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,props:l,type:r}},u){let f;return!!(n[u]||e!==Re&&u[0]!=="$"&&Te(e,u)||eo(t,u)||Te(l,u)||Te(s,u)||Te(Cs,u)||Te(i.config.globalProperties,u)||(f=r.__cssModules)&&f[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vl(e){return pe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let So=!0;function Wd(e){const t=ec(e),n=e.proxy,s=e.ctx;So=!1,t.beforeCreate&&Wl(t.beforeCreate,e,"bc");const{data:i,computed:l,methods:r,watch:u,provide:f,inject:h,created:p,beforeMount:b,mounted:v,beforeUpdate:y,updated:I,activated:T,deactivated:$,beforeDestroy:A,beforeUnmount:S,destroyed:D,unmounted:C,render:B,renderTracked:O,renderTriggered:E,errorCaptured:L,serverPrefetch:M,expose:U,inheritAttrs:R,components:Y,directives:te,filters:ye}=t;if(h&&Bd(h,s,null),r)for(const ge in r){const we=r[ge];_e(we)&&(s[ge]=we.bind(n))}if(i){const ge=i.call(n,n);Pe(ge)&&(e.data=zn(ge))}if(So=!0,l)for(const ge in l){const we=l[ge],Ye=_e(we)?we.bind(n,n):_e(we.get)?we.get.bind(n,n):Bt,le=!_e(we)&&_e(we.set)?we.set.bind(n):Bt,ee=k({get:Ye,set:le});Object.defineProperty(s,ge,{enumerable:!0,configurable:!0,get:()=>ee.value,set:ce=>ee.value=ce})}if(u)for(const ge in u)Qr(u[ge],s,n,ge);if(f){const ge=_e(f)?f.call(n):f;Reflect.ownKeys(ge).forEach(we=>{Sd(we,ge[we])})}p&&Wl(p,e,"c");function be(ge,we){pe(we)?we.forEach(Ye=>ge(Ye.bind(n))):we&&ge(we.bind(n))}if(be(Md,b),be(An,v),be(Rd,y),be(Nd,I),be(Od,T),be(Id,$),be(jd,L),be(Ud,O),be(Dd,E),be(rs,S),be(cl,C),be(Fd,M),pe(U))if(U.length){const ge=e.exposed||(e.exposed={});U.forEach(we=>{Object.defineProperty(ge,we,{get:()=>n[we],set:Ye=>n[we]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});B&&e.render===Bt&&(e.render=B),R!=null&&(e.inheritAttrs=R),Y&&(e.components=Y),te&&(e.directives=te),M&&Yr(e)}function Bd(e,t,n=Bt){pe(e)&&(e=Co(e));for(const s in e){const i=e[s];let l;Pe(i)?"default"in i?l=$s(i.from||s,i.default,!0):l=$s(i.from||s):l=$s(i),Qe(l)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[s]=l}}function Wl(e,t,n){Rt(pe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Qr(e,t,n,s){let i=s.includes(".")?qr(n,s):()=>n[s];if(We(e)){const l=t[e];_e(l)&&Ct(i,l)}else if(_e(e))Ct(i,e.bind(n));else if(Pe(e))if(pe(e))e.forEach(l=>Qr(l,t,n,s));else{const l=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(l)&&Ct(i,l,e)}}function ec(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,u=l.get(t);let f;return u?f=u:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(h=>di(f,h,r,!0)),di(f,t,r)),Pe(t)&&l.set(t,f),f}function di(e,t,n,s=!1){const{mixins:i,extends:l}=t;l&&di(e,l,n,!0),i&&i.forEach(r=>di(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const u=Kd[r]||n&&n[r];e[r]=u?u(e[r],t[r]):t[r]}return e}const Kd={data:Bl,props:Kl,emits:Kl,methods:ms,computed:ms,beforeCreate:lt,created:lt,beforeMount:lt,mounted:lt,beforeUpdate:lt,updated:lt,beforeDestroy:lt,beforeUnmount:lt,destroyed:lt,unmounted:lt,activated:lt,deactivated:lt,errorCaptured:lt,serverPrefetch:lt,components:ms,directives:ms,watch:zd,provide:Bl,inject:qd};function Bl(e,t){return t?e?function(){return et(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function qd(e,t){return ms(Co(e),Co(t))}function Co(e){if(pe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ct(t)}Modifiers`]||e[`${En(t)}Modifiers`];function Xd(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Re;let i=n;const l=t.startsWith("update:"),r=l&&Jd(s,t.slice(7));r&&(r.trim&&(i=n.map(p=>We(p)?p.trim():p)),r.number&&(i=i.map(Ii)));let u,f=s[u=Yi(t)]||s[u=Yi(ct(t))];!f&&l&&(f=s[u=Yi(En(t))]),f&&Rt(f,e,6,i);const h=s[u+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,Rt(h,e,6,i)}}const Zd=new WeakMap;function nc(e,t,n=!1){const s=n?Zd:t.emitsCache,i=s.get(e);if(i!==void 0)return i;const l=e.emits;let r={},u=!1;if(!_e(e)){const f=h=>{const p=nc(h,t,!0);p&&(u=!0,et(r,p))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!l&&!u?(Pe(e)&&s.set(e,null),null):(pe(l)?l.forEach(f=>r[f]=null):et(r,l),Pe(e)&&s.set(e,r),r)}function Ui(e,t){return!e||!Ei(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Te(e,t[0].toLowerCase()+t.slice(1))||Te(e,En(t))||Te(e,t))}function ql(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[l],slots:r,attrs:u,emit:f,render:h,renderCache:p,props:b,data:v,setupState:y,ctx:I,inheritAttrs:T}=e,$=ci(e);let A,S;try{if(n.shapeFlag&4){const C=i||s,B=C;A=Vt(h.call(B,C,p,b,y,v,I)),S=u}else{const C=t;A=Vt(C.length>1?C(b,{attrs:u,slots:r,emit:f}):C(b,null)),S=t.props?u:Qd(u)}}catch(C){Vn.length=0,Ri(C,e,1),A=se(cn)}let D=A;if(S&&T!==!1){const C=Object.keys(S),{shapeFlag:B}=D;C.length&&B&7&&(l&&C.some(Ai)&&(S=ef(S,l)),D=ss(D,S,!1,!0))}if(n.dirs&&(D=ss(D,null,!1,!0),D.dirs=D.dirs?D.dirs.concat(n.dirs):n.dirs),n.transition){const C=Fi(D.type)&&zr(D)||D;al(C,n.transition)}return A=D,ci($),A}const Qd=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ei(n))&&((t||(t={}))[n]=e[n]);return t},ef=(e,t)=>{const n={};for(const s in e)(!Ai(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tf(e,t,n){const{props:s,children:i,component:l}=e,{props:r,children:u,patchFlag:f}=t,h=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zl(s,r,h):!!r;if(f&8){const p=t.dynamicProps;for(let b=0;bObject.create(ic),lc=e=>Object.getPrototypeOf(e)===ic;function sf(e,t,n,s=!1){const i={},l=oc();e.propsDefaults=Object.create(null),ac(e,t,i,l);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);n?e.props=s?i:pd(i):e.type.props?e.props=i:e.props=l,e.attrs=l}function of(e,t,n,s){const{props:i,attrs:l,vnode:{patchFlag:r}}=e,u=xe(i),[f]=e.propsOptions;let h=!1;if((s||r>0)&&!(r&16)){if(r&8){const p=e.vnode.dynamicProps;for(let b=0;b{f=!0;const[v,y]=rc(b,t,!0);et(r,v),y&&u.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!l&&!f)return Pe(e)&&s.set(e,Un),Un;if(pe(l))for(let p=0;pe==="_"||e==="_ctx"||e==="$stable",dl=e=>pe(e)?e.map(Vt):[Vt(e)],af=(e,t,n)=>{if(t._n)return t;const s=oe((...i)=>dl(t(...i)),n);return s._c=!1,s},cc=(e,t,n)=>{const s=e._ctx;for(const i in e){if(ul(i))continue;const l=e[i];if(_e(l))t[i]=af(i,l,s);else if(l!=null){const r=dl(l);t[i]=()=>r}}},uc=(e,t)=>{const n=dl(t);e.slots.default=()=>n},dc=(e,t,n)=>{for(const s in t)(n||!ul(s))&&(e[s]=t[s])},rf=(e,t,n)=>{const s=e.slots=oc();if(e.vnode.shapeFlag&32){const i=t._;i?(dc(s,t,n),n&&gr(s,"_",i,!0)):cc(t,s)}else t&&uc(e,t)},cf=(e,t,n)=>{const{vnode:s,slots:i}=e;let l=!0,r=Re;if(s.shapeFlag&32){const u=t._;u?n&&u===1?l=!1:dc(i,t,n):(l=!t.$stable,cc(t,i)),r=t}else t&&(uc(e,t),r={default:1});if(l)for(const u in i)!ul(u)&&r[u]==null&&delete i[u]},dt=hf;function uf(e){return df(e)}function df(e,t){const n=Li();n.__VUE__=!0;const{insert:s,remove:i,patchProp:l,createElement:r,createText:u,createComment:f,setText:h,setElementText:p,parentNode:b,nextSibling:v,setScopeId:y=Bt,insertStaticContent:I}=e,T=(w,x,N,q=null,j=null,V=null,X=void 0,J=null,G=!!x.dynamicChildren)=>{if(w===x)return;w&&!fs(w,x)&&(q=ie(w),ce(w,j,V,!0),w=null),x.patchFlag===-2&&(G=!1,x.dynamicChildren=null),x.dynamicChildren&&w&&w.dynamicChildren&&w.dynamicChildren.hasOnce&&(x.dynamicChildren===Un&&(x.dynamicChildren=[]),x.dynamicChildren.hasOnce=!0);const{type:H,ref:de,shapeFlag:Q}=x;switch(H){case Bs:$(w,x,N,q);break;case cn:A(w,x,N,q);break;case no:w==null&&S(x,N,q,X);break;case z:Y(w,x,N,q,j,V,X,J,G);break;default:Q&1?B(w,x,N,q,j,V,X,J,G):Q&6?te(w,x,N,q,j,V,X,J,G):(Q&64||Q&128)&&H.process(w,x,N,q,j,V,X,J,G,Mn)}de!=null&&j?xs(de,w&&w.ref,V,x||w,!x):de==null&&w&&w.ref!=null&&xs(w.ref,null,V,w,!0)},$=(w,x,N,q)=>{if(w==null)s(x.el=u(x.children),N,q);else{const j=x.el=w.el;x.children!==w.children&&h(j,x.children)}},A=(w,x,N,q)=>{w==null?s(x.el=f(x.children||""),N,q):x.el=w.el},S=(w,x,N,q)=>{[w.el,w.anchor]=I(w.children,x,N,q,w.el,w.anchor)},D=({el:w,anchor:x},N,q)=>{let j;for(;w&&w!==x;)j=v(w),s(w,N,q),w=j;s(x,N,q)},C=({el:w,anchor:x})=>{let N;for(;w&&w!==x;)N=v(w),i(w),w=N;i(x)},B=(w,x,N,q,j,V,X,J,G)=>{if(x.type==="svg"?X="svg":x.type==="math"&&(X="mathml"),w==null)O(x,N,q,j,V,X,J,G);else{const H=w.el&&w.el._isVueCE?w.el:null;try{H&&H._beginPatch(),M(w,x,j,V,X,J,G)}finally{H&&H._endPatch()}}},O=(w,x,N,q,j,V,X,J)=>{let G,H;const{props:de,shapeFlag:Q,transition:Z,dirs:P}=w;if(G=w.el=r(w.type,V,de&&de.is,de),Q&8?p(G,w.children):Q&16&&L(w.children,G,null,q,j,to(w,V),X,J),P&&Rn(w,null,q,"created"),E(G,w,w.scopeId,X,q),de){for(const ue in de)ue!=="value"&&!ys(ue)&&l(G,ue,null,de[ue],V,q);"value"in de&&l(G,"value",null,de.value,V),(H=de.onVnodeBeforeMount)&&Dt(H,q,w)}P&&Rn(w,null,q,"beforeMount");const F=ff(j,Z);F&&Z.beforeEnter(G),s(G,x,N),((H=de&&de.onVnodeMounted)||F||P)&&dt(()=>{H&&Dt(H,q,w),F&&Z.enter(G),P&&Rn(w,null,q,"mounted")},j)},E=(w,x,N,q,j)=>{if(N&&y(w,N),q)for(let V=0;V{for(let H=G;H{const J=x.el=w.el;let{patchFlag:G,dynamicChildren:H,dirs:de}=x;G|=w.patchFlag&16;const Q=w.props||Re,Z=x.props||Re;let P;if(N&&Nn(N,!1),(P=Z.onVnodeBeforeUpdate)&&Dt(P,N,x,w),de&&Rn(x,w,N,"beforeUpdate"),N&&Nn(N,!0),H&&(!w.dynamicChildren||w.dynamicChildren.length!==H.length)&&(G=0,X=!1,H=null),(Q.innerHTML&&Z.innerHTML==null||Q.textContent&&Z.textContent==null)&&p(J,""),H?U(w.dynamicChildren,H,J,N,q,to(x,j),V):X||we(w,x,J,null,N,q,to(x,j),V,!1),G>0){if(G&16)R(J,Q,Z,N,j);else if(G&2&&Q.class!==Z.class&&l(J,"class",null,Z.class,j),G&4&&l(J,"style",Q.style,Z.style,j),G&8){const F=x.dynamicProps;for(let ue=0;ue{P&&Dt(P,N,x,w),de&&Rn(x,w,N,"updated")},q)},U=(w,x,N,q,j,V,X)=>{for(let J=0;J{if(x!==N){if(x!==Re)for(const V in x)!ys(V)&&!(V in N)&&l(w,V,x[V],null,j,q);for(const V in N){if(ys(V))continue;const X=N[V],J=x[V];X!==J&&V!=="value"&&l(w,V,J,X,j,q)}"value"in N&&l(w,"value",x.value,N.value,j)}},Y=(w,x,N,q,j,V,X,J,G)=>{const H=x.el=w?w.el:u(""),de=x.anchor=w?w.anchor:u("");let{patchFlag:Q,dynamicChildren:Z,slotScopeIds:P}=x;P&&(J=J?J.concat(P):P),w==null?(s(H,N,q),s(de,N,q),L(x.children||[],N,de,j,V,X,J,G)):Q>0&&Q&64&&Z&&w.dynamicChildren&&w.dynamicChildren.length===Z.length?(U(w.dynamicChildren,Z,N,j,V,X,J),(x.key!=null||j&&x===j.subTree)&&fc(w,x,!0)):we(w,x,N,de,j,V,X,J,G)},te=(w,x,N,q,j,V,X,J,G)=>{x.slotScopeIds=J,w==null?x.shapeFlag&512?j.ctx.activate(x,N,q,X,G):ye(x,N,q,j,V,X,G):re(w,x,G)},ye=(w,x,N,q,j,V,X)=>{const J=w.component=yf(w,q,j);if(rl(w)&&(J.ctx.renderer=Mn),wf(J,!1,X),J.asyncDep){if(j&&j.registerDep(J,be,X),!w.el){const G=J.subTree=se(cn);A(null,G,x,N),w.placeholder=G.el}}else be(J,w,x,N,j,V,X)},re=(w,x,N)=>{const q=x.component=w.component;if(tf(w,x,N))if(q.asyncDep&&!q.asyncResolved){x.el=w.el,ge(q,x,N);return}else q.next=x,q.update();else x.el=w.el,q.vnode=x},be=(w,x,N,q,j,V,X)=>{const J=()=>{if(w.isMounted){let{next:Q,bu:Z,u:P,parent:F,vnode:ue}=w;{const wt=pc(w);if(wt){Q&&(Q.el=ue.el,ge(w,Q,X)),wt.asyncDep.then(()=>{dt(()=>{w.isUnmounted||H()},j)});return}}let fe=Q,Oe;Nn(w,!1),Q?(Q.el=ue.el,ge(w,Q,X)):Q=ue,Z&&si(Z),(Oe=Q.props&&Q.props.onVnodeBeforeUpdate)&&Dt(Oe,F,Q,ue),Nn(w,!0);const De=ql(w),Ve=w.subTree;w.subTree=De,T(Ve,De,b(Ve.el),ie(Ve),w,j,V),Q.el=De.el,fe===null&&nf(w,De.el),P&&dt(P,j),(Oe=Q.props&&Q.props.onVnodeUpdated)&&dt(()=>Dt(Oe,F,Q,ue),j)}else{let Q;const{el:Z,props:P}=x,{bm:F,m:ue,parent:fe,root:Oe,type:De}=w,Ve=Ss(x);Nn(w,!1),F&&si(F),!Ve&&(Q=P&&P.onVnodeBeforeMount)&&Dt(Q,fe,x),Nn(w,!0);{Oe.ce&&Oe.ce._hasShadowRoot()&&Oe.ce._injectChildStyle(De,w.parent?w.parent.type:void 0);const wt=w.subTree=ql(w);T(null,wt,N,q,w,j,V),x.el=wt.el}if(ue&&dt(ue,j),!Ve&&(Q=P&&P.onVnodeMounted)){const wt=x;dt(()=>Dt(Q,fe,wt),j)}(x.shapeFlag&256||fe&&Ss(fe.vnode)&&fe.vnode.shapeFlag&256)&&w.a&&dt(w.a,j),w.isMounted=!0,x=N=q=null}};w.scope.on();const G=w.effect=new xr(J);w.scope.off();const H=w.update=G.run.bind(G),de=w.job=G.runIfDirty.bind(G);de.i=w,de.id=w.uid,G.scheduler=()=>ll(de),Nn(w,!0),H()},ge=(w,x,N)=>{x.component=w;const q=w.vnode.props;w.vnode=x,w.next=null,of(w,x.props,q,N),cf(w,x.children,N),an(),Dl(w),rn()},we=(w,x,N,q,j,V,X,J,G=!1)=>{const H=w&&w.children,de=w?w.shapeFlag:0,Q=x.children,{patchFlag:Z,shapeFlag:P}=x;if(Z>0){if(Z&128){le(H,Q,N,q,j,V,X,J,G);return}else if(Z&256){Ye(H,Q,N,q,j,V,X,J,G);return}}P&8?(de&16&&ne(H,j,V),Q!==H&&p(N,Q)):de&16?P&16?le(H,Q,N,q,j,V,X,J,G):ne(H,j,V,!0):(de&8&&p(N,""),P&16&&L(Q,N,q,j,V,X,J,G))},Ye=(w,x,N,q,j,V,X,J,G)=>{w=w||Un,x=x||Un;const H=w.length,de=x.length,Q=Math.min(H,de);let Z;for(Z=0;Zde?ne(w,j,V,!0,!1,Q):L(x,N,q,j,V,X,J,G,Q)},le=(w,x,N,q,j,V,X,J,G)=>{let H=0;const de=x.length;let Q=w.length-1,Z=de-1;for(;H<=Q&&H<=Z;){const P=w[H],F=x[H]=G?Jt(x[H]):Vt(x[H]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;H++}for(;H<=Q&&H<=Z;){const P=w[Q],F=x[Z]=G?Jt(x[Z]):Vt(x[Z]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;Q--,Z--}if(H>Q){if(H<=Z){const P=Z+1,F=PZ)for(;H<=Q;)ce(w[H],j,V,!0),H++;else{const P=H,F=H,ue=new Map;for(H=F;H<=Z;H++){const ht=x[H]=G?Jt(x[H]):Vt(x[H]);ht.key!=null&&ue.set(ht.key,H)}let fe,Oe=0;const De=Z-F+1;let Ve=!1,wt=0;const Yn=new Array(De);for(H=0;H=De){ce(ht,j,V,!0);continue}let Ft;if(ht.key!=null)Ft=ue.get(ht.key);else for(fe=F;fe<=Z;fe++)if(Yn[fe-F]===0&&fs(ht,x[fe])){Ft=fe;break}Ft===void 0?ce(ht,j,V,!0):(Yn[Ft-F]=H+1,Ft>=wt?wt=Ft:Ve=!0,T(ht,x[Ft],N,null,j,V,X,J,G),Oe++)}const Al=Ve?pf(Yn):Un;for(fe=Al.length-1,H=De-1;H>=0;H--){const ht=F+H,Ft=x[ht],Pl=x[ht+1],Ol=ht+1{const{el:V,type:X,transition:J,children:G,shapeFlag:H}=w;if(H&6){ee(w.component.subTree,x,N,q);return}if(H&128){w.suspense.move(x,N,q);return}if(H&64){X.move(w,x,N,Mn);return}if(X===z){s(V,x,N);for(let Q=0;QJ.enter(V),j));else{const{leave:Q,delayLeave:Z,afterLeave:P}=J,F=()=>{w.ctx.isUnmounted?i(V):s(V,x,N)},ue=()=>{const fe=V._isLeaving||!!V[Qi];V._isLeaving&&V[Qi](!0),J.persisted&&!fe?F():Q(V,()=>{F(),P&&P()})};Z?Z(V,F,ue):ue()}else s(V,x,N)},ce=(w,x,N,q=!1,j=!1)=>{const{type:V,props:X,ref:J,children:G,dynamicChildren:H,shapeFlag:de,patchFlag:Q,dirs:Z,cacheIndex:P,memo:F}=w;if((Q===-2||H&&H.hasOnce)&&(j=!1),J!=null&&(an(),xs(J,null,N,w,!0),rn()),P!=null&&(!w.ctx||w.ctx===x)&&(x.renderCache[P]=void 0),de&256){x.ctx.deactivate(w);return}const ue=de&1&&Z,fe=!Ss(w);let Oe;if(fe&&(Oe=X&&X.onVnodeBeforeUnmount)&&Dt(Oe,x,w),de&6)K(w.component,N,q);else{if(de&128){w.suspense.unmount(N,q);return}ue&&Rn(w,null,x,"beforeUnmount"),de&64?w.type.remove(w,x,N,Mn,q):H&&!H.hasOnce&&(V!==z||Q>0&&Q&64)?ne(H,x,N,!1,!0):(V===z&&Q&384||!j&&de&16)&&ne(G,x,N),q&&tt(w)}const De=F!=null&&P==null;(fe&&(Oe=X&&X.onVnodeUnmounted)||ue||De)&&dt(()=>{Oe&&Dt(Oe,x,w),ue&&Rn(w,null,x,"unmounted"),De&&(w.el=null)},N)},tt=w=>{const{type:x,el:N,anchor:q,transition:j}=w;if(x===z){$e(N,q);return}if(x===no){C(w),j&&!j.persisted&&j.afterLeave&&j.afterLeave();return}const V=()=>{i(N),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(w.shapeFlag&1&&j&&!j.persisted){const{leave:X,delayLeave:J}=j,G=()=>X(N,V);J?J(w.el,V,G):G()}else V()},$e=(w,x)=>{let N;for(;w!==x;)N=v(w),i(w),w=N;i(x)},K=(w,x,N)=>{const{bum:q,scope:j,job:V,subTree:X,um:J,m:G,a:H}=w;Gl(G),Gl(H),q&&si(q),j.stop(),V?(V.flags|=8,ce(X,w,x,N)):w.vnode.el&&X&&(X.transition=w.vnode.transition,ce(X,w,x,N)),J&&dt(J,x),dt(()=>{w.isUnmounted=!0},x)},ne=(w,x,N,q=!1,j=!1,V=0)=>{for(let X=V;X{if(w.shapeFlag&6)return ie(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const x=v(w.anchor||w.el),N=x&&x[Ad];return N?v(N):x};let yt=!1;const Ln=(w,x,N)=>{let q;w==null?x._vnode&&(ce(x._vnode,null,null,!0),q=x._vnode.component):T(x._vnode||null,w,x,null,null,null,N),x._vnode=w,yt||(yt=!0,Dl(q),Vr(),yt=!1)},Mn={p:T,um:ce,m:ee,r:tt,mt:ye,mc:L,pc:we,pbc:U,n:ie,o:e};return{render:Ln,hydrate:void 0,createApp:Gd(Ln)}}function to({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Nn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ff(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function fc(e,t,n=!1){const s=e.children,i=t.children;if(pe(s)&&pe(i))for(let l=0;l>1,e[n[u]]0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function pc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pc(t)}function Gl(e){if(e)for(let t=0;te.__isSuspense;function hf(e,t){t&&t.pendingBranch?pe(e)?t.effects.push(...e):t.effects.push(e):xd(e)}const z=Symbol.for("v-fgt"),Bs=Symbol.for("v-txt"),cn=Symbol.for("v-cmt"),no=Symbol.for("v-stc"),Vn=[];let bt=null;function g(e=!1){Vn.push(bt=e?null:[])}function bc(){Vn.pop(),bt=Vn[Vn.length-1]||null}let Ps=1;function fi(e,t=!1){Ps+=e,e<0&&bt&&t&&(bt.hasOnce=!0)}function vc(e){return e.dynamicChildren=Ps>0?bt||Un:null,bc(),Ps>0&&bt&&bt.push(e),e}function _(e,t,n,s,i,l){return vc(o(e,t,n,s,i,l,!0))}function it(e,t,n,s,i){return vc(se(e,t,n,s,i,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function fs(e,t){return e.type===t.type&&e.key===t.key}const gc=({key:e})=>e??null,ii=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?We(e)||Qe(e)||_e(e)?{i:mt,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,s=0,i=null,l=e===z?0:1,r=!1,u=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&gc(t),ref:t&&ii(t),scopeId:Br,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:mt};return u?(hi(f,n),l&128&&e.normalize(f)):n&&(f.shapeFlag|=We(n)?8:16),Ps>0&&!r&&bt&&(f.patchFlag>0||l&6)&&f.patchFlag!==32&&bt.push(f),f}const se=mf;function mf(e,t=null,n=null,s=0,i=null,l=!1){if((!e||e===Xr)&&(e=cn),pi(e)){const u=ss(e,t,!0);return n&&hi(u,n),Ps>0&&!l&&bt&&(u.shapeFlag&6?bt[bt.indexOf(e)]=u:bt.push(u)),u.patchFlag=-2,u}if(Cf(e)&&(e=e.__vccOpts),t){t=bf(t);let{class:u,style:f}=t;u&&!We(u)&&(t.class=me(u)),Pe(f)&&(ol(f)&&!pe(f)&&(f=et({},f)),t.style=Ue(f))}const r=We(e)?1:mc(e)?128:Fi(e)?64:Pe(e)?4:_e(e)?2:0;return o(e,t,n,s,i,r,l,!0)}function bf(e){return e?ol(e)||lc(e)?et({},e):e:null}function ss(e,t,n=!1,s=!1){const{props:i,ref:l,patchFlag:r,children:u,transition:f}=e,h=t?vf(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&gc(h),ref:t&&t.ref?n&&l?pe(l)?l.concat(ii(t)):[l,ii(t)]:ii(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==z?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ss(e.ssContent),ssFallback:e.ssFallback&&ss(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return f&&s&&al(p,f.clone(p)),p}function Me(e=" ",t=0){return se(Bs,null,e,t)}function W(e="",t=!1){return t?(g(),it(cn,null,e)):se(cn,null,e)}function Vt(e){return e==null||typeof e=="boolean"?se(cn):pe(e)?se(z,null,e.slice()):pi(e)?Jt(e):se(Bs,null,String(e))}function Jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ss(e)}function hi(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(pe(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),hi(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!lc(t)?t._ctx=mt:i===3&&mt&&(mt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(_e(t)){if(s&65){hi(e,{default:t});return}t={default:t,_ctx:mt},n=32}else t=String(t),s&64?(n=16,t=[Me(t)]):n=8;e.children=t,e.shapeFlag|=n}function vf(...e){const t={};for(let n=0;nst||mt;let mi,Os;{const e=Li(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),l=>{i.length>1?i.forEach(r=>r(l)):i[0](l)}};mi=t("__VUE_INSTANCE_SETTERS__",n=>st=n),Os=t("__VUE_SSR_SETTERS__",n=>Is=n)}const Ks=e=>{const t=st;return mi(e),e.scope.on(),()=>{e.scope.off(),mi(t)}},Jl=()=>{st&&st.scope.off(),mi(null)};function yc(e){return e.vnode.shapeFlag&4}let Is=!1;function wf(e,t=!1,n=!1){t&&Os(t);const{props:s,children:i}=e.vnode,l=yc(e);sf(e,s,l,t),rf(e,i,n||t);const r=l?kf(e,t):void 0;return t&&Os(!1),r}function kf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vd);const{setup:s}=n;if(s){an();const i=e.setupContext=s.length>1?xf(e):null,l=Ks(e),r=Vs(s,e,0,[e.props,i]),u=mr(r);if(rn(),l(),(u||e.sp)&&!Ss(e)&&Yr(e),u){if(r.then(Jl,Jl),t)return r.then(f=>{Os(!0);try{Xl(e,f,t)}finally{Os(!1)}}).catch(f=>{Ri(f,e,0)});e.asyncDep=r}else Xl(e,r)}else wc(e)}function Xl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Pe(t)&&(e.setupState=Ur(t)),wc(e)}function wc(e,t,n){const s=e.type;e.render||(e.render=s.render||Bt);{const i=Ks(e);an();try{Wd(e)}finally{rn(),i()}}}const $f={get(e,t){return nt(e,"get",""),e[t]}};function xf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,$f),slots:e.slots,emit:e.emit,expose:t}}function ji(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ur(hd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cs)return Cs[n](e)},has(t,n){return n in t||n in Cs}})):e.proxy}function Sf(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function Cf(e){return _e(e)&&"__vccOpts"in e}const k=(e,t)=>_d(e,t,Is);function bi(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Pe(t)&&!pe(t)?pi(t)?se(e,null,[t]):se(e,t):se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pi(n)&&(n=[n]),se(e,t,n))}finally{fi(1)}}const Tf="3.5.43";let Eo;const Zl=typeof window<"u"&&window.trustedTypes;if(Zl)try{Eo=Zl.createPolicy("vue",{createHTML:e=>e})}catch{}const kc=Eo?e=>Eo.createHTML(e):e=>e,Ef="http://www.w3.org/2000/svg",Af="http://www.w3.org/1998/Math/MathML",Gt=typeof document<"u"?document:null,Ql=Gt&&Gt.createElement("template"),Pf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?Gt.createElementNS(Ef,e):t==="mathml"?Gt.createElementNS(Af,e):n?Gt.createElement(e,{is:n}):Gt.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>Gt.createTextNode(e),createComment:e=>Gt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Gt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,l){const r=n?n.previousSibling:t.lastChild;if(i&&(i===l||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===l||!(i=i.nextSibling)););else{Ql.innerHTML=kc(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const u=Ql.content;if(s==="svg"||s==="mathml"){const f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Of=Symbol("_vtc");function If(e,t,n){const s=e[Of];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ea=Symbol("_vod"),Lf=Symbol("_vsh"),Mf=Symbol(""),Rf=/(?:^|;)\s*display\s*:/;function Nf(e,t,n){const s=e.style,i=We(n);let l=!1;if(n&&!i){if(t)if(We(t))for(const r of t.split(";")){const u=r.slice(0,r.indexOf(":")).trim();n[u]==null&&bs(s,u,"")}else for(const r in t)n[r]==null&&bs(s,r,"");for(const r in n){r==="display"&&(l=!0);const u=n[r];u!=null?Df(e,r,!We(t)&&t?t[r]:void 0,u)||bs(s,r,u):bs(s,r,"")}}else if(i){if(t!==n){const r=s[Mf];r&&(n+=";"+r),s.cssText=n,l=Rf.test(n)}}else t&&e.removeAttribute("style");ea in e&&(e[ea]=l?s.display:"",e[Lf]&&(s.display="none"))}const Zs=/\s*!important$/;function bs(e,t,n){if(pe(n))n.forEach(s=>bs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))Zs.test(n)?e.setProperty(t,n.replace(Zs,""),"important"):e.setProperty(t,n);else{const s=Ff(e,t);Zs.test(n)?e.setProperty(En(s),n.replace(Zs,""),"important"):e[s]=n}}const ta=["Webkit","Moz","ms"],so={};function Ff(e,t){const n=so[t];if(n)return n;let s=ct(t);if(s!=="filter"&&s in e)return so[t]=s;s=Oi(s);for(let i=0;iio||(Bf.then(()=>io=0),io=Date.now());function qf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const i=n.value;if(pe(i)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=i.slice(),u=[s];for(let f=0;fe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,zf=(e,t,n,s,i,l)=>{const r=i==="svg";t==="class"?If(e,s,r):t==="style"?Nf(e,n,s):Ei(t)?Ai(t)||jf(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yf(e,t,s,r))?(ia(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&sa(e,t,s,r,l,t!=="value")):e._isVueCE&&(Gf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!We(s)))?ia(e,ct(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),sa(e,t,s,r))};function Yf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&la(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return la(t)&&We(n)?!1:t in e}function Gf(e,t){const n=e._def.props;if(!n)return!1;const s=ct(t);return Array.isArray(n)?n.some(i=>ct(i)===s):Object.keys(n).some(i=>ct(i)===s)}const xn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pe(t)?n=>si(t,n):t};function Jf(e){e.target.composing=!0}function aa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vt=Symbol("_assign"),Qs=Symbol("_initialValue");function oo(e,t,n){return t&&(e=e.trim()),n&&(e=Ii(e)),e}const Je={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e.parentNode&&(e.type==="text"?e[Qs]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Qs]=e.defaultValue.replace(/\r\n?/g,` +`))),e[vt]=xn(i);const l=s||i.props&&i.props.type==="number";en(e,t?"change":"input",r=>{r.target.composing||e[vt](oo(e.value,n,l))}),(n||l)&&en(e,"change",()=>{e.value=oo(e.value,n,l)}),t||(en(e,"compositionstart",Jf),en(e,"compositionend",aa),en(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const i=t??"",l=e[Qs];delete e[Qs],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[vt](oo(e.value,n,s)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:l}},r){if(e[vt]=xn(r),e.composing)return;const u=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ii(e.value):e.value,f=t??"";if(u===f)return;const h=e.getRootNode();(h instanceof Document||h instanceof ShadowRoot)&&h.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f)}},Xf={deep:!0,created(e,t,n){e[vt]=xn(n),en(e,"change",()=>{const s=e._modelValue,i=is(e),l=e.checked,r=e[vt];if(pe(s)){const u=Zo(s,i),f=u!==-1;if(l&&!f)r(s.concat(i));else if(!l&&f){const h=[...s];h.splice(u,1),r(h)}}else if(ln(s)){const u=new Set(s);l?u.add(i):u.delete(i),r(u)}else r($c(e,l))})},mounted:ra,beforeUpdate(e,t,n){e[vt]=xn(n),ra(e,t,n)}};function ra(e,{value:t,oldValue:n},s){e._modelValue=t;let i;if(pe(t))i=Zo(t,s.props.value)>-1;else if(ln(t))i=t.has(s.props.value);else{if(t===n)return;i=Mt(t,$c(e,!0))}e.checked!==i&&(e.checked=i)}const ca={created(e,{value:t},n){e.checked=Mt(t,n.props.value),e[vt]=xn(n),en(e,"change",()=>{e[vt](is(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vt]=xn(s),t!==n&&(e.checked=Mt(t,s.props.value))}},Wn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,en(e,"change",()=>{const i=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>n?Ii(is(f)):is(f)),l=e.multiple,r=l?ln(e._modelValue)?new Set(i):i:i[0],u=e._pendingValue=[l,l?pe(r)?i.slice():i:r];try{e[vt](r)}finally{Ni(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[vt]=xn(s)},mounted(e,{value:t}){ua(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[vt]=xn(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Zf(t,n[1],n[0]))&&ua(e,t)}};function Zf(e,t,n){if(!n||pe(e))return Mt(e,t);if(ln(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function ua(e,t){const n=e.multiple,s=pe(t);if(!(n&&!s&&!ln(t))){for(let i=0,l=e.options.length;iString(h)===String(u)):r.selected=Zo(t,u)>-1}else r.selected=t.has(u);else if(Mt(is(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function is(e){return"_value"in e?e._value:e.value}function $c(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Qf=["ctrl","shift","alt","meta"],ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qf.some(n=>e[`${n}Key`]&&!t.includes(n))},Pt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((i,...l)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(i=>{if(!("key"in i))return;const l=En(i.key);if(t.some(r=>r===l||tp[r]===l))return e(i)}))},np=et({patchProp:zf},Pf);let da;function sp(){return da||(da=uf(np))}const ip=((...e)=>{const t=sp().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=lp(s);if(!i)return;const l=t._component;!_e(l)&&!l.render&&!l.template&&(l.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,op(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function op(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lp(e){return We(e)?document.querySelector(e):e}const ap="modulepreload",rp=function(e,t){return new URL(e,t).href},fa={},hn=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){let h=function(p){return Promise.all(p.map(b=>Promise.resolve(b).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const r=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),f=u?.nonce||u?.getAttribute("nonce");i=h(n.map(p=>{if(p=rp(p,s),p in fa)return;fa[p]=!0;const b=p.endsWith(".css"),v=b?'[rel="stylesheet"]':"";if(s)for(let I=r.length-1;I>=0;I--){const T=r[I];if(T.href===p&&(!b||T.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${p}"]${v}`))return;const y=document.createElement("link");if(y.rel=b?"stylesheet":ap,b||(y.as="script"),y.crossOrigin="",y.href=p,f&&y.setAttribute("nonce",f),document.head.appendChild(y),b)return new Promise((I,T)=>{y.addEventListener("load",I),y.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${p}`)))})}))}function l(r){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=r,window.dispatchEvent(u),!u.defaultPrevented)throw r}return i.then(r=>{for(const u of r||[])u.status==="rejected"&&l(u.reason);return t().catch(l)})},cp={de:{name:"Deutsch",english:"German",script:"latin",plural:"one_other",clock:"24",checked:!1},"en-GB":{name:"English (UK)",english:"English (UK)",script:"latin",plural:"one_other",clock:"24",checked:!0},en:{name:"English (US)",english:"English (US)",script:"latin",plural:"one_other",clock:"12",checked:!0},es:{name:"Español",english:"Spanish",script:"latin",plural:"one_other",clock:"24",checked:!1},fr:{name:"Français",english:"French",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},it:{name:"Italiano",english:"Italian",script:"latin",plural:"one_other",clock:"24",checked:!1},nl:{name:"Nederlands",english:"Dutch",script:"latin",plural:"one_other",clock:"24",checked:!1},pl:{name:"Polski",english:"Polish",script:"latin",plural:"slavic_pl",clock:"24",checked:!1},pt:{name:"Português",english:"Portuguese",script:"latin",plural:"one_other",clock:"24",checked:!1}};const vi=typeof window<"u",Pn=(e,t=!1)=>t?Symbol.for(e):Symbol(e),up=(e,t,n)=>dp({l:e,k:t,s:n}),dp=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),ze=e=>typeof e=="number"&&isFinite(e),Sc=e=>pl(e)==="[object Date]",gi=e=>pl(e)==="[object RegExp]",fl=e=>Fe(e)&&Object.keys(e).length===0,ot=Object.assign,fp=Object.create,Ie=(e=null)=>fp(e);let pa;const pp=()=>pa||(pa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Ie()),hp=Object.prototype.hasOwnProperty;function xt(e,t){return hp.call(e,t)}const je=Array.isArray,Be=e=>typeof e=="function",ae=e=>typeof e=="string",Ke=e=>typeof e=="boolean",Se=e=>e!==null&&typeof e=="object",mp=e=>Se(e)&&Be(e.then)&&Be(e.catch),Cc=Object.prototype.toString,pl=e=>Cc.call(e),Fe=e=>pl(e)==="[object Object]",bp=e=>e==null?"":je(e)||Fe(e)&&e.toString===Cc?JSON.stringify(e,null,2):String(e);function vp(e,t=""){return e.reduce((n,s,i)=>i===0?n+s:n+t+s,"")}function gp(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}function ha(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function _p(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}const yp=/^javascript:/i,wp=/^(?:href|src|action|formaction)$/i,kp=/&#(?:x([0-9a-f]+)|(\d+));?/gi,$p=/&(?:Tab|NewLine);/g,xp=/:?/gi,Sp=/[\u0000-\u0020\u007f-\u009f]/g,Cp=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Tp=/(^|[\s"'<>/])on(\w+\s*=)/gi,Ep=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function Ap(e,t,n){const s=t||n;if(!s)return e;const i=Number.parseInt(s,t?16:10);return i<=127?String.fromCharCode(i):e}function hl(e){const t=e.replace(kp,Ap).replace($p,"").replace(xp,":").replace(Sp,"");return yp.test(t)}function Pp(e){const t=/url\s*\(/gi;let n="",s=0,i;for(;(i=t.exec(e))!==null;){const l=i.index,r=t.lastIndex-1;let u=r+1,f=1,h=null;for(;u`${n}="${ma(n,s)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(t,n,s)=>`${n}='${ma(n,s)}'`),Cp.test(e)&&(e=e.replace(Tp,"$1on$2")),e=e.replace(Ep,(t,n,s,i)=>hl(i)?`${n}${s}about:blank`:t),e}const ba=e=>!Se(e)||je(e);function oi(e,t){if(ba(e)||ba(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:s,des:i}=n.pop();Object.keys(s).forEach(l=>{if(l==="__proto__")return;const r=s[l];if(je(r)){const u=[];u.length=r.length,i[l]=u,n.push({src:r,des:u})}else Se(r)?((!Se(i[l])||je(i[l]))&&(i[l]=Ie()),n.push({src:r,des:i[l]})):i[l]=r})}}const Ip=17;function Tc(e,t,n={}){const{domain:s,messages:i,args:l}=n,r=e,u=new SyntaxError(String(r));return u.code=e,u.domain=s,u}function Kt(e){return Se(e)&&ml(e)===0&&(xt(e,"b")||xt(e,"body"))}const Ec=["b","body"];function Lp(e){return On(e,Ec)}const Ac=["c","cases"];function Mp(e){return On(e,Ac,[])}const Pc=["s","static"];function Rp(e){return On(e,Pc)}const Oc=["i","items"];function Np(e){return On(e,Oc,[])}const Ic=["t","type"];function ml(e){return On(e,Ic)}const Lc=["v","value"];function ei(e,t){const n=On(e,Lc);if(n!=null)return n;throw Ls(t)}const Mc=["m","modifier"];function Fp(e){return On(e,Mc)}const Rc=["k","key"];function Dp(e){const t=On(e,Rc);if(t)return t;throw Ls(6)}function On(e,t,n){for(let s=0;sUp(n,e)}function Up(e,t){const n=Lp(t);if(n==null)throw Ls(0);if(ml(n)===1){const l=Mp(n);return e.plural(l.reduce((r,u)=>[...r,ga(e,u)],[]))}else return ga(e,n)}function ga(e,t){const n=Rp(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const s=Np(t).reduce((i,l)=>[...i,Ao(e,l)],[]);return e.normalize(s)}}function Ao(e,t){const n=ml(t);switch(n){case 3:return ei(t,n);case 9:return ei(t,n);case 4:{const s=t;if(xt(s,"k")&&s.k)return e.interpolate(e.named(s.k));if(xt(s,"key")&&s.key)return e.interpolate(e.named(s.key));throw Ls(n)}case 5:{const s=t;if(xt(s,"i")&&ze(s.i))return e.interpolate(e.list(s.i));if(xt(s,"index")&&ze(s.index))return e.interpolate(e.list(s.index));throw Ls(n)}case 6:{const s=t,i=Fp(s),l=Dp(s);return e.linked(Ao(e,l),i?Ao(e,i):void 0,e.type)}case 7:return ei(t,n);case 8:return ei(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}let _a=Ie();function jp(e,t){{const n=e.cacheKey;if(n){const s=_a[n];return s||(_a[n]=va(e))}else return va(e)}}const tn={INVALID_ARGUMENT:Ip,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},Hp=24;function nn(e){return Tc(e,null,void 0)}function bl(e,t){return t.locale!=null?ya(t.locale):ya(e.locale)}let lo;function ya(e){if(ae(e))return e;if(Be(e)){if(e.resolvedOnce&&lo!=null)return lo;if(e.constructor.name==="Function"){const t=e();if(mp(t))throw nn(tn.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return lo=t}else throw nn(tn.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw nn(tn.NOT_SUPPORT_LOCALE_TYPE)}function Vp(e,t,n){return[...new Set([n,...je(t)?t:Se(t)?Object.keys(t).filter(s=>s!=="default"):ae(t)?[t]:[n]])]}function Po(e,t,n){const s=ae(n)?n:_i,i=e;let l;Se(t)?(i.__localeChainObjectCache||(i.__localeChainObjectCache=new WeakMap),l=i.__localeChainObjectCache.get(t),l||(l=new Map,i.__localeChainObjectCache.set(t,l))):(i.__localeChainCache||(i.__localeChainCache=new Map),l=i.__localeChainCache.get(t),l||(l=new Map,i.__localeChainCache.set(t,l)));const r=l.get(s);if(r)return r;const u=[];let f=[n];for(;je(f);)f=wa(u,f,t);const h=je(t)||!Fe(t)?t:t.default?t.default:null;return f=ae(h)?[h]:h,je(f)&&wa(u,f,!1),l.set(s,u),u}function wa(e,t,n){let s=!0;for(let i=0;i{r===void 0?r=u:r+=u},v[1]=()=>{r!==void 0&&(t.push(r),r=void 0)},v[2]=()=>{v[0](),i++},v[3]=()=>{if(i>0)i--,s=4,v[0]();else{if(i=0,r===void 0||(r=Gp(r),r===!1))return!1;v[1]()}};function y(){const I=e[n+1];if(s===5&&I==="'"||s===6&&I==='"')return n++,u="\\"+I,v[0](),!0}for(;s!==null;)if(n++,l=e[n],!(l==="\\"&&y())){if(f=Yp(l),b=In[s],h=b[f]||b.l||8,h===8||(s=h[0],h[1]!==void 0&&(p=v[h[1]],p&&(u=l,p()===!1))))return;if(s===7)return t}}const ka=new Map;function Xp(e,t){return Se(e)?e[t]:null}function Zp(e,t){if(!Se(e))return null;let n=ka.get(t);if(n||(n=Jp(t),n&&ka.set(t,n)),!n)return null;const s=n.length;let i=e,l=0;for(;l`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function eh(){return{upper:(e,t)=>t==="text"&&ae(e)?e.toUpperCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&ae(e)?e.toLowerCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&ae(e)?$a(e):t==="vnode"&&Se(e)&&"__v_isVNode"in e?$a(e.children):e}}let Fc;function th(e){Fc=e}let Dc;function nh(e){Dc=e}let Uc;function sh(e){Uc=e}let jc=null;const xa=e=>{jc=e},Sa=()=>jc;let Ca=0;function ih(e={}){const t=Be(e.onWarn)?e.onWarn:gp,n=ae(e.version)?e.version:Qp,s=ae(e.locale)||Be(e.locale)?e.locale:_i,i=Be(s)?_i:s,l=je(e.fallbackLocale)||Fe(e.fallbackLocale)||ae(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,r=Fe(e.messages)?e.messages:ao(i),u=Fe(e.datetimeFormats)?e.datetimeFormats:ao(i),f=Fe(e.numberFormats)?e.numberFormats:ao(i),h=ot(Ie(),e.modifiers,eh()),p=e.pluralRules||Ie(),b=Be(e.missing)?e.missing:null,v=Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=!!e.fallbackFormat,T=!!e.unresolving,$=Be(e.postTranslation)?e.postTranslation:null,A=Fe(e.processor)?e.processor:null,S=Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,D=!!e.escapeParameter,C=Be(e.messageCompiler)?e.messageCompiler:Fc,B=Be(e.messageResolver)?e.messageResolver:Dc||Xp,O=Be(e.localeFallbacker)?e.localeFallbacker:Uc||Vp,E=Se(e.fallbackContext)?e.fallbackContext:void 0,L=e,M=Se(L.__datetimeFormatters)?L.__datetimeFormatters:new Map,U=Se(L.__numberFormatters)?L.__numberFormatters:new Map,R=Se(L.__meta)?L.__meta:{};Ca++;const Y={version:n,cid:Ca,locale:s,fallbackLocale:l,messages:r,modifiers:h,pluralRules:p,missing:b,missingWarn:v,fallbackWarn:y,fallbackFormat:I,unresolving:T,postTranslation:$,processor:A,warnHtmlMessage:S,escapeParameter:D,messageCompiler:C,messageResolver:B,localeFallbacker:O,fallbackContext:E,onWarn:t,__meta:R};return Y.datetimeFormats=u,Y.numberFormats=f,Y.__datetimeFormatters=M,Y.__numberFormatters=U,Y}const ao=e=>({[e]:Ie()});function Hc(e,t,n,s,i){const{missing:l,onWarn:r}=e;if(l!==null){const u=l(e,n,t,i);return ae(u)?u:t}else return t}function Ta(e,t){const n=e;Se(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ti(e,t,n){Ta(e,n),e.fallbackContext&&Ta(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function oh(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function lh(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let s=n+1;s{s.includes(f)?u[f]=i[f]:t[f]=i[f]}),ae(l)?t.locale=l:Fe(l)&&(u=l),Fe(r)&&(u=r),u}function Ea(e,...t){const{datetimeFormats:n,unresolving:s,onWarn:i}=e,{__datetimeFormatters:l}=e;if(!ae(t[0])&&!Sc(t[0])&&!ze(t[0]))return yi;const[r,u,f,h]=Oo(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.DateTimeFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"datetime format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.DateTimeFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const qc=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Oo(...e){const[t]=e,n=Ie(),s=Ie();let i;if(ae(t)){const r=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!r)throw nn(tn.INVALID_ISO_DATE_ARGUMENT);const u=r[3]?r[3].trim().startsWith("T")?`${r[1].trim()}${r[3].trim()}`:`${r[1].trim()}T${r[3].trim()}`:r[1].trim();i=new Date(u);try{i.toISOString()}catch{throw nn(tn.INVALID_ISO_DATE_ARGUMENT)}}else if(Sc(t)){if(isNaN(t.getTime()))throw nn(tn.INVALID_DATE_ARGUMENT);i=t}else if(ze(t))i=t;else throw nn(tn.INVALID_ARGUMENT);const l=Kc(e,n,s,qc);return[n.key||"",i,n,l]}function Aa(e,t,n){Bc(e.__datetimeFormatters,t,n)}function Pa(e,...t){const{numberFormats:n,unresolving:s,onWarn:i}=e,{__numberFormatters:l}=e;if(!ze(t[0]))return yi;const[r,u,f,h]=Io(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.NumberFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"number format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.NumberFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const zc=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Io(...e){const[t]=e,n=Ie(),s=Ie();if(!ze(t))throw nn(tn.INVALID_ARGUMENT);const i=t,l=Kc(e,n,s,zc);return[n.key||"",i,n,l]}function Oa(e,t,n){Bc(e.__numberFormatters,t,n)}const ah=e=>e,rh=e=>"",ch="text",uh=e=>e.length===0?"":vp(e),dh=bp;function ro(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function fh(e){const t=ze(e.pluralIndex)?e.pluralIndex:-1;return ze(e.named?.count)?e.named.count:ze(e.named?.n)?e.named.n:t}function ph(e={}){const t=e.locale,n=fh(e),s=ae(t)&&Be(e.pluralRules?.[t])?e.pluralRules[t]:ro,i=s===ro?void 0:ro,l=A=>A[s(n,A.length,i)],r=e.list||[],u=A=>r[A],f=e.named||Ie();ze(e.pluralIndex)&&(f.count||=e.pluralIndex,f.n||=e.pluralIndex);const h=A=>f[A];function p(A,S){const D=Be(e.messages)?e.messages(A,!!S):Se(e.messages)?e.messages[A]:!1;return D||(e.parent?e.parent.message(A):rh)}const b=A=>e.modifiers?e.modifiers[A]:ah,v=Be(e.processor?.normalize)?e.processor.normalize:uh,y=Be(e.processor?.interpolate)?e.processor.interpolate:dh,I=ae(e.processor?.type)?e.processor.type:ch,$={list:u,named:h,plural:l,linked:(A,...S)=>{const[D,C]=S;let B="text",O="";S.length===1?Se(D)?(O=D.modifier||O,B=D.type||B):ae(D)&&(O=D||O):S.length===2&&(ae(D)&&(O=D||O),ae(C)&&(B=C||B));const E=p(A,!0)($),L=E===""||E===void 0?A:E,M=B==="vnode"&&je(L)&&O?L[0]:L;return O?b(O)(M,B):M},message:p,type:I,interpolate:y,normalize:v,values:ot(Ie(),r,f)};return $}const Ia=()=>"",sn=e=>Be(e);function La(e,...t){const{fallbackFormat:n,postTranslation:s,unresolving:i,messageCompiler:l,fallbackLocale:r,messages:u}=e,[f,h]=Lo(...t),p=Ke(h.missingWarn)?h.missingWarn:e.missingWarn,b=Ke(h.fallbackWarn)?h.fallbackWarn:e.fallbackWarn,v=Ke(h.escapeParameter)?h.escapeParameter:e.escapeParameter,y=!!h.resolvedMessage,I=ae(h.default)||Ke(h.default)?Ke(h.default)?l?f:()=>f:h.default:n?l?f:()=>f:null,T=n||I!=null&&(ae(I)||Be(I)),$=bl(e,h);v&&hh(h);let[A,S,D]=y?[f,$,u[$]||Ie()]:Yc(e,f,$,r,b,p),C=A,B=f;if(!y&&!(ae(C)||Kt(C)||sn(C))&&T&&(C=I,B=C),!y&&(!(ae(C)||Kt(C)||sn(C))||!ae(S)))return i?Hi:f;let O=!1;const E=()=>{O=!0},L=sn(C)?C:Gc(e,f,S,C,B,E);if(O)return C;const M=vh(e,S,D,h),U=ph(M),R=mh(e,L,U);let Y=s?s(R,f):R;return v&&ae(Y)&&(Y=Op(Y)),Y}function hh(e){je(e.list)?e.list=e.list.map(t=>ae(t)?ha(t):t):Se(e.named)&&Object.keys(e.named).forEach(t=>{ae(e.named[t])&&(e.named[t]=ha(e.named[t]))})}function Yc(e,t,n,s,i,l){const{messages:r,onWarn:u,messageResolver:f,localeFallbacker:h}=e,p=h(e,s,n);let b=Ie(),v,y=null;const I="translate";for(let T=0;Ts);return h.locale=n,h.key=t,h}const f=r(s,bh(e,n,i,s,u,l));return f.locale=n,f.key=t,f.source=s,f}function mh(e,t,n){return t(n)}function Lo(...e){const[t,n,s]=e,i=Ie();if(!ae(t)&&!ze(t)&&!sn(t)&&!Kt(t))throw nn(tn.INVALID_ARGUMENT);const l=ze(t)?String(t):(sn(t),t);return ze(n)?i.plural=n:ae(n)?i.default=n:Fe(n)&&!fl(n)?i.named=n:je(n)&&(i.list=n),ze(s)?i.plural=s:ae(s)?i.default=s:Fe(s)&&ot(i,s),[l,i]}function bh(e,t,n,s,i,l){return{locale:t,key:n,warnHtmlMessage:i,onError:r=>{throw l&&l(r),r},onCacheKey:r=>up(t,n,r)}}function vh(e,t,n,s){const{modifiers:i,pluralRules:l,messageResolver:r,fallbackLocale:u,fallbackWarn:f,missingWarn:h,fallbackContext:p}=e,v={locale:t,modifiers:i,pluralRules:l,messages:(y,I)=>{let T=r(n,y);if(T==null&&(p||I)){const[$,,A]=Yc(p||e,y,t,u,f,h);T=$??r(A,y)}if(ae(T)||Kt(T)){let $=!1;const S=Gc(e,y,t,T,y,()=>{$=!0});return $?Ia:S}else return sn(T)?T:Ia}};return e.processor&&(v.processor=e.processor),s.list&&(v.list=s.list),s.named&&(v.named=s.named),ze(s.plural)&&(v.pluralIndex=s.plural),v}const gh="11.4.12",gt={UNEXPECTED_RETURN_TYPE:Hp,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Tt(e,...t){return Tc(e,null,void 0)}const Mo=Pn("__translateVNode"),Ro=Pn("__datetimeParts"),No=Pn("__numberParts"),_h=Pn("__setPluralRules"),yh=Pn("__injectWithOption"),Zn=Pn("__dispose");let Jc=null;{const e=pp().__VUE_INSTANCE_SETTERS__;je(e)&&e.push(t=>{Jc=t})}function Ms(e){if(!Se(e)||Kt(e))return e;for(const t in e)if(xt(e,t))if(!t.includes("."))Se(e[t])&&Ms(e[t]);else{const n=t.split("."),s=n.length-1;let i=e,l=!1;for(let r=0;r{if("locale"in u&&"resource"in u){const{locale:f,resource:h}=u;f?(r[f]=r[f]||Ie(),oi(h,r[f])):oi(h,r)}else ae(u)&&oi(JSON.parse(u),r)}),i==null&&l)for(const u in r)xt(r,u)&&Ms(r[u]);return r}function wh(e){return e.type}function kh(e,t,n){let s=Se(t.messages)?t.messages:Ie();"__i18nGlobal"in n&&(s=Xc(e.locale.value,{messages:s,__i18n:n.__i18nGlobal}));const i=Object.keys(s);i.length&&i.forEach(l=>{e.mergeLocaleMessage(l,s[l])});{if(Se(t.datetimeFormats)){const l=Object.keys(t.datetimeFormats);l.length&&l.forEach(r=>{e.mergeDateTimeFormat(r,t.datetimeFormats[r])})}if(Se(t.numberFormats)){const l=Object.keys(t.numberFormats);l.length&&l.forEach(r=>{e.mergeNumberFormat(r,t.numberFormats[r])})}}}function Ma(e){return se(Bs,null,e,0)}function Zc(){return Jc??_c()}const Ra=()=>[],$h=()=>!1;let Na=0;function Fa(e){return((t,n,s,i)=>e(n,s,Zc()||void 0,i))}function Fo(e={}){const{__root:t,__injectWithOption:n}=e,s=t===void 0,i=e.flatJson,l=vi?ke:md;let r=Ke(e.inheritLocale)?e.inheritLocale:!0;const u=l(t&&r?t.locale.value:ae(e.locale)?e.locale:_i),f=l(t&&r?t.fallbackLocale.value:ae(e.fallbackLocale)||je(e.fallbackLocale)||Fe(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),h=l(Xc(u.value,e)),p=l(Fe(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),b=l(Fe(e.numberFormats)?e.numberFormats:{[u.value]:{}});let v=t?t.missingWarn:Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=t?t.fallbackWarn:Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=t?t.fallbackRoot:Ke(e.fallbackRoot)?e.fallbackRoot:!0,T=!!e.fallbackFormat,$=Be(e.missing)?e.missing:null,A=Be(e.missing)?Fa(e.missing):null,S=Be(e.postTranslation)?e.postTranslation:null,D=t?t.warnHtmlMessage:Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,C=!!e.escapeParameter;const B=t?t.modifiers:Fe(e.modifiers)?e.modifiers:{};let O=e.pluralRules||t&&t.pluralRules,E;E=(()=>{s&&xa(null);const P={version:gh,locale:u.value,fallbackLocale:f.value,messages:h.value,modifiers:B,pluralRules:O,missing:A===null?void 0:A,missingWarn:v,fallbackWarn:y,fallbackFormat:T,unresolving:!0,postTranslation:S===null?void 0:S,warnHtmlMessage:D,escapeParameter:C,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};P.datetimeFormats=p.value,P.numberFormats=b.value,P.__datetimeFormatters=Fe(E)?E.__datetimeFormatters:void 0,P.__numberFormatters=Fe(E)?E.__numberFormatters:void 0;const F=ih(P);return s&&xa(F),F})(),ti(E,u.value,f.value);function M(){return[u.value,f.value,h.value,p.value,b.value]}const U=k({get:()=>u.value,set:P=>{E.locale=P,u.value=P}});function R(P){s||(E.fallbackContext=t?Sa():void 0);try{ti(E,u.value,P)}finally{s||(E.fallbackContext=void 0)}}const Y=k({get:()=>f.value,set:P=>{f.value=P,E.fallbackLocale=f.value,R(f.value)}}),te=k(()=>h.value),ye=k(()=>p.value),re=k(()=>b.value);function be(){return Be(S)?S:null}function ge(P){S=P,E.postTranslation=P}function we(){return $}function Ye(P){P!==null&&(A=Fa(P)),$=P,E.missing=A}const le=(P,F,ue,fe,Oe,De)=>{M();let Ve;try{s||(E.fallbackContext=t?Sa():void 0),Ve=P(E)}finally{s||(E.fallbackContext=void 0)}if(ue!=="translate exists"&&ze(Ve)&&Ve===Hi||ue==="translate exists"&&!Ve){const[wt,Yn]=F();return t&&I?fe(t):Oe(wt)}else{if(De(Ve))return Ve;throw Tt(gt.UNEXPECTED_RETURN_TYPE)}};function ee(...P){return le(F=>Reflect.apply(La,null,[F,...P]),()=>Lo(...P),"translate",F=>Reflect.apply(F.t,F,[...P]),F=>F,F=>ae(F))}function ce(...P){const[F,ue,fe]=P;if(fe&&!Se(fe))throw Tt(gt.INVALID_ARGUMENT);return ee(F,ue,ot({resolvedMessage:!0},fe||{}))}function tt(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>Reflect.apply(F.d,F,[...P]),()=>yi,F=>ae(F)||je(F))}function $e(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>Reflect.apply(F.n,F,[...P]),()=>yi,F=>ae(F)||je(F))}function K(P){return P.map(F=>ae(F)||ze(F)||Ke(F)?Ma(String(F)):F)}const ie={normalize:K,interpolate:P=>P,type:"vnode"};function yt(...P){return le(F=>{let ue;const fe=F;try{fe.processor=ie,ue=Reflect.apply(La,null,[fe,...P])}finally{fe.processor=null}return ue},()=>Lo(...P),"translate",F=>F[Mo](...P),F=>[Ma(F)],F=>je(F))}function Ln(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>F[No](...P),Ra,F=>ae(F)||je(F))}function Mn(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>F[Ro](...P),Ra,F=>ae(F)||je(F))}function El(P){O=P,E.pluralRules=O}function w(P,F){return le(()=>{if(!P)return!1;const ue=ae(F)?F:u.value,fe=ae(F)?[ue]:Po(E,f.value,ue);for(let Oe=0;Oe[P],"translate exists",ue=>Reflect.apply(ue.te,ue,[P,F]),$h,ue=>Ke(ue))}function x(P){let F=null;const ue=Po(E,f.value,u.value);for(let fe=0;feR(f.value),{deep:!0,flush:"sync"}),t&&vi&&(Ct(t.locale,P=>{r&&(u.value=P,E.locale=P,ti(E,u.value,f.value))}),Ct(t.fallbackLocale,P=>{r&&(f.value=P,E.fallbackLocale=f.value,ti(E,u.value,f.value))}));const Z={id:Na,locale:U,fallbackLocale:Y,get inheritLocale(){return r},set inheritLocale(P){r=P,P&&t&&(U.value=t.locale.value,Y.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(h.value).sort()},messages:te,get modifiers(){return B},get pluralRules(){return O||{}},get isGlobal(){return s},get missingWarn(){return v},set missingWarn(P){v=P,E.missingWarn=v},get fallbackWarn(){return y},set fallbackWarn(P){y=P,E.fallbackWarn=y},get fallbackRoot(){return I},set fallbackRoot(P){I=P},get fallbackFormat(){return T},set fallbackFormat(P){T=P,E.fallbackFormat=T},get warnHtmlMessage(){return D},set warnHtmlMessage(P){D=P,E.warnHtmlMessage=P},get escapeParameter(){return C},set escapeParameter(P){C=P,E.escapeParameter=P},t:ee,getLocaleMessage:q,setLocaleMessage:j,mergeLocaleMessage:V,getPostTranslationHandler:be,setPostTranslationHandler:ge,getMissingHandler:we,setMissingHandler:Ye,[_h]:El};return Z.datetimeFormats=ye,Z.numberFormats=re,Z.rt=ce,Z.te=w,Z.tm=N,Z.d=tt,Z.n=$e,Z.getDateTimeFormat=X,Z.setDateTimeFormat=J,Z.mergeDateTimeFormat=G,Z.getNumberFormat=H,Z.setNumberFormat=de,Z.mergeNumberFormat=Q,Z[yh]=n,Z[Mo]=yt,Z[Ro]=Mn,Z[No]=Ln,Z}const vl={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function xh({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((s,i)=>[...s,...i.type===z?i.children:[i]],[]):t.reduce((n,s)=>{const i=e[s];return i&&(n[s]=i()),n},Ie())}function Qc(){return z}const Sh=Le({name:"i18n-t",props:ot({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>ze(e)||!isNaN(e)}},vl),setup(e,t){const{slots:n,attrs:s}=t,i=e.i18n||gl({useScope:e.scope,__useComponent:!0});return()=>{const l=()=>{const f=Object.keys(n).filter(b=>b[0]!=="_"),h=Ie();e.locale&&(h.locale=e.locale),e.plural!==void 0&&(h.plural=ae(e.plural)?+e.plural:e.plural);const p=xh(t,f);return i[Mo](e.keypath,p,h)},r=ot(Ie(),s),u=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(u)?bi(u,r,{default:l}):bi(u,r,l())}}}),Da=Sh;function Ch(e){return je(e)&&!ae(e[0])}function eu(e,t,n,s){const{slots:i,attrs:l}=t;return()=>{const r=()=>{const h={part:!0};let p=Ie();e.locale&&(h.locale=e.locale),ae(e.format)?h.key=e.format:Se(e.format)&&(ae(e.format.key)&&(h.key=e.format.key),p=Object.keys(e.format).reduce((y,I)=>n.includes(I)?ot(Ie(),y,{[I]:e.format[I]}):y,Ie()));const b=s(e.value,h,p);let v=[h.key];return je(b)?v=b.map((y,I)=>{const T=i[y.type],$=T?T({[y.type]:y.value,index:I,parts:b}):[y.value];return Ch($)&&($[0].key=`${y.type}-${I}`),$}):ae(b)&&(v=[b]),v},u=ot(Ie(),l),f=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(f)?bi(f,u,{default:r}):bi(f,u,r())}}const Th=Le({name:"i18n-n",props:ot({value:{type:Number,required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,zc,(...s)=>n[No](...s))}}),Ua=Th;function Eh(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const s=n.__getInstance(t);return s!=null?s.__composer:e.global.__composer}}function Ah(e){const t=r=>{const{instance:u,value:f}=r;if(!u||!u.$)throw Tt(gt.UNEXPECTED_ERROR);const h=Eh(e,u.$),p=ja(f);return[Reflect.apply(h.t,h,[...Ha(p)]),h]};return{created:(r,u)=>{const[f,h]=t(u);vi&&(r.__i18nWatcher=Ct(h.locale,()=>{u.instance&&u.instance.$forceUpdate()})),r.__composer=h,r.textContent=f},unmounted:r=>{vi&&r.__i18nWatcher&&(r.__i18nWatcher(),r.__i18nWatcher=void 0,delete r.__i18nWatcher),r.__composer&&(r.__composer=void 0,delete r.__composer)},beforeUpdate:(r,{value:u})=>{if(r.__composer){const f=r.__composer,h=ja(u);r.textContent=Reflect.apply(f.t,f,[...Ha(h)])}},getSSRProps:r=>{const[u]=t(r);return{textContent:u}}}}function ja(e){if(ae(e))return{path:e};if(Fe(e)){if(!("path"in e))throw Tt(gt.REQUIRED_VALUE,"path");return e}else throw Tt(gt.INVALID_VALUE)}function Ha(e){const{path:t,locale:n,args:s,choice:i,plural:l}=e,r={},u=s||{};return ae(n)&&(r.locale=n),ze(i)&&(r.plural=i),ze(l)&&(r.plural=l),[t,u,r]}function Ph(e,t,...n){const s=Fe(n[0])?n[0]:{};(!Ke(s.globalInstall)||s.globalInstall)&&([Da.name,"I18nT"].forEach(l=>e.component(l,Da)),[Ua.name,"I18nN"].forEach(l=>e.component(l,Ua)),[Ba.name,"I18nD"].forEach(l=>e.component(l,Ba))),e.directive("t",Ah(t))}const Oh=Pn("global-vue-i18n");function Ih(e={}){const t=Ke(e.globalInjection)?e.globalInjection:!0,n=new Map,[s,i]=Lh(e),l=Pn("");function r(p){return n.get(p)||null}function u(p,b){n.set(p,b)}function f(p){n.delete(p)}const h={get mode(){return"composition"},async install(p,...b){if(p.__VUE_I18N_SYMBOL__=l,p.provide(p.__VUE_I18N_SYMBOL__,h),Fe(b[0])){const I=b[0];h.__composerExtend=I.__composerExtend,h.__vueI18nExtend=I.__vueI18nExtend}let v=null;t&&(v=jh(p,h.global)),Ph(p,h,...b);const y=p.unmount;p.unmount=()=>{v&&v(),h.dispose(),y()}},get global(){return i},dispose(){s.stop()},__instances:n,__getInstance:r,__setInstance:u,__deleteInstance:f};return h}function gl(e={}){const t=Zc();if(t==null)throw Tt(gt.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Tt(gt.NOT_INSTALLED);const n=Mh(t),s=Nh(n),i=wh(t),l=Rh(e,i);if(l==="global")return kh(s,e,i),s;if(l==="parent"){let f=Va(n,t,e.__useComponent);return f==null&&(f=s),f}if(l==="isolated"){if(n.mode!=="composition")throw Tt(gt.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const f=n,h=ot({},e),p=Va(n,t);h.__root=p||s;const b=Fo(h);return f.__composerExtend&&(b[Zn]=f.__composerExtend(b)),$r()&&Gu(()=>{const y=b[Zn];y&&(y(),delete b[Zn])}),b}const r=n;let u=r.__getInstance(t);if(u==null){const f=ot({},e);"__i18n"in i&&(f.__i18n=i.__i18n),s&&(f.__root=s),u=Fo(f),r.__composerExtend&&(u[Zn]=r.__composerExtend(u)),Dh(r,t,u),r.__setInstance(t,u)}return u}function Lh(e,t){const n=Yu(),s=n.run(()=>Fo(e));if(s==null)throw Tt(gt.UNEXPECTED_ERROR);return[n,s]}function Mh(e){const t=$s(e.isCE?Oh:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Tt(e.isCE?gt.NOT_INSTALLED_WITH_PROVIDE:gt.UNEXPECTED_ERROR);return t}function Rh(e,t){return fl(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Nh(e){return e.mode==="composition"?e.global:e.global.__composer}function Va(e,t,n=!1){let s=null;const i=t.root;let l=Fh(t,n);for(;l!=null;){const r=e;if(e.mode==="composition"&&(s=r.__getInstance(l)),s!=null||i===l)break;l=l.parent}return s}function Fh(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Dh(e,t,n){An(()=>{},t),cl(()=>{const s=n;e.__deleteInstance(t);const i=s[Zn];i&&(i(),delete s[Zn])},t)}const Uh=["locale","fallbackLocale","availableLocales"],Wa=["t","rt","d","n","tm","te"];function jh(e,t){const n=Object.create(null);return Uh.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l)throw Tt(gt.UNEXPECTED_ERROR);const r=Qe(l.value)?{get(){return l.value.value},set(u){l.value.value=u}}:{get(){return l.get&&l.get()}};Object.defineProperty(n,i,r)}),e.config.globalProperties.$i18n=n,Wa.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l||!l.value)throw Tt(gt.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,l)}),()=>{delete e.config.globalProperties.$i18n,Wa.forEach(i=>{delete e.config.globalProperties[`$${i}`]})}}const Hh=Le({name:"i18n-d",props:ot({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,qc,(...s)=>n[Ro](...s))}}),Ba=Hh;th(jp);nh(Zp);sh(Po);const Vh={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Undo"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"unknown"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Unsaved changes"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancel"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Open Devices & services"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Save & send"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Saving…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Read current data"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 result. Keep typing to narrow it down."},{t:2,i:[{t:4,k:"n"},{t:3,v:" results. Keep typing to narrow it down."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Close"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Change"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Loading…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Back"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"New screen"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work. Refresh the page and try again."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API key copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API key is selected. Copy with Ctrl+C or Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON is selected. Copy with Ctrl+C or Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Action name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Action name is selected. Copy with Ctrl+C or Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is selected. Copy with Ctrl+C or Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icon name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icon name is selected. Copy with Ctrl+C or Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Empty color copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Empty color is selected. Copy with Ctrl+C or Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Color name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Color name is selected. Copy with Ctrl+C or Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Management page unreachable · retrying…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connected"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconnecting to Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Refresh"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Queued for the update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found with this device name."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"What's new"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Full log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"The IP address, once; new firmware reports it itself."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP address, e.g. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP address"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Start"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installed, but not yet in Home Assistant. Add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and turn on “Allow the device to perform Home Assistant actions” under Configure."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware downloaded, not yet in Home Assistant. Put it on the screen with ESPHome Web, then add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and allow the Home Assistant actions under Configure."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Not yet in Home Assistant. Already flashed? Add the ESPHome device under Settings → Devices & services, then allow the Home Assistant actions under Configure. Not flashed yet? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copy API key"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Add to this screen"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet and a test alert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nothing to save"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify this screen"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Blinks the backlight and shows a card"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs a newer firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Download and copy as JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Search screens, entities, actions…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nothing matches. Type part of a screen, entity or action."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Choose a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Pick one of your screens on the left to change its tiles, top bar and settings."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Start with a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Connect a CYD or Guition via USB to your Home Assistant machine. Profile, firmware, and the first flash happen in one go."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Install new screen"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"You have unsaved changes. Open a different screen anyway?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with a copy of the other screen's?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with the imported one?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your screen is being updated."}},other:{t:0,b:{t:2,i:[{t:3,v:"Saved. "},{t:4,k:"name"},{t:3,v:" is being updated."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The screen is being updated."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your newest change isn't sent yet: press Save & send again."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" blinks and shows a card for a few seconds."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · changes are saved"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Screen settings"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Saved · sent to screen"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"All saved"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"blink the screen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs firmware 0.2.31 or newer"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"from Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy layout from…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" screen"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" screens"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"no other screen"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tile"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tiles"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Import layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"advanced"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found for this screen"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"There is no room for this tile on page "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"No page is free for a full-page tile. Free a page first."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"This screen already has a tile that goes to page "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied. Save & send when it looks right."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout imported. Save & send when it looks right."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout imported: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"That isn't JSON. Export a layout first, or paste one from another ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"No tiles in this file. Expected a layout exported from ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Add your first light, scene, or device from the library."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tap the top bar or a tile to change it. Drag to move; drop on the next page for a new one."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Empty slots and fixed positions work from firmware 0.2.26. This screen (firmware "},{t:4,k:"firmware"},{t:3,v:") shifts the tiles up to the first free slot until that update."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Screen layout"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Add page"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 page is the most"},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages is the most"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove page"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"The pages after this one shift up one slot"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edit top bar"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Empty slot. Click to add a tile here, or drag one over."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Empty slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:": add the next tile here"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Next tile goes here"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Empty"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Library"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entity"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entities"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, device, or room…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Add an entity"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"All"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lights"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switches"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fans"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Covers"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scenes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensors"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Values"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selects"}},person:{t:0,b:{t:2,i:[{t:3}],s:"People"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Room"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"All rooms"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Hide placed"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Hide what is already on this screen"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Everything here is already on this screen."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found. Try a different name, room or filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile; update its firmware for 48."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles; update its firmware for 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Drag onto a page, or tap + to add to the first free slot. ⌘K searches everything."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Light"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cover"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Person"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Image"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entity"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"graph"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analog clock"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"sun path"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"double"}},full:{t:0,b:{t:2,i:[{t:3}],s:"full page"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Name on the screen"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (from Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (default)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows a chosen icon from firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Goes to page"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (empty)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigation tiles need firmware 0.2.62: press Update on the screen first."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"This screen has no page "},{t:4,k:"page"},{t:3,v:", so a tap opens its last page. Choose another page."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"A tap on the tile opens that page."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Display"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analog clock"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Name and status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Graph"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sun path"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has no numbers for this entity, so the graph stays empty. Choose another display."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"This weather service has no daily forecast in Home Assistant. Choose another display."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Size"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Double-width"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Full page"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Full page: one big button that lights up while on; a slider, controls or a graph sit at the bottom of it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"A full-page tile needs firmware 0.2.62: press Update on the screen first."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Page"}},new:{t:0,b:{t:2,i:[{t:3}],s:"New page"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Direct control on the tile"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this control for this entity, so it stays empty on the screen. Choose another one."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"At the bottom of the full-page tile; a tap anywhere else works as set below."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"On the right of the double-width tile, like the rows in Home Assistant. Tapping the name works as set below."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows direct control from firmware 0.2.19; until then the tile stays as it was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"On tap"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatic"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Open control"}},none:{t:0,b:{t:2,i:[{t:3}],s:"View only"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"On / off"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Perform action"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant can't turn this on and off, so a tap does nothing. Choose another option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen switches this from firmware 0.2.58: press Update on the screen. Until then a tap opens its card."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Hold the tile to open its card."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Small slider on the tile"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Yes, control directly"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has nothing a slider can change for this entity. Choose No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"History"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hour"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastel background"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Background: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:". Enter: configure, arrow keys: move"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove tile"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Asking Home Assistant which actions this entity has…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant isn't answering right now. Try again in a moment."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose an action"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example toggle, position, or play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an action"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No action found."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this action for this entity any more, so a tap does nothing. Choose another one."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Not set"}},on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant needs "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen performs an action from firmware 0.2.58: press Update on the screen. Until then a tap works as Automatic."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"No icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example lamp, music, or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"No icon, text only"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No icon found."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Current data"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connection, status, and supported properties"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Reading…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Fetching current HA status…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Small slider: "},{t:4,k:"slider"},{t:3,v:" · Display: "},{t:4,k:"display"},{t:3,v:" · Size: "},{t:4,k:"size"},{t:3,v:" · Control: "},{t:4,k:"control"},{t:3,v:" · Background: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"yes"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"none"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Default"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Read again"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed from the top bar"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"The top bar has room for 1 item."},{t:2,i:[{t:3,v:"The top bar has room for "},{t:4,k:"n"},{t:3,v:" items."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"This is already in the top bar."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Top bar"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Top bar: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself, also works without Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" item"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" items"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Left: name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"For example: Living room"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Right: time, sensors, or a clock"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:". Enter: configure, arrows: move"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"},{t:3,v:" from the top bar"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximum 1 item"},{t:2,i:[{t:3,v:"Maximum "},{t:4,k:"n"},{t:3,v:" items"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Add the time, date, analog clock, or an entity"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Add time, date, or an entity"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Not everything fits next to the name: the screen drops the dashed items. Remove one or choose a shorter name."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Drag to reorder; tap an item to configure it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensors, the date, and the analog clock appear from firmware "},{t:4,k:"version"},{t:3,v:"; until that update, this screen shows the name and, if the time is in the bar, the clock."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden: not active right now"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't fit next to the name"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Dial"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden right now: not active"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't currently fit next to the name"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"How it looks on the screen"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Small dial with the time"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"What to show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Last changed keeps counting on the screen itself: “Just now”, “5 min ago”, “Yesterday”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (like Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Only when active hides the item as long as it's off, closed, away, or 0. Handy for an open door, a running washing machine, or who's home."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24 hour clock · change under "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12 hour clock · change under "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings → Language & region"}},date_hint:{t:0,b:{t:2,i:[{t:4,k:"date"},{t:3,v:" today. The date follows the screen's own clock."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Up"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Down"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Add to the top bar"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slot used"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slots used"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Already added"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggestions from Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"An entity"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, room, or entity, e.g. temperature or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an entity for the top bar"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Night"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Dark mode"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto standby"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby after"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Standby brightness"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Night mode"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Starts"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Ends"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Night brightness"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Back to page 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"After"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Also on standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Swipe between pages"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotation"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Still saving the other screen's settings. Try again in a moment."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons and swiping are off, so only Go to page tiles change the page."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"page "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pages "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"You have no Go to page tiles."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"The tiles to "},{t:4,k:"pages"},{t:3,v:" are only on pages you can't reach."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"From "},{t:4,k:"pages"},{t:3,v:" no tile leads back to page 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"This screen is offline. Its settings can change once it's back."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply on the screen at once, and show up here when they change there."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply at once. Firmware 0.2.49 lets the screen keep them itself."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"This entity is off in Home Assistant, or the screen is restarting."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lower"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" higher"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Starting update…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building the firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Writing the firmware over Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Building and installing…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Waiting for the screen to come back…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Checking that it stays stable…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"New language: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Screens will now update automatically at night."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatic updates are off."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Updating to firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"No screen paired yet. New screens get firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"All screens have firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Update 1 screen"},{t:2,i:[{t:3,v:"Update all "},{t:4,k:"n"},{t:3,v:" screens"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"What's new in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Update automatically every night"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Between 03:00 and 06:00, one screen at a time. Stops on an error and reports it in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Claude Code picks it up right away."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Restart Claude Code once so it finds the new skills folder."}},text:{t:0,b:{t:2,i:[{t:3}],s:'Teach Claude about ESP Screens, then ask: "Show an alert on all my screens when the mailbox is full." Claude knows the alert events, every field, color, and icon.'}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install for Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Install again"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update the skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Not installed"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installed"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installed · a newer version is ready"}},writes:{t:0,b:{t:2,i:[{t:3,v:"For Claude Code in Home Assistant. Writes one file to "},{t:4,k:"path"},{t:3,v:"; installing again replaces it."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download for claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload the zip in Claude under Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Everything around your screens."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← My screens"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Add a screen, or build and reinstall the firmware of one you already have."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Build and install via USB or Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Language & region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Screen language"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant's language ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant's language"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"The screens use English until Home Assistant's language is available."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not checked yet, help welcome"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is not checked yet, help welcome: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"how to translate"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"After a change every screen needs a firmware update, one build each: with its Update button, or in the nightly updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Time format"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 hour"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 hour"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Number format"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Your Home Assistant profile: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Use these"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"The editor itself follows the language of your Home Assistant profile."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Every screen takes the new language with its next update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"A card over the whole screen from an automation, on one screen or on all of them. The cheatsheet has the action names, fields, icons, and colors, and a form to try one."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Full-screen notifications, from an automation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Build and install screen firmware"}},intro:{t:0,b:{t:2,i:[{t:3,v:"The built-in ESPHome CLI uses your own profile (YAML with keys) and secrets. Choose the screen's profile, then a USB port (screen connected to the Home Assistant machine), "},{t:4,k:"ota"},{t:3,v:" with the hostname, or "},{t:4,k:"download"},{t:3,v:" to put the firmware on the screen from your own computer. "},{t:4,k:"check"},{t:3,v:" only validates, "},{t:4,k:"build"},{t:3,v:" compiles, "},{t:4,k:"install"},{t:3,v:" puts the firmware on the screen. Your tiles stay as they are in ESP Screens. The first build takes a few minutes."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Check"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Build only"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Build & install"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Build & download"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing. Update the app to 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose the intended profile, then a USB port, an IP address, or Download."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome profile"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Install to"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · no board found on the Home Assistant machine yet"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Download · flash from your own computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP address or hostname"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Download "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Put it on the screen with "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome or Edge: Connect, choose the screen's USB port, Install, and select this file. It holds your Wi-Fi password and the screen's keys: keep it to yourself."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profile saved."}},running:{t:0,b:{t:2,i:[{t:3}],s:"One moment…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to download."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens creates the screen's own profile with unique keys and builds the firmware. Connect the screen with a USB data cable to the machine running Home Assistant, or download the firmware and put it on the screen from your own computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Which screen do you have?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2.8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Living room screen"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Device name"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"customize"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Every screen gets its own profile with its own keys. Four screens? Go through this four times with a different name."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lowercase letters, digits, and dashes. A different name for each screen."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi name (2.4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi password"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Fill in once: ESP Screens saves this in ESPHome secrets.yaml, later screens use it automatically."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Your ESPHome secrets.yaml is still missing Wi-Fi details. ESP Screens only fills in the missing lines."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi comes from your ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in the ESPHome folder isn't valid YAML. Fix the file first; it won't be overwritten."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Install via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · save profile only"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Connect the screen with a USB data cable to the Home Assistant machine; the list refreshes on its own. Or choose Download to use your own computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download the firmware and put it on the screen from your own computer, in Chrome or Edge. After that, updates go over Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"The profile goes into the ESPHome folder. You can install later via Firmware & USB, or from ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"More than one board connected: choose this screen's port."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Once over USB; after that, everything is wireless."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Save profile"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A build or installation is already running ("},{t:4,k:"file"},{t:3,v:"). Wait for it to finish."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing from this installation; only saving the profile is possible."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" is in the ESPHome folder"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Writing firmware to "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware for "},{t:4,k:"name"},{t:3,v:" is ready"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware is on "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Build failed"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Install failed"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Install it later from Firmware & USB: choose this profile, then the USB port of the Home Assistant machine, or Download to put the firmware on the screen from your own computer. Save the API key for pairing:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Don't disconnect the USB cable yet."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the installation keeps running and you'll find it again under New screen."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the build keeps running and you'll find it again under New screen."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Put it on the screen from your own computer, then pair the screen with Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. Pair it with Home Assistant now:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs. Pair it with Home Assistant now:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"See the log below."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" with a USB data cable."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plug the screen into your computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome or Edge, click Connect and choose the screen's USB port."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Click Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"The file holds your Wi-Fi password and the screen's keys: keep it to yourself."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API key"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" This happens outside ESP Screens. Home Assistant discovers "},{t:4,k:"name"},{t:3,v:" as an ESPHome device; click Add. Not discovered? Add ESPHome manually with the screen's IP address."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Go to Home Assistant → Settings → Devices & services."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" above when Home Assistant asks for an encryption key."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Paste the API key"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome integration → Configure → “Allow the device to perform Home Assistant actions”. Without this, the screen sees everything but controls nothing."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allow HA actions:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Back in ESP Screens, the screen appears in the list on the left within about thirty seconds; until then it's shown there as “not yet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Choose your tiles."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome log"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Retry"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Install another screen"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Start over"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"A full-screen notification, from an automation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Every screen has the "},{t:4,k:"action"},{t:3,v:" action. It places a card over everything, wakes the screen, and keeps the backlight at normal brightness until someone taps the button or the timeout runs out. Home Assistant itself shows no explanation or dropdowns for ESPHome actions; everything you can fill in is listed here."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"The cheatsheet is still loading; one moment."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Someone is at the door"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Door 3, back"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Coming"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sections"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Try it"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Your screens"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In an automation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"All screens"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"The fields"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icons"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colors"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Behavior"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Events"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Send one alert now, with the same fields an automation sends. The screen shows the card and, with blinking on, flashes its backlight."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},all:{t:0,b:{t:2,i:[{t:3,v:"All screens ("},{t:4,k:"ready"},{t:3,v:" ready)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not ready"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Title"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtitle"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Color"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Button text"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconds, 0 waits for the button)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Blink the backlight"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Four times when the alert arrives."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Sending…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Send alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Sent to the screen."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 skipped (offline or old firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" skipped (offline or old firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Left empty: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"No screen could show it: check that a screen is online with firmware "},{t:4,k:"version"},{t:3,v:" or newer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"White (default)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Every screen has its own action, with the device name in it. From firmware "},{t:4,k:"version"},{t:3,v:"; update an older screen with its Update button under Screens."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"No screen paired yet. Install one via New screen; the action appears once Home Assistant sees the screen."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update needed · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Device name unknown · update the screen"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Show alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Dismiss alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" and search for "},{t:4,k:"esphome"},{t:3,v:`. Choose your screen's action: Home Assistant calls it "Performs the action show_alert of the node `},{t:4,k:"device"},{t:3,v:'".'}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Add action"}},device:{t:0,b:{t:2,i:[{t:3}],s:"device name"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant asks for all seven; leave what you don't use empty ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", off)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fill in the fields."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefer YAML? Choose "},{t:4,k:"edit"},{t:3,v:" on the action and paste the example below."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Example for"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"a screen (not paired yet)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edit in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copy YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"All screens at once"}},text:{t:0,b:{t:2,i:[{t:3,v:"Fire the event "},{t:4,k:"show"},{t:3,v:" with the same fields, and ESP Screens passes the alert on to every screen that is online, including screens you add later. "},{t:4,k:"dismiss"},{t:3,v:" clears it everywhere. In an automation, add the "},{t:4,k:"event"},{t:3,v:" action or paste the example under "},{t:4,k:"edit"},{t:3,v:". Leave out the fields you don't use. ESP Screens has to be running for this."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Fire manual event"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Text is free-form; the limit is in bytes, and an accented letter counts as two. What doesn't fit gets an ellipsis (title) or is dropped (subtitle)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Field"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"What it does"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Example"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"text"}},int:{t:0,b:{t:2,i:[{t:3}],s:"number"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"on / off"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entity"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 to 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:", for example "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" and the hex codepoint ("},{t:4,k:"hex"},{t:3,v:") also work. Only these icons are included in the firmware; any other name shows the warning triangle. Tap an icon to copy its name."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handy for notifications"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name or description…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Also available: control and weather icons"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copy "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:'No icon for "'},{t:4,k:"query"},{t:3,v:'". Unknown names show the warning triangle ('},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:". These are the pastel shades of the tiles, with dark text. Empty or unknown gives the white card. Tap to copy."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" An alert immediately wakes a dimmed or dark screen and appears above every page, every open light card, and the standby layer."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wakes the screen."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" As long as the card is showing, the backlight stays at normal brightness. Standby and night hours wait. After the button, the regular standby time starts again."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"On until the button."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" waits for the button, however long that takes. With "},{t:4,k:"minute"},{t:3,v:" the card disappears after a minute, but the button closes it sooner."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" blinks the backlight four times when the alert arrives (about a second) and leaves the screen on afterward."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Blinking."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" A new alert replaces the current one; there's no stack. The replaced alert reports itself as "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Replacing."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" clears the card, for example if the door is already open. Without an alert, that action does nothing."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Closing remotely."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" does nothing; only the button closes it. That way a wake-up tap never accidentally dismisses the alert."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tapping beside the card"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Every end fires the event "},{t:4,k:"event"},{t:3,v:" with "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (the device name) and the "},{t:4,k:"device_id"},{t:3,v:" that Home Assistant adds. Visible under Settings → Tools → Events."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"When"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Waiting until someone presses the button"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use a "},{t:4,k:"bold"},{t:3,v:': orange for the door, red for smoke or water, green for "done". The text always stays dark and readable.'}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"color per kind of notification"}},short:{t:0,b:{t:2,i:[{t:3,v:"Keep the title "},{t:4,k:"bold"},{t:3,v:"; a screen shows about twenty characters on one line and ends a longer title with an ellipsis. Put details in the subtitle."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"short"}},button:{t:0,b:{t:2,i:[{t:3,v:"A "},{t:4,k:"bold"},{t:3,v:' turns the notification into a question: "Coming", "Seen", "Turn off". The event then tells you who responded.'}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"custom button text"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"For an alert that resolves itself (the door opens, the laundry gets taken out) close it in the same automation with "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Every screen? Fire "},{t:4,k:"event"},{t:3,v:" once (see All screens at once). The screens still work independently and each reports with its own "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Rather "},{t:4,k:"bold"},{t:3,v:" for the automation? Install the ESP Screens skill under Settings → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"ask Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Doorbell: show the alert and wait until someone presses the button."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Someone is coming to the door."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Advanced · local override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Override YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"This small file is yours. It is loaded after the shared screen package and stays in place when ESP Screens updates. Change hardware-specific details here, such as a display model."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"What is safe to change?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pins and other device details. Name, Wi-Fi, API, OTA and package links remain managed."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Active"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to attach"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Local override YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Use example"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 character"},{t:2,i:[{t:4,k:"n"},{t:3,v:" characters"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 line"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lines"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Save & check"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Save override"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile was found for this screen."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Changes here apply on the next build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Save once to attach this file to the profile."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Checking and saving…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The override is kept during firmware updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML saved."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Saved. ESPHome is checking the complete profile…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome is checking the profile…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome is checking the profile… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"The complete profile is valid. Safe to build and install."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome rejected the complete profile. See Firmware & USB for the full log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Replace the current text with the example?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Example loaded. Save it when you are ready."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear the local override?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"The override will be empty after you save."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Unknown"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Unavailable"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heat"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Cool"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heat/Cool"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Fan only"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heating"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Cooling"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drying"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preheating"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Opening"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Closing"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Playing"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Away"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Above horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Below horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Docked"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Cleaning"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Returning to dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sunny"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Clear, night"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Cloudy"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Partly cloudy"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Rainy"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Pouring"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy, rainy"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Fog"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hail"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Lightning"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lightning, rainy"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windy"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Not charging"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Cold"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connected"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnected"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Hot"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Light detected"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"No light"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Unlocked"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Locked"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Wet"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Moving"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Not moving"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Plugged in"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Unplugged"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Running"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Not running"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsafe"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Safe"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update available"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activate"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Run"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Press"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Just now"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min ago"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 hour ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours ago"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Yesterday"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 day ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" days ago"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weeks ago"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 month ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" months ago"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 year ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" years ago"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 hour"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" hours"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Tomorrow"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 day"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" days"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sunday"}},{t:0,b:{t:2,i:[{t:3}],s:"Monday"}},{t:0,b:{t:2,i:[{t:3}],s:"Tuesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Wednesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Thursday"}},{t:0,b:{t:2,i:[{t:3}],s:"Friday"}},{t:0,b:{t:2,i:[{t:3}],s:"Saturday"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},{t:0,b:{t:2,i:[{t:3}],s:"Mon"}},{t:0,b:{t:2,i:[{t:3}],s:"Tue"}},{t:0,b:{t:2,i:[{t:3}],s:"Wed"}},{t:0,b:{t:2,i:[{t:3}],s:"Thu"}},{t:0,b:{t:2,i:[{t:3}],s:"Fri"}},{t:0,b:{t:2,i:[{t:3}],s:"Sat"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"Su"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Tu"}},{t:0,b:{t:2,i:[{t:3}],s:"We"}},{t:0,b:{t:2,i:[{t:3}],s:"Th"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"January"}},{t:0,b:{t:2,i:[{t:3}],s:"February"}},{t:0,b:{t:2,i:[{t:3}],s:"March"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"June"}},{t:0,b:{t:2,i:[{t:3}],s:"July"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"October"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"December"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan"}},{t:0,b:{t:2,i:[{t:3}],s:"Feb"}},{t:0,b:{t:2,i:[{t:3}],s:"Mar"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"Jun"}},{t:0,b:{t:2,i:[{t:3}],s:"Jul"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug"}},{t:0,b:{t:2,i:[{t:3}],s:"Sep"}},{t:0,b:{t:2,i:[{t:3}],s:"Oct"}},{t:0,b:{t:2,i:[{t:3}],s:"Nov"}},{t:0,b:{t:2,i:[{t:3}],s:"Dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday_min"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:"."}},group:{t:0,b:{t:2,i:[{t:3}],s:","}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}},Wh=Vh,Ka=e=>e%10>=2&&e%10<=4&&(e%100<12||e%100>14),qa={one_other:e=>e===1?0:1,one_upto_1:e=>Math.abs(e)<=1?0:1,slavic_pl:e=>e===1?0:Ka(e)?1:2,east_slavic:e=>e%10===1&&e%100!==11?0:Ka(e)?1:2,none:()=>0},Bh=Object.assign({"../../screen_manager/translations/de.json":()=>hn(()=>import("./de-Cl47viL4.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/en-GB.json":()=>hn(()=>import("./en-GB-v9zPRS2K.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/es.json":()=>hn(()=>import("./es-C-N5IJgg.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/fr.json":()=>hn(()=>import("./fr-dz9lbQdu.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/it.json":()=>hn(()=>import("./it-DdketJEs.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/nl.json":()=>hn(()=>import("./nl-CwiIFXXi.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pl.json":()=>hn(()=>import("./pl-CYmh5Lrf.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pt.json":()=>hn(()=>import("./pt-CJagQk1v.js"),[],import.meta.url).then(e=>e.default)}),Kh=Object.fromEntries(Object.entries(Bh).map(([e,t])=>[e.slice(e.lastIndexOf("/")+1,-5),t])),Rs={...cp},tu=new Set(["en"]),_l={},nu=e=>_l[e]=(t,n)=>Math.min((qa[Rs[e]?.plural]||qa.one_other)(t),n-1),yl=()=>["en",...Object.keys(Rs).filter(e=>e!=="en").sort()];yl().forEach(nu);const cs=Ih({locale:"en",fallbackLocale:"en",messages:{en:Wh},pluralRules:_l,missingWarn:!1,fallbackWarn:!1,missing:(e,t)=>{}}),c=cs.global.t,qh=(e,t="en")=>cs.global.te(e,t),wl=()=>cs.global.locale.value,zh=e=>Rs[e];function Yh(e=window){try{if(e.parent!==e){const t=e.parent.document.documentElement.lang;if(t)return t}}catch{}return e.navigator.language||"en"}function su(e,t=yl()){const n=i=>t.find(l=>l.toLowerCase()===i.toLowerCase()),s=(e||"").trim();return s?n(s)||n(s.split("-")[0]):void 0}const iu=(e,t=yl())=>su(e,t)||"en";function Gh(e,t,n=Rs[e]){n&&(Rs[e]=n),_l[e]||nu(e),cs.global.setLocaleMessage(e,t),tu.add(e)}const za={};function ou(e){if(tu.has(e))return Promise.resolve(!0);const t=Kh[e];return t?za[e]??=t().then(n=>(Gh(e,n),!0),()=>(delete za[e],!1)):Promise.resolve(!1)}async function Jh(e=iu(Yh())){const t=await ou(e)?e:"en";return cs.global.locale.value=t,document.documentElement.lang=t,t}const os={point:{decimal:".",group:",",from:4},comma:{decimal:",",group:".",from:4},space:{decimal:",",group:" ",from:4}};function lu(e,t){const n=String(e),s=/^(-?)(\d+)(?:\.(\d+))?$/.exec(n);if(!s)return n;const i=s[2].length>=t.from?s[2].replace(/\B(?=(\d{3})+$)/g,t.group):s[2];return`${s[1]}${i}${s[3]!==void 0?t.decimal+s[3]:""}`}const Ya={comma_decimal:"point",decimal_comma:"comma",space_comma:"space"};function Xh(e=window){try{if(e.parent===e)return{};const t=e.parent.document.querySelector("home-assistant")?.hass?.locale,n=["12","24"].includes(t?.time_format)?t.time_format:void 0;return{...n?{clock:n}:{},...Ya[t?.number_format]?{numbers:Ya[t.number_format]}:{}}}catch{return{}}}const Zh=(e,t=wl())=>new Intl.ListFormat(t==="en"?"en-GB":t,{type:"conjunction"}).format(e.map(String)),qe=6,un=8,Ns=un*qe,au=["single","wide","full"],Sn=e=>e===!0?"wide":e===!1?"single":e,us=e=>/^screen\.page_[1-8]$/.test(e)?Number(e.slice(-1)):0,ut=e=>au.includes(e.options?.size)?e.options.size:"single",Do=e=>ut(e)!=="single",ru=e=>ut(e)==="full",cu=e=>e-e%qe,uu=e=>e-e%2,Et=e=>Math.floor(e/qe),kl=e=>Sn(e)==="full"?qe:Sn(e)==="wide"?2:1,Bn=(e,t)=>Sn(t)==="full"?Array.from({length:qe},(n,s)=>cu(e)+s):Sn(t)==="wide"?[e,e+1]:[e],Ga=(e,t)=>Sn(t)==="full"?cu(e):Sn(t)==="wide"?uu(e):e,Xe=e=>e.tiles.map(t=>({tile:t,slot:t.slot}));function du(e){let t=0;return e.map(n=>{const s=ut(n);s==="full"&&t%qe?t+=qe-t%qe:s==="wide"&&t%2===1&&t++;const i=t;return t+=kl(s),i})}function Qh(e){const t=du(e);return e.some((n,s)=>n.slot!==t[s])}function Vi(e){if(e.tiles.some(t=>!Number.isInteger(t.slot))){const t=du(e.tiles);e.tiles.forEach((n,s)=>n.slot=t[s])}e.tiles.sort((t,n)=>t.slot-n.slot)}function ts(e){const t=new Set;for(const{tile:n,slot:s}of e)for(const i of Bn(s,ut(n)))t.add(i);return t}const Fs=(e,t,n)=>Number.isInteger(t)&&t>=0&&t!e.has(s));function wi(e,t,n=0){for(let s=n;si.includes(h))?u.push(f):r.push({tile:f,slot:f.slot}));for(const f of u){const h=ut(f),p=ts(r);let b=l.map(v=>Ga(v,h)).find(v=>Fs(p,v,h));if(b===void 0&&(b=fu(p,h,f.slot)),b<0)return null;r.push({tile:f,slot:b})}return r.sort((f,h)=>f.slot-h.slot)}function Ot(e,t=1){const n=Math.max(0,...e.map(({tile:s,slot:i})=>i+kl(ut(s))));return Math.min(un,Math.max(1,Math.ceil(n/qe),t||1))}function em(e,t){const n=Array.from({length:t},()=>new Set);let s=0;for(const{tile:h,slot:p}of e){const b=us(h.entity)-1,v=Et(p);b<0||b>=t||v>=t||(s++,n[v].add(b))}const i=h=>{const p=new Set([0]),b=[0];for(;b.length;)for(const v of h(b.shift()))p.has(v)||(p.add(v),b.push(v));return p},l=i(h=>[...n[h]]),r=i(h=>n.flatMap((p,b)=>p.has(h)?[b]:[])),u=Array.from({length:t},(h,p)=>p),f=h=>h.map(p=>p+1);return{tiles:s,targets:f(u.filter(h=>n.some(p=>p.has(h)))),unreachable:f(u.filter(h=>!l.has(h))),noWayBack:f(u.filter(h=>l.has(h)&&!r.has(h)))}}function tm(e){const t=e.split(".")[0];return t==="sun"?{options:{display:"sunpath",size:"wide"}}:t==="weather"?{options:{display:"forecast",size:"wide"}}:us(e)?{}:t==="screen"?{options:{display:"digital",size:"wide"}}:{}}const hu=e=>({entity:e,name:"",slot:-1,...tm(e)});function mu(e,t){const n=e.entity.split(".")[0],s=t.controls?.[n],i=e.options||{};if(!s||!["wide","full"].includes(i.size)||(i.display||"standard")!=="standard"||i.inline==="slider")return null;const l=i.controls??(i.size==="full"?"none":s.default);return l==="none"?null:l}function nm(e,t){const n=mu(e,t);return n?t.controls?.[e.entity.split(".")[0]]?.choices.find(s=>s.key===n)?.label||n:c("editor.inspect.control_none")}const Uo=e=>(/^(\d+)\.(\d+)\.(\d+)$/.exec(e||"")||[]).slice(1).map(Number);function dn(e,t){const[n,s]=[Uo(e),Uo(t)];if(n.length!==3||s.length!==3)return!1;for(let i=0;i<3;i++)if(n[i]!==s[i])return n[i]>s[i];return!0}const sm=(e,t,n,s)=>dn(e,`${t}.${n}.${s}`),im=Ns;function om(e){return Uo(e).length!==3?10:dn(e,"0.2.62")?im:dn(e,"0.2.7")?20:10}const lm=["standard","watch","forecast","graph","digital","analog","sunpath"],bu=e=>lm.includes(e)?c(`editor.displays.${e}`):e,am=e=>c(`editor.sizes.${au.includes(e)?e:"single"}`),Ja=["light","switch","input_boolean","fan","media_player","climate"],rm=["light","fan","cover","number","input_number","media_player"],cm={light:["☀","#ad7600","#fff3d3"],climate:["❄","#c86620","#ffebdc"],vacuum:["◉","#008577","#def3ed"],fan:["✣","#008aab","#def5fa"],cover:["▤","#8053af","#eee5f8"],media_player:["▶","#007cad","#def2fc"],sensor:["⌁","#3476b1","#e5effa"],binary_sensor:["◈","#ad7600","#fff3d3"],switch:["⏻","#ad7600","#fff3d3"],input_boolean:["⏻","#ad7600","#fff3d3"],scene:["✦","#8053af","#eee5f8"],script:["▷","#8053af","#eee5f8"],weather:["☁","#007cad","#def2fc"],number:["±","#008577","#def3ed"],input_number:["±","#008577","#def3ed"],select:["≡","#5862af","#eaecfa"],input_select:["≡","#5862af","#eaecfa"],button:["↗","#5862af","#eaecfa"],input_button:["↗","#5862af","#eaecfa"],screen:["◷","#25282c","#e9ecf1"],sun:["☼","#c86620","#ffebdc"],timer:["⏱","#008577","#def3ed"],person:["☺","#2f7d32","#e1f2e2"],camera:["◧","#3d4a57","#e6ebf0"],image:["◧","#3d4a57","#e6ebf0"]};function jt(e){const t=e.split(".")[0],n=cm[t];return n?[c(`editor.domains.${t}`),...n]:[c("editor.domains.entity"),"◇","#637184","#edf0f4"]}const vu={clock:"clock-outline",analog:"clock-outline",date:"calendar"},at=e=>JSON.stringify(e),Ae=e=>String.fromCodePoint(parseInt(e,16));function Wi(e,t=new Date,n){const s=String(t.getMinutes()).padStart(2,"0");if(e)return`${String(t.getHours()).padStart(2,"0")}:${s}`;const i=`${t.getHours()%12||12}:${s}`;return n?`${i} ${c(`screen.time.${t.getHours()<12?"am":"pm"}`,{},{locale:n})}`:i}const $l=(e=new Date,t="en")=>c("screen.date.top_bar",{weekday:c(`screen.date.weekdays_short.${e.getDay()}`,{},{locale:t}),weekday_min:c(`screen.date.weekdays_min.${e.getDay()}`,{},{locale:t}),day:e.getDate(),month:c(`screen.date.months_short.${e.getMonth()}`,{},{locale:t})},{locale:t});function um(e,t=Math.floor(Date.now()/1e3),n="en"){const s=t-e,i=Math.abs(s),l=u=>Math.floor(i/u),r=(u,f)=>f===void 0?c(`screen.time.${u}`,{},{locale:n}):c(`screen.time.${u}`,f,{locale:n});return s<0?i<3600?r("in_minutes",Math.max(1,l(60))):i<86400?r("in_hours",l(3600)):i<172800?r("tomorrow"):r("in_days",l(86400)):i<60?r("just_now"):i<3600?r("minutes_ago",l(60)):i<86400?r("hours_ago",l(3600)):i<172800?r("yesterday"):i<604800?r("days_ago",l(86400)):i<2592e3?r("weeks_ago",l(604800)):i<31536e3?r("months_ago",l(2592e3)):r("years_ago",l(31536e3))}const dm={guition:{width:448,top:36,name:27,text:21,icon:26},cyd:{width:298,top:24,name:18,text:14,icon:18}};let ps;const jo=new Map,fm=()=>jo.clear();function Dn(e,t){const n=`${t}|${e}`;let s=jo.get(n);if(!s){if(ps===void 0&&(ps=document.createElement("canvas").getContext("2d")),ps){ps.font=t;const i=ps.measureText(e);s={left:-i.actualBoundingBoxLeft,right:i.actualBoundingBoxRight,top:-i.actualBoundingBoxAscent,bottom:i.actualBoundingBoxDescent,advance:i.width}}else{const i=Number(/(\d+(?:\.\d+)?)px/.exec(t)?.[1]||14),l=[...e].length*i*.55;s={left:0,right:l,top:-i*.72,bottom:i*.02,advance:l}}jo.set(n,s)}return s}const pm=e=>({name:`500 ${e.name}px "Bar Roboto"`,text:`400 ${e.text}px "Bar Roboto"`,icon:`${e.icon}px "Tile Icons"`});function hm(e){return{icon:Math.max(2,Math.floor((e*4+5)/10)),item:Math.max(6,Math.floor((e*125+50)/100)),name:Math.max(8,Math.floor((e*16+5)/10))}}function gu(e,t,n,s){const i=pm(t),l=Dn("0",i.text),r=Math.round(l.bottom-l.top),u=hm(r),f=Dn(String.fromCodePoint(983376),i.icon),h=Math.round(f.bottom-f.top),p=e.map((C,B)=>{const O=s(C),E={index:B,item:C,view:O,shown:O.shown,width:0};return O.analog?(E.dial=h,E.width=h,E):(O.icon&&(E.icon={glyph:Ae(O.icon),ink:Dn(Ae(O.icon),i.icon)},E.width+=E.icon.ink.right-E.icon.ink.left),O.text&&(E.text={value:O.text,ink:Dn(O.text,i.text)},E.width+=(E.icon?u.icon:0)+E.text.ink.right-E.text.ink.left),E)}),b=p.filter(C=>C.shown),v=Dn(n,i.name).advance,y=Math.min(v,Math.floor(t.width*35/100)),I=C=>C.reduce((B,O)=>B+O.width,0)+Math.max(0,C.length-1)*u.item;let T=0;for(;Tt.width;)T++;const $=b.slice(T),A=new Set(b.slice(0,T).map(C=>C.index));let S=t.width-I($);for(const C of $)C.x=S,S+=C.width+u.item;const D=$.length?$[0].x-u.name:t.width;return{metrics:t,fonts:i,cap:r,zero:l,gaps:u,parts:p,placed:$,dropped:A,nameText:n,natural:v,nameRoom:D}}function mm(e,t,n){if(Dn(e,t).advance<=n)return e;const s=[...e];for(;s.length&&Dn(s.join("")+"...",t).advance>n;)s.pop();return s.join("")+"..."}function bm(e){"fonts"in document&&Promise.all([document.fonts.load('500 27px "Bar Roboto"',"Studio 0"),document.fonts.load('400 21px "Bar Roboto"',"Away 0"),document.fonts.load('26px "Tile Icons"',String.fromCodePoint(983376))]).then(()=>{fm(),e()}).catch(()=>{})}let _u="";function vm(e){_u=e||""}async function xl(e,t={}){const n=await fetch(`api/${e}`,{...t,headers:{"Content-Type":"application/json","X-Screen-CSRF":_u,"X-ESP-Screens-Language":wl(),...t.headers}});if(!n.ok){let s=c("editor.api.failed");try{const i=(await n.json())?.error;typeof i=="string"&&i.trim()&&(s=i)}catch{}throw new Error(s)}return n}const Nt=async e=>(await xl(e)).json(),ft=async(e,t,n,s={})=>{const l=await(await xl(e,{method:t,body:n===void 0?void 0:JSON.stringify(n),...s})).text();return l?JSON.parse(l):null},m=zn({inventory:{screens:[],entities:[]},connected:!1,reachable:!0,selected:null,layout:null,dirty:!1,busy:!1,saved:0,tab:"layout",selectedTile:null,inspector:null,iconPickerOpen:!1,actionPickerOpen:!1,actionSearch:"",insertAt:-1,filter:"",search:"",capabilities:{},entityActions:{},topbarPreviews:{},topbarAdded:null,topbarOverflow:[],settingEdits:{},settingPending:!1,updating:[],toast:null,now:Date.now(),fontsVersion:0,route:location.hash,overrideProfile:null,overrideFriendly:"",drag:{active:!1,moving:null,preview:null},menuOpen:!1,liveStates:{},room:"",hidePlaced:!1,palette:!1,firmwareJob:null}),_t=k(()=>m.inventory.screens.find(e=>e.id===m.selected)),ls=e=>(e&&"firmware_known"in e?e.firmware_known:e?.firmware)||"",yu=k(()=>ls(_t.value)),kn=(e,t,n)=>sm(yu.value,e,t,n),Kn=k(()=>{const e=_t.value?.tile_limit;return typeof e=="number"&&Number.isInteger(e)&&e>0?e:om(yu.value)}),Xa=k(()=>{const e=_t.value?.full_page;return typeof e=="boolean"?e:kn(0,2,62)}),gm=k(()=>{const e=_t.value?.page_tiles_repeat;return typeof e=="boolean"?e:kn(0,2,65)}),Bi=e=>gm.value&&us(e)>0,Sl=k(()=>_t.value?.board==="guition"),wu=k(()=>dm[Sl.value?"guition":"cyd"]),co=k(()=>m.selectedTile&&m.layout?.tiles.includes(m.selectedTile)?m.selectedTile:void 0),Cl=e=>!!m.selectedTile&&xe(m.selectedTile)===xe(e);let Za=0;function Ce(e,t){m.toast={message:e,action:t},clearTimeout(Za),Za=window.setTimeout(()=>m.toast=null,t?8e3:5e3)}function _m(){m.toast=null}async function It(e,t,n="api_key"){try{if(!navigator.clipboard||!window.isSecureContext)throw new Error;await navigator.clipboard.writeText(e),Ce(c(`editor.copy.${n}.copied`))}catch{if(t){const s=document.createRange();s.selectNodeContents(t);const i=window.getSelection();i?.removeAllRanges(),i?.addRange(s)}Ce(c(document.execCommand("copy")?`editor.copy.${n}.copied`:`editor.copy.${n}.selected`))}}function ki(){const e="/config/integrations/dashboard";try{window.top.location.assign(e)}catch{window.open(e,"_blank")}}const ym=["","#settings","#new-screen","#firmware","#alerts","#override"],$t=k(()=>ym.includes(m.route)?m.route:"");function He(e){if(location.hash===e){m.route=e;return}location.hash=e}window.addEventListener("hashchange",()=>{m.route=location.hash,window.scrollTo(0,0)});function qs(e){return m.inventory.entities.find(t=>t.id===e)?.name||m.inventory.builtin?.find(t=>t.id===e)?.name||e}let uo={source:null,byName:{}};function zs(e){return uo.source!==m.inventory.icons&&(uo={source:m.inventory.icons,byName:Object.fromEntries((m.inventory.icons?.groups||[]).flatMap(t=>t.icons.map(n=>[n.name,n])))}),e?uo.byName[e]:void 0}function Cn(e){const t=m.inventory.icons;if(!t)return"F0335";const n=m.inventory.entities.find(i=>i.id===e),s=e.split(".")[0];return t.builtin?.[e]?t.builtin[e]:n?.icon?n.icon:s==="weather"?t.weather[n?.state||""]||t.weather.partlycloudy:s==="sun"?t.sun[n?.state||""]||t.sun.below_horizon:t.defaults[s]||t.fallback}const vs=e=>zs(e.options?.icon)?.cp||Cn(e.entity),fo=new Set;async function Ki(e){const t=[...new Set(e)].filter(n=>!fo.has(n)&&!n.startsWith("screen."));if(t.length){t.forEach(n=>fo.add(n));try{for(let n=0;n`entity=${encodeURIComponent(i)}`).join("&");Object.assign(m.capabilities,(await Nt(`capabilities?${s}`)).capabilities||{})}}catch{t.forEach(n=>fo.delete(n))}}}const po=new Set;async function wm(e){if(!po.has(e)){po.add(e);try{m.entityActions[e]=(await Nt(`entity-actions?entity=${encodeURIComponent(e)}`)).actions}catch{po.delete(e)}}}let ho=!1;async function qi(){const e=[...new Set((m.layout?.tiles||[]).map(t=>t.entity).filter(t=>!t.startsWith("screen.")))];if(!(!e.length||ho)){ho=!0;try{for(let t=0;t`entity=${encodeURIComponent(s)}`).join("&");Object.assign(m.liveStates,(await Nt(`states?${n}`)).states||{})}}catch{}finally{ho=!1}}}function km(e){const t=m.liveStates[e];if(t)return t;const n=m.inventory.entities.find(s=>s.id===e);return n?.state?{state:n.state,word:null,a:{}}:null}let Ho=0;function pt(){m.dirty=!0,m.saved=0,Ho++}function ku(e){if(e===m.selected&&m.layout&&m.dirty){Ze(),m.tab="layout",m.menuOpen=!1,He("");return}if(e!==m.selected&&m.dirty&&!confirm(c("editor.screen_view.confirm.switch")))return;e!==m.selected&&(Us(),m.settingEdits={}),m.selected=e,m.selectedTile=null,m.inspector=null,m.tab="layout",m.menuOpen=!1;const t=m.inventory.screens.find(s=>s.id===e);if(!t){m.layout=null;return}const n=JSON.parse(JSON.stringify(t.layout));Vi(n),n.pages=Ot(Xe(n),n.pages),m.layout=n,m.insertAt=-1,m.dirty=!1,m.saved=0,zi(0),Ki(n.tiles.map(s=>s.entity)),qi(),He("")}const $m=()=>m.layout?Xe(m.layout):[];function xm(e){const t=m.layout,n=t.tiles.map(i=>`${i.entity}@${i.slot}`).join();for(const{tile:i,slot:l}of e)i.slot=l,t.tiles.includes(i)||t.tiles.push(i);Vi(t),t.pages=Ot(Xe(t),t.pages);const s=t.tiles.map(i=>`${i.entity}@${i.slot}`).join()!==n;return s&&pt(),s}function Ys(e,t){if(!m.layout)return!1;Ki([e.entity]);const n=pu(m.layout.tiles,e,t),s=n?xm(n):!1;return s&&!m.liveStates[e.entity]&&qi(),s}function $u(e){const t=m.layout;if(!t||!Bi(e)&&t.tiles.some(i=>i.entity===e)||t.tiles.length>=Kn.value)return;const n=hu(e),s=m.insertAt>=0?m.insertAt:wi(ts(Xe(t)),ut(n));m.insertAt=-1,s>=0&&Ys(n,s)&&Vo(n)}function xu(e){const t=m.layout;if(!t)return;const n=t.tiles.indexOf(e);n<0||(t.tiles.splice(n,1),Cl(e)&&Ze(),pt(),t.pages=Ot(Xe(t),t.pages),Ce(c("editor.layout.removed",{name:e.name||qs(e.entity)}),{label:c("editor.common.undo"),run:()=>Ys(e,e.slot)}))}function Qa(){const e=m.layout;e&&(e.pages=Math.min(un,Ot(Xe(e),e.pages)+1),pt())}function Sm(e){const t=m.layout;if(t){for(const n of t.tiles)Et(n.slot)>e&&(n.slot-=qe);t.pages=Math.max(1,Ot(Xe(t),t.pages)-1),pt()}}function Cm(e,t){const n=m.layout;if(!n||!Number.isInteger(t)||t<0||t>=un||t===Et(e.slot))return!1;const s=wi(ts(Xe(n).filter(l=>l.tile!==e)),ut(e),t*qe),i=Ys(e,s>=0&&Et(s)===t?s:t*qe);return i||Ce(c("editor.layout.no_room",{page:t+1})),i}function Tm(){const e=m.layout;if(!e)return 1;const t=m.drag.preview||Xe(e),n=Ot(t,e.pages);return m.drag.active&&nh.key!=="none"&&i.controls.includes(h.key))?.key||"none"),pt();const f=m.layout;if(f){if(ru(e)&&r!=="full"){const h=Et(e.slot),p=f.tiles.filter(y=>y!==e&&Et(y.slot)===h),b=ts(Xe(f).filter(y=>y.tile!==e&&!p.includes(y.tile))),v=[];for(const y of p){const I=wi(b,ut(y),(h+1)*qe);if(I<0){v.length=0;break}v.push([y,I]);for(const T of Bn(I,ut(y)))b.add(T)}if(v.length===p.length){for(const[y,I]of v)y.slot=I;e.slot=h*qe}else{const y=wi(ts(Xe(f).filter(I=>I.tile!==e)),"full");y>=0?e.slot=y:(e.options.size=r,Ce(c("editor.layout.no_free_page")))}}else if(Do(e)&&!l){const h=ts(Xe(f).filter(v=>v.tile!==e)),p=uu(e.slot),b=Fs(h,p,"wide")?p:fu(h,"wide",p);b>=0&&(e.slot=b)}Vi(f),f.pages=Ot(Xe(f),f.pages)}}function Em(e,t){const n=`screen.page_${t}`,s=m.layout;return!s||n===e.entity||!us(n)?!1:!Bi(n)&&s.tiles.some(i=>i.entity===n)?(Ce(c("editor.layout.page_taken",{page:t})),!1):(e.entity=n,s.pages=Math.max(Ot(Xe(s),s.pages),t),pt(),!0)}function Vo(e){Cl(e)||(m.iconPickerOpen=!1,m.actionPickerOpen=!1,m.actionSearch=""),m.selectedTile=e,m.inspector={kind:"tile"},Ki([e.entity])}function Xt(e){m.inspector?.kind==="bar"&&m.inspector.index===e||(m.iconPickerOpen=!1),m.selectedTile=null,m.inspector={kind:"bar",index:e}}function er(){m.selectedTile=null,m.inspector={kind:"bar-add"}}function Ze(){m.inspector=null,m.selectedTile=null}async function Wo(){if(m.busy||!m.layout||!m.selected)return;m.busy=!0;const e=Ho,t=m.selected;try{const{settings:n,...s}=m.layout;if(await ft(`screens/${encodeURIComponent(m.selected)}`,"PUT",s),m.selected!==t){const i=m.inventory.screens.find(l=>l.id===t)?.name;Ce(i?c("editor.screen_view.saved.other",{name:i}):c("editor.screen_view.saved.other_unnamed"))}else Ho===e?(m.dirty=!1,m.saved=Date.now(),Ce(c("editor.screen_view.saved.current"))):Ce(c("editor.screen_view.saved.newer_edit"));await Tn()}catch(n){Ce(n.message)}finally{m.busy=!1}}const qn=e=>!!(e&&e.alert_action&&dn(ls(e),m.inventory.alerts?.min_firmware||"0.2.31"));async function Su(e){try{await ft(`screens/${encodeURIComponent(e.id)}/identify`,"POST"),Ce(c("editor.screen_view.identified",{name:e.name}))}catch(t){Ce(t.message)}}async function Am(e,t){return await ft("alerts/test","POST",{screen:e,data:t})}const Pm=["title","tiles","header","pages"];function Cu(e,t){const n=m.layout;if(!n)return;const s=(Array.isArray(e.tiles)?e.tiles:[]).filter(u=>!!(u&&typeof u=="object"&&typeof u.entity=="string"&&u.entity.includes("."))).map(u=>({entity:u.entity,name:typeof u.name=="string"?u.name:"",slot:Number.isInteger(u.slot)?u.slot:-1,...u.options&&typeof u.options=="object"?{options:{...u.options}}:{}})),i=new Set,l=s.filter(u=>Bi(u.entity)||!i.has(u.entity)&&i.add(u.entity)),r=l.slice(0,Kn.value);n.tiles=r,e.header&&Array.isArray(e.header.items)?n.header={items:e.header.items.map(u=>({...u}))}:delete n.header,n.pages=Number.isInteger(e.pages)?e.pages:1,Vi(n),n.pages=Ot(Xe(n),n.pages),Ze(),pt(),Ki(r.map(u=>u.entity)),qi(),zi(0),Ce(t(r.lengthn.id===e);!t||!m.layout||Cu(JSON.parse(JSON.stringify(t.layout)),n=>n?c("editor.layout.copied_part",{name:t.name,...n}):c("editor.layout.copied",{name:t.name}))}function Im(){const e=m.layout;if(!e)return"";const t={esp_screens_layout:1};for(const n of Pm)e[n]!==void 0&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Tu(){const e=Im();if(!e)return;const t=`${(_t.value?.name||"screen").toLowerCase().replace(/[^a-z0-9]+/g,"-")}.layout.json`,n=URL.createObjectURL(new Blob([e],{type:"application/json"})),s=document.createElement("a");s.href=n,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(n),5e3),It(e,void 0,"layout_json")}function Lm(e){let t;try{t=JSON.parse(e)}catch{Ce(c("editor.layout.not_json"));return}if(!t||typeof t!="object"||!Array.isArray(t.tiles)){Ce(c("editor.layout.no_tiles_in_file"));return}Cu(t,n=>n?c("editor.layout.imported_part",n):c("editor.layout.imported"))}function Mm(e){const t=m.inventory.updates?.target,n=m.inventory.changelog;if(!Array.isArray(n)||!t)return[];const s=ls(e),i=[];for(const l of n)if(!(dn(l.firmware,t)&&l.firmware!==t)&&!(s&&dn(s,l.firmware)))for(const r of l.lines)i.includes(r)||i.push(r);return i}let mo=!1;async function Rm(){if(!mo){mo=!0;try{const e=await Nt("firmware");m.firmwareJob={job:e.job,logs:e.logs||[]}}catch{}finally{mo=!1}}}const Bo=()=>m.inventory.screens.some(e=>e.update?.state==="running")||m.updating.length>0;function Xn(e){const t=e.update||{};if(!(t.state==="running"||m.updating.includes(e.id)))return null;const n=m.firmwareJob?.job?.stage;return t.phase==="verify"?{percent:78,text:_s("verify")}:t.phase==="settle"?{percent:92,text:_s("settle")}:t.phase==="install"||!t.phase?n==="upload"?{percent:66,text:c("editor.update.writing")}:n?{percent:40,text:c("editor.update.building")}:{percent:12,text:_s("install")}:{percent:12,text:_s(t.phase)}}const fn=()=>m.layout?.header?.items??(m.layout?.settings?.show_clock??!0?[{type:"clock"}]:[]),gn=()=>m.inventory.header?.max_items||6;function Ds(e){m.layout&&(m.layout.header={items:e},pt(),zi())}let tr=0;function zi(e=150){clearTimeout(tr),tr=window.setTimeout(async()=>{const t=fn();if(t.some(n=>n.type==="entity"))try{const n=await ft("header-preview","POST",{header:{items:t}});t.forEach((s,i)=>m.topbarPreviews[at(s)]=n.items[i])}catch{}},e)}function gs(e){return e.type==="entity"?qs(e.entity):m.inventory.header?.builtin.find(t=>t.type===e.type)?.label||e.type}function bn(e){const t=new Date(m.now);if(e.type==="clock")return{text:Wi(as.value,t,on.value),shown:!0};if(e.type==="date")return{text:$l(t,on.value),shown:!0};if(e.type==="analog")return{analog:!0,shown:!0};const n=m.topbarPreviews[at(e)];return n?{icon:n.i||null,text:n.k==="ago"?um(n.e,Math.floor(m.now/1e3),on.value):n.t,color:n.c?`#${n.c}`:null,shown:n.shown}:{icon:e.icon==="none"?null:zs(e.icon)?.cp||Cn(e.entity),text:"…",shown:!0,loading:!0}}function bo(e,t){const n=[...fn()];return t<0||t>=n.length||e===t?!1:(n.splice(t,0,...n.splice(e,1)),Ds(n),!0)}function nr(e){const t=[...fn()],[n]=t.splice(e,1);n&&(m.inspector?.kind==="bar"&&Ze(),Ds(t),Ce(c("editor.topbar.removed",{name:gs(n)}),{label:c("editor.common.undo"),run:()=>{const s=[...fn()];s.splice(Math.min(e,s.length),0,n),Ds(s)}}))}function vo(e){const t=fn();if(t.length>=gn())return Ce(c("editor.topbar.full",gn()));if(t.some(n=>at(n)===at(e)))return Ce(c("editor.topbar.already"));m.topbarAdded={key:at(e),time:Date.now()},Ds([...t,e]),Xt(t.length)}const Nm=[{group:"brightness",icon:"F0599",rows:[{key:"brightness",kind:"number",min:5,max:100,step:5,unit:"%"},{key:"dark_mode",kind:"toggle"},{key:"standby_enabled",kind:"toggle"},{key:"standby_seconds",kind:"duration",min:60,max:86400,needs:"standby_enabled"},{key:"standby_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"standby_enabled",cap:"brightness"}]},{group:"night",icon:"F0594",rows:[{key:"night_enabled",kind:"toggle"},{key:"night_start",kind:"moment",needs:"night_enabled"},{key:"night_end",kind:"moment",needs:"night_enabled"},{key:"night_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"night_enabled",cap:"brightness"}]},{group:"screen",icon:"F0379",rows:[{key:"auto_home",kind:"toggle"},{key:"auto_home_seconds",kind:"duration",min:30,max:3600,needs:"auto_home"},{key:"home_on_standby",kind:"toggle"},{key:"swipe_pages",kind:"toggle"},{key:"page_buttons",kind:"toggle"},{key:"rotation",kind:"choice",options:[0,90,180,270]}]}],go=e=>c(`editor.screen_settings.rows.${e.key}`),Fm=(e,t)=>`${t}°`;function Eu(e=$m(),t=m.layout?Ot(e,m.layout.pages):1){const n=xi();if(t<2||n.page_buttons!==!1||n.swipe_pages!==!1)return"";const{tiles:s,targets:i,unreachable:l,noWayBack:r}=em(e,t);if(!l.length&&!r.length)return"";const u=v=>c("editor.screen_settings.reach.pages",{list:Zh(v)},v.length),f=l.filter(v=>!i.includes(v)),h=l.filter(v=>i.includes(v)),p=f.length===1?"one":"more",b=[c("editor.screen_settings.reach.intro")];return s&&f.length?b.push(c(`editor.screen_settings.reach.tiles_missing_${p}`,{targets:u(i),missing:u(f)},s)):s?b.push(c("editor.screen_settings.reach.tiles",{targets:u(i)},s)):f.length?b.push(c(`editor.screen_settings.reach.none_missing_${p}`,{missing:u(f)})):b.push(c("editor.screen_settings.reach.none")),h.length&&b.push(c("editor.screen_settings.reach.cut_off",{pages:u(h)})),r.length&&b.push(c("editor.screen_settings.reach.no_way_back",{pages:u(r)})),b.join(" ")}const Au=4e3;let _n={},ns=null,$i=0,li=null;const Tl=()=>_t.value?.settings;function xi(){const e=Tl(),t={...e?.values||{}};for(const[n,s]of Object.entries(m.settingEdits))t[n]=s.value;return t}const Dm=e=>e<300?30:e<900?60:e<3600?300:e<7200?900:1800;function sr(e,t,n,s,i){if(e.kind==="moment"){let u=s&&t%60?Math.floor(t/60)*60+(n>0?60:0):t+n*(s?60:15);return u%=1440,u<0?u+1440:u}const l=e.kind==="duration"?Dm(n<0?t-1:t):e.step,r=e.cap?Math.min(e.max,i[e.cap]):e.max;return Math.min(r,Math.max(e.min,t+n*l))}function Um(e){if(e<60)return c("editor.screen_settings.duration.seconds",{n:e});if(e<3600)return c("editor.screen_settings.duration.minutes",{n:Math.floor(e/60)});const t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n?c("editor.screen_settings.duration.hours_minutes",{h:t,m:String(n).padStart(2,"0")}):c("editor.screen_settings.duration.hours",{n:t})}function jm(e,t){const n=Math.floor(e/60),s=String(e%60).padStart(2,"0");return t?`${String(n).padStart(2,"0")}:${s}`:c(n<12?"editor.screen_settings.time.am":"editor.screen_settings.time.pm",{time:`${n%12||12}:${s}`})}function Hm(e,t){const n=t[e.key];return n==null?"—":e.kind==="number"?`${n}${e.unit||""}`:e.kind==="duration"?Um(n):e.kind==="moment"?jm(n,as.value):""}function ni(e,t,n){if(ns&&ns!==m.selected&&Object.keys(_n).length){Us(),Ce(c("editor.screen_settings.other_screen_busy"));return}ns=m.selected;const s=xi();if(m.settingEdits[e]={value:t,at:Date.now()},_n[e]=t,e==="brightness")for(const i of["standby_brightness","night_brightness"])s[i]>t&&(m.settingEdits[i]={value:t,at:Date.now()});m.settingPending=!0,clearTimeout($i),$i=window.setTimeout(()=>Us(),n)}async function Us(e=!1){if(clearTimeout($i),li||!Object.keys(_n).length||!ns)return;const t=ns,n=_n;_n={};const s=xl(`screens/${encodeURIComponent(t)}/settings`,{method:"PUT",body:JSON.stringify({settings:n}),keepalive:e});li=s;try{const i=await(await s).json(),l=m.inventory.screens.find(r=>r.id===t);l&&(l.settings=i)}catch(i){if(Ce(i.message),t===m.selected)for(const l of Object.keys(n))delete m.settingEdits[l];if(t===m.selected&&n.brightness!==void 0)for(const l of["standby_brightness","night_brightness"])delete m.settingEdits[l]}finally{li=null,Object.keys(_n).length?$i=window.setTimeout(()=>Us(),150):ns=null,m.settingPending=!!Object.keys(_n).length,t===m.selected&&Si(),setTimeout(()=>{t===m.selected&&Si()},Au+100)}}function Si(){const e=Tl();for(const[t,n]of Object.entries(m.settingEdits))_n[t]!==void 0||li||(e&&e.values[t]===n.value||Date.now()-n.at>Au)&&delete m.settingEdits[t]}const _s=e=>["install","verify","settle"].includes(e||"")?c(`editor.update.phases.${e}`):c("editor.update.starting");async function Ko(e,t){m.updating.push(e.id);try{await ft(`screens/${encodeURIComponent(e.id)}/update`,"POST",t?{host:t}:{}),await Tn()}catch(n){m.updating=m.updating.filter(s=>s!==e.id),Ce(n.message)}}async function ir(){try{await ft("updates/run","POST"),await Tn()}catch(e){Ce(e.message)}}async function Vm(e){try{await ft("updates","PUT",{auto:e}),m.inventory.updates&&(m.inventory.updates.auto=e),Ce(c(e?"editor.settings.updates.auto_on":"editor.settings.updates.auto_off"))}catch(t){Ce(t.message)}}async function Wm(){try{m.inventory.claude_skill=await ft("claude-skill","POST"),Ce(c(m.inventory.claude_skill?.restart?"editor.settings.claude.installed_restart":"editor.settings.claude.installed"))}catch(e){Ce(e.message)}}const on=k(()=>iu(m.inventory.language?.effective));Ct(on,e=>ou(e),{immediate:!0});const jn=(e,t={})=>c(e,t,{locale:on.value}),Bm=e=>m.inventory.language?.languages?.find(t=>t.code===e)?.name||zh(e||"")?.name||e||"",Pu=e=>!!(e.update?.available||e.update?.language),or=()=>c("editor.update.new_language",{name:Bm(m.inventory.language?.effective)}),as=k(()=>m.inventory.language?.clock_effective!=="12"),Km=k(()=>{const e=m.inventory.language;return{...os[e?.numbers_effective||"point"]||os.point,from:(e?.group_min||1)>=2?5:4}}),qm=k(()=>{const e=m.inventory.language;return{...os[e?.numbers_auto||"point"]||os.point,from:(e?.group_min_auto||1)>=2?5:4}});function lr(e){return!e||e==="°"?e||"":e==="%"?m.inventory.language?.percent_space?" %":"%":` ${e}`}const zm=e=>m.inventory.builtin?.find(t=>t.id===e)?.screen_name;async function ar(e){try{const t=await ft("language","PUT",e);return t?.language&&(m.inventory.language=t.language),Ce(c(e.setting===void 0?"editor.settings.language.saved":"editor.settings.language.saved_language")),await Tn(),!0}catch(t){return Ce(t.message),!1}}async function Tn(e=!0){try{const t=await Nt(e?"inventory":"inventory?light=1");m.inventory=e?t:{...m.inventory,...t},t.csrf&&vm(t.csrf),m.connected=!!m.inventory.connected,m.reachable=!0;for(const n of m.inventory.screens)n.update?.state==="running"&&(m.updating=m.updating.filter(s=>s!==n.id));m.selected&&Si()}catch{m.reachable=!1}}function Ym(e){m.inventory={...m.inventory,...e},m.connected=!!m.inventory.connected;for(const t of m.inventory.screens)t.update?.state==="running"&&(m.updating=m.updating.filter(n=>n!==t.id));m.selected&&Si()}let rr=0,qo=Date.now(),Ci=!1,hs=null;function Gm(){hs||typeof EventSource>"u"||(hs=new EventSource(`api/events?language=${encodeURIComponent(wl())}`),hs.onopen=()=>{Ci=!0,js()},hs.onmessage=e=>{document.hidden||Ym(JSON.parse(e.data))},hs.onerror=()=>{Ci=!1,js()})}function js(){clearTimeout(rr);const e=Ci?6e4:m.inventory.updates?.busy?3e3:1e4;rr=window.setTimeout(async()=>{if(!document.hidden){const t=Date.now()-qo>=3e5;t&&(qo=Date.now()),(t||!Ci)&&await Tn(t)}js()},e)}let cr=!1;function Jm(){cr||(cr=!0,Tn(),Gm(),js(),bm(()=>m.fontsVersion++),setInterval(()=>{!m.layout||document.hidden||m.drag.active||(m.now=Date.now(),zi(0))},3e4),setInterval(()=>{!document.hidden&&m.layout&&m.tab==="layout"&&$t.value===""&&qi()},8e3),setInterval(()=>{!document.hidden&&Bo()?Rm():m.firmwareJob&&!Bo()&&(m.firmwareJob=null)},3e3),document.addEventListener("visibilitychange",async()=>{document.hidden||(qo=Date.now(),m.now=Date.now(),await Tn(),js())}),window.addEventListener("pagehide",()=>Us(!0)),window.addEventListener("beforeunload",e=>{m.dirty&&(e.preventDefault(),e.returnValue="")}))}const Xm={class:"side"},Zm={class:"label"},Qm={id:"screens"},eb=["aria-current","onClick"],tb={class:"txt"},nb=["aria-label","title"],sb={key:1,class:"pill"},ib={key:2,class:"spin small"},ob=["onSubmit"],lb=["placeholder","aria-label"],ab={type:"submit",class:"btn mini primary"},rb=["aria-label"],cb=["disabled","title","onClick"],ub={key:2,class:"whatsnew"},db=["aria-valuenow"],fb={class:"progress-text"},pb=["title"],hb=["title"],mb={id:"pending"},bb={class:"pending-actions"},vb=["onClick"],gb=["aria-current"],_b={class:"txt"},yb={class:"more"},wb={class:"label"},kb=["aria-current"],$b={class:"mdi"},xb={class:"txt"},Sb=["aria-current"],Cb={class:"mdi"},Tb={class:"txt"},Eb=["aria-current"],Ab={class:"mdi"},Pb={class:"txt"},Ob={class:"txt"},Ib=Le({__name:"Sidebar",setup(e){const t=ke(null),n=ke(""),s=p=>{const b=p.update||{};return!!b.language&&(!b.target||dn(ls(p),b.target))};function i(p){const b=p.update||{};return b.state==="running"||m.updating.includes(p.id)?{kind:"running",text:_s(b.phase)}:b.state==="queued"?{kind:"queued",text:c("editor.sidebar.update.queued")}:Pu(p)&&p.online?{kind:"available",text:s(p)?or():c("editor.sidebar.update.available",{version:b.target})}:b.result&&Date.now()/1e3-b.result.time<86400?{kind:b.result.state==="failed"?"failed":"done",text:b.result.message}:null}const l=p=>[...p.update?.language&&!s(p)?[or()]:[],...Mm(p)];function r(p){const b=p.update||{};b.host&&b.profile?Ko(p):b.profile&&(t.value=p.id,n.value="")}function u(p){const b=n.value.trim();b&&(t.value=null,Ko(p,b))}const f=()=>{const p=m.firmwareJob?.logs||[];return p.length?p[p.length-1]:""},h=p=>p.installed?c("editor.sidebar.pending.installed"):p.downloaded?c("editor.sidebar.pending.downloaded"):c("editor.sidebar.pending.not_flashed",{file:p.file});return(p,b)=>(g(),_("aside",Xm,[b[13]||(b[13]=o("div",{class:"brand"},[o("span",{class:"mark"},"▦"),o("span",null,"ESP Screens")],-1)),o("span",{id:"connection",class:me(["conn",{online:a(m).connected}]),role:"status"},d(a(m).reachable?a(m).connected?a(c)("editor.sidebar.connection.connected"):a(c)("editor.sidebar.connection.reconnecting"):a(c)("editor.sidebar.connection.unreachable")),3),o("button",{type:"button",class:"search-btn",id:"open-palette",onClick:b[0]||(b[0]=v=>a(m).palette=!0)},[Me("⌕ "+d(a(c)("editor.sidebar.search")),1),b[10]||(b[10]=o("kbd",null,"⌘K",-1))]),o("div",Zm,d(a(c)("editor.sidebar.screens")),1),o("div",Qm,[(g(!0),_(z,null,he(a(m).inventory.screens,v=>(g(),_("div",{key:v.id,class:me(["screen-item",{selected:v.id===a(m).selected&&a($t)===""}])},[o("button",{type:"button",class:"nav-item","aria-current":v.id===a(m).selected&&a($t)===""?"true":"false",onClick:y=>a(ku)(v.id)},[o("span",{class:me(["dot",{off:!v.online}])},null,2),o("span",tb,[o("span",null,d(v.name),1),o("small",null,d(v.online?a(c)("editor.common.online"):a(c)("editor.common.offline"))+d(v.area?" · "+v.area:"")+" · "+d(v.firmware||a(c)("editor.common.unknown")),1)]),v.id===a(m).selected&&a(m).dirty?(g(),_("span",{key:0,class:"unsaved",role:"img","aria-label":a(c)("editor.common.unsaved"),title:a(c)("editor.common.unsaved")},null,8,nb)):W("",!0),i(v)?.kind==="available"?(g(),_("span",sb,d(a(c)("editor.sidebar.update.pill")),1)):i(v)?.kind==="running"?(g(),_("span",ib)):W("",!0)],8,eb),i(v)?(g(),_("div",{key:0,class:me(["screen-update",i(v).kind])},[i(v).kind==="available"?(g(),_(z,{key:0},[t.value===v.id?(g(),_(z,{key:0},[o("small",null,d(a(c)("editor.sidebar.host.hint")),1),o("form",{class:"screen-host",onSubmit:Pt(y=>u(v),["prevent"])},[Ee(o("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>n.value=y),placeholder:a(c)("editor.sidebar.host.placeholder"),required:"",pattern:"[A-Za-z0-9][A-Za-z0-9.\\-]*","aria-label":a(c)("editor.sidebar.host.label"),autofocus:""},null,8,lb),[[Je,n.value]]),o("button",ab,d(a(c)("editor.sidebar.host.start")),1),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.cancel"),onClick:b[2]||(b[2]=y=>t.value=null)},"✕",8,rb)],40,ob)],64)):(g(),_(z,{key:1},[o("small",null,d(i(v).text),1),o("button",{type:"button",class:"btn mini primary",disabled:!v.update?.profile,title:v.update?.profile?"":a(c)("editor.sidebar.update.no_profile"),onClick:y=>r(v)},d(a(c)("editor.sidebar.update.button")),9,cb)],64)),l(v).length?(g(),_("details",ub,[o("summary",null,d(a(c)("editor.sidebar.update.whats_new")),1),o("ul",null,[(g(!0),_(z,null,he(l(v).slice(0,8),y=>(g(),_("li",{key:y},d(y),1))),128))])])):W("",!0)],64)):i(v).kind==="running"&&a(Xn)(v)?(g(),_(z,{key:1},[o("div",{class:"progress",role:"progressbar","aria-valuenow":a(Xn)(v).percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:a(Xn)(v).percent+"%"})},null,4)],8,db),o("div",fb,[o("span",null,d(a(Xn)(v).percent)+" %",1),o("span",{title:f()},d(a(Xn)(v).text),9,pb)]),f()?(g(),_("small",{key:0,title:f(),style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},d(f()),9,hb)):W("",!0),o("button",{type:"button",class:"btn link mini",style:{"justify-self":"start"},onClick:b[3]||(b[3]=y=>a(He)("#firmware"))},d(a(c)("editor.sidebar.update.full_log")),1)],64)):(g(),_("small",{key:2,class:me({failed:i(v).kind==="failed"})},d(i(v).text),3))],2)):W("",!0)],2))),128))]),o("div",mb,[(g(!0),_(z,null,he(a(m).inventory.pending||[],v=>(g(),_("div",{key:v.file,class:"pending"},[o("strong",null,d(v.friendly),1),o("small",null,d(h(v)),1),o("div",bb,[o("button",{type:"button",class:"btn mini quiet",onClick:b[4]||(b[4]=(...y)=>a(ki)&&a(ki)(...y))},d(a(c)("editor.common.open_integrations")),1),v.api_key?(g(),_("button",{key:0,type:"button",class:"btn mini quiet",onClick:y=>a(It)(v.api_key)},d(a(c)("editor.sidebar.copy_api_key")),9,vb)):W("",!0)])]))),128))]),o("button",{id:"new-screen",type:"button",class:"nav-item ghost","aria-current":a($t)==="#new-screen"?"true":"false",onClick:b[5]||(b[5]=v=>a(He)("#new-screen"))},[b[11]||(b[11]=o("span",{class:"plus"},"+",-1)),o("span",_b,d(a(c)("editor.nav.new_screen")),1)],8,gb),b[14]||(b[14]=o("div",{class:"spacer"},null,-1)),o("div",yb,[o("div",wb,d(a(c)("editor.sidebar.more")),1),o("button",{id:"open-firmware",type:"button",class:"nav-item","aria-current":a($t)==="#firmware"?"true":"false",onClick:b[6]||(b[6]=v=>a(He)("#firmware"))},[o("span",$b,d(a(Ae)("F0241")),1),o("span",xb,d(a(c)("editor.nav.firmware")),1)],8,kb),o("button",{id:"open-alerts",type:"button",class:"nav-item","aria-current":a($t)==="#alerts"?"true":"false",onClick:b[7]||(b[7]=v=>a(He)("#alerts"))},[o("span",Cb,d(a(Ae)("F0594")),1),o("span",Tb,d(a(c)("editor.nav.alerts")),1)],8,Sb),o("button",{id:"open-settings",type:"button",class:"nav-item","aria-current":a($t)==="#settings"?"true":"false",onClick:b[8]||(b[8]=v=>a(He)("#settings"))},[o("span",Ab,d(a(Ae)("F0493")),1),o("span",Pb,d(a(c)("editor.nav.settings")),1)],8,Eb),o("button",{id:"refresh",type:"button",class:"nav-item ghost",onClick:b[9]||(b[9]=v=>a(Tn)())},[b[12]||(b[12]=o("span",{class:"plus"},"↻",-1)),o("span",Ob,d(a(c)("editor.sidebar.refresh")),1)])])]))}}),Lb={key:0,id:"toast",class:"toast",role:"status"},Mb=Le({__name:"Toast",setup(e){return(t,n)=>a(m).toast?(g(),_("div",Lb,[o("span",null,d(a(m).toast.message),1),a(m).toast.action?(g(),_("button",{key:0,type:"button",onClick:n[0]||(n[0]=s=>{a(m).toast.action.run(),a(_m)()})},d(a(m).toast.action.label),1)):W("",!0)])):W("",!0)}}),Rb=["aria-label"],Nb=["placeholder","aria-label"],Fb={class:"palette-list"},Db={class:"palette-group"},Ub=["onMouseenter","onClick"],jb={key:0,class:"mdi"},Hb={key:1,class:"glyph"},Vb={class:"tx"},Wb={key:0},Bb={key:2,class:"hint-key"},Kb={key:0,class:"palette-empty"},qb=Le({__name:"CommandPalette",setup(e){const t=ke(""),n=ke(0),s=ke(null),i=k(()=>{const h=t.value.trim().toLocaleLowerCase(),p=[],b=c("editor.palette.groups.screens"),v=c("editor.palette.groups.actions");for(const T of m.inventory.screens)p.push({group:b,label:T.name,detail:`${T.online?c("editor.common.online"):c("editor.common.offline")} · ${T.firmware||c("editor.common.unknown")}`,glyphText:"▦",run:()=>ku(T.id)});const y=_t.value,I=[{group:v,label:c("editor.nav.new_screen"),detail:c("editor.nav.new_screen_detail"),glyphText:"+",run:()=>He("#new-screen")},{group:v,label:c("editor.nav.firmware"),icon:"F0241",run:()=>He("#firmware")},{group:v,label:c("editor.nav.alerts"),detail:c("editor.palette.alerts_detail"),icon:"F0594",run:()=>He("#alerts")},{group:v,label:c("editor.nav.settings"),detail:c("editor.palette.settings_detail"),icon:"F0493",run:()=>He("#settings")}];if(y&&m.layout&&I.unshift({group:v,label:c("editor.common.save_send"),detail:m.dirty?c("editor.common.unsaved"):c("editor.palette.nothing_to_save"),key:"⌘S",run:()=>Wo()},{group:v,label:c("editor.screen_view.tabs.layout"),detail:y.name,run:()=>{He(""),m.tab="layout"}},{group:v,label:c("editor.screen_view.tabs.settings"),detail:y.name,run:()=>{He(""),m.tab="settings"}},{group:v,label:c("editor.palette.identify"),detail:qn(y)?c("editor.palette.identify_detail"):c("editor.palette.identify_needs"),run:()=>{qn(y)&&Su(y)}},{group:v,label:c("editor.palette.export"),detail:c("editor.palette.export_detail"),run:Tu}),p.push(...I),y&&m.layout&&h){const T=new Set(m.layout.tiles.map(A=>A.entity)),$=m.layout.tiles.length>=Kn.value;for(const A of m.inventory.entities)if(!(A.tile===!1||T.has(A.id))&&`${A.name} ${A.id} ${A.area||""} ${A.device||""}`.toLocaleLowerCase().includes(h)&&(p.push({group:c("editor.palette.groups.add"),label:A.name,detail:[jt(A.id)[0],A.area].filter(Boolean).join(" · "),icon:m.inventory.icons?Cn(A.id):void 0,run:()=>{$||$u(A.id)}}),p.length>60))break}return h?p.filter(T=>`${T.label} ${T.detail||""}`.toLocaleLowerCase().includes(h)):p}),l=k(()=>{const h=[];return i.value.forEach((p,b)=>{(h.find(y=>y.group===p.group)||(h.push({group:p.group,items:[]}),h[h.length-1])).items.push({item:p,index:b})}),h});function r(){m.palette=!1}function u(h){r(),h.run()}function f(h){if(h.key==="Escape")h.preventDefault(),r();else if(h.key==="ArrowDown")h.preventDefault(),n.value=Math.min(i.value.length-1,n.value+1);else if(h.key==="ArrowUp")h.preventDefault(),n.value=Math.max(0,n.value-1);else if(h.key==="Enter"){h.preventDefault();const p=i.value[n.value];p&&u(p)}}return Ct(t,()=>n.value=0),Ct(()=>m.palette,async h=>{h&&(t.value="",n.value=0,await Ni(),s.value?.focus())}),(h,p)=>a(m).palette?(g(),_("div",{key:0,class:"palette-backdrop",onClick:r},[o("div",{class:"palette",role:"dialog","aria-label":a(c)("editor.sidebar.search"),onClick:p[1]||(p[1]=Pt(()=>{},["stop"])),onKeydown:f},[Ee(o("input",{ref_key:"input",ref:s,"onUpdate:modelValue":p[0]||(p[0]=b=>t.value=b),id:"palette-input",placeholder:a(c)("editor.palette.placeholder"),"aria-label":a(c)("editor.sidebar.search"),autocomplete:"off"},null,8,Nb),[[Je,t.value]]),o("div",Fb,[(g(!0),_(z,null,he(l.value,b=>(g(),_(z,{key:b.group},[o("div",Db,d(b.group),1),(g(!0),_(z,null,he(b.items,({item:v,index:y})=>(g(),_("button",{key:y,type:"button",class:me(["palette-item",{active:y===n.value}]),onMouseenter:I=>n.value=y,onClick:I=>u(v)},[v.icon?(g(),_("span",jb,d(a(Ae)(v.icon)),1)):(g(),_("span",Hb,d(v.glyphText||"›"),1)),o("span",Vb,[o("span",null,d(v.label),1),v.detail?(g(),_("small",Wb,d(v.detail),1)):W("",!0)]),v.key?(g(),_("kbd",Bb,d(v.key),1)):W("",!0)],42,Ub))),128))],64))),128)),i.value.length?W("",!0):(g(),_("p",Kb,d(a(c)("editor.palette.empty")),1))])],40,Rb)])):W("",!0)}}),ve={source:null,element:null,ghost:null,timer:0,start:null,offset:{x:0,y:0},pointerId:null,suppressUntil:0,last:null,scroller:0,target:null},Ou={mounted(e,t){e.__dragSource=t.value,e.addEventListener("pointerdown",s=>{const i=e.__dragSource;if(!(s.button!==0||e.disabled||s.target.closest(".remove"))){s.pointerType!=="touch"&&s.preventDefault(),Object.assign(ve,{source:i,element:e,start:{x:s.clientX,y:s.clientY},pointerId:s.pointerId});try{e.setPointerCapture(s.pointerId)}catch{}clearTimeout(ve.timer),s.pointerType==="touch"&&(ve.timer=window.setTimeout(()=>ur(s),260))}}),e.addEventListener("pointermove",s=>{if(m.drag.active||!ve.start||ve.element!==e)return;const i=Math.hypot(s.clientX-ve.start.x,s.clientY-ve.start.y);if(s.pointerType==="touch"){i>10&&(clearTimeout(ve.timer),ve.start=null);return}i>=6&&ur(s)});const n=()=>{ve.element===e&&!m.drag.active&&(clearTimeout(ve.timer),ve.start=null)};e.addEventListener("pointerup",n),e.addEventListener("pointercancel",n)},updated(e,t){e.__dragSource=t.value}};function ur(e){if(m.drag.active||!ve.start||!ve.source||!ve.element)return;m.drag.active=!0,m.drag.moving=ve.source.kind==="tile"?ve.source.tile:hu(ve.source.id),m.drag.preview=null,ve.target=null,getSelection()?.removeAllRanges();const t=ve.element.getBoundingClientRect(),n=ve.element.cloneNode(!0);n.classList.add("drag-ghost"),n.style.width=`${t.width}px`,n.style.height=`${t.height}px`,ve.offset={x:e.clientX-t.left,y:e.clientY-t.top},document.body.append(n),ve.ghost=n,document.addEventListener("pointermove",zo),document.addEventListener("pointerup",Ti),document.addEventListener("pointercancel",Ti);try{ve.element.releasePointerCapture(ve.pointerId)}catch{}try{document.documentElement.setPointerCapture(ve.pointerId)}catch{}document.addEventListener("touchmove",Iu,{passive:!1}),ve.scroller=window.setInterval(()=>{if(!ve.last)return;const{x:s,y:i}=zb(document),l=s?pr(ve.last.x,fr(s,"x")):0,r=i?pr(ve.last.y,fr(i,"y")):0;l&&s.scrollBy(l,0),r&&i.scrollBy(0,r),(l||r)&&Yo(Lu(ve.last.x,ve.last.y))},16),Yo(-1),zo(e)}function dr(e,t){if(!e)return!1;const n=t==="x"?e.scrollWidth>e.clientWidth:e.scrollHeight>e.clientHeight,s=getComputedStyle(e)[t==="x"?"overflowX":"overflowY"];return n&&(s==="auto"||s==="scroll")}function zb(e){const t=e.querySelector(".pages"),n=e.querySelector(".canvas");return{x:dr(t,"x")?t:n,y:dr(n,"y")?n:e.scrollingElement}}function fr(e,t){const n=t==="x"?window.innerWidth:window.innerHeight;if(e===e.ownerDocument.scrollingElement)return[0,n];const s=e.getBoundingClientRect();return t==="x"?[Math.max(s.left,0),Math.min(s.right,n)]:[Math.max(s.top,0),Math.min(s.bottom,n)]}function pr(e,[t,n]){return en-60?12:0}function Iu(e){m.drag.active&&e.preventDefault()}function Ti(e){e.pointerId===ve.pointerId&&Yb(e.type==="pointerup")}function zo(e){!ve.ghost||e.pointerId!==ve.pointerId||(ve.last={x:e.clientX,y:e.clientY},ve.ghost.style.transform=`translate(${e.clientX-ve.offset.x}px, ${e.clientY-ve.offset.y}px)`,Yo(Lu(e.clientX,e.clientY)))}function Lu(e,t){let n=null,s=1/0;for(const l of document.querySelectorAll(".pages [data-slot]")){const r=l.getBoundingClientRect(),u=Math.hypot(Math.max(r.left-e,0,e-r.right),Math.max(r.top-t,0,t-r.bottom));u16)return-1;let i=Number(n.cell.dataset.slot);return n.cell.classList.contains("wide")&&e>(n.r.left+n.r.right)/2&&(i+=1),i}function Yo(e){ve.target===e||!m.layout||!m.drag.moving||(ve.target=e,m.drag.preview=e>=0?pu(m.layout.tiles,m.drag.moving,e):null)}function Yb(e){const t=m.drag.preview,n=m.drag.moving;document.removeEventListener("pointermove",zo),document.removeEventListener("pointerup",Ti),document.removeEventListener("pointercancel",Ti),document.removeEventListener("touchmove",Iu);try{document.documentElement.releasePointerCapture(ve.pointerId)}catch{}if(ve.ghost?.remove(),Object.assign(ve,{ghost:null,suppressUntil:Date.now()+400,last:null,start:null,target:null,element:null,source:null}),clearInterval(ve.scroller),m.drag.active=!1,m.drag.preview=null,m.drag.moving=null,e&&t&&n&&m.layout){const s=m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join(),i=!m.layout.tiles.includes(n);for(const{tile:l,slot:r}of t)l.slot=r,m.layout.tiles.includes(l)||m.layout.tiles.push(l);m.layout.tiles.sort((l,r)=>l.slot-r.slot),m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join()!==s&&pt(),i&&Ys(n,n.slot)}}window.addEventListener("click",e=>{Date.now()t.tile.name||b.value==="screen"&&zm(t.tile.entity)||qs(t.tile.entity)),s=k(()=>ru(t.tile)),i=k(()=>Do(t.tile)&&!s.value),l=k(()=>us(t.tile.entity)),r=k(()=>m.inventory.backgrounds?.[t.tile.options?.background||""]?.color),u=k(()=>t.tile.options?.background==="none"),f=k(()=>t.tile.options?.display||"standard"),h=k(()=>f.value!=="standard"?bu(f.value):""),p=k(()=>mu(t.tile,m.inventory)),b=k(()=>t.tile.entity.split(".")[0]),v=k(()=>m.inventory.icons?.controls||{}),y=K=>v.value[K]?Ae(v.value[K]):"",I=k(()=>Cl(t.tile)&&m.inspector?.kind==="tile"),T=k(()=>!t.placeholder&&m.layout?.tiles.includes(t.tile)),$=k(()=>c("editor.tile_card.label",{name:n.value,slot:t.slot%qe+1,page:Et(t.slot)+1})),A=k(()=>new Date(m.now)),S=k(()=>(A.value.getHours()%12+A.value.getMinutes()/60)*30),D=k(()=>A.value.getMinutes()*6),C=k(()=>b.value==="screen"?null:km(t.tile.entity)),B=k(()=>!C.value||["unavailable","unknown",""].includes(C.value.state)),O=k(()=>!!C.value&&!B.value&&C.value.state!=="off"&&C.value.state!=="closed"&&C.value.state!=="standby"&&C.value.state!=="idle"&&C.value.state!=="docked"),E=k(()=>["light","switch","input_boolean","fan"].includes(b.value)&&C.value?.state==="on"),L=k(()=>C.value?.a?.unit_of_measurement),M=K=>K.charAt(0).toUpperCase()+K.slice(1).replace(/_/g," "),U=K=>lu(K,Km.value),R=["number","input_number","counter"],Y=K=>L.value||R.includes(b.value)?`${U(K)}${lr(L.value)}`:K,te={climate:"climate",cover:"cover",media_player:"media",person:"person",sun:"sun",vacuum:"vacuum",weather:"weather"};function ye(K){const ne=yt=>qh(`screen.ha.${yt}`)?jn(`screen.ha.${yt}`):"",ie=K.state==="windy-variant"?"windy":K.state.replace(/-/g,"_");return b.value==="binary_sensor"&&["on","off"].includes(ie)?ne(`binary.${K.a?.device_class}_${ie}`)||ne(ie):te[b.value]?ne(`${te[b.value]}.${ie}`)||(["on","off"].includes(ie)?ne(ie):""):["on","off"].includes(ie)?ne(ie):""}const re=["scene","script","button","input_button"],be=k(()=>{const K=C.value;if(!K||re.includes(b.value))return h.value;if(B.value)return jn(K.state==="unknown"?"editor.mockup.unknown":"screen.ha.unavailable");const ne=K.a||{},ie=K.word||ye(K)||M(K.state);return b.value==="climate"?`${ne.current_temperature!==void 0?`${U(ne.current_temperature)}° · `:""}${ie}`:b.value==="weather"?`${ie}${ne.temperature!==void 0?` · ${U(ne.temperature)}°`:""}`:b.value==="cover"&&ne.current_position!==void 0&&ne.current_position>0&&ne.current_position<100?`${ie} · ${ne.current_position}${lr("%")}`:b.value==="media_player"&&ne.media_title?`${ie} · ${ne.media_title}`:b.value==="sensor"||R.includes(b.value)?Y(K.state):ie}),ge=k(()=>C.value&&!B.value?L.value||R.includes(b.value)?U(C.value.state):C.value.state:"—"),we=k(()=>{const K=C.value;if(!K||B.value)return 0;const ne=K.a||{};if(b.value==="light")return K.state==="on"?ne.brightness!==void 0?Math.round(ne.brightness/255*100):100:0;if(b.value==="fan")return K.state==="on"?ne.percentage??100:0;if(b.value==="cover")return 100-(ne.current_position??(K.state==="open"?100:0));if(b.value==="media_player")return Math.round((ne.volume_level??0)*100);if(b.value==="number"||b.value==="input_number"){const ie=Number(K.state),yt=Number(ne.min??0),Ln=Number(ne.max??100);return Number.isFinite(ie)&&Ln>yt?Math.round((ie-yt)/(Ln-yt)*100):0}return 0}),Ye=k(()=>jn(`screen.ha.button.${{scene:"activate",script:"run"}[b.value]||"press"}`)),le=k(()=>`${jn("screen.tile.page",{n:l.value})} ›`),ee=k(()=>({background:`linear-gradient(to right, ${we.value?"#ffbf38":"#c9ccd1"} ${we.value}%, ${we.value?"#fff1d3":"#e6e8ec"} ${we.value}%)`})),ce=k(()=>({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})),tt=k(()=>{const K=C.value?.a?.temperature;return K!=null?`${U(K)}°`:"—"});async function $e(K){if(K.key==="Enter"||K.key===" "){K.preventDefault(),Vo(t.tile);return}const ne={ArrowLeft:-1,ArrowRight:1,ArrowUp:-2,ArrowDown:2}[K.key];ne&&(K.preventDefault(),Ys(t.tile,t.tile.slot+(s.value?Math.sign(ne)*qe:i.value?Math.sign(ne)*2:ne))&&(await Ni(),document.querySelector(`.pages [data-slot="${t.tile.slot}"]`)?.focus()))}return(K,ne)=>Ee((g(),_("div",{class:me(["tile",{wide:i.value,full:s.value,bare:u.value,placeholder:e.placeholder||!T.value,chosen:I.value}]),"data-slot":e.slot,style:Ue(r.value&&!u.value?{backgroundColor:r.value}:void 0),tabindex:T.value?0:-1,role:T.value?"button":void 0,"aria-label":T.value?$.value:void 0,onClick:ne[1]||(ne[1]=ie=>T.value&&a(Vo)(e.tile)),onKeydown:ne[2]||(ne[2]=ie=>T.value&&$e(ie))},[f.value==="analog"?(g(),_(z,{key:0},[(g(),_("svg",Jb,[ne[3]||(ne[3]=o("circle",{cx:"30",cy:"30",r:"27",fill:"#fff",stroke:"#c9ccd1"},null,-1)),(g(),_(z,null,he([0,90,180,270],ie=>o("line",{key:ie,x1:"30",y1:"5",x2:"30",y2:"9",stroke:"#1b1b1b","stroke-width":"1.5",transform:`rotate(${ie} 30 30)`},null,8,Xb)),64)),o("line",{x1:"30",y1:"30",x2:"30",y2:"16",stroke:"#1b1b1b","stroke-width":"2.4","stroke-linecap":"round",transform:`rotate(${S.value} 30 30)`},null,8,Zb),o("line",{x1:"30",y1:"30",x2:"30",y2:"11",stroke:"#1b1b1b","stroke-width":"1.6","stroke-linecap":"round",transform:`rotate(${D.value} 30 30)`},null,8,Qb),ne[4]||(ne[4]=o("circle",{cx:"30",cy:"30",r:"1.8",fill:"#1b1b1b"},null,-1))])),i.value?(g(),_("span",ev,[o("span",tv,[o("span",nv,d(n.value),1),o("span",sv,d(h.value),1)])])):W("",!0)],64)):f.value==="digital"&&b.value==="screen"?(g(),_(z,{key:1},[o("span",iv,d(a(Ae)(a(vs)(e.tile))),1),o("span",ov,[o("span",lv,d(a(Wi)(a(as),A.value)),1),o("span",av,d(n.value),1)])],64)):s.value?(g(),_(z,{key:2},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",rv,[o("span",cv,d(n.value),1),l.value?(g(),_("span",uv,d(le.value),1)):f.value==="watch"?(g(),_("span",dv,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",fv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",pv,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",hv,[o("span",mv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",bv,d(y("plus")||"+"),1)])):p.value==="volume"?(g(),_(z,{key:2},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",vv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(z,{key:3},[o("span",gv,d(y("skip-previous")),1),o("span",_v,d(y(O.value?"pause":"play")||y("play")),1),o("span",yv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(z,{key:4},[o("span",wv,d(y("arrow-expand-horizontal")),1),o("span",kv,d(y("stop")),1),o("span",$v,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="run"?(g(),_("span",xv,d(Ye.value),1)):(g(),_("span",{key:6,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):i.value?(g(),_(z,{key:3},[o("span",Sv,[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",Cv,[o("span",Tv,d(n.value),1),l.value?(g(),_("span",Ev,d(le.value),1)):f.value==="watch"?(g(),_("span",Av,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",Pv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",Ov,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",Iv,[o("span",Lv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",Mv,d(y("plus")||"+"),1)])):p.value==="stepper"&&b.value.endsWith("select")?(g(),_(z,{key:2},[o("span",Rv,d(y("chevron-left")),1),o("span",Nv,d(y("chevron-right")),1)],64)):p.value==="stepper"?(g(),_("span",Fv,[o("span",Dv,d(y("minus")||"−"),1),o("b",null,d(ge.value),1),o("span",Uv,d(y("plus")||"+"),1)])):p.value==="mode"?(g(),_(z,{key:4},[o("span",jv,d(y("power")),1),o("span",Hv,d(y("fire")),1),o("span",Vv,d(y("snowflake")),1)],64)):p.value==="volume"?(g(),_(z,{key:5},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",Wv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(z,{key:6},[o("span",Bv,d(y("skip-previous")),1),o("span",Kv,d(y(O.value?"pause":"play")||y("play")),1),o("span",qv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(z,{key:7},[o("span",zv,d(y("arrow-expand-horizontal")),1),o("span",Yv,d(y("stop")),1),o("span",Gv,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="buttons"&&b.value==="vacuum"?(g(),_(z,{key:8},[o("span",Jv,d(y("play")),1),o("span",Xv,d(y("stop")),1),o("span",Zv,d(y("home-map-marker")),1)],64)):p.value==="buttons"&&b.value==="timer"?(g(),_(z,{key:9},[o("span",Qv,d(y("play")),1),o("span",eg,d(y("close")),1)],64)):p.value==="run"?(g(),_("span",tg,d(Ye.value),1)):(g(),_("span",{key:11,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):(g(),_(z,{key:4},[o("span",{class:me(["head",{top:f.value==="watch"}])},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",ng,[o("span",sg,d(n.value),1),l.value?(g(),_("span",ig,d(le.value),1)):f.value!=="watch"&&be.value?(g(),_("span",{key:1,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])],2),f.value==="watch"?(g(),_("span",og,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",lg,d(L.value),1)):W("",!0)])):W("",!0),e.tile.options?.inline==="slider"?(g(),_("span",{key:1,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0)],64)),T.value?(g(),_("button",{key:5,type:"button",class:"remove",title:a(c)("editor.tile_card.remove"),"aria-label":a(c)("editor.tile_card.remove_named",{name:n.value}),onClick:ne[0]||(ne[0]=Pt(ie=>a(xu)(e.tile),["stop"]))},"✕",8,ag)):W("",!0)],46,Gb)),[[a(Ou),{kind:"tile",tile:e.tile}]])}}),cg=["viewBox","aria-label"],ug=["y"],dg=["cx","cy","r","stroke","stroke-width"],fg=["x1","y1","x2","y2","stroke","stroke-width"],pg=["x","y","fill"],hg=["x","y"],Mu=Le({__name:"TopbarSvg",props:{items:{},nameText:{},single:{type:Boolean}},setup(e,{expose:t}){const n=e,s=k(()=>{m.fontsVersion,m.now,m.topbarPreviews;const $=n.items||fn();return gu($,wu.value,n.nameText??(m.layout?.title||jn("editor.mockup.home")),bn)}),i=k(()=>s.value.metrics),l=k(()=>n.single?Math.round(i.value.text*1.4):i.value.top+Math.round(i.value.name*.45)),r=k(()=>n.single?Math.round(i.value.text*1.05):i.value.top),u=k(()=>{if(!n.single)return s.value.placed;const $=s.value.parts[0];return $&&($.x=0),$?[$]:[]}),f=k(()=>n.single?`-2 0 ${Math.max(1,u.value[0]?.width||1)+4} ${l.value}`:`0 0 ${i.value.width} ${l.value}`),h=k(()=>r.value+(s.value.zero.top+s.value.zero.bottom)/2),p=k(()=>mm(s.value.nameText,s.value.fonts.name,Math.min(s.value.natural,s.value.nameRoom))),b=k(()=>new Date(m.now));function v($){const A=b.value;return[[(A.getHours()%12+A.getMinutes()/60)*30,$*.24],[A.getMinutes()*6,$*.34]].map(([S,D])=>{const C=S*Math.PI/180;return{x2:D*Math.sin(C),y2:-D*Math.cos(C)}})}const y=$=>$.x-$.icon.ink.left,I=$=>($.icon?$.x+($.icon.ink.right-$.icon.ink.left)+s.value.gaps.icon:$.x)-$.text.ink.left,T=k(()=>`${(Math.max(1,u.value[0]?.width||1)+4)*(26/i.value.icon)}px`);return t({lay:s}),($,A)=>(g(),_("svg",{viewBox:f.value,role:"img","aria-label":e.single?a(c)("editor.topbar.live.looks"):a(c)("editor.topbar.aria",{name:s.value.nameText}),style:Ue(e.single?{width:T.value}:void 0)},[e.single?W("",!0):(g(),_("text",{key:0,x:"0",y:i.value.top,fill:"#1b1b1b",style:Ue({font:s.value.fonts.name})},d(p.value),13,ug)),o("g",null,[(g(!0),_(z,null,he(u.value,S=>(g(),_(z,{key:S.index},[S.dial?(g(),_(z,{key:0},[o("circle",{cx:S.x+S.dial/2,cy:h.value,r:S.dial/2-Math.max(1,Math.round(S.dial/10))/2,fill:"none",stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial/10))},null,8,dg),(g(!0),_(z,null,he(v(S.dial),(D,C)=>(g(),_("line",{key:C,x1:S.x+S.dial/2,y1:h.value,x2:S.x+S.dial/2+D.x2,y2:h.value+D.y2,stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial*.075)),"stroke-linecap":"round"},null,8,fg))),128))],64)):(g(),_(z,{key:1},[S.icon?(g(),_("text",{key:0,x:y(S),y:h.value-(S.icon.ink.top+S.icon.ink.bottom)/2,fill:S.view.color||"#46525e",style:Ue({font:s.value.fonts.icon})},d(S.icon.glyph),13,pg)):W("",!0),S.text?(g(),_("text",{key:1,x:I(S),y:r.value,fill:"#46525e",style:Ue({font:s.value.fonts.text})},d(S.text.value),13,hg)):W("",!0)],64))],64))),128))])],12,cg))}}),mg={class:"page"},bg={class:"page-label"},vg=["title"],gg={key:1},_g=["title"],yg={class:"tiles"},wg=["data-slot","title","aria-label","onClick"],kg=Le({__name:"DevicePage",props:{page:{},entries:{},pages:{},moving:{}},setup(e){const t=e,n=k(()=>new Map(t.entries.map(h=>[h.slot,h]))),s=k(()=>new Set(t.entries.flatMap(h=>Bn(h.slot,ut(h.tile)).slice(1)))),i=k(()=>Array.from({length:qe},(h,p)=>t.page*qe+p).filter(h=>!s.value.has(h))),l=k(()=>t.pages>1&&!t.entries.some(h=>Et(h.slot)===t.page)),r=k(()=>m.inspector?.kind==="bar"||m.inspector?.kind==="bar-add"),u=k(()=>t.entries.filter(h=>Et(h.slot)===t.page).reduce((h,p)=>h+kl(ut(p.tile)),0));function f(h){const p=m.insertAt===h;m.insertAt=p?-1:h,m.insertAt>=0&&document.querySelector("#search")?.focus()}return(h,p)=>(g(),_("div",mg,[o("div",bg,[o("span",null,d(a(c)("editor.page.label",{page:e.page+1})),1),l.value?(g(),_("button",{key:0,type:"button",class:"btn mini",title:a(c)("editor.page.remove_title"),onClick:p[0]||(p[0]=b=>a(Sm)(e.page))},d(a(c)("editor.page.remove")),9,vg)):(g(),_("span",gg,d(u.value)+" / "+d(a(qe)),1))]),o("div",{class:me(["device",{cyd:!a(Sl)}])},[o("div",{class:me(["bar-wrap",{selected:r.value}]),title:a(c)("editor.page.edit_bar"),role:"button",tabindex:"0",onClick:p[1]||(p[1]=b=>a(Xt)(0)),onKeydown:p[2]||(p[2]=xc(Pt(b=>a(Xt)(0),["prevent"]),["enter"]))},[se(Mu)],42,_g),o("div",yg,[(g(!0),_(z,null,he(i.value,b=>(g(),_(z,{key:b},[n.value.get(b)?(g(),it(rg,{key:0,tile:n.value.get(b).tile,slot:b,placeholder:n.value.get(b).tile===e.moving},null,8,["tile","slot","placeholder"])):(g(),_("button",{key:1,type:"button",class:me(["cell",{"insert-here":a(m).insertAt===b}]),"data-slot":b,title:a(c)("editor.page.cell.title"),"aria-label":a(c)("editor.page.cell.aria",{slot:b%a(qe)+1,page:e.page+1}),onClick:v=>f(b)},[p[3]||(p[3]=o("span",null,"+",-1)),o("small",null,d(a(m).insertAt===b?a(c)("editor.page.cell.next"):a(c)("editor.page.cell.empty")),1)],10,wg))],64))),128))])],2)]))}}),$g={class:"library",id:"library"},xg={class:"lib-head"},Sg={class:"lib-title"},Cg=["placeholder","aria-label"],Tg={class:"filters",id:"filters"},Eg=["aria-pressed","onClick"],Ag={class:"lib-row"},Pg=["aria-label"],Og={value:""},Ig=["value"],Lg=["aria-pressed","title"],Mg={class:"lib-list",id:"results","aria-live":"polite"},Rg=["title","disabled","onClick"],Ng={class:"tx"},Fg={key:0,class:"hint"},Dg={key:1,class:"hint"},Ug={class:"lib-foot"},jg=Le({__name:"Library",setup(e){const t=["","light","climate","switch","binary_sensor","button","script","fan","cover","scene","vacuum","sensor","media_player","weather","number","select","person","timer","screen"],n={switch:"input_boolean",number:"input_number",select:"input_select",weather:"sun",button:"input_button"},s=k(()=>new Set(m.layout?.tiles.map(p=>p.entity)||[])),i=p=>s.value.has(p)&&!Bi(p),l=k(()=>[...new Set(m.inventory.entities.map(p=>p.area).filter(p=>!!p))].sort((p,b)=>p.localeCompare(b))),r=k(()=>{const p=m.search.toLocaleLowerCase(),b=m.filter,v=m.room;return[...m.inventory.builtin||[],...m.inventory.entities].filter(y=>y.tile!==!1&&(Sl.value||!["camera","image"].includes(y.id.split(".")[0]))&&(!b||y.id.startsWith(b+".")||n[b]===y.id.split(".")[0])&&(!v||y.area===v)&&(!m.hidePlaced||!i(y.id))&&`${y.name} ${y.id} ${y.device||""} ${y.area||""}`.toLocaleLowerCase().includes(p))}),u=k(()=>(m.layout?.tiles.length||0)>=Kn.value),f=k(()=>m.inventory.entities.length),h=p=>{const b=p.id.split(".")[0];return p.state==="unavailable"||p.state==="unknown"?"gone":["light","switch","input_boolean","fan"].includes(b)&&p.state==="on"?"on":""};return(p,b)=>(g(),_("aside",$g,[o("div",xg,[o("div",Sg,[Me(d(a(c)("editor.library.title"))+" ",1),o("small",null,d(a(c)("editor.library.entities",f.value)),1)]),Ee(o("input",{id:"search","onUpdate:modelValue":b[0]||(b[0]=v=>a(m).search=v),type:"search",placeholder:a(c)("editor.library.search"),autocomplete:"off","aria-label":a(c)("editor.library.search_label")},null,8,Cg),[[Je,a(m).search]]),o("div",Tg,[(g(),_(z,null,he(t,v=>o("button",{key:v,type:"button","aria-pressed":a(m).filter===v?"true":"false",onClick:y=>a(m).filter=v},[v?(g(),_("span",{key:0,class:"domain-icon",style:Ue({color:a(jt)(v+".")[2],background:a(jt)(v+".")[3]}),"aria-hidden":"true"},d(a(jt)(v+".")[1]),5)):W("",!0),Me(d(a(c)(`editor.library.filters.${v||"all"}`)),1)],8,Eg)),64))]),o("div",Ag,[Ee(o("select",{id:"room","onUpdate:modelValue":b[1]||(b[1]=v=>a(m).room=v),"aria-label":a(c)("editor.library.room")},[o("option",Og,d(a(c)("editor.library.all_rooms")),1),(g(!0),_(z,null,he(l.value,v=>(g(),_("option",{key:v,value:v},d(v),9,Ig))),128))],8,Pg),[[Wn,a(m).room]]),o("button",{type:"button",class:"chip-toggle",id:"hide-placed","aria-pressed":a(m).hidePlaced?"true":"false",title:a(c)("editor.library.hide_placed_title"),onClick:b[2]||(b[2]=v=>a(m).hidePlaced=!a(m).hidePlaced)},d(a(c)("editor.library.hide_placed")),9,Lg)])]),o("div",Mg,[(g(!0),_(z,null,he(r.value.slice(0,80),v=>Ee((g(),_("button",{key:v.id,type:"button",class:"ent",title:v.id,disabled:i(v.id)||u.value,onClick:y=>a($u)(v.id)},[o("span",{class:me(["av mdi",h(v)]),style:Ue({color:a(jt)(v.id)[2],background:a(jt)(v.id)[3]})},d(a(m).inventory.icons?a(Ae)(a(Cn)(v.id)):a(jt)(v.id)[1]),7),o("span",Ng,[o("b",null,d(v.name),1),o("small",null,d([a(jt)(v.id)[0],v.area,v.device].filter(Boolean).join(" · ")),1)]),o("span",{class:me(["add",{done:i(v.id)}])},d(i(v.id)?"✓":"+"),3)],8,Rg)),[[a(Ou),{kind:"entity",id:v.id}]])),128)),r.value.length?r.value.length>80?(g(),_("p",Dg,d(a(c)("editor.common.results",r.value.length)),1)):W("",!0):(g(),_("p",Fg,d(a(m).hidePlaced&&!a(m).search&&!a(m).filter&&!a(m).room?a(c)("editor.library.all_placed"):a(c)("editor.library.none_found")),1))]),o("div",Ug,d(u.value?a(c)(a(Kn)<48?"editor.library.full_update":"editor.library.full",a(Kn)):a(c)("editor.library.hint")),1)]))}}),Hg={class:"canvas-head"},Vg={id:"count"},Wg={key:0,id:"no-tiles"},Bg={key:1},Kg={key:2,id:"positions-hint",class:"warn"},qg={key:3,id:"page-reach-hint",class:"warn"},zg=["aria-label"],Yg={class:"page-label"},Gg=["tabindex"],Jg=Le({__name:"LayoutView",setup(e){const t=k(()=>m.layout),n=k(()=>m.drag.preview||Xe(t.value)),s=k(()=>Ot(n.value,t.value.pages)),i=k(()=>Tm()),l=k(()=>s.valueQh(t.value.tiles)&&!kn(0,2,26)?c("editor.layout.positions_hint",{firmware:_t.value?.firmware||c("editor.common.unknown")}):""),u=k(()=>Eu(n.value,s.value));function f(h){h.target.closest(".device, .page-label, .canvas-head")||m.inspector&&Ze()}return(h,p)=>(g(),_(z,null,[o("div",{class:"canvas",id:"canvas",onClick:f},[o("div",Hg,[o("b",Vg,d(a(c)("editor.layout.count",{tiles:t.value.tiles.length,limit:a(Kn)},s.value)),1),t.value.tiles.length?(g(),_("span",Bg,d(a(c)("editor.layout.how_to")),1)):(g(),_("span",Wg,d(a(c)("editor.layout.no_tiles")),1)),r.value?(g(),_("span",Kg,d(r.value),1)):W("",!0),u.value?(g(),_("span",qg,d(u.value),1)):W("",!0)]),o("div",{class:"pages",id:"layout-preview","aria-label":a(c)("editor.layout.aria")},[(g(!0),_(z,null,he(i.value,b=>(g(),it(kg,{key:b,page:b-1,entries:n.value,pages:s.value,moving:a(m).drag.moving},null,8,["page","entries","pages","moving"]))),128)),o("div",{class:me(["page ghost",{disabled:!l.value}])},[o("div",Yg,[o("span",null,d(a(c)("editor.page.label",{page:i.value+1})),1)]),o("div",{class:me(["device",{cyd:a(_t)?.board!=="guition"}]),id:"add-page",role:"button",tabindex:l.value?0:-1,onClick:p[0]||(p[0]=b=>l.value&&a(Qa)()),onKeydown:p[1]||(p[1]=xc(Pt(b=>l.value&&a(Qa)(),["prevent"]),["enter"]))},d(l.value?a(c)("editor.layout.add_page"):a(c)("editor.layout.max_pages",a(un))),43,Gg)],2)],8,zg)]),se(jg)],64))}}),Xg={class:"status",id:"settings-status",role:"status"},Zg={key:0,class:"set-grid",id:"settings-groups"},Qg={class:"mdi"},e_=["data-setting","title","onClick"],t_=["id"],n_={class:"s-control"},s_=["id","aria-checked","aria-labelledby","disabled","onClick"],i_=["aria-labelledby"],o_=["aria-pressed","disabled","onClick"],l_={key:2,class:"step"},a_=["aria-label","disabled","onPointerdown","onClick"],r_={class:"mdi"},c_=["id","aria-labelledby"],u_=["aria-label","disabled","onPointerdown","onClick"],d_={class:"mdi"},f_={key:0,class:"hint warn",id:"settings-page-reach"},p_=Le({__name:"SettingsTab",setup(e){const t=k(()=>Tl()),n=k(()=>xi()),s=k(()=>t.value?.owner==="screen"&&!_t.value?.online),i=k(()=>Nm.map(T=>({...T,rows:T.rows.filter($=>t.value?.keys.includes($.key))})).filter(T=>T.rows.length)),l=k(()=>Eu()),r=T=>s.value||!!t.value?.unavailable.includes(T.key),u=T=>T.needs?!!n.value[T.needs]:!0,f=k(()=>s.value?c("editor.screen_settings.status.offline"):m.settingPending?c("editor.common.saving"):t.value?.owner==="screen"?c("editor.screen_settings.status.screen"):c("editor.screen_settings.status.app")),h=(T,$)=>{const A=n.value[T.key];return r(T)||!u(T)||A===null||A===void 0?!0:T.kind!=="moment"&&sr(T,A,$,!1,n.value)===A},p=new WeakMap;function b(T,$,A){const S=xi(),D=sr(T,S[T.key],$,A,S);D!==S[T.key]&&ni(T.key,D,600)}function v(T,$,A){const S=T.currentTarget;if(S.disabled||T.button!==0)return;const D={timer:0,held:!1};p.set(S,D);let C=0;D.timer=window.setTimeout(function B(){D.held=!0,C+=1,b($,A,C>5),D.timer=window.setTimeout(B,180)},450)}function y(T){const $=p.get(T.currentTarget);$&&clearTimeout($.timer)}function I(T,$,A){const S=p.get(T.currentTarget);if(S?.held){S.held=!1;return}b($,A,!1)}return(T,$)=>(g(),_("div",{class:me(["settings",{offline:s.value}]),id:"general-settings"},[o("span",Xg,d(f.value),1),t.value?(g(),_("div",Zg,[(g(!0),_(z,null,he(i.value,A=>(g(),_("section",{key:A.group,class:"set-card"},[o("h4",null,[o("span",Qg,d(a(Ae)(A.icon)),1),Me(d(a(c)(`editor.screen_settings.groups.${A.group}`)),1)]),(g(!0),_(z,null,he(A.rows,S=>(g(),_("div",{key:S.key,class:me(["srow",[`setting-${S.kind}`,{inactive:!u(S)||r(S)}]]),"data-setting":S.key,title:r(S)&&!s.value?a(c)("editor.screen_settings.unavailable"):"",onClick:D=>S.kind==="toggle"&&D.target.closest(".srow")===D.currentTarget&&!D.target.closest("button")&&!r(S)&&a(ni)(S.key,!n.value[S.key],150)},[o("span",{class:"s-label",id:`setting-label-${S.key}`},d(a(go)(S)),9,t_),o("div",n_,[S.kind==="toggle"?(g(),_("button",{key:0,type:"button",class:me(["switch",{unknown:n.value[S.key]===null||n.value[S.key]===void 0}]),role:"switch",id:`setting-${S.key}`,"aria-checked":n.value[S.key]?"true":"false","aria-labelledby":`setting-label-${S.key}`,disabled:r(S),onClick:Pt(D=>a(ni)(S.key,!n.value[S.key],150),["stop"])},null,10,s_)):S.kind==="choice"?(g(),_("div",{key:1,class:"seg",role:"group","aria-labelledby":`setting-label-${S.key}`},[(g(!0),_(z,null,he(S.options,D=>(g(),_("button",{key:String(D),type:"button","aria-pressed":n.value[S.key]===D?"true":"false",disabled:r(S),onClick:C=>a(ni)(S.key,D,150)},d(a(Fm)(S,D)),9,o_))),128))],8,i_)):(g(),_("div",l_,[o("button",{type:"button","aria-label":a(c)("editor.screen_settings.lower",{name:a(go)(S)}),disabled:h(S,-1),onPointerdown:D=>v(D,S,-1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,-1)},[o("span",r_,d(a(Ae)("F0374")),1)],40,a_),o("output",{id:`setting-${S.key}`,"aria-labelledby":`setting-label-${S.key}`},d(a(Hm)(S,n.value)),9,c_),o("button",{type:"button","aria-label":a(c)("editor.screen_settings.higher",{name:a(go)(S)}),disabled:h(S,1),onPointerdown:D=>v(D,S,1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,1)},[o("span",d_,d(a(Ae)("F0415")),1)],40,u_)]))])],10,e_))),128)),l.value&&A.rows.some(S=>S.key==="page_buttons")?(g(),_("p",f_,d(l.value),1)):W("",!0)]))),128))])):W("",!0)],2))}}),h_={class:"seg wrap",role:"group"},m_=["disabled","aria-pressed","onClick"],kt=Le({__name:"Segmented",props:{choices:{},value:{},disabled:{type:Boolean}},emits:["pick"],setup(e,{emit:t}){const n=t;return(s,i)=>(g(),_("div",h_,[(g(!0),_(z,null,he(e.choices,([l,r])=>(g(),_("button",{key:String(l),type:"button",disabled:e.disabled,"aria-pressed":String(l)===String(e.value)?"true":"false",onClick:u=>n("pick",l)},d(r),9,m_))),128))]))}}),b_={class:"f"},v_={class:"f-label"},g_={key:0},__={key:1,class:"warn"},y_=["aria-expanded"],w_={class:"tx"},k_={key:0,class:"mono"},$_={class:"link"},x_={key:0,class:"picker"},S_=["placeholder","aria-label"],C_={class:"action-list"},T_=["aria-pressed","onClick"],E_={key:0,class:"hint"},A_={key:1,class:"warn"},P_={class:"f-label"},O_=["aria-label","value","onChange"],I_={value:""},L_=["value"],M_={key:3,class:"action-number"},R_=["aria-label","value","onInput"],N_=["onClick"],F_={key:4,class:"action-number"},D_=["aria-label","min","max","step","value","placeholder","onInput"],U_={key:0},j_=["aria-label","value","placeholder","onInput"],H_={key:6},V_={key:0,class:"warn"},W_={key:3},B_=Le({__name:"ActionPicker",props:{tile:{}},setup(e){const t=e,n=k(()=>m.entityActions[t.tile.entity]),s=k(()=>t.tile.options?.action),i=k(()=>n.value?.find(C=>C.action===s.value?.action)),l=k(()=>m.actionPickerOpen||!s.value),r=k(()=>{const C=m.actionSearch.trim().toLocaleLowerCase();return(n.value||[]).filter(B=>`${B.name} ${B.action} ${B.description}`.toLocaleLowerCase().includes(C))});n.value===void 0&&wm(t.tile.entity);function u(C){const B=C.action===s.value?.action;t.tile.options={...t.tile.options,action:B?s.value:{action:C.action}},m.actionPickerOpen=!1,pt()}function f(C,B){const O={...t.tile.options?.action?.data||{}};B===void 0?delete O[C]:O[C]=B,t.tile.options={...t.tile.options,action:{action:s.value.action,...Object.keys(O).length?{data:O}:{}}},pt()}const h=k(()=>{if(!i.value)return[];const C=t.tile.options?.action?.data||{};return i.value.fields.filter(B=>B.required&&C[B.key]===void 0).map(B=>B.name)}),p=C=>Object.keys(C.selector||{})[0]||"text",b=C=>(C.selector||{})[p(C)]||{},v=C=>C.example===void 0?"":typeof C.example=="string"?C.example:JSON.stringify(C.example);function y(C){const B=b(C),O=p(C);return Array.isArray(C.options)?C.options.map(E=>[E,E]):O==="select"&&Array.isArray(B.options)&&!B.multiple?B.options.map(E=>E&&typeof E=="object"?[String(E.value),String(E.label??E.value)]:[String(E),String(E)]):null}const I=C=>"#"+C.map(B=>Math.max(0,Math.min(255,Number(B)||0)).toString(16).padStart(2,"0")).join(""),T=C=>Array.isArray(C)&&C.length===3?I(C):"#ffffff",$=C=>C===void 0?"":typeof C=="string"?C:JSON.stringify(C);function A(C,B){const O=B.trim();if(!O)return f(C.key,void 0);if(p(C)==="text")return f(C.key,B);try{f(C.key,JSON.parse(O))}catch{f(C.key,B)}}function S(C,B){f(C.key,B===""||!Number.isFinite(Number(B))?void 0:Number(B))}const D=C=>b(C).unit_of_measurement||p(C)==="color_temp"&&b(C).unit||"";return(C,B)=>(g(),_("div",b_,[o("span",v_,d(a(c)("editor.action.label")),1),n.value===void 0?(g(),_("small",g_,d(a(c)("editor.action.asking")),1)):n.value===null?(g(),_("small",__,d(a(c)("editor.action.not_answering")),1)):(g(),_(z,{key:2},[o("button",{type:"button",class:"row","aria-expanded":l.value?"true":"false",onClick:B[0]||(B[0]=O=>a(m).actionPickerOpen=!l.value)},[o("span",w_,[o("b",null,d(i.value?i.value.name:s.value?s.value.action:a(c)("editor.action.choose")),1),s.value?(g(),_("small",k_,d(s.value.action),1)):W("",!0)]),o("span",$_,d(l.value?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,y_),l.value?(g(),_("div",x_,[Ee(o("input",{"onUpdate:modelValue":B[1]||(B[1]=O=>a(m).actionSearch=O),type:"search",placeholder:a(c)("editor.action.search"),"aria-label":a(c)("editor.action.search_label")},null,8,S_),[[Je,a(m).actionSearch]]),o("div",C_,[(g(!0),_(z,null,he(r.value,O=>(g(),_("button",{key:O.action,type:"button",class:"action-choice","aria-pressed":O.action===s.value?.action?"true":"false",onClick:E=>u(O)},[o("strong",null,d(O.name),1),o("small",null,d(O.description?`${O.action} · ${O.description}`:O.action),1)],8,T_))),128)),r.value.length?W("",!0):(g(),_("p",E_,d(a(c)("editor.action.none_found")),1))])])):W("",!0),s.value&&!i.value?(g(),_("small",A_,d(a(c)("editor.action.gone")),1)):W("",!0),i.value&&!l.value?(g(),_(z,{key:2},[(g(!0),_(z,null,he(i.value.fields,O=>(g(),_("div",{key:O.key,class:"f"},[o("span",P_,d(O.required?O.name:a(c)("editor.action.optional",{name:O.name})),1),p(O)==="boolean"?(g(),it(kt,{key:0,choices:[["",a(c)("editor.action.not_set")],["true",a(c)("editor.action.on")],["false",a(c)("editor.action.off")]],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E==="true")},null,8,["choices","value","onPick"])):y(O)&&y(O).length<=4?(g(),it(kt,{key:1,choices:[["",a(c)("editor.action.not_set")],...y(O)],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E)},null,8,["choices","value","onPick"])):y(O)?(g(),_("select",{key:2,"aria-label":O.name,value:String(s.value?.data?.[O.key]??""),onChange:E=>f(O.key,E.target.value===""?void 0:E.target.value)},[o("option",I_,d(a(c)("editor.action.not_set")),1),(g(!0),_(z,null,he(y(O),([E,L])=>(g(),_("option",{key:E,value:E},d(L),9,L_))),128))],40,O_)):p(O)==="color_rgb"?(g(),_("div",M_,[o("input",{type:"color","aria-label":O.name,value:T(s.value?.data?.[O.key]),onInput:E=>f(O.key,[1,3,5].map(L=>parseInt(E.target.value.slice(L,L+2),16)))},null,40,R_),o("button",{type:"button",class:"btn quiet mini",onClick:E=>f(O.key,void 0)},d(a(c)("editor.action.not_set")),9,N_)])):p(O)==="number"||p(O)==="color_temp"?(g(),_("div",F_,[o("input",{type:"number","aria-label":O.name,min:b(O).min,max:b(O).max,step:b(O).step==="any"?"any":b(O).step,value:s.value?.data?.[O.key]??"",placeholder:v(O),onInput:E=>S(O,E.target.value)},null,40,D_),D(O)?(g(),_("span",U_,d(D(O)),1)):W("",!0)])):(g(),_("input",{key:5,type:"text","aria-label":O.name,value:$(s.value?.data?.[O.key]),placeholder:v(O),onInput:E=>A(O,E.target.value)},null,40,j_)),O.description?(g(),_("small",H_,d(O.description),1)):W("",!0)]))),128)),h.value.length?(g(),_("small",V_,d(a(c)("editor.action.needs",{fields:h.value.join(", ")})),1)):W("",!0)],64)):W("",!0),a(kn)(0,2,58)?W("",!0):(g(),_("small",W_,d(a(c)("editor.action.needs_firmware")),1))],64))]))}}),K_={class:"f"},q_={class:"f-label"},z_=["aria-expanded"],Y_={class:"av mdi"},G_={class:"tx"},J_={class:"link"},X_={key:0,class:"picker"},Z_=["placeholder","aria-label"],Q_=["aria-pressed","title"],ey={class:"mdi"},ty=["aria-pressed","title"],ny={class:"icon-list"},sy={class:"icon-grid"},iy=["title","aria-label","aria-pressed","onClick"],oy={class:"mdi"},ly={key:0,class:"hint"},ay={key:1},Ru=Le({__name:"IconPicker",props:{selected:{},automatic:{},autoLabel:{},allowNone:{type:Boolean},note:{}},emits:["pick"],setup(e,{emit:t}){const n=e,s=t,i=ke(""),l=k(()=>zs(n.selected)),r=k(()=>n.selected==="none"?"":Ae(l.value?.cp||n.automatic)),u=k(()=>n.selected==="none"?c("editor.icon.none"):l.value?.label||n.autoLabel),f=k(()=>{const h=i.value.trim().toLocaleLowerCase();return(m.inventory.icons?.groups||[]).map(p=>({label:p.label,icons:p.icons.filter(b=>!h||`${b.label} ${b.name.replaceAll("-"," ")} ${p.label}`.toLocaleLowerCase().includes(h))})).filter(p=>p.icons.length)});return(h,p)=>(g(),_("div",K_,[o("span",q_,d(a(c)("editor.icon.label")),1),o("button",{type:"button",class:"row","aria-expanded":a(m).iconPickerOpen?"true":"false",onClick:p[0]||(p[0]=b=>a(m).iconPickerOpen=!a(m).iconPickerOpen)},[o("span",Y_,d(r.value),1),o("span",G_,[o("b",null,d(u.value),1)]),o("span",J_,d(a(m).iconPickerOpen?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,z_),a(m).iconPickerOpen?(g(),_("div",X_,[Ee(o("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>i.value=b),type:"search",placeholder:a(c)("editor.icon.search"),"aria-label":a(c)("editor.icon.search_label")},null,8,Z_),[[Je,i.value]]),o("button",{type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="auto"?"true":"false",title:e.autoLabel,onClick:p[2]||(p[2]=b=>s("pick","auto"))},[o("span",ey,d(a(Ae)(e.automatic)),1),o("span",null,d(e.autoLabel),1)],8,Q_),e.allowNone?(g(),_("button",{key:0,type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="none"?"true":"false",title:a(c)("editor.icon.none"),onClick:p[3]||(p[3]=b=>s("pick","none"))},[p[4]||(p[4]=o("span",{class:"mdi"},null,-1)),o("span",null,d(a(c)("editor.icon.none_text_only")),1)],8,ty)):W("",!0),o("div",ny,[(g(!0),_(z,null,he(f.value,b=>(g(),_("section",{key:b.label},[o("small",null,d(b.label),1),o("div",sy,[(g(!0),_(z,null,he(b.icons,v=>(g(),_("button",{key:v.name,type:"button",class:"icon-choice",title:v.label,"aria-label":a(c)("editor.icon.aria",{name:v.label}),"aria-pressed":e.selected===v.name?"true":"false",onClick:y=>s("pick",v.name)},[o("span",oy,d(a(Ae)(v.cp)),1)],8,iy))),128))])]))),128)),f.value.length?W("",!0):(g(),_("p",ly,d(a(c)("editor.icon.none_found")),1))])])):W("",!0),e.note?(g(),_("small",ay,d(e.note),1)):W("",!0)]))}}),ry={class:"dr-head"},cy={class:"tx"},uy={class:"mono"},dy=["aria-label"],fy={class:"dr-body"},py={class:"f"},hy={class:"f-label",for:"tile-name"},my=["value","placeholder"],by={key:1,class:"f"},vy={class:"f-label"},gy={key:2,class:"f"},_y={class:"f-label"},yy={key:0,class:"warn"},wy={class:"f"},ky={class:"f-label"},$y={key:0},xy={key:3,class:"f"},Sy={class:"f-label"},Cy={key:4,class:"f"},Ty={class:"f-label"},Ey={key:5,class:"f"},Ay={class:"f-label"},Py={key:7,class:"f"},Oy={class:"f-label"},Iy={key:0,class:"warn"},Ly={key:8,class:"f"},My={class:"f-label"},Ry={class:"f"},Ny={class:"f-label"},Fy={class:"sw"},Dy=["aria-label","aria-pressed","onClick"],Uy={class:"dr-foot"},jy=Le({__name:"TileInspector",props:{tile:{}},setup(e){const t=e,n=k(()=>t.tile.entity.split(".")[0]),s=k(()=>qs(t.tile.entity)),i=k(()=>us(t.tile.entity)),l=k(()=>m.layout?Ot(Xe(m.layout),m.layout.pages):1),r=k(()=>Et(t.tile.slot)+1),u=le=>!m.layout?.tiles.some(ee=>Et(ee.slot)===le-1),f=k(()=>{const le=Array.from({length:Math.min(un,l.value+1)},(ee,ce)=>ce+1);return i.value>le.length&&le.push(i.value),le.map(ee=>[ee,u(ee)?c("editor.tile.goes_to.empty",{page:ee}):String(ee)])}),h=k(()=>Xa.value?i.value>l.value?{text:c("editor.tile.goes_to.no_page",{page:i.value}),warn:!0}:{text:c("editor.tile.goes_to.hint"),warn:!1}:{text:c("editor.tile.goes_to.needs_firmware"),warn:!1}),p=k(()=>!m.layout?.tiles.some(le=>xe(le)!==xe(t.tile)&&Et(le.slot)===r.value-1)),b=k(()=>{const le=Array.from({length:l.value},(ee,ce)=>[ce+1,String(ce+1)]);return l.value(i.value?["single","wide"]:["single","wide","full"]).map(le=>[le,c(`editor.tile.size.${le}`)])),y=k(()=>i.value?"":Xa.value?c("editor.tile.size.full_hint"):c("editor.tile.size.needs_firmware")),I=k(()=>m.capabilities[t.tile.entity]),T=(le,ee)=>t.tile.options?.[le]??ee,$=k(()=>T("display",n.value==="screen"?"digital":"standard")),A=k(()=>{const le=n.value==="screen"?["digital","analog"]:["standard","watch"],ee=I.value;return n.value==="weather"&&(!ee||ee.displays.includes("forecast")||$.value==="forecast")&&le.push("forecast"),n.value==="sensor"&&(!ee||ee.displays.includes("graph")||$.value==="graph")&&le.push("graph"),n.value==="sun"&&le.push("sunpath"),le.map(ce=>[ce,c(`editor.tile.display.${ce}`)])}),S=k(()=>{const le=I.value;return le&&$.value==="graph"&&!le.displays.includes("graph")?c("editor.tile.display.no_graph"):le&&$.value==="forecast"&&!le.displays.includes("forecast")?c("editor.tile.display.no_forecast"):""}),D=k(()=>T("size","single")),C=k(()=>m.inventory.controls?.[n.value]),B=k(()=>T("controls",D.value==="full"?"none":C.value?.default)),O=k(()=>{const le=I.value;return(C.value?.choices||[]).filter(ee=>!le||ee.key==="none"||ee.key===B.value||le.controls.includes(ee.key)).map(ee=>[ee.key,ee.label])}),E=k(()=>{const le=I.value;return le&&B.value!=="none"&&!le.controls.includes(B.value)?{text:c("editor.tile.controls.not_offered"),warn:!0}:{text:kn(0,2,19)?c(D.value==="full"?"editor.tile.controls.full_hint":"editor.tile.controls.wide_hint"):c("editor.tile.controls.needs_firmware"),warn:!1}}),L=k(()=>T("tap","auto")),M=k(()=>{const le=["auto","detail","none"];return((I.value?I.value.toggle:Ja.includes(n.value))||L.value==="toggle")&&le.push("toggle"),le.push("action"),le.map(ee=>[ee,c(`editor.tile.tap.${ee}`)])}),U=k(()=>L.value==="toggle"&&I.value&&!I.value.toggle?{text:c("editor.tile.tap.no_toggle"),warn:!0}:L.value==="toggle"&&!Ja.includes(n.value)&&!kn(0,2,58)?{text:c("editor.tile.tap.toggle_needs_firmware"),warn:!1}:L.value==="toggle"?{text:c("editor.tile.tap.hold"),warn:!1}:null),R=k(()=>T("inline","none")),Y=k(()=>rm.includes(n.value)&&(!I.value||I.value.inline||R.value==="slider")),te=k(()=>R.value==="slider"&&I.value&&!I.value.inline),ye=k(()=>T("history_hours",24)),re=k(()=>Object.entries(m.inventory.backgrounds||{})),be=k(()=>!!m.inventory.entities.find(le=>le.id===t.tile.entity)?.icon),ge=k(()=>!!m.inventory.icons&&(n.value!=="screen"||i.value>0)&&!["forecast","sunpath"].includes($.value));function we(le){t.tile.name=le,pt()}function Ye(){m.inspector={kind:"inspect",entity:t.tile.entity}}return(le,ee)=>(g(),_(z,null,[o("div",ry,[o("span",{class:"av mdi",style:Ue({color:a(jt)(e.tile.entity)[2],background:a(jt)(e.tile.entity)[3]})},d(a(Ae)(a(vs)(e.tile))),5),o("span",cy,[o("b",null,d(e.tile.name||s.value),1),o("small",uy,d(e.tile.entity),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:ee[0]||(ee[0]=(...ce)=>a(Ze)&&a(Ze)(...ce))},"✕",8,dy)]),o("div",fy,[o("div",py,[o("label",hy,d(a(c)("editor.tile.name")),1),o("input",{id:"tile-name",value:e.tile.name,placeholder:s.value,maxlength:"60",onInput:ee[1]||(ee[1]=ce=>we(ce.target.value))},null,40,my)]),ge.value?(g(),it(Ru,{key:0,selected:e.tile.options?.icon||"auto",automatic:a(Cn)(e.tile.entity),"auto-label":a(c)(be.value?"editor.tile.icon.auto_ha":"editor.tile.icon.auto_default"),note:a(kn)(0,2,18)?"":a(c)("editor.tile.icon.needs_firmware"),onPick:ee[2]||(ee[2]=ce=>a(mn)(e.tile,"icon",ce))},null,8,["selected","automatic","auto-label","note"])):W("",!0),i.value?(g(),_("div",by,[o("span",vy,d(a(c)("editor.tile.goes_to.label")),1),se(kt,{choices:f.value,value:i.value,onPick:ee[3]||(ee[3]=ce=>a(Em)(e.tile,Number(ce)))},null,8,["choices","value"]),o("small",{class:me({warn:h.value.warn})},d(h.value.text),3)])):(g(),_("div",gy,[o("span",_y,d(a(c)("editor.tile.display.label")),1),se(kt,{choices:A.value,value:$.value,onPick:ee[4]||(ee[4]=ce=>a(mn)(e.tile,"display",ce))},null,8,["choices","value"]),S.value?(g(),_("small",yy,d(S.value),1)):W("",!0)])),o("div",wy,[o("span",ky,d(a(c)("editor.tile.size.label")),1),se(kt,{choices:v.value,value:D.value,onPick:ee[5]||(ee[5]=ce=>a(mn)(e.tile,"size",ce))},null,8,["choices","value"]),y.value?(g(),_("small",$y,d(y.value),1)):W("",!0)]),b.value.length>1?(g(),_("div",xy,[o("span",Sy,d(a(c)("editor.tile.page.label")),1),se(kt,{choices:b.value,value:r.value,onPick:ee[6]||(ee[6]=ce=>a(Cm)(e.tile,Number(ce)-1))},null,8,["choices","value"])])):W("",!0),C.value&&D.value!=="single"&&!i.value?(g(),_("div",Cy,[o("span",Ty,d(a(c)("editor.tile.controls.label")),1),se(kt,{choices:O.value,value:B.value,onPick:ee[7]||(ee[7]=ce=>a(mn)(e.tile,"controls",ce))},null,8,["choices","value"]),o("small",{class:me({warn:E.value.warn})},d(E.value.text),3)])):W("",!0),n.value!=="screen"&&!i.value?(g(),_("div",Ey,[o("span",Ay,d(a(c)("editor.tile.tap.label")),1),se(kt,{choices:M.value,value:L.value,onPick:ee[8]||(ee[8]=ce=>a(mn)(e.tile,"tap",ce))},null,8,["choices","value"]),U.value?(g(),_("small",{key:0,class:me({warn:U.value.warn})},d(U.value.text),3)):W("",!0)])):W("",!0),n.value!=="screen"&&!i.value&&L.value==="action"?(g(),it(B_,{key:6,tile:e.tile},null,8,["tile"])):W("",!0),Y.value&&!i.value?(g(),_("div",Py,[o("span",Oy,d(a(c)("editor.tile.slider.label")),1),se(kt,{choices:[["none",a(c)("editor.tile.slider.no")],["slider",a(c)("editor.tile.slider.yes")]],value:R.value,onPick:ee[9]||(ee[9]=ce=>a(mn)(e.tile,"inline",ce))},null,8,["choices","value"]),te.value?(g(),_("small",Iy,d(a(c)("editor.tile.slider.nothing")),1)):W("",!0)])):W("",!0),n.value==="sensor"&&!i.value?(g(),_("div",Ly,[o("span",My,d(a(c)("editor.tile.history.label")),1),se(kt,{choices:[1,6,24].map(ce=>[ce,a(c)("editor.tile.history.hours",ce)]),value:ye.value,onPick:ee[10]||(ee[10]=ce=>a(mn)(e.tile,"history_hours",Number(ce)))},null,8,["choices","value"])])):W("",!0),o("div",Ry,[o("span",Ny,d(a(c)("editor.tile.background.label")),1),o("div",Fy,[(g(!0),_(z,null,he(re.value,([ce,tt])=>(g(),_("button",{key:ce,type:"button","aria-label":a(c)("editor.tile.background.aria",{name:tt.label}),"aria-pressed":(e.tile.options?.background||"auto")===ce?"true":"false",onClick:$e=>a(mn)(e.tile,"background",ce)},[o("i",{class:me(tt.color?"":ce==="none"?"none":"auto"),style:Ue(tt.color?{background:tt.color}:void 0)},null,6),Me(d(tt.label),1)],8,Dy))),128))])])]),o("div",Uy,[o("button",{type:"button",class:"btn danger",onClick:ee[11]||(ee[11]=ce=>a(xu)(e.tile))},d(a(c)("editor.common.remove")),1),ee[12]||(ee[12]=o("span",{class:"spacer"},null,-1)),n.value!=="screen"?(g(),_("button",{key:0,type:"button",class:"btn quiet",onClick:Ye},d(a(c)("editor.common.read_current_data")),1)):W("",!0)])],64))}}),Hy={class:"dr-head"},Vy={class:"av mdi",style:{background:"var(--seg)",color:"var(--ink-2)"}},Wy={class:"tx"},By=["aria-label"],Ky={class:"dr-body"},qy={class:"f"},zy={class:"f-label",for:"title"},Yy=["value","placeholder"],Gy={class:"f"},Jy={class:"f-label",id:"topbar-caption"},Xy={style:{"text-transform":"none","letter-spacing":"0","font-weight":"500"}},Zy={class:"items",id:"topbar-chips",role:"list","aria-labelledby":"topbar-caption"},Qy=["data-index","aria-label","onPointerdown","onClick","onKeydown"],e0={class:"tx"},t0=["aria-label","onClick"],n0=["disabled","title"],s0={class:"live",id:"topbar-live"},i0={class:"f"},o0={class:"f-label"},l0={class:"f"},a0={class:"f-label"},r0={href:"#settings"},c0={key:2},u0={key:0,class:"dr-foot"},d0=["disabled"],f0=["disabled"],p0=Le({__name:"TopbarInspector",props:{index:{}},setup(e){const t=e,n=k(()=>fn()),s=k(()=>n.value[t.index]),i=k(()=>(m.fontsVersion,m.now,m.topbarPreviews,gu(n.value,wu.value,m.layout?.title||jn("editor.mockup.home"),bn))),l=k(()=>i.value.dropped),r=k(()=>m.inventory.header?.min_firmware||"0.2.32"),u=k(()=>{const[Y,te,ye]=r.value.split(".").map(Number);return kn(Y,te,ye)}),f=k(()=>u.value?c(l.value.size?"editor.topbar.hint.overflow":"editor.topbar.hint.reorder"):c("editor.topbar.hint.needs_firmware",{version:r.value})),h=(Y,te)=>{const ye=bn(Y);return ye.shown?l.value.has(te)?c("editor.topbar.detail.overflow"):ye.analog?c("editor.topbar.detail.dial"):ye.text:c("editor.topbar.detail.hidden")},p=Y=>{const te=bn(Y);return te.analog||Y.type!=="entity"?zs(vu[Y.type])?.cp:te.icon},b=Y=>m.topbarAdded?.key===at(Y)&&Date.now()-m.topbarAdded.time<1200;function v(Y){m.layout&&(m.layout.title=Y,pt())}function y(Y){const te=[...n.value];te[t.index]={...te[t.index],...Y},Ds(te)}const I=k(()=>s.value?bn(s.value).shown?l.value.has(t.index)?c("editor.topbar.live.overflow"):c("editor.topbar.live.looks"):c("editor.topbar.live.hidden"):""),T=k(()=>({clock:Wi(as.value,new Date(m.now),on.value),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),on.value)})),$=ke({index:-1,active:!1,moved:!1});let A=null,S=0,D=null,C=0;function B(Y,te){Y.button!==0||Y.target.closest(".x")||(Y.pointerType!=="touch"&&Y.preventDefault(),$.value={index:te,active:!1,moved:!1},A={x:Y.clientX,y:Y.clientY},D=Y.pointerId,clearTimeout(S),Y.pointerType==="touch"&&(S=window.setTimeout(O,260)),document.addEventListener("pointermove",L),document.addEventListener("pointerup",M),document.addEventListener("pointercancel",M))}function O(){$.value.active=!0,document.addEventListener("touchmove",E,{passive:!1})}function E(Y){$.value.active&&Y.preventDefault()}function L(Y){if(Y.pointerId!==D||!A)return;if(!$.value.active){const re=Math.hypot(Y.clientX-A.x,Y.clientY-A.y);if(Y.pointerType==="touch"){re>10&&(clearTimeout(S),A=null);return}if(re<6)return;O()}const te=[...document.querySelectorAll(".items .item[data-index]")];let ye=$.value.index;if(te.forEach((re,be)=>{const ge=re.getBoundingClientRect();be<$.value.index&&Y.clientY$.value.index&&Y.clientY>ge.top+ge.height/2&&(ye=Math.max(ye,be))}),ye!==$.value.index&&m.layout){const re=[...n.value];re.splice(ye,0,...re.splice($.value.index,1)),m.layout.header={items:re};const be=t.index===$.value.index;$.value.index=ye,$.value.moved=!0,be&&Xt(ye)}}function M(Y){Y.pointerId===D&&(clearTimeout(S),document.removeEventListener("pointermove",L),document.removeEventListener("pointerup",M),document.removeEventListener("pointercancel",M),document.removeEventListener("touchmove",E),$.value.active&&(C=Date.now()+400,$.value.moved&&pt()),$.value={index:-1,active:!1,moved:!1},A=null,D=null)}function U(Y){Date.now(){const ye=Ws("i18n-t");return g(),_(z,null,[o("div",Hy,[o("span",Vy,d(s.value?a(Ae)(p(s.value)||"F0150"):a(Ae)("F0150")),1),o("span",Wy,[o("b",null,d(s.value?s.value.type==="entity"?a(qs)(s.value.entity):a(gs)(s.value):a(c)("editor.topbar.title")),1),o("small",{class:me({mono:s.value?.type==="entity"})},d(s.value?s.value.type==="entity"?s.value.entity:a(c)("editor.topbar.builtin"):a(c)("editor.topbar.items",{used:n.value.length},a(gn)())),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:te[0]||(te[0]=(...re)=>a(Ze)&&a(Ze)(...re))},"✕",8,By)]),o("div",Ky,[o("div",qy,[o("label",zy,d(a(c)("editor.topbar.name")),1),o("input",{id:"title",value:a(m).layout?.title,maxlength:"60",placeholder:a(c)("editor.topbar.name_placeholder"),onInput:te[1]||(te[1]=re=>v(re.target.value))},null,40,Yy)]),o("div",Gy,[o("span",Jy,[Me(d(a(c)("editor.topbar.right"))+" ",1),o("span",Xy," · "+d(n.value.length)+" / "+d(a(gn)()),1)]),o("div",Zy,[(g(!0),_(z,null,he(n.value,(re,be)=>(g(),_("div",{key:a(at)(re)+be,class:me(["item",{selected:be===e.index,"is-hidden":!a(bn)(re).shown,"is-overflow":l.value.has(be),"just-added":b(re),"dragging-chip":$.value.active&&$.value.index===be}]),role:"listitem",tabindex:"0","data-index":be,"aria-label":a(c)("editor.topbar.item_label",{name:a(gs)(re),slot:be+1}),onPointerdown:ge=>B(ge,be),onClick:ge=>U(be),onKeydown:ge=>R(ge,be)},[te[9]||(te[9]=o("span",{class:"grip","aria-hidden":"true"},"⋮⋮",-1)),o("span",{class:"av mdi",style:Ue(a(bn)(re).color?{color:a(bn)(re).color}:void 0)},d(p(re)?a(Ae)(p(re)):""),5),o("span",e0,[o("b",null,d(a(gs)(re)),1),o("small",null,d(h(re,be)),1)]),o("button",{type:"button",class:"x","aria-label":a(c)("editor.topbar.remove_named",{name:a(gs)(re)}),onClick:Pt(ge=>a(nr)(be),["stop"])},"✕",8,t0)],42,Qy))),128)),o("button",{type:"button",class:"ghost-btn",id:"topbar-add",disabled:n.value.length>=a(gn)(),title:n.value.length>=a(gn)()?a(c)("editor.topbar.max",a(gn)()):a(c)("editor.topbar.add_title"),onClick:te[2]||(te[2]=(...re)=>a(er)&&a(er)(...re))},d(a(c)("editor.topbar.add_button")),9,n0)]),o("small",{id:"topbar-hint",class:me({warn:l.value.size>0&&u.value})},d(f.value),3)]),s.value?(g(),_(z,{key:0},[o("div",s0,[o("small",null,d(I.value),1),se(Mu,{items:[s.value],single:""},null,8,["items"])]),s.value.type==="entity"?(g(),_(z,{key:0},[o("div",i0,[o("span",o0,d(a(c)("editor.topbar.content.label")),1),se(kt,{choices:(a(m).inventory.header?.contents||[]).map(re=>[re.key,re.label]),value:s.value.content,onPick:te[3]||(te[3]=re=>y({content:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.content.hint")),1)]),se(Ru,{selected:s.value.icon||"auto",automatic:a(m).topbarPreviews[a(at)(s.value)]?.auto_icon||a(Cn)(s.value.entity),"auto-label":a(c)("editor.topbar.auto_icon"),"allow-none":"",onPick:te[4]||(te[4]=re=>y({icon:re}))},null,8,["selected","automatic","auto-label"]),o("div",l0,[o("span",a0,d(a(c)("editor.topbar.show.label")),1),se(kt,{choices:(a(m).inventory.header?.shows||[]).map(re=>[re.key,re.label]),value:s.value.show,onPick:te[5]||(te[5]=re=>y({show:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.show.hint")),1)])],64)):s.value.type!=="date"?(g(),it(ye,{key:1,keypath:a(as)?"editor.topbar.clock_24":"editor.topbar.clock_12",tag:"small",id:"topbar-clock",scope:"global"},{settings:oe(()=>[o("a",r0,d(a(c)("editor.topbar.clock_settings")),1)]),_:1},8,["keypath"])):(g(),_("small",c0,d(a(c)("editor.topbar.date_hint",{date:T.value.date})),1))],64)):W("",!0)]),s.value?(g(),_("div",u0,[o("button",{type:"button",class:"btn danger",onClick:te[6]||(te[6]=re=>a(nr)(e.index))},d(a(c)("editor.common.remove")),1),te[10]||(te[10]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",disabled:e.index===0,onClick:te[7]||(te[7]=re=>a(bo)(e.index,e.index-1)&&a(Xt)(e.index-1))},d(a(c)("editor.topbar.up")),9,d0),o("button",{type:"button",class:"btn quiet",disabled:e.index>=n.value.length-1,onClick:te[8]||(te[8]=re=>a(bo)(e.index,e.index+1)&&a(Xt)(e.index+1))},d(a(c)("editor.topbar.down")),9,f0)])):W("",!0)],64)}}}),h0={class:"dr-head"},m0={class:"tx"},b0=["aria-label"],v0={class:"dr-body"},g0={class:"f"},_0={class:"f-label"},y0={class:"options"},w0=["disabled","onClick"],k0={class:"mdi"},$0={class:"tx"},x0={key:0,class:"f"},S0={class:"f-label"},C0={class:"options"},T0=["disabled","onClick"],E0={class:"mdi"},A0={class:"tx"},P0={class:"f"},O0={class:"f-label",for:"topbar-search"},I0=["placeholder","aria-label"],L0={class:"options"},M0=["disabled","onClick"],R0={class:"mdi"},N0={class:"tx"},F0={key:0,class:"hint"},D0={key:1,class:"hint"},U0={class:"dr-foot"},j0=Le({__name:"TopbarAdd",setup(e){const t=ke(""),n=k(()=>new Set(fn().map(at))),s=k(()=>({clock:Wi(as.value,new Date(m.now),on.value),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),on.value)})),i=k(()=>m.inventory.header?.suggestions?.[m.selected||""]||[]),l=k(()=>{const u=t.value.trim().toLocaleLowerCase();return m.inventory.entities.filter(f=>`${f.name} ${f.id} ${f.area||""} ${f.device||""}`.toLocaleLowerCase().includes(u))}),r=u=>({type:"entity",entity:u,content:"state",icon:"auto",show:"always"});return(u,f)=>(g(),_(z,null,[o("div",h0,[f[3]||(f[3]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"18px"}},"+",-1)),o("span",m0,[o("b",null,d(a(c)("editor.topbar.add.title")),1),o("small",null,d(a(c)("editor.topbar.add.slots",{used:a(fn)().length},a(gn)())),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,b0)]),o("div",v0,[o("div",g0,[o("span",_0,d(a(c)("editor.topbar.add.builtin")),1),o("div",y0,[(g(!0),_(z,null,he(a(m).inventory.header?.builtin||[],h=>(g(),_("button",{key:h.type,type:"button",class:"option",disabled:n.value.has(a(at)({type:h.type})),onClick:p=>a(vo)({type:h.type})},[o("span",k0,d(a(Ae)(a(zs)(a(vu)[h.type])?.cp||"F0150")),1),o("span",$0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)({type:h.type}))?a(c)("editor.topbar.add.added"):s.value[h.type]),1)])],8,w0))),128))])]),i.value.length?(g(),_("div",x0,[o("span",S0,d(a(c)("editor.topbar.add.suggestions")),1),o("div",C0,[(g(!0),_(z,null,he(i.value,h=>(g(),_("button",{key:a(at)(h.item),type:"button",class:"option",disabled:n.value.has(a(at)(h.item)),onClick:p=>a(vo)(h.item)},[o("span",E0,d(a(Ae)(h.icon||a(Cn)(h.item.entity))),1),o("span",A0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)(h.item))?a(c)("editor.topbar.add.added"):[h.name,h.area].filter(Boolean).join(" · ")),1)])],8,T0))),128))])])):W("",!0),o("div",P0,[o("label",O0,d(a(c)("editor.topbar.add.entity")),1),Ee(o("input",{id:"topbar-search","onUpdate:modelValue":f[1]||(f[1]=h=>t.value=h),type:"search",placeholder:a(c)("editor.topbar.add.search"),"aria-label":a(c)("editor.topbar.add.search_label")},null,8,I0),[[Je,t.value]]),o("div",L0,[(g(!0),_(z,null,he(l.value.slice(0,40),h=>(g(),_("button",{key:h.id,type:"button",class:"option",disabled:n.value.has(a(at)(r(h.id))),onClick:p=>a(vo)(r(h.id))},[o("span",R0,d(a(Ae)(a(Cn)(h.id))),1),o("span",N0,[o("strong",null,d(h.name),1),o("small",null,d([h.area,h.id].filter(Boolean).join(" · ")),1)])],8,M0))),128)),l.value.length?l.value.length>40?(g(),_("p",D0,d(a(c)("editor.common.results",l.value.length)),1)):W("",!0):(g(),_("p",F0,d(a(c)("editor.topbar.add.none_found")),1))])])]),o("div",U0,[f[4]||(f[4]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",onClick:f[2]||(f[2]=(...h)=>a(Ze)&&a(Ze)(...h))},d(a(c)("editor.common.cancel")),1)])],64))}}),H0={class:"dr-head"},V0={class:"tx"},W0=["aria-label"],B0={class:"dr-body",id:"inspector-section"},K0={id:"inspection-summary"},q0={key:0,class:"hint warn"},z0={key:1,class:"hint"},Y0={id:"inspection"},G0={class:"dr-foot"},J0=Le({__name:"InspectPanel",props:{entity:{}},setup(e){const t=e,n=ke(null),s=ke(c("editor.inspect.reading")),i=ke("");async function l(){if(m.selected){n.value=null,i.value="",s.value=c("editor.inspect.fetching");try{const u=await Nt(`screens/${encodeURIComponent(m.selected)}/inspect`),f=t.entity?u.tiles.filter(h=>h.entity===t.entity):u.tiles;n.value=f,s.value=JSON.stringify(t.entity?f[0]:u,null,2)}catch(u){i.value=u.message,s.value="",Ce(u.message)}}}const r=u=>{const f=m.layout?.tiles.find(h=>h.entity===u)?.options||{};return c("editor.inspect.options",{slider:c(f.inline==="slider"?"editor.inspect.yes":"editor.inspect.no"),display:bu(f.display||"standard"),size:am(f.size),control:nm({entity:u,options:f},m.inventory),background:m.inventory.backgrounds?.[f.background||"auto"]?.label||c("editor.inspect.background_default")})};return An(l),Ct(()=>t.entity,l),(u,f)=>(g(),_(z,null,[o("div",H0,[f[1]||(f[1]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"16px"}},"⌕",-1)),o("span",V0,[o("b",null,d(a(c)("editor.inspect.title")),1),o("small",{class:me({mono:e.entity})},d(e.entity||a(c)("editor.inspect.subtitle")),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,W0)]),o("div",B0,[o("div",K0,[i.value?(g(),_("p",q0,d(i.value),1)):n.value?W("",!0):(g(),_("p",z0,d(a(c)("editor.inspect.fetching")),1)),(g(!0),_(z,null,he(n.value||[],(h,p)=>(g(),_("article",{key:p,class:"inspection-tile"},[o("strong",null,d(h.entity),1),o("span",null,d(a(c)("editor.inspect.status",{status:h.word||h.state})),1),o("small",null,d(r(h.entity)),1)]))),128))]),o("pre",Y0,d(s.value),1)]),o("div",G0,[o("button",{type:"button",class:"btn quiet",onClick:l},d(a(c)("editor.inspect.read_again")),1),f[2]||(f[2]=o("span",{class:"spacer"},null,-1))])],64))}}),X0=["aria-hidden"],Z0=Le({__name:"Drawer",setup(e){const t=k(()=>!!(m.inspector&&(m.inspector.kind!=="tile"||co.value)));return(n,s)=>(g(),_("aside",{class:me(["drawer",{open:t.value}]),id:"tile-sheet","aria-hidden":t.value?"false":"true",onClick:s[0]||(s[0]=Pt(()=>{},["stop"]))},[a(m).inspector?(g(),_(z,{key:0},[a(m).inspector.kind==="tile"&&a(co)?(g(),it(jy,{key:0,tile:a(co)},null,8,["tile"])):a(m).inspector.kind==="bar"?(g(),it(p0,{key:1,index:a(m).inspector.index},null,8,["index"])):a(m).inspector.kind==="bar-add"?(g(),it(j0,{key:2})):a(m).inspector.kind==="inspect"?(g(),it(J0,{key:3,entity:a(m).inspector.entity},null,8,["entity"])):W("",!0)],64)):W("",!0)],10,X0))}}),Q0={class:"main-head"},e1={class:"eyebrow",id:"screen-name"},t1=["title"],n1={class:"head-right"},s1={class:"seg",role:"tablist"},i1=["aria-pressed"],o1=["aria-pressed"],l1={key:1,id:"dirty",class:"chip dirty"},a1=["disabled"],r1={key:0,class:"spin small"},c1=["aria-label","aria-expanded"],u1={key:3,class:"menu",role:"menu"},d1=["disabled","title"],f1=["disabled","aria-expanded"],p1={key:0,class:"sub"},h1=["onClick"],m1=["disabled","title"],b1={class:"body",id:"body"},v1=Le({__name:"ScreenView",setup(e){const t=k(()=>_t.value),n=k(()=>t.value.online?`${t.value.delivery} · ${t.value.status}`:c("editor.screen_view.offline")),s=k(()=>Pu(t.value)&&t.value.online&&t.value.update?.profile&&t.value.update?.host),i=k(()=>m.inventory.screens.filter(T=>T.id!==t.value.id&&T.layout?.tiles?.length)),l=ke(!1),r=ke(null);function u(){m.menuOpen=!1,l.value=!1}function f(){u(),m.overrideProfile=t.value.update?.profile||null,m.overrideFriendly=t.value.name,He("#override")}function h(){u(),m.selectedTile=null,m.inspector={kind:"inspect"}}function p(T){u(),!(m.dirty&&!confirm(c("editor.screen_view.confirm.copy")))&&Om(T)}function b(){u(),r.value?.click()}async function v(T){const $=T.target,A=$.files?.[0];$.value="",A&&(m.dirty&&!confirm(c("editor.screen_view.confirm.import"))||Lm(await A.text()))}function y(T){if(T.key==="Escape")if(m.menuOpen)u();else{if(m.palette)return;m.inspector&&!T.target?.closest?.(".picker")&&Ze()}else(T.metaKey||T.ctrlKey)&&T.key.toLowerCase()==="s"&&(T.preventDefault(),m.dirty&&Wo())}function I(T){m.menuOpen&&!T.target.closest(".head-right .menu, #more")&&u()}return An(()=>{document.addEventListener("keydown",y),document.addEventListener("click",I)}),rs(()=>{document.removeEventListener("keydown",y),document.removeEventListener("click",I)}),(T,$)=>(g(),_(z,null,[o("header",Q0,[o("div",null,[o("span",e1,d(t.value.name),1),o("h1",null,d(a(m).layout?.title||a(jn)("editor.mockup.home")),1)]),o("span",{id:"delivery",class:me(["chip",{off:!t.value.online}]),title:n.value},[$[9]||($[9]=o("span",{class:"dot"},null,-1)),Me(d(n.value),1)],10,t1),o("div",n1,[o("div",s1,[o("button",{type:"button",id:"tab-layout",role:"tab","aria-pressed":a(m).tab==="layout"?"true":"false",onClick:$[0]||($[0]=A=>a(m).tab="layout")},d(a(c)("editor.screen_view.tabs.layout")),9,i1),o("button",{type:"button",id:"tab-settings",role:"tab","aria-pressed":a(m).tab==="settings"?"true":"false",onClick:$[1]||($[1]=A=>{a(m).tab="settings",a(Ze)()})},d(a(c)("editor.screen_view.tabs.settings")),9,o1)]),a(m).dirty?(g(),_("span",l1,d(a(c)("editor.common.unsaved")),1)):(g(),_("span",{key:0,id:"dirty",class:me(["chip",{sent:a(m).saved}])},d(a(m).saved?a(c)("editor.screen_view.sent"):a(c)("editor.screen_view.all_saved")),3)),a(m).dirty?(g(),_("button",{key:2,id:"save",type:"button",class:"btn primary",disabled:a(m).busy,title:"⌘S",onClick:$[2]||($[2]=A=>a(Wo)())},[a(m).busy?(g(),_("span",r1)):W("",!0),Me(d(a(m).busy?a(c)("editor.common.saving"):a(c)("editor.common.save_send")),1)],8,a1)):W("",!0),o("button",{id:"more",type:"button",class:"icon-btn","aria-label":a(c)("editor.screen_view.more"),"aria-haspopup":"menu","aria-expanded":a(m).menuOpen?"true":"false",onClick:$[3]||($[3]=Pt(A=>{a(m).menuOpen=!a(m).menuOpen,l.value=!1},["stop"]))},"···",8,c1),a(m).menuOpen?(g(),_("div",u1,[o("button",{type:"button",role:"menuitem",id:"identify",disabled:!a(qn)(t.value)||!t.value.online,title:a(qn)(t.value)?"":a(c)("editor.screen_view.menu.identify_needs"),onClick:$[4]||($[4]=A=>{u(),a(Su)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.identify"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.identify_hint")),1)],8,d1),o("button",{type:"button",role:"menuitem",id:"inspect",onClick:h},[Me(d(a(c)("editor.common.read_current_data"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.inspect_hint")),1)]),$[12]||($[12]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"copy-layout",disabled:!i.value.length,"aria-expanded":l.value?"true":"false",onClick:$[5]||($[5]=Pt(A=>l.value=!l.value,["stop"]))},[Me(d(a(c)("editor.screen_view.menu.copy"))+" ",1),o("small",null,d(i.value.length?a(c)("editor.screen_view.menu.copy_screens",i.value.length):a(c)("editor.screen_view.menu.copy_none")),1)],8,f1),l.value?(g(),_("div",p1,[(g(!0),_(z,null,he(i.value,A=>(g(),_("button",{key:A.id,type:"button",role:"menuitem",onClick:S=>p(A.id)},[Me(d(A.name)+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.copy_tiles",A.layout.tiles.length)),1)],8,h1))),128))])):W("",!0),o("button",{type:"button",role:"menuitem",id:"export-layout",onClick:$[6]||($[6]=A=>{u(),a(Tu)()})},[Me(d(a(c)("editor.screen_view.menu.export"))+" ",1),$[10]||($[10]=o("small",null,"JSON",-1))]),o("button",{type:"button",role:"menuitem",id:"import-layout",onClick:b},[Me(d(a(c)("editor.screen_view.menu.import"))+" ",1),$[11]||($[11]=o("small",null,"JSON",-1))]),$[13]||($[13]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"open-override",disabled:!t.value.update?.profile,title:t.value.update?.profile?"":a(c)("editor.screen_view.menu.override_none"),onClick:f},[Me(d(a(c)("editor.screen_view.menu.override"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.override_hint")),1)],8,m1),o("button",{type:"button",role:"menuitem",onClick:$[7]||($[7]=A=>{u(),a(He)("#firmware")})},d(a(c)("editor.nav.firmware")),1),s.value?(g(),_("button",{key:1,type:"button",role:"menuitem",onClick:$[8]||($[8]=A=>{u(),a(Ko)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.update"))+" ",1),o("small",null,d(t.value.update?.target),1)])):W("",!0)])):W("",!0),o("input",{ref_key:"fileInput",ref:r,type:"file",accept:"application/json,.json",hidden:"",onChange:v},null,544)])]),o("div",b1,[a(m).tab==="layout"?(g(),it(Jg,{key:0})):(g(),it(p_,{key:1})),se(Z0)])],64))}}),g1={key:0,id:"choose",class:"empty"},_1={key:1,id:"empty",class:"empty"},y1=Le({__name:"EmptyState",setup(e){return(t,n)=>a(m).inventory.screens.length?(g(),_("section",g1,[n[1]||(n[1]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.choose.title")),1),o("p",null,d(a(c)("editor.empty.choose.text")),1)])):(g(),_("section",_1,[n[2]||(n[2]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.start.title")),1),o("p",null,d(a(c)("editor.empty.start.text")),1),o("button",{id:"start",type:"button",class:"btn primary",onClick:n[0]||(n[0]=s=>a(He)("#new-screen"))},d(a(c)("editor.empty.start.button")),1)]))}}),w1={class:"panel",id:"settings-view"},k1={class:"panel-head"},$1={class:"tx"},x1={class:"eyebrow"},S1={id:"settings-title"},C1={class:"card-grid"},T1={class:"card"},E1={class:"tools"},A1={class:"tx"},P1={class:"tx"},O1={key:0,class:"card updates",id:"updates"},I1={id:"updates-hint"},L1=["aria-valuenow"],M1={class:"progress-text"},R1={key:0,class:"log-lines"},N1={key:2,class:"whatsnew"},F1={class:"check"},D1=["checked"],U1={key:1,class:"card",id:"language"},j1={class:"field"},H1={class:"f-label",for:"screen-language"},V1=["value","disabled"],W1={value:"auto"},B1=["value"],K1={key:0,id:"language-ha-missing"},q1={class:"field"},z1={class:"f-label",for:"time-format"},Y1=["value","disabled"],G1={value:"auto"},J1={value:"24"},X1={value:"12"},Z1={class:"field"},Q1={class:"f-label",for:"number-format"},e2=["value","disabled"],t2={value:"auto"},n2=["value"],s2={key:0,class:"actions",id:"language-profile"},i2=["disabled"],o2={class:"card"},l2={class:"tools"},a2={class:"tx"},r2={class:"card",id:"claude"},c2={class:"actions"},u2=["disabled"],d2={id:"claude-path"},f2={class:"actions"},p2={class:"btn quiet",id:"claude-download",href:"api/claude-skill.zip",download:"esp-screens.zip"},h2="https://github.com/MaxGramser/homeassistant_espscreen/blob/main/docs/TRANSLATING.md",m2=Le({__name:"AppSettingsView",setup(e){const t=k(()=>m.inventory.updates),n=k(()=>m.inventory.screens.filter(E=>E.update?.available).length),s=k(()=>t.value?t.value.busy?c("editor.settings.updates.busy",{version:t.value.target}):m.inventory.screens.length?n.value?c("editor.settings.updates.available",{version:t.value.target},n.value):c("editor.settings.updates.current",{version:t.value.target}):c("editor.settings.updates.no_screens",{version:t.value.target}):""),i=k(()=>m.inventory.screens.find(E=>E.update?.state==="running"||m.updating.includes(E.id))),l=k(()=>i.value?Xn(i.value):null),r=k(()=>(m.firmwareJob?.logs||[]).slice(-12).join(` +`)),u=k(()=>{const E=m.inventory.changelog,L=t.value?.target;return!Array.isArray(E)||!L?[]:E.filter(M=>M.firmware===L).flatMap(M=>M.lines).slice(0,10)}),f=k(()=>m.inventory.claude_skill),h=ke(!1);async function p(){h.value=!0;try{await Wm()}finally{h.value=!1}}const b=["point","comma","space"],v=k(()=>m.inventory.language),y=k(()=>{const E=v.value,L=E?.ha?su(E.ha,E.languages.map(M=>M.code)):void 0;return E?.languages.find(M=>M.code===L)?.name}),I=k(()=>v.value?.languages.find(E=>E.code===v.value.effective&&!E.checked)),T=E=>c(E==="12"?"editor.settings.language.clock_12":"editor.settings.language.clock_24"),$=E=>lu("1234.5",E),A=Xh(),S=k(()=>{const E=v.value;return E?{...A.clock&&A.clock!==(E.clock_effective||"24")?{clock:A.clock}:{},...A.numbers&&A.numbers!==(E.numbers_effective||"point")?{numbers:A.numbers}:{}}:{}}),D=k(()=>[S.value.clock&&T(S.value.clock),S.value.numbers&&$(os[S.value.numbers])].filter(Boolean).join(" · ")),C=ke(!1);async function B(E,L){const M=L.target;C.value=!0;const U=await ar({[E]:M.value});C.value=!1,U||(M.value=String(v.value?.[E]??"auto"))}async function O(){C.value=!0,await ar(S.value),C.value=!1}return(E,L)=>{const M=Ws("i18n-t");return g(),_("div",w1,[o("div",k1,[o("div",$1,[o("span",x1,d(a(c)("editor.nav.settings")),1),o("h1",S1,d(a(c)("editor.settings.title")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-settings",onClick:L[0]||(L[0]=U=>a(He)(""))},d(a(c)("editor.settings.back")),1)]),o("div",C1,[o("section",T1,[o("h2",null,d(a(c)("editor.settings.screens.title")),1),o("p",null,d(a(c)("editor.settings.screens.text")),1),o("div",E1,[o("button",{type:"button",class:"tool",onClick:L[1]||(L[1]=U=>a(He)("#new-screen"))},[L[9]||(L[9]=o("span",{class:"tool-icon"},"+",-1)),o("span",A1,[o("b",null,d(a(c)("editor.nav.new_screen")),1),o("small",null,d(a(c)("editor.nav.new_screen_detail")),1)])]),o("button",{type:"button",class:"tool",onClick:L[2]||(L[2]=U=>a(He)("#firmware"))},[L[10]||(L[10]=o("span",{class:"tool-icon"},"⇪",-1)),o("span",P1,[o("b",null,d(a(c)("editor.nav.firmware")),1),o("small",null,d(a(c)("editor.settings.screens.firmware_detail")),1)])])])]),t.value?(g(),_("section",O1,[o("h2",null,d(a(c)("editor.settings.updates.title")),1),o("p",I1,d(s.value),1),i.value&&l.value?(g(),_(z,{key:0},[o("div",{class:"progress",role:"progressbar","aria-valuenow":l.value.percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:l.value.percent+"%"})},null,4)],8,L1),o("div",M1,[o("span",null,d(i.value.name)+" · "+d(l.value.percent)+" %",1),o("span",null,d(l.value.text),1)]),r.value?(g(),_("pre",R1,d(r.value),1)):W("",!0)],64)):W("",!0),t.value.pending&&!t.value.busy&&t.value.pending>=2?(g(),_("button",{key:1,id:"update-all",type:"button",class:"btn primary",onClick:L[3]||(L[3]=(...U)=>a(ir)&&a(ir)(...U))},d(a(c)("editor.settings.updates.all",t.value.pending)),1)):W("",!0),u.value.length&&!a(Bo)()?(g(),_("details",N1,[o("summary",null,d(a(c)("editor.settings.updates.whats_new",{version:t.value.target})),1),o("ul",null,[(g(!0),_(z,null,he(u.value,U=>(g(),_("li",{key:U},d(U),1))),128))])])):W("",!0),o("label",F1,[o("input",{type:"checkbox",id:"auto-update",checked:!!t.value.auto,onChange:L[4]||(L[4]=U=>a(Vm)(U.target.checked))},null,40,D1),o("span",null,[Me(d(a(c)("editor.settings.updates.auto_label")),1),o("small",null,d(a(c)("editor.settings.updates.auto_hint")),1)])])])):W("",!0),v.value?(g(),_("section",U1,[o("h2",null,d(a(c)("editor.settings.language.title")),1),o("div",j1,[o("label",H1,d(a(c)("editor.settings.language.screen_language")),1),o("select",{id:"screen-language",value:v.value.setting,disabled:C.value,onChange:L[5]||(L[5]=U=>B("setting",U))},[o("option",W1,d(y.value?a(c)("editor.settings.language.auto",{name:y.value}):a(c)("editor.settings.language.auto_plain")),1),(g(!0),_(z,null,he(v.value.languages,U=>(g(),_("option",{key:U.code,value:U.code},d(U.checked?U.name:a(c)("editor.settings.language.unchecked",{name:U.name})),9,B1))),128))],40,V1),v.value.setting==="auto"&&!y.value?(g(),_("small",K1,d(a(c)("editor.settings.language.ha_missing")),1)):W("",!0),I.value?(g(),it(M,{key:1,keypath:"editor.settings.language.help",tag:"small",id:"language-help",scope:"global"},{name:oe(()=>[Me(d(I.value.name),1)]),guide:oe(()=>[o("a",{href:h2,target:"_blank",rel:"noopener"},d(a(c)("editor.settings.language.guide")),1)]),_:1})):W("",!0),o("small",null,d(a(c)("editor.settings.language.update_hint")),1)]),o("div",q1,[o("label",z1,d(a(c)("editor.settings.language.time")),1),o("select",{id:"time-format",value:v.value.clock||"auto",disabled:C.value,onChange:L[6]||(L[6]=U=>B("clock",U))},[o("option",G1,d(a(c)("editor.settings.language.time_auto",{clock:T(v.value.clock_auto||v.value.clock_effective)})),1),o("option",J1,d(T("24")),1),o("option",X1,d(T("12")),1)],40,Y1)]),o("div",Z1,[o("label",Q1,d(a(c)("editor.settings.language.numbers")),1),o("select",{id:"number-format",value:v.value.numbers||"auto",disabled:C.value,onChange:L[7]||(L[7]=U=>B("numbers",U))},[o("option",t2,d(a(c)("editor.settings.language.numbers_auto",{example:$(a(qm))})),1),(g(),_(z,null,he(b,U=>o("option",{key:U,value:U},d($(a(os)[U])),9,n2)),64))],40,e2)]),D.value?(g(),_("div",s2,[o("small",null,d(a(c)("editor.settings.language.profile",{formats:D.value})),1),o("button",{type:"button",class:"btn quiet mini",disabled:C.value,onClick:O},d(a(c)("editor.settings.language.use_profile")),9,i2)])):W("",!0),o("small",null,d(a(c)("editor.settings.language.editor_hint")),1)])):W("",!0),o("section",o2,[o("h2",null,d(a(c)("editor.nav.alerts")),1),o("p",null,d(a(c)("editor.settings.alerts.text")),1),o("div",l2,[o("button",{type:"button",class:"tool",onClick:L[8]||(L[8]=U=>a(He)("#alerts"))},[L[11]||(L[11]=o("span",{class:"tool-icon"},"!",-1)),o("span",a2,[o("b",null,d(a(c)("editor.nav.alerts")),1),o("small",null,d(a(c)("editor.settings.alerts.detail")),1)])])])]),o("section",r2,[L[12]||(L[12]=o("h2",null,"Claude",-1)),o("p",null,d(a(c)("editor.settings.claude.text")),1),o("div",c2,[o("button",{type:"button",id:"claude-install",class:me(["btn",f.value?.installed&&f.value.current?"quiet":"primary"]),disabled:!f.value||h.value,onClick:p},d(!f.value||!f.value.installed?a(c)("editor.settings.claude.install"):f.value.current?a(c)("editor.settings.claude.install_again"):a(c)("editor.settings.claude.update")),11,u2),o("span",{id:"claude-status",class:me(["chip",f.value&&f.value.installed?f.value.current?"good":"update":""]),role:"status"},d(f.value?f.value.installed?f.value.current?a(c)("editor.settings.claude.installed_chip"):a(c)("editor.settings.claude.newer"):a(c)("editor.settings.claude.not_installed"):a(c)("editor.common.loading")),3)]),se(M,{keypath:"editor.settings.claude.writes",tag:"small",scope:"global"},{path:oe(()=>[o("code",d2,d(f.value?.path||"/homeassistant/.claude/skills/esp-screens"),1)]),_:1}),o("div",f2,[o("a",p2,d(a(c)("editor.settings.claude.download")),1),o("small",null,d(a(c)("editor.settings.claude.upload")),1)])])])])}}}),b2={class:"panel",id:"installer"},v2={class:"panel-head"},g2={class:"tx"},_2={class:"eyebrow"},y2={id:"install-title"},w2={key:0},k2=["aria-label"],$2={class:"boards"},x2={class:"board"},S2={class:"board"},C2={class:"field"},T2={class:"f-label",for:"friendly_name"},E2=["placeholder"],A2={class:"node-line"},P2={id:"node-preview"},O2={key:0,class:"field",id:"node-label"},I2={class:"f-label",for:"node-name"},L2={key:1,id:"wifi-fields",class:"wifi"},M2={class:"hint",id:"wifi-status"},R2={key:0,class:"field",id:"wifi-ssid-label"},N2={class:"f-label",for:"wifi_ssid"},F2={key:1,class:"field",id:"wifi-password-label"},D2={class:"f-label",for:"wifi_password"},U2={class:"field"},j2={class:"f-label",for:"install-target"},H2={key:0,value:"usb"},V2=["value"],W2={value:"download"},B2={value:""},K2={id:"target-hint"},q2={key:2,class:"hint",id:"install-note"},z2={class:"actions"},Y2=["disabled"],G2={id:"install-status",class:"status-line error",role:"status"},J2={key:1,id:"install-progress",class:"card"},X2={class:"progress-head"},Z2={key:0,class:"spin",id:"progress-spin"},Q2={id:"progress-title"},ew={id:"progress-detail"},tw={key:0,id:"install-download",class:"card",style:{background:"var(--surface-2)"}},nw=["href","download"],sw={class:"steps",id:"download-steps"},iw={key:1,id:"install-result",class:"field"},ow={class:"key-box"},lw={class:"steps",id:"install-steps"},aw=["open"],rw={id:"install-log",class:"log"},cw={class:"actions"},uw="https://web.esphome.io/?dashboard_install",dw=Le({__name:"InstallerView",setup(e){const t=zn({board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),n=zn({view:"setup",file:null,friendly:"",board:"cyd",target:"",apiKey:null,nodeEdited:!1,jobState:null,picked:!1,action:null}),s=ke(!1),i=ke(null),l=ke(null),r=ke([]),u=ke(""),f=ke(""),h=ke(!1),p=ke(!1),b=ke(null);let v=0;function y($e){return $e.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^[^a-z]+/,"").slice(0,30).replace(/-+$/,"")||"screen"}function I($e){const K=$e.replace(/^\/dev\/serial\/by-id\/usb-/,"").replace(/-if\d+(-port\d+)?$/,"").replace(/_/g," ");return`USB · ${K===$e?$e.replace(/^\/dev\//,""):K}`}Ct(()=>t.friendly_name,()=>{n.nodeEdited||(t.name=y(t.friendly_name))});const T=k(()=>t.name||"…"),$=k(()=>i.value?.ports||[]),A=k(()=>i.value?.wifi),S=k(()=>A.value?.state==="new"||A.value?.state==="missing"),D=k(()=>A.value?.missing||[]),C=k(()=>c(A.value?.state==="new"?"editor.installer.wifi.new":"editor.installer.wifi.missing")),B=k(()=>A.value?.state==="ready"?c("editor.installer.wifi.ready"):A.value?.state==="invalid"?c("editor.installer.wifi.invalid"):""),O=k(()=>c(t.target==="usb"?"editor.installer.target.usb":t.target==="download"?"editor.installer.target.download":t.target?$.value.length>1?"editor.installer.target.several":"editor.installer.target.once":"editor.installer.target.later")),E=k(()=>t.target==="download"?c("editor.firmware.build_download"):t.target?c("editor.installer.install"):c("editor.installer.save_profile")),L=k(()=>i.value?.job?.state==="running"&&!(n.file&&i.value.job.file===n.file)),M=k(()=>h.value||A.value?.state==="invalid"||t.target==="usb"||!!t.target&&(L.value||!i.value?.available));function U(){const $e=t.target;($e==="download"||$e===""?n.picked:$.value.includes($e))||(t.target=$.value[0]||"usb")}async function R(){let $e;try{$e=await Nt("firmware")}catch(ie){u.value=ie.message;return}i.value=$e;const K=$e.job,ne=K&&n.file&&K.file===n.file;if(ne&&(n.jobState=K.state),n.view==="setup"){if(ne&&K.state==="running"){Y(K,$e.logs||[]);return}U(),u.value=L.value?c("editor.installer.busy",{file:K.file}):!$e.available&&t.target?c("editor.installer.no_cli"):B.value}else n.view==="progress"&&ne&&(l.value=K,r.value=$e.logs||[],K.state!=="running"&&K.state!=="success"&&(p.value=!0))}function Y($e,K){n.view="progress",n.jobState=$e.state,n.action=$e.action,l.value=$e,r.value=K}const te=k(()=>l.value?.state==="running"),ye=k(()=>n.view==="done"||l.value?.state==="success"),re=k(()=>n.action==="download"),be=k(()=>c(n.view==="done"?"editor.installer.title.saved":te.value?"editor.installer.title.running":ye.value?re.value?"editor.installer.title.ready":"editor.installer.title.done":"editor.installer.title.failed")),ge=k(()=>n.view==="done"?c("editor.installer.progress.saved",{file:n.file}):te.value?l.value?.stage==="upload"?c("editor.installer.progress.writing",{name:n.friendly}):c("editor.installer.progress.building"):ye.value?re.value?c("editor.installer.progress.ready",{name:n.friendly}):c("editor.installer.progress.installed",{name:n.friendly}):c(re.value?"editor.installer.progress.build_failed":"editor.installer.progress.install_failed")),we=k(()=>n.view==="done"?c("editor.installer.detail.saved"):te.value?l.value?.stage==="upload"?c("editor.installer.detail.uploading"):c(re.value?"editor.installer.detail.building_download":"editor.installer.detail.building"):ye.value?re.value?c("editor.installer.detail.downloaded"):c(n.board==="cyd"?"editor.installer.detail.booted_cyd":"editor.installer.detail.booted"):r.value.filter($e=>/error/i.test($e)).pop()||r.value.filter($e=>/failed/i.test($e)).pop()||c("editor.installer.detail.see_log")),Ye=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.file||"")}/download`,name:(n.file||"").replace(/\.yaml$/,"")+".factory.bin"}));async function le($e){const K=$e.target;if(n.nodeEdited||(t.name=y(t.friendly_name)),!!K.reportValidity()){h.value=!0,f.value="";try{const ne={board:t.board,friendly_name:t.friendly_name,name:t.name,target:t.target};S.value&&(D.value.includes("wifi_ssid")&&(ne.wifi_ssid=t.wifi_ssid),D.value.includes("wifi_password")&&(ne.wifi_password=t.wifi_password));const ie=await ft("firmware/profiles","POST",ne);Object.assign(n,{file:ie.file,apiKey:ie.api_key,friendly:t.friendly_name.trim(),board:t.board,target:t.target}),t.wifi_password="",ie.job?Y(ie.job,[]):n.view="done"}catch(ne){f.value=ne.message}finally{h.value=!1}}}async function ee(){try{if(!re.value){const{ports:K}=await Nt("firmware");!K.includes(n.target)&&K.length===1&&(n.target=K[0])}const $e=await ft("firmware/jobs","POST",re.value?{file:n.file,action:"download"}:{file:n.file,action:"install",target:n.target});Y($e,[])}catch($e){Ce($e.message)}}function ce(){Object.assign(n,{view:"setup",file:null,apiKey:null,nodeEdited:!1,jobState:null,target:"",picked:!1,action:null}),Object.assign(t,{board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),s.value=!1,l.value=null,r.value=[],f.value="",u.value="",p.value=!1,R()}function tt(){n.view==="progress"&&n.jobState!=="running"&&(n.view="done"),He("")}return An(()=>{R(),v=window.setInterval(R,3e3)}),rs(()=>clearInterval(v)),($e,K)=>{const ne=Ws("i18n-t");return g(),_("div",b2,[o("div",v2,[o("div",g2,[o("span",_2,d(a(c)("editor.nav.new_screen")),1),o("h1",y2,d(n.view==="setup"?a(c)("editor.installer.title.setup"):be.value),1),n.view==="setup"?(g(),_("p",w2,d(a(c)("editor.installer.intro")),1)):W("",!0)]),o("button",{type:"button",class:"btn quiet",id:"close-install","aria-label":a(c)("editor.common.close"),onClick:tt},d(a(c)("editor.common.back")),9,k2)]),n.view==="setup"?(g(),_("form",{key:0,id:"install-form",class:"card",onSubmit:Pt(le,["prevent"])},[o("fieldset",null,[o("legend",null,d(a(c)("editor.installer.board")),1),o("div",$2,[o("label",x2,[Ee(o("input",{type:"radio",name:"board",value:"cyd","onUpdate:modelValue":K[0]||(K[0]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_cyd")),1),K[13]||(K[13]=o("small",null,"ESP32-2432S028 · 320 × 240",-1))])]),o("label",S2,[Ee(o("input",{type:"radio",name:"board",value:"guition","onUpdate:modelValue":K[1]||(K[1]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_guition")),1),K[14]||(K[14]=o("small",null,"ESP32-S3-4848S040 · 480 × 480 · GT911",-1))])])])]),o("div",C2,[o("label",T2,d(a(c)("editor.installer.name")),1),Ee(o("input",{id:"friendly_name",name:"friendly_name","onUpdate:modelValue":K[2]||(K[2]=ie=>t.friendly_name=ie),required:"",maxlength:"60",placeholder:a(c)("editor.installer.name_placeholder"),autocomplete:"off"},null,8,E2),[[Je,t.friendly_name]]),o("small",A2,[Me(d(a(c)("editor.installer.device_name"))+" ",1),o("code",P2,d(T.value),1),o("button",{type:"button",class:"btn link mini",id:"edit-node",onClick:K[3]||(K[3]=ie=>{n.nodeEdited=!0,s.value=!0})},d(a(c)("editor.installer.customize")),1)]),o("small",null,d(a(c)("editor.installer.name_hint")),1)]),s.value?(g(),_("div",O2,[o("label",I2,d(a(c)("editor.installer.device_name")),1),Ee(o("input",{id:"node-name",name:"name","onUpdate:modelValue":K[4]||(K[4]=ie=>t.name=ie),pattern:"[a-z][a-z0-9\\-]{0,29}",maxlength:"30",autocomplete:"off",onInput:K[5]||(K[5]=ie=>n.nodeEdited=!0)},null,544),[[Je,t.name]]),o("small",null,d(a(c)("editor.installer.device_name_hint")),1)])):W("",!0),S.value?(g(),_("fieldset",L2,[o("legend",null,d(a(c)("editor.installer.wifi.title")),1),o("p",M2,d(C.value),1),D.value.includes("wifi_ssid")?(g(),_("div",R2,[o("label",N2,d(a(c)("editor.installer.wifi.ssid")),1),Ee(o("input",{id:"wifi_ssid",name:"wifi_ssid","onUpdate:modelValue":K[6]||(K[6]=ie=>t.wifi_ssid=ie),autocomplete:"off"},null,512),[[Je,t.wifi_ssid]])])):W("",!0),D.value.includes("wifi_password")?(g(),_("div",F2,[o("label",D2,d(a(c)("editor.installer.wifi.password")),1),Ee(o("input",{id:"wifi_password",name:"wifi_password",type:"password","onUpdate:modelValue":K[7]||(K[7]=ie=>t.wifi_password=ie),autocomplete:"new-password"},null,512),[[Je,t.wifi_password]])])):W("",!0)])):W("",!0),o("div",U2,[o("label",j2,d(a(c)("editor.installer.install_via")),1),Ee(o("select",{id:"install-target",name:"target","onUpdate:modelValue":K[8]||(K[8]=ie=>t.target=ie),onChange:K[9]||(K[9]=ie=>{n.picked=!0,R()})},[$.value.length?W("",!0):(g(),_("option",H2,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(z,null,he($.value,ie=>(g(),_("option",{key:ie,value:ie},d(I(ie)),9,V2))),128)),o("option",W2,d(a(c)("editor.firmware.download_target")),1),o("option",B2,d(a(c)("editor.installer.later")),1)],544),[[Wn,t.target]]),o("small",K2,d(O.value),1)]),u.value?(g(),_("p",q2,d(u.value),1)):W("",!0),o("div",z2,[o("button",{type:"submit",class:"btn primary",id:"install-go",disabled:M.value},d(E.value),9,Y2),o("span",G2,d(f.value),1)])],32)):(g(),_("div",J2,[o("div",X2,[te.value?(g(),_("span",Z2)):(g(),_("span",{key:1,class:me(["outcome",ye.value?"ok":"bad"]),id:"progress-mark"},d(ye.value?"✓":"✕"),3)),o("strong",Q2,d(ge.value),1)]),o("p",ew,d(we.value),1),ye.value&&re.value&&n.view!=="done"?(g(),_("div",tw,[o("a",{class:"btn primary",id:"download-firmware",href:Ye.value.href,download:Ye.value.name},d(a(c)("editor.firmware.download_file",{name:Ye.value.name})),9,nw),o("ol",sw,[o("li",null,[se(ne,{keypath:"editor.installer.download_steps.plug",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.plug_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.download_steps.open",scope:"global"},{bold:oe(()=>[o("b",null,[se(ne,{keypath:"editor.installer.download_steps.open_bold",scope:"global"},{esphome_web:oe(()=>[o("a",{href:uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])]),_:1})]),o("li",null,[se(ne,{keypath:n.board==="cyd"?"editor.installer.download_steps.install_cyd":"editor.installer.download_steps.install",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.install_bold")),1)]),file:oe(()=>[Me(d(Ye.value.name),1)]),_:1},8,["keypath"])])]),o("small",null,d(a(c)("editor.installer.download_keep")),1)])):W("",!0),ye.value?(g(),_("div",iw,[o("div",ow,[o("span",null,d(a(c)("editor.installer.api_key")),1),o("code",{id:"api-key",ref_key:"keyBox",ref:b},d(n.apiKey||""),513),o("button",{type:"button",class:"btn quiet mini",id:"copy-key",onClick:K[10]||(K[10]=ie=>a(It)(n.apiKey||"",b.value))},d(a(c)("editor.common.copy")),1)]),o("ol",lw,[o("li",null,[se(ne,{keypath:"editor.installer.pairing.ha",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.ha_bold")),1)]),name:oe(()=>[Me(d(n.friendly),1)]),_:1}),K[15]||(K[15]=Me()),o("button",{type:"button",class:"btn quiet mini",onClick:K[11]||(K[11]=(...ie)=>a(ki)&&a(ki)(...ie))},d(a(c)("editor.common.open_integrations")),1)]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.key",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.key_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.actions",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.actions_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.tiles",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.tiles_bold")),1)]),_:1})])])])):W("",!0),n.view!=="done"?(g(),_("details",{key:2,id:"install-log-wrap",class:"log-wrap",open:p.value,onToggle:K[12]||(K[12]=ie=>p.value=ie.target.open)},[o("summary",null,d(a(c)("editor.installer.log")),1),o("pre",rw,d(r.value.join(` +`)),1)],40,aw)):W("",!0),o("div",cw,[!te.value&&!ye.value?(g(),_("button",{key:0,type:"button",class:"btn primary",id:"install-retry",onClick:ee},d(a(c)("editor.installer.retry")),1)):W("",!0),o("button",{type:"button",class:"btn quiet",id:"install-close",onClick:ce},d(ye.value?a(c)("editor.installer.another"):a(c)("editor.installer.start_over")),1),o("button",{type:"button",class:me(["btn",ye.value?"primary":"quiet"]),onClick:tt},d(ye.value?a(c)("editor.installer.done"):a(c)("editor.common.close")),3)])]))])}}}),fw={class:"panel",id:"firmware-dialog"},pw={class:"panel-head"},hw={class:"tx"},mw={class:"eyebrow"},bw={class:"card"},vw={class:"card-grid"},gw={class:"field"},_w={class:"f-label",for:"firmware-file"},yw=["value"],ww={class:"field"},kw={class:"f-label",for:"firmware-port"},$w={value:"ota"},xw={key:0,value:"usb"},Sw=["value"],Cw={value:"download"},Tw={key:0,class:"field",id:"firmware-host-label"},Ew={class:"f-label",for:"firmware-host"},Aw=["placeholder"],Pw={class:"actions"},Ow=["disabled"],Iw=["disabled"],Lw=["disabled"],Mw={key:0,class:"spin"},Rw={id:"firmware-status",class:"status-line",role:"status"},Nw={key:0,id:"firmware-download",class:"card",style:{background:"var(--surface-2)"}},Fw=["href","download"],Dw={id:"firmware-log",class:"log"},Uw="https://web.esphome.io/?dashboard_install",jw=Le({__name:"FirmwareView",setup(e){const t=ke(null),n=ke(""),s=ke("ota"),i=ke("");let l=0;async function r(T=!1){try{const $=await Nt("firmware");t.value=$,(T||!n.value)&&(n.value=$.profiles[0]?.file||"");const A=$.ports||[];s.value.startsWith("/")&&!A.includes(s.value)&&(s.value=A[0]||"usb"),s.value==="usb"&&A.length&&(s.value=A[0])}catch($){Ce($.message)}}const u=k(()=>t.value?.job?.state==="running"),f=k(()=>!t.value||u.value||!t.value.available||!t.value.profiles?.length),h=k(()=>f.value||s.value==="usb"),p=k(()=>t.value?.ports||[]),b=k(()=>t.value?t.value.available?t.value.job?`${t.value.job.file} · ${t.value.job.action} · ${t.value.job.state}`:c("editor.firmware.choose"):c("editor.firmware.no_cli"):c("editor.common.loading")),v=k(()=>s.value==="download"&&!!n.value&&!!t.value?.downloads?.includes(n.value)),y=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.value)}/download`,name:n.value.replace(/\.yaml$/,"")+".factory.bin"}));async function I(T){try{await ft("firmware/jobs","POST",{file:n.value,action:T==="validate"?"validate":T==="build"?"build":s.value==="download"?"download":"install",target:s.value==="ota"?i.value.trim():s.value==="download"?"":s.value}),await r()}catch($){Ce($.message)}}return An(()=>{r(!0),l=window.setInterval(()=>r(),3e3)}),rs(()=>clearInterval(l)),(T,$)=>{const A=Ws("i18n-t");return g(),_("div",fw,[o("div",pw,[o("div",hw,[o("span",mw,d(a(c)("editor.nav.firmware")),1),o("h1",null,d(a(c)("editor.firmware.title")),1),se(A,{keypath:"editor.firmware.intro",tag:"p",scope:"global"},{ota:oe(()=>[o("b",null,d(a(c)("editor.firmware.ota")),1)]),download:oe(()=>[o("b",null,d(a(c)("editor.firmware.download")),1)]),check:oe(()=>[o("b",null,d(a(c)("editor.firmware.check")),1)]),build:oe(()=>[o("b",null,d(a(c)("editor.firmware.build")),1)]),install:oe(()=>[o("b",null,d(a(c)("editor.firmware.install")),1)]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-firmware",onClick:$[0]||($[0]=S=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",bw,[o("div",vw,[o("div",gw,[o("label",_w,d(a(c)("editor.firmware.profile")),1),Ee(o("select",{id:"firmware-file","onUpdate:modelValue":$[1]||($[1]=S=>n.value=S)},[(g(!0),_(z,null,he(t.value?.profiles||[],S=>(g(),_("option",{key:S.file,value:S.file},d(S.file),9,yw))),128))],512),[[Wn,n.value]])]),o("div",ww,[o("label",kw,d(a(c)("editor.firmware.install_to")),1),Ee(o("select",{id:"firmware-port","onUpdate:modelValue":$[2]||($[2]=S=>s.value=S)},[o("option",$w,d(a(c)("editor.firmware.ota")),1),p.value.length?W("",!0):(g(),_("option",xw,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(z,null,he(p.value,S=>(g(),_("option",{key:S,value:S},d(S),9,Sw))),128)),o("option",Cw,d(a(c)("editor.firmware.download_target")),1)],512),[[Wn,s.value]])]),s.value==="ota"?(g(),_("div",Tw,[o("label",Ew,d(a(c)("editor.firmware.host")),1),Ee(o("input",{id:"firmware-host","onUpdate:modelValue":$[3]||($[3]=S=>i.value=S),placeholder:n.value?n.value.replace(/\.yaml$/,".local"):"screen-livingroom.local"},null,8,Aw),[[Je,i.value]])])):W("",!0)]),o("div",Pw,[o("button",{type:"button",class:"btn quiet",id:"firmware-validate",disabled:f.value,onClick:$[4]||($[4]=S=>I("validate"))},d(a(c)("editor.firmware.check")),9,Ow),o("button",{type:"button",class:"btn quiet",id:"firmware-build",disabled:f.value,onClick:$[5]||($[5]=S=>I("build"))},d(a(c)("editor.firmware.build")),9,Iw),o("button",{type:"button",class:"btn primary",id:"firmware-install",disabled:h.value,onClick:$[6]||($[6]=S=>I("install"))},d(s.value==="download"?a(c)("editor.firmware.build_download"):a(c)("editor.firmware.install")),9,Lw),u.value?(g(),_("span",Mw)):W("",!0)]),o("p",Rw,d(b.value),1),v.value?(g(),_("div",Nw,[o("a",{class:"btn primary",id:"firmware-download-link",href:y.value.href,download:y.value.name},d(a(c)("editor.firmware.download_file",{name:y.value.name})),9,Fw),se(A,{keypath:"editor.firmware.download_how",tag:"small",scope:"global"},{esphome_web:oe(()=>[o("a",{href:Uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])):W("",!0)]),o("pre",Dw,d((t.value?.logs||[]).join(` +`)),1)])}}}),Hw={class:"panel wide alerts",id:"alerts-dialog"},Vw={class:"panel-head"},Ww={class:"tx"},Bw={class:"eyebrow"},Kw={key:0,class:"hint"},qw={class:"alert-hero"},zw={class:"alert-mock",id:"alert-mock","aria-hidden":"true"},Yw={class:"mdi alert-mock-icon",id:"alert-mock-icon"},Gw={id:"alert-mock-title"},Jw={id:"alert-mock-subtitle"},Xw={class:"fake",id:"alert-mock-button"},Zw=["aria-label"],Qw=["data-jump","onClick"],ek={id:"alerts-try",class:"card"},tk={class:"field"},nk={class:"f-label",for:"try-screen"},sk={value:"all"},ik=["value","disabled"],ok={class:"field"},lk={class:"f-label",for:"try-title"},ak={class:"field"},rk={class:"f-label",for:"try-subtitle"},ck={class:"field"},uk={class:"f-label",for:"try-icon"},dk={id:"try-icons"},fk=["value"],pk={class:"field"},hk={class:"f-label",for:"try-color"},mk={value:""},bk=["value"],vk={class:"field"},gk={class:"f-label",for:"try-button"},_k={class:"field"},yk={class:"f-label",for:"try-timeout"},wk={class:"check field"},kk={class:"actions field wide"},$k=["disabled"],xk={class:"status-line",id:"try-result",role:"status"},Sk={id:"alerts-screens",class:"card"},Ck={id:"alerts-min-firmware"},Tk={id:"alerts-screen-list",class:"options"},Ek={key:0,class:"hint"},Ak={class:"alert-screen-head"},Pk={class:"copy-label"},Ok=["onClick"],Ik={id:"alerts-howto",class:"card"},Lk={class:"steps"},Mk={class:"field"},Rk={class:"f-label",for:"alerts-example-screen"},Nk=["value"],Fk={key:0,value:""},Dk={class:"copy-line"},Uk={id:"alerts-example"},jk={id:"alerts-all",class:"card"},Hk={id:"alerts-all-event"},Vk={id:"alerts-all-dismiss"},Wk={class:"copy-line"},Bk={id:"alerts-all-example"},Kk={id:"alerts-fields",class:"card"},qk={class:"table-scroll"},zk={id:"alerts-field-table"},Yk={key:0},Gk={id:"alerts-icons",class:"card"},Jk={class:"subhead"},Xk={class:"chips",id:"alerts-suggested"},Zk=["onClick"],Qk={class:"mdi"},e3={class:"field"},t3={class:"f-label",for:"alerts-icon-search"},n3=["placeholder"],s3={id:"alerts-icon-groups"},i3={class:"subhead"},o3={class:"alert-icon-grid"},l3=["title","onClick"],a3={class:"mdi"},r3={key:0},c3={key:0,class:"hint"},u3={id:"alerts-colors",class:"card"},d3={class:"swatches",id:"alerts-swatches"},f3=["onClick"],p3={id:"alerts-behaviour",class:"card"},h3={class:"alerts-list"},m3={id:"alerts-events",class:"card"},b3={id:"alerts-event-name"},v3={class:"table-scroll"},g3={id:"alerts-ending-table"},_3={class:"subhead"},y3={class:"copy-line"},w3={id:"alerts-wait-example"},k3={id:"alerts-tips",class:"card"},$3={class:"alerts-list"},x3=Le({__name:"AlertsView",setup(e){const t=k(()=>m.inventory.alerts),n=zn({screen:"all",title:c("editor.alerts.example.title"),subtitle:c("editor.alerts.example.subtitle"),icon:"doorbell",color:"orange",button_text:c("editor.alerts.example.button"),timeout:30,flash:!0}),s=ke(!1),i=ke(""),l=k(()=>m.inventory.screens.filter(L=>qn(L)&&L.online));async function r(){s.value=!0,i.value="";try{const{screen:L,...M}=n,U=await Am(L,M),R=m.inventory.screens.find(te=>te.id===L)?.name,Y=L==="all"?c("editor.alerts.try.sent_all",U.sent):R?c("editor.alerts.try.sent_to",{name:R}):c("editor.alerts.try.sent_one");i.value=U.sent?[Y,U.skipped?c("editor.alerts.try.skipped",U.skipped):"",U.unusable?.length?c("editor.alerts.try.left_empty",{fields:U.unusable.join(", ")}):""].filter(Boolean).join(" "):c("editor.alerts.try.nothing",{version:t.value?.min_firmware||"0.2.31"})}catch(L){i.value=L.message}finally{s.value=!1}}const u=k(()=>m.inventory.icons),f=ke(""),h=ke(""),p=L=>`"${String(L).replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,b=L=>L.type==="string"?/^[a-z][a-z0-9-]*$/.test(L.example)?L.example:p(L.example):L.example===!0?"true":L.example===!1?"false":String(L.example),v=k(()=>m.inventory.screens.filter(L=>L.alert_action)),y=k(()=>f.value||v.value[0]?.alert_action||""),I=k(()=>{const L=(t.value?.fields||[]).map(M=>` ${M.name}: ${b(M)}`);return`action: ${y.value||"esphome._show_alert"} data: ${L.join(` `)}`}),T=(L,M)=>p((t.value?.fields||[]).find(U=>U.name===L)?.example||M),$=k(()=>[`# ${c("editor.alerts.wait_yaml.comment")}`,"actions:",` - action: ${y.value||"esphome._show_alert"}`," data:",` title: ${T("title","Someone is at the door")}`,` subtitle: ${T("subtitle","Door 3, back")}`," icon: doorbell"," color: orange",` button_text: ${T("button_text","Coming")}`," timeout: 0"," flash: true"," - wait_for_trigger:"," - trigger: event",` event_type: ${t.value?.event||"esphome.screen_alert"}`," event_data:"," action: ok",' timeout: "00:05:00"'," - if:"," - condition: template",' value_template: "{{ wait.trigger is not none }}"'," then:"," - action: notify.notify"," data:",` message: ${p(c("editor.alerts.wait_yaml.message"))}`].join(` `)),A=k(()=>{const L=(t.value?.fields||[]).map(U=>` ${U.name}: ${b(U)}`),M=t.value?.camera;return M&&L.push(` # ${M.name}: ${M.example} # a Guition shows its picture on the card`),`event: ${t.value?.broadcast?.show||"esp_screens_show_alert"} event_data: ${L.join(` -`)}`}),S=k(()=>{if(!t.value||!u.value)return[];const L=h.value.trim().toLowerCase();return[...u.value.groups,{label:c("editor.alerts.icons.extra"),icons:t.value.extra_icons}].map(U=>({label:U.label,icons:U.icons.filter(R=>!L||R.name.includes(L)||(R.label||"").toLowerCase().includes(L))})).filter(U=>U.icons.length)}),D=k(()=>t.value?.suggested_icons?.find(L=>L.name==="doorbell")),C=k(()=>t.value?.colors?.find(L=>L.name==="orange")),B=L=>["string","int","bool"].includes(L)?c(`editor.alerts.fields.types.${L}`):L;function O(L){document.getElementById(L)?.scrollIntoView({behavior:"smooth",block:"start"})}const E=["alerts-try","alerts-screens","alerts-howto","alerts-all","alerts-fields","alerts-icons","alerts-colors","alerts-behaviour","alerts-events","alerts-tips"];return(L,M)=>{const U=Ws("i18n-t");return g(),_("div",Hw,[o("div",Vw,[o("div",Ww,[o("span",Bw,d(a(c)("editor.alerts.eyebrow")),1),o("h1",null,d(a(c)("editor.alerts.title")),1),se(U,{keypath:"editor.alerts.intro",tag:"p",scope:"global"},{action:oe(()=>[...M[15]||(M[15]=[o("code",null,"show_alert",-1)])]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-alerts",onClick:M[0]||(M[0]=R=>a(He)(""))},d(a(c)("editor.common.back")),1)]),t.value?(g(),_(z,{key:1},[o("div",qw,[o("div",zw,[o("div",{class:"alert-mock-card",style:Ue(C.value?{background:C.value.color}:void 0)},[o("span",Yw,d(D.value?a(Ae)(D.value.cp):""),1),o("strong",Gw,d(a(c)("editor.alerts.example.title")),1),o("span",Jw,d(a(c)("editor.alerts.example.subtitle")),1),o("span",Xw,d(a(c)("editor.alerts.example.button")),1)],4)]),o("nav",{class:"alerts-nav","aria-label":a(c)("editor.alerts.sections")},[(g(),_(z,null,he(E,R=>o("button",{key:R,type:"button","data-jump":R,onClick:Y=>O(R)},d(a(c)(`editor.alerts.nav.${R.slice(7)}`)),9,Qw)),64))],8,Zw)]),o("section",ek,[o("h2",null,d(a(c)("editor.alerts.nav.try")),1),o("p",null,d(a(c)("editor.alerts.try.text")),1),o("form",{class:"try-grid",onSubmit:Pt(r,["prevent"])},[o("div",tk,[o("label",nk,d(a(c)("editor.alerts.try.screen")),1),Ee(o("select",{id:"try-screen","onUpdate:modelValue":M[1]||(M[1]=R=>n.screen=R)},[o("option",sk,d(a(c)("editor.alerts.try.all",{ready:l.value.length})),1),(g(!0),_(z,null,he(a(m).inventory.screens,R=>(g(),_("option",{key:R.id,value:R.id,disabled:!a(Kn)(R)||!R.online},d(a(Kn)(R)&&R.online?R.name:a(c)("editor.alerts.try.not_ready",{name:R.name})),9,ik))),128))],512),[[Vn,n.screen]])]),o("div",ok,[o("label",lk,d(a(c)("editor.alerts.try.title")),1),Ee(o("input",{id:"try-title","onUpdate:modelValue":M[2]||(M[2]=R=>n.title=R),maxlength:"64"},null,512),[[Je,n.title]])]),o("div",ak,[o("label",rk,d(a(c)("editor.alerts.try.subtitle")),1),Ee(o("input",{id:"try-subtitle","onUpdate:modelValue":M[3]||(M[3]=R=>n.subtitle=R),maxlength:"240"},null,512),[[Je,n.subtitle]])]),o("div",ck,[o("label",uk,d(a(c)("editor.alerts.try.icon")),1),Ee(o("input",{id:"try-icon","onUpdate:modelValue":M[4]||(M[4]=R=>n.icon=R),list:"try-icons",placeholder:"doorbell"},null,512),[[Je,n.icon]]),o("datalist",dk,[(g(!0),_(z,null,he(t.value.suggested_icons,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label||R.name),9,fk))),128))])]),o("div",pk,[o("label",hk,d(a(c)("editor.alerts.try.color")),1),Ee(o("select",{id:"try-color","onUpdate:modelValue":M[5]||(M[5]=R=>n.color=R)},[o("option",mk,d(a(c)("editor.alerts.white")),1),(g(!0),_(z,null,he(t.value.colors,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label),9,bk))),128))],512),[[Vn,n.color]])]),o("div",vk,[o("label",gk,d(a(c)("editor.alerts.try.button")),1),Ee(o("input",{id:"try-button","onUpdate:modelValue":M[6]||(M[6]=R=>n.button_text=R),maxlength:"16"},null,512),[[Je,n.button_text]])]),o("div",_k,[o("label",yk,d(a(c)("editor.alerts.try.timeout")),1),Ee(o("input",{id:"try-timeout","onUpdate:modelValue":M[7]||(M[7]=R=>n.timeout=R),type:"number",min:"0",max:"86400"},null,512),[[Je,n.timeout,void 0,{number:!0}]])]),o("label",wk,[Ee(o("input",{type:"checkbox",id:"try-flash","onUpdate:modelValue":M[8]||(M[8]=R=>n.flash=R)},null,512),[[Xf,n.flash]]),o("span",null,[Me(d(a(c)("editor.alerts.try.flash")),1),o("small",null,d(a(c)("editor.alerts.try.flash_hint")),1)])]),o("div",kk,[o("button",{type:"submit",class:"btn primary",id:"try-send",disabled:s.value||!l.value.length},d(s.value?a(c)("editor.alerts.try.sending"):a(c)("editor.alerts.try.send")),9,$k),o("span",xk,d(i.value),1)])],32)]),o("section",Sk,[o("h2",null,d(a(c)("editor.alerts.nav.screens")),1),se(U,{keypath:"editor.alerts.screens.text",tag:"p",scope:"global"},{version:oe(()=>[o("code",Ck,d(t.value.min_firmware),1)]),_:1}),o("div",Tk,[a(m).inventory.screens.length?W("",!0):(g(),_("p",Ek,d(a(c)("editor.alerts.screens.none")),1)),(g(!0),_(z,null,he(a(m).inventory.screens,R=>(g(),_("div",{key:R.id,class:"alert-screen"},[o("div",Ak,[o("strong",null,d(R.name),1),o("span",{class:me(["chip",a(un)(a(os)(R),t.value.min_firmware)&&R.alert_action?"good":"update"])},d(a(un)(a(os)(R),t.value.min_firmware)&&R.alert_action?a(c)("editor.alerts.screens.ready",{version:R.firmware}):R.alert_action?a(c)("editor.alerts.screens.update",{version:R.firmware||a(c)("editor.common.unknown")}):a(c)("editor.alerts.screens.unknown")),3)]),(g(!0),_(z,null,he([[a(c)("editor.alerts.screens.show"),R.alert_action],[a(c)("editor.alerts.screens.dismiss"),R.dismiss_action]],([Y,te])=>(g(),_("div",{key:Y,class:"copy-line"},[o("span",Pk,d(Y),1),o("code",null,d(te||"esphome._show_alert"),1),te?(g(),_("button",{key:0,type:"button",class:"btn quiet mini",onClick:ye=>a(It)(te,void 0,"action_name")},d(a(c)("editor.common.copy")),9,Ok)):W("",!0)]))),128))]))),128))])]),o("section",Ik,[o("h2",null,d(a(c)("editor.alerts.nav.howto")),1),o("ol",Lk,[se(U,{keypath:"editor.alerts.howto.add",tag:"li",scope:"global"},{add:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.add_bold")),1)]),esphome:oe(()=>[...M[16]||(M[16]=[o("b",null,"ESPHome",-1)])]),device:oe(()=>[o("i",null,d(a(c)("editor.alerts.howto.device")),1)]),_:1}),se(U,{keypath:"editor.alerts.howto.fields",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.fields_bold")),1)]),empty:oe(()=>[...M[17]||(M[17]=[o("code",null,'""',-1)])]),zero:oe(()=>[...M[18]||(M[18]=[o("code",null,"0",-1)])]),_:1}),se(U,{keypath:"editor.alerts.howto.yaml",tag:"li",scope:"global"},{edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1})]),o("div",Mk,[o("label",Rk,d(a(c)("editor.alerts.howto.example_for")),1),Ee(o("select",{id:"alerts-example-screen","onUpdate:modelValue":M[9]||(M[9]=R=>f.value=R),style:{"max-width":"360px"}},[(g(!0),_(z,null,he(v.value,R=>(g(),_("option",{key:R.id,value:R.alert_action},d(R.name),9,Nk))),128)),v.value.length?W("",!0):(g(),_("option",Fk,d(a(c)("editor.alerts.howto.no_screen")),1))],512),[[Vn,f.value]])]),o("div",Dk,[o("pre",Uk,d(I.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-example-copy",onClick:M[10]||(M[10]=R=>a(It)(I.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",jk,[o("h2",null,d(a(c)("editor.alerts.all.title")),1),se(U,{keypath:"editor.alerts.all.text",tag:"p",scope:"global"},{show:oe(()=>[o("code",Hk,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),dismiss:oe(()=>[o("code",Vk,d(t.value.broadcast?.dismiss||"esp_screens_dismiss_alert"),1)]),event:oe(()=>[o("b",null,d(a(c)("editor.alerts.all.event")),1)]),edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1}),o("div",Wk,[o("pre",Bk,d(A.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-all-copy",onClick:M[11]||(M[11]=R=>a(It)(A.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",Kk,[o("h2",null,d(a(c)("editor.alerts.nav.fields")),1),o("p",null,d(a(c)("editor.alerts.fields.text")),1),o("div",qk,[o("table",zk,[o("tr",null,[o("th",null,d(a(c)("editor.alerts.fields.field")),1),o("th",null,d(a(c)("editor.alerts.fields.type")),1),o("th",null,d(a(c)("editor.alerts.fields.what")),1),o("th",null,d(a(c)("editor.alerts.fields.example")),1),o("th",null,d(a(c)("editor.alerts.fields.limit")),1)]),(g(!0),_(z,null,he(t.value.fields,R=>(g(),_("tr",{key:R.name},[o("td",null,[o("code",null,d(R.name),1),o("small",null,d(R.label),1)]),o("td",null,d(B(R.type)),1),o("td",null,d(R.help),1),o("td",null,[o("code",null,d(typeof R.example=="string"?R.example:String(R.example)),1)]),o("td",null,d(t.value.limits.cyd[R.name]?a(c)("editor.alerts.fields.bytes",{cyd:t.value.limits.cyd[R.name],guition:t.value.limits.guition[R.name]}):R.type==="int"?a(c)("editor.alerts.fields.seconds"):"—"),1)]))),128)),t.value.camera?(g(),_("tr",Yk,[o("td",null,[o("code",null,d(t.value.camera.name),1),o("small",null,d(t.value.camera.label),1)]),o("td",null,d(a(c)("editor.alerts.fields.types.entity")),1),o("td",null,d(t.value.camera.help),1),o("td",null,[o("code",null,d(t.value.camera.example),1)]),o("td",null,d(a(c)("editor.alerts.fields.camera_limit")),1)])):W("",!0)])])]),o("section",Gk,[o("h2",null,d(a(c)("editor.alerts.nav.icons")),1),se(U,{keypath:"editor.alerts.icons.text",tag:"p",scope:"global"},{field:oe(()=>[...M[19]||(M[19]=[o("code",null,"icon",-1)])]),example:oe(()=>[...M[20]||(M[20]=[o("code",null,"doorbell",-1)])]),mdi:oe(()=>[...M[21]||(M[21]=[o("code",null,"mdi:doorbell",-1)])]),hex:oe(()=>[...M[22]||(M[22]=[o("code",null,"F12E6",-1)])]),_:1}),o("p",Jk,d(a(c)("editor.alerts.icons.handy")),1),o("div",Xk,[(g(!0),_(z,null,he(t.value.suggested_icons,R=>(g(),_("button",{key:R.name,type:"button",class:"chip",onClick:Y=>a(It)(R.name,void 0,"icon_name")},[o("span",Qk,d(a(Ae)(R.cp)),1),o("code",null,d(R.name),1)],8,Zk))),128))]),o("div",e3,[o("label",t3,d(a(c)("editor.alerts.icons.search_label")),1),Ee(o("input",{id:"alerts-icon-search","onUpdate:modelValue":M[12]||(M[12]=R=>h.value=R),type:"search",placeholder:a(c)("editor.alerts.icons.search"),autocomplete:"off"},null,8,n3),[[Je,h.value]])]),o("div",s3,[(g(!0),_(z,null,he(S.value,R=>(g(),_("div",{key:R.label,class:"field"},[o("p",i3,d(R.label)+" · "+d(R.icons.length),1),o("div",o3,[(g(!0),_(z,null,he(R.icons,Y=>(g(),_("button",{key:Y.name,type:"button",class:"alert-icon",title:a(c)("editor.alerts.icons.copy",{name:Y.name}),onClick:te=>a(It)(Y.name,void 0,"icon_name")},[o("span",a3,d(a(Ae)(Y.cp)),1),o("code",null,d(Y.name),1),Y.label?(g(),_("small",r3,d(Y.label),1)):W("",!0)],8,l3))),128))])]))),128)),S.value.length?W("",!0):(g(),_("p",c3,d(a(c)("editor.alerts.icons.none",{query:h.value,fallback:t.value.fallback_icon})),1))])]),o("section",u3,[o("h2",null,d(a(c)("editor.alerts.nav.colors")),1),se(U,{keypath:"editor.alerts.colors.text",tag:"p",scope:"global"},{field:oe(()=>[...M[23]||(M[23]=[o("code",null,"color",-1)])]),_:1}),o("div",d3,[o("button",{type:"button",class:"swatch",onClick:M[13]||(M[13]=R=>a(It)("",void 0,"empty_color"))},[M[25]||(M[25]=o("i",{style:{background:"#ffffff"}},null,-1)),o("span",null,[M[24]||(M[24]=o("code",null,"empty",-1)),o("small",null,d(a(c)("editor.alerts.white")),1)])]),(g(!0),_(z,null,he(t.value.colors,R=>(g(),_("button",{key:R.name,type:"button",class:"swatch",onClick:Y=>a(It)(R.name,void 0,"color_name")},[o("i",{style:Ue({background:R.color})},null,4),o("span",null,[o("code",null,d(R.name),1),o("small",null,d(R.label)+" · "+d(R.color),1)])],8,f3))),128))])]),o("section",p3,[o("h2",null,d(a(c)("editor.alerts.nav.behaviour")),1),o("ul",h3,[se(U,{keypath:"editor.alerts.behaviour.wakes",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.wakes_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.on",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.on_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.timeout",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.timeout_bold")),1)]),zero:oe(()=>[...M[26]||(M[26]=[o("code",null,"timeout: 0",-1)])]),minute:oe(()=>[...M[27]||(M[27]=[o("code",null,"timeout: 60",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.blinking",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.blinking_bold")),1)]),flash:oe(()=>[...M[28]||(M[28]=[o("code",null,"flash: true",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.replacing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.replacing_bold")),1)]),replaced:oe(()=>[...M[29]||(M[29]=[o("code",null,"replaced",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.closing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.closing_bold")),1)]),dismiss:oe(()=>[...M[30]||(M[30]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.beside",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.beside_bold")),1)]),_:1})])]),o("section",m3,[o("h2",null,d(a(c)("editor.alerts.nav.events")),1),se(U,{keypath:"editor.alerts.events.text",tag:"p",scope:"global"},{event:oe(()=>[o("code",b3,d(t.value.event),1)]),action:oe(()=>[...M[31]||(M[31]=[o("code",null,"action",-1)])]),title:oe(()=>[...M[32]||(M[32]=[o("code",null,"title",-1)])]),screen:oe(()=>[...M[33]||(M[33]=[o("code",null,"screen",-1)])]),device_id:oe(()=>[...M[34]||(M[34]=[o("code",null,"device_id",-1)])]),_:1}),o("div",v3,[o("table",g3,[o("tr",null,[M[35]||(M[35]=o("th",null,"action",-1)),o("th",null,d(a(c)("editor.alerts.events.when")),1)]),(g(!0),_(z,null,he(t.value.endings,R=>(g(),_("tr",{key:R.action},[o("td",null,[o("code",null,d(R.action),1)]),o("td",null,d(R.label),1)]))),128))])]),o("p",_3,d(a(c)("editor.alerts.events.wait")),1),o("div",y3,[o("pre",w3,d($.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-wait-copy",onClick:M[14]||(M[14]=R=>a(It)($.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",k3,[o("h2",null,d(a(c)("editor.alerts.nav.tips")),1),o("ul",$3,[se(U,{keypath:"editor.alerts.tips.color",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.color_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.short",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.short_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.button",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.button_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.resolve",tag:"li",scope:"global"},{dismiss:oe(()=>[...M[36]||(M[36]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.every",tag:"li",scope:"global"},{event:oe(()=>[o("code",null,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),screen:oe(()=>[...M[37]||(M[37]=[o("code",null,"screen",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.claude",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.claude_bold")),1)]),_:1})])])],64)):(g(),_("p",Kw,d(a(c)("editor.alerts.loading")),1))])}}}),S3={class:"panel",id:"override-dialog"},C3={class:"panel-head"},T3={class:"tx"},E3={class:"eyebrow"},A3={id:"override-title"},P3={class:"notice"},O3={class:"mdi"},I3={class:"file-row"},L3={id:"override-file"},M3={class:"yaml-editor",id:"yaml-editor-wrap"},R3=["aria-label"],N3={class:"actions"},F3={id:"override-count",class:"hint"},D3={class:"actions"},U3=["disabled"],j3=["disabled"],H3=`# Hardware-specific changes for this screen. +`)}`}),S=k(()=>{if(!t.value||!u.value)return[];const L=h.value.trim().toLowerCase();return[...u.value.groups,{label:c("editor.alerts.icons.extra"),icons:t.value.extra_icons}].map(U=>({label:U.label,icons:U.icons.filter(R=>!L||R.name.includes(L)||(R.label||"").toLowerCase().includes(L))})).filter(U=>U.icons.length)}),D=k(()=>t.value?.suggested_icons?.find(L=>L.name==="doorbell")),C=k(()=>t.value?.colors?.find(L=>L.name==="orange")),B=L=>["string","int","bool"].includes(L)?c(`editor.alerts.fields.types.${L}`):L;function O(L){document.getElementById(L)?.scrollIntoView({behavior:"smooth",block:"start"})}const E=["alerts-try","alerts-screens","alerts-howto","alerts-all","alerts-fields","alerts-icons","alerts-colors","alerts-behaviour","alerts-events","alerts-tips"];return(L,M)=>{const U=Ws("i18n-t");return g(),_("div",Hw,[o("div",Vw,[o("div",Ww,[o("span",Bw,d(a(c)("editor.alerts.eyebrow")),1),o("h1",null,d(a(c)("editor.alerts.title")),1),se(U,{keypath:"editor.alerts.intro",tag:"p",scope:"global"},{action:oe(()=>[...M[15]||(M[15]=[o("code",null,"show_alert",-1)])]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-alerts",onClick:M[0]||(M[0]=R=>a(He)(""))},d(a(c)("editor.common.back")),1)]),t.value?(g(),_(z,{key:1},[o("div",qw,[o("div",zw,[o("div",{class:"alert-mock-card",style:Ue(C.value?{background:C.value.color}:void 0)},[o("span",Yw,d(D.value?a(Ae)(D.value.cp):""),1),o("strong",Gw,d(a(c)("editor.alerts.example.title")),1),o("span",Jw,d(a(c)("editor.alerts.example.subtitle")),1),o("span",Xw,d(a(c)("editor.alerts.example.button")),1)],4)]),o("nav",{class:"alerts-nav","aria-label":a(c)("editor.alerts.sections")},[(g(),_(z,null,he(E,R=>o("button",{key:R,type:"button","data-jump":R,onClick:Y=>O(R)},d(a(c)(`editor.alerts.nav.${R.slice(7)}`)),9,Qw)),64))],8,Zw)]),o("section",ek,[o("h2",null,d(a(c)("editor.alerts.nav.try")),1),o("p",null,d(a(c)("editor.alerts.try.text")),1),o("form",{class:"try-grid",onSubmit:Pt(r,["prevent"])},[o("div",tk,[o("label",nk,d(a(c)("editor.alerts.try.screen")),1),Ee(o("select",{id:"try-screen","onUpdate:modelValue":M[1]||(M[1]=R=>n.screen=R)},[o("option",sk,d(a(c)("editor.alerts.try.all",{ready:l.value.length})),1),(g(!0),_(z,null,he(a(m).inventory.screens,R=>(g(),_("option",{key:R.id,value:R.id,disabled:!a(qn)(R)||!R.online},d(a(qn)(R)&&R.online?R.name:a(c)("editor.alerts.try.not_ready",{name:R.name})),9,ik))),128))],512),[[Wn,n.screen]])]),o("div",ok,[o("label",lk,d(a(c)("editor.alerts.try.title")),1),Ee(o("input",{id:"try-title","onUpdate:modelValue":M[2]||(M[2]=R=>n.title=R),maxlength:"64"},null,512),[[Je,n.title]])]),o("div",ak,[o("label",rk,d(a(c)("editor.alerts.try.subtitle")),1),Ee(o("input",{id:"try-subtitle","onUpdate:modelValue":M[3]||(M[3]=R=>n.subtitle=R),maxlength:"240"},null,512),[[Je,n.subtitle]])]),o("div",ck,[o("label",uk,d(a(c)("editor.alerts.try.icon")),1),Ee(o("input",{id:"try-icon","onUpdate:modelValue":M[4]||(M[4]=R=>n.icon=R),list:"try-icons",placeholder:"doorbell"},null,512),[[Je,n.icon]]),o("datalist",dk,[(g(!0),_(z,null,he(t.value.suggested_icons,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label||R.name),9,fk))),128))])]),o("div",pk,[o("label",hk,d(a(c)("editor.alerts.try.color")),1),Ee(o("select",{id:"try-color","onUpdate:modelValue":M[5]||(M[5]=R=>n.color=R)},[o("option",mk,d(a(c)("editor.alerts.white")),1),(g(!0),_(z,null,he(t.value.colors,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label),9,bk))),128))],512),[[Wn,n.color]])]),o("div",vk,[o("label",gk,d(a(c)("editor.alerts.try.button")),1),Ee(o("input",{id:"try-button","onUpdate:modelValue":M[6]||(M[6]=R=>n.button_text=R),maxlength:"16"},null,512),[[Je,n.button_text]])]),o("div",_k,[o("label",yk,d(a(c)("editor.alerts.try.timeout")),1),Ee(o("input",{id:"try-timeout","onUpdate:modelValue":M[7]||(M[7]=R=>n.timeout=R),type:"number",min:"0",max:"86400"},null,512),[[Je,n.timeout,void 0,{number:!0}]])]),o("label",wk,[Ee(o("input",{type:"checkbox",id:"try-flash","onUpdate:modelValue":M[8]||(M[8]=R=>n.flash=R)},null,512),[[Xf,n.flash]]),o("span",null,[Me(d(a(c)("editor.alerts.try.flash")),1),o("small",null,d(a(c)("editor.alerts.try.flash_hint")),1)])]),o("div",kk,[o("button",{type:"submit",class:"btn primary",id:"try-send",disabled:s.value||!l.value.length},d(s.value?a(c)("editor.alerts.try.sending"):a(c)("editor.alerts.try.send")),9,$k),o("span",xk,d(i.value),1)])],32)]),o("section",Sk,[o("h2",null,d(a(c)("editor.alerts.nav.screens")),1),se(U,{keypath:"editor.alerts.screens.text",tag:"p",scope:"global"},{version:oe(()=>[o("code",Ck,d(t.value.min_firmware),1)]),_:1}),o("div",Tk,[a(m).inventory.screens.length?W("",!0):(g(),_("p",Ek,d(a(c)("editor.alerts.screens.none")),1)),(g(!0),_(z,null,he(a(m).inventory.screens,R=>(g(),_("div",{key:R.id,class:"alert-screen"},[o("div",Ak,[o("strong",null,d(R.name),1),o("span",{class:me(["chip",a(dn)(a(ls)(R),t.value.min_firmware)&&R.alert_action?"good":"update"])},d(a(dn)(a(ls)(R),t.value.min_firmware)&&R.alert_action?a(c)("editor.alerts.screens.ready",{version:R.firmware}):R.alert_action?a(c)("editor.alerts.screens.update",{version:R.firmware||a(c)("editor.common.unknown")}):a(c)("editor.alerts.screens.unknown")),3)]),(g(!0),_(z,null,he([[a(c)("editor.alerts.screens.show"),R.alert_action],[a(c)("editor.alerts.screens.dismiss"),R.dismiss_action]],([Y,te])=>(g(),_("div",{key:Y,class:"copy-line"},[o("span",Pk,d(Y),1),o("code",null,d(te||"esphome._show_alert"),1),te?(g(),_("button",{key:0,type:"button",class:"btn quiet mini",onClick:ye=>a(It)(te,void 0,"action_name")},d(a(c)("editor.common.copy")),9,Ok)):W("",!0)]))),128))]))),128))])]),o("section",Ik,[o("h2",null,d(a(c)("editor.alerts.nav.howto")),1),o("ol",Lk,[se(U,{keypath:"editor.alerts.howto.add",tag:"li",scope:"global"},{add:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.add_bold")),1)]),esphome:oe(()=>[...M[16]||(M[16]=[o("b",null,"ESPHome",-1)])]),device:oe(()=>[o("i",null,d(a(c)("editor.alerts.howto.device")),1)]),_:1}),se(U,{keypath:"editor.alerts.howto.fields",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.fields_bold")),1)]),empty:oe(()=>[...M[17]||(M[17]=[o("code",null,'""',-1)])]),zero:oe(()=>[...M[18]||(M[18]=[o("code",null,"0",-1)])]),_:1}),se(U,{keypath:"editor.alerts.howto.yaml",tag:"li",scope:"global"},{edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1})]),o("div",Mk,[o("label",Rk,d(a(c)("editor.alerts.howto.example_for")),1),Ee(o("select",{id:"alerts-example-screen","onUpdate:modelValue":M[9]||(M[9]=R=>f.value=R),style:{"max-width":"360px"}},[(g(!0),_(z,null,he(v.value,R=>(g(),_("option",{key:R.id,value:R.alert_action},d(R.name),9,Nk))),128)),v.value.length?W("",!0):(g(),_("option",Fk,d(a(c)("editor.alerts.howto.no_screen")),1))],512),[[Wn,f.value]])]),o("div",Dk,[o("pre",Uk,d(I.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-example-copy",onClick:M[10]||(M[10]=R=>a(It)(I.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",jk,[o("h2",null,d(a(c)("editor.alerts.all.title")),1),se(U,{keypath:"editor.alerts.all.text",tag:"p",scope:"global"},{show:oe(()=>[o("code",Hk,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),dismiss:oe(()=>[o("code",Vk,d(t.value.broadcast?.dismiss||"esp_screens_dismiss_alert"),1)]),event:oe(()=>[o("b",null,d(a(c)("editor.alerts.all.event")),1)]),edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1}),o("div",Wk,[o("pre",Bk,d(A.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-all-copy",onClick:M[11]||(M[11]=R=>a(It)(A.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",Kk,[o("h2",null,d(a(c)("editor.alerts.nav.fields")),1),o("p",null,d(a(c)("editor.alerts.fields.text")),1),o("div",qk,[o("table",zk,[o("tr",null,[o("th",null,d(a(c)("editor.alerts.fields.field")),1),o("th",null,d(a(c)("editor.alerts.fields.type")),1),o("th",null,d(a(c)("editor.alerts.fields.what")),1),o("th",null,d(a(c)("editor.alerts.fields.example")),1),o("th",null,d(a(c)("editor.alerts.fields.limit")),1)]),(g(!0),_(z,null,he(t.value.fields,R=>(g(),_("tr",{key:R.name},[o("td",null,[o("code",null,d(R.name),1),o("small",null,d(R.label),1)]),o("td",null,d(B(R.type)),1),o("td",null,d(R.help),1),o("td",null,[o("code",null,d(typeof R.example=="string"?R.example:String(R.example)),1)]),o("td",null,d(t.value.limits.cyd[R.name]?a(c)("editor.alerts.fields.bytes",{cyd:t.value.limits.cyd[R.name],guition:t.value.limits.guition[R.name]}):R.type==="int"?a(c)("editor.alerts.fields.seconds"):"—"),1)]))),128)),t.value.camera?(g(),_("tr",Yk,[o("td",null,[o("code",null,d(t.value.camera.name),1),o("small",null,d(t.value.camera.label),1)]),o("td",null,d(a(c)("editor.alerts.fields.types.entity")),1),o("td",null,d(t.value.camera.help),1),o("td",null,[o("code",null,d(t.value.camera.example),1)]),o("td",null,d(a(c)("editor.alerts.fields.camera_limit")),1)])):W("",!0)])])]),o("section",Gk,[o("h2",null,d(a(c)("editor.alerts.nav.icons")),1),se(U,{keypath:"editor.alerts.icons.text",tag:"p",scope:"global"},{field:oe(()=>[...M[19]||(M[19]=[o("code",null,"icon",-1)])]),example:oe(()=>[...M[20]||(M[20]=[o("code",null,"doorbell",-1)])]),mdi:oe(()=>[...M[21]||(M[21]=[o("code",null,"mdi:doorbell",-1)])]),hex:oe(()=>[...M[22]||(M[22]=[o("code",null,"F12E6",-1)])]),_:1}),o("p",Jk,d(a(c)("editor.alerts.icons.handy")),1),o("div",Xk,[(g(!0),_(z,null,he(t.value.suggested_icons,R=>(g(),_("button",{key:R.name,type:"button",class:"chip",onClick:Y=>a(It)(R.name,void 0,"icon_name")},[o("span",Qk,d(a(Ae)(R.cp)),1),o("code",null,d(R.name),1)],8,Zk))),128))]),o("div",e3,[o("label",t3,d(a(c)("editor.alerts.icons.search_label")),1),Ee(o("input",{id:"alerts-icon-search","onUpdate:modelValue":M[12]||(M[12]=R=>h.value=R),type:"search",placeholder:a(c)("editor.alerts.icons.search"),autocomplete:"off"},null,8,n3),[[Je,h.value]])]),o("div",s3,[(g(!0),_(z,null,he(S.value,R=>(g(),_("div",{key:R.label,class:"field"},[o("p",i3,d(R.label)+" · "+d(R.icons.length),1),o("div",o3,[(g(!0),_(z,null,he(R.icons,Y=>(g(),_("button",{key:Y.name,type:"button",class:"alert-icon",title:a(c)("editor.alerts.icons.copy",{name:Y.name}),onClick:te=>a(It)(Y.name,void 0,"icon_name")},[o("span",a3,d(a(Ae)(Y.cp)),1),o("code",null,d(Y.name),1),Y.label?(g(),_("small",r3,d(Y.label),1)):W("",!0)],8,l3))),128))])]))),128)),S.value.length?W("",!0):(g(),_("p",c3,d(a(c)("editor.alerts.icons.none",{query:h.value,fallback:t.value.fallback_icon})),1))])]),o("section",u3,[o("h2",null,d(a(c)("editor.alerts.nav.colors")),1),se(U,{keypath:"editor.alerts.colors.text",tag:"p",scope:"global"},{field:oe(()=>[...M[23]||(M[23]=[o("code",null,"color",-1)])]),_:1}),o("div",d3,[o("button",{type:"button",class:"swatch",onClick:M[13]||(M[13]=R=>a(It)("",void 0,"empty_color"))},[M[25]||(M[25]=o("i",{style:{background:"#ffffff"}},null,-1)),o("span",null,[M[24]||(M[24]=o("code",null,"empty",-1)),o("small",null,d(a(c)("editor.alerts.white")),1)])]),(g(!0),_(z,null,he(t.value.colors,R=>(g(),_("button",{key:R.name,type:"button",class:"swatch",onClick:Y=>a(It)(R.name,void 0,"color_name")},[o("i",{style:Ue({background:R.color})},null,4),o("span",null,[o("code",null,d(R.name),1),o("small",null,d(R.label)+" · "+d(R.color),1)])],8,f3))),128))])]),o("section",p3,[o("h2",null,d(a(c)("editor.alerts.nav.behaviour")),1),o("ul",h3,[se(U,{keypath:"editor.alerts.behaviour.wakes",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.wakes_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.on",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.on_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.timeout",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.timeout_bold")),1)]),zero:oe(()=>[...M[26]||(M[26]=[o("code",null,"timeout: 0",-1)])]),minute:oe(()=>[...M[27]||(M[27]=[o("code",null,"timeout: 60",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.blinking",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.blinking_bold")),1)]),flash:oe(()=>[...M[28]||(M[28]=[o("code",null,"flash: true",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.replacing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.replacing_bold")),1)]),replaced:oe(()=>[...M[29]||(M[29]=[o("code",null,"replaced",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.closing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.closing_bold")),1)]),dismiss:oe(()=>[...M[30]||(M[30]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.beside",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.beside_bold")),1)]),_:1})])]),o("section",m3,[o("h2",null,d(a(c)("editor.alerts.nav.events")),1),se(U,{keypath:"editor.alerts.events.text",tag:"p",scope:"global"},{event:oe(()=>[o("code",b3,d(t.value.event),1)]),action:oe(()=>[...M[31]||(M[31]=[o("code",null,"action",-1)])]),title:oe(()=>[...M[32]||(M[32]=[o("code",null,"title",-1)])]),screen:oe(()=>[...M[33]||(M[33]=[o("code",null,"screen",-1)])]),device_id:oe(()=>[...M[34]||(M[34]=[o("code",null,"device_id",-1)])]),_:1}),o("div",v3,[o("table",g3,[o("tr",null,[M[35]||(M[35]=o("th",null,"action",-1)),o("th",null,d(a(c)("editor.alerts.events.when")),1)]),(g(!0),_(z,null,he(t.value.endings,R=>(g(),_("tr",{key:R.action},[o("td",null,[o("code",null,d(R.action),1)]),o("td",null,d(R.label),1)]))),128))])]),o("p",_3,d(a(c)("editor.alerts.events.wait")),1),o("div",y3,[o("pre",w3,d($.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-wait-copy",onClick:M[14]||(M[14]=R=>a(It)($.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",k3,[o("h2",null,d(a(c)("editor.alerts.nav.tips")),1),o("ul",$3,[se(U,{keypath:"editor.alerts.tips.color",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.color_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.short",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.short_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.button",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.button_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.resolve",tag:"li",scope:"global"},{dismiss:oe(()=>[...M[36]||(M[36]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.every",tag:"li",scope:"global"},{event:oe(()=>[o("code",null,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),screen:oe(()=>[...M[37]||(M[37]=[o("code",null,"screen",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.claude",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.claude_bold")),1)]),_:1})])])],64)):(g(),_("p",Kw,d(a(c)("editor.alerts.loading")),1))])}}}),S3={class:"panel",id:"override-dialog"},C3={class:"panel-head"},T3={class:"tx"},E3={class:"eyebrow"},A3={id:"override-title"},P3={class:"notice"},O3={class:"mdi"},I3={class:"file-row"},L3={id:"override-file"},M3={class:"yaml-editor",id:"yaml-editor-wrap"},R3=["aria-label"],N3={class:"actions"},F3={id:"override-count",class:"hint"},D3={class:"actions"},U3=["disabled"],j3=["disabled"],H3=`# Hardware-specific changes for this screen. # This file is kept when the shared firmware package updates. # Do not add esphome:, api:, ota:, wifi: or packages: here. @@ -22,7 +22,7 @@ display: `,V3=Le({__name:"OverrideView",setup(e){const t=k(()=>m.overrideProfile),n=ke(""),s=ke(""),i=ke(!1),l=ke(c("editor.common.loading")),r=ke(""),u=ke(!1),f=ke(null),h=ke(null),p=k(()=>n.value.split(` `).length),b=k(()=>Array.from({length:p.value},(O,E)=>E+1).join(` `)),v=k(()=>`${c("editor.override.characters",n.value.length)} · ${c("editor.override.lines",p.value)}`);let y=!0;function I(O,E=""){l.value=O,r.value=E}async function T(){if(!t.value){I(c("editor.override.no_profile"),"error");return}I(c("editor.common.loading"));try{const O=await Nt(`firmware/profiles/${encodeURIComponent(t.value)}/override`);s.value=O.override_file,i.value=!!O.attached,n.value=O.exists&&O.content!==`{} -`?O.content:"",I(c(O.attached?"editor.override.attached":"editor.override.not_attached"))}catch(O){I(O.message,"error")}}async function $(O=!1){if(!(!t.value||u.value)){u.value=!0,I(c("editor.override.saving"));try{const E=await ft(`firmware/profiles/${encodeURIComponent(t.value)}/override`,"PUT",{content:n.value});if(s.value=E.override_file,i.value=!0,!O){I(c("editor.override.saved"),"ok"),Ce(c("editor.override.saved_toast"));return}I(c("editor.override.checking")),await ft("firmware/jobs","POST",{file:t.value,action:"validate"}),A()}catch(E){I(E.message,"error")}finally{u.value=!1}}}function A(){const O=Date.now(),E=t.value,L=async()=>{if(!(!y||t.value!==E))try{const M=await Nt("firmware"),U=M.job;if(U&&U.file===E&&U.state==="running")I(U.stage?c("editor.override.checking_stage",{stage:U.stage}):c("editor.override.checking_profile"));else if(U&&U.file===E&&U.state==="success"){I(c("editor.override.valid"),"ok");return}else if(U&&U.file===E&&U.state==="failed"){const R=(M.logs||[]).filter(Y=>/error|failed/i.test(Y)).pop();I(R||c("editor.override.rejected"),"error");return}Date.now()-O<72e5&&setTimeout(L,1200)}catch(M){I(M.message,"error")}};L()}function S(){(!n.value.trim()||confirm(c("editor.override.confirm_example")))&&(n.value=H3,I(c("editor.override.example_loaded")),f.value?.focus())}function D(){(!n.value.trim()||confirm(c("editor.override.confirm_clear")))&&(n.value="",I(c("editor.override.cleared")),f.value?.focus())}function C(O){const E=f.value;if(O.key==="Tab"){O.preventDefault();const L=E.selectionStart,M=E.selectionEnd;E.setRangeText(" ",L,M,"end"),n.value=E.value}else(O.ctrlKey||O.metaKey)&&O.key.toLowerCase()==="s"&&(O.preventDefault(),$(!1))}function B(){h.value&&f.value&&(h.value.scrollTop=f.value.scrollTop)}return En(T),rs(()=>{y=!1}),(O,E)=>(g(),_("div",S3,[o("div",C3,[o("div",T3,[o("span",E3,d(a(c)("editor.override.eyebrow")),1),o("h1",A3,d(a(m).overrideFriendly?a(c)("editor.override.title_named",{name:a(m).overrideFriendly}):a(c)("editor.override.title")),1),o("p",null,d(a(c)("editor.override.intro")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-override",onClick:E[0]||(E[0]=L=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",P3,[o("span",O3,d(a(Ae)("F0493")),1),o("div",null,[o("strong",null,d(a(c)("editor.override.safe_title")),1),o("span",null,d(a(c)("editor.override.safe_text")),1)])]),o("div",I3,[o("code",L3,d(s.value||t.value||""),1),o("span",{id:"override-state",class:me(["chip",{good:i.value}])},d(i.value?a(c)("editor.override.active"):a(c)("editor.override.ready")),3)]),o("div",M3,[o("div",{ref_key:"gutter",ref:h,class:"yaml-gutter",id:"override-gutter","aria-hidden":"true"},d(b.value),513),Ee(o("textarea",{ref_key:"editor",ref:f,id:"override-editor","onUpdate:modelValue":E[1]||(E[1]=L=>n.value=L),spellcheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","aria-label":a(c)("editor.override.editor_label"),placeholder:`# Example +`?O.content:"",I(c(O.attached?"editor.override.attached":"editor.override.not_attached"))}catch(O){I(O.message,"error")}}async function $(O=!1){if(!(!t.value||u.value)){u.value=!0,I(c("editor.override.saving"));try{const E=await ft(`firmware/profiles/${encodeURIComponent(t.value)}/override`,"PUT",{content:n.value});if(s.value=E.override_file,i.value=!0,!O){I(c("editor.override.saved"),"ok"),Ce(c("editor.override.saved_toast"));return}I(c("editor.override.checking")),await ft("firmware/jobs","POST",{file:t.value,action:"validate"}),A()}catch(E){I(E.message,"error")}finally{u.value=!1}}}function A(){const O=Date.now(),E=t.value,L=async()=>{if(!(!y||t.value!==E))try{const M=await Nt("firmware"),U=M.job;if(U&&U.file===E&&U.state==="running")I(U.stage?c("editor.override.checking_stage",{stage:U.stage}):c("editor.override.checking_profile"));else if(U&&U.file===E&&U.state==="success"){I(c("editor.override.valid"),"ok");return}else if(U&&U.file===E&&U.state==="failed"){const R=(M.logs||[]).filter(Y=>/error|failed/i.test(Y)).pop();I(R||c("editor.override.rejected"),"error");return}Date.now()-O<72e5&&setTimeout(L,1200)}catch(M){I(M.message,"error")}};L()}function S(){(!n.value.trim()||confirm(c("editor.override.confirm_example")))&&(n.value=H3,I(c("editor.override.example_loaded")),f.value?.focus())}function D(){(!n.value.trim()||confirm(c("editor.override.confirm_clear")))&&(n.value="",I(c("editor.override.cleared")),f.value?.focus())}function C(O){const E=f.value;if(O.key==="Tab"){O.preventDefault();const L=E.selectionStart,M=E.selectionEnd;E.setRangeText(" ",L,M,"end"),n.value=E.value}else(O.ctrlKey||O.metaKey)&&O.key.toLowerCase()==="s"&&(O.preventDefault(),$(!1))}function B(){h.value&&f.value&&(h.value.scrollTop=f.value.scrollTop)}return An(T),rs(()=>{y=!1}),(O,E)=>(g(),_("div",S3,[o("div",C3,[o("div",T3,[o("span",E3,d(a(c)("editor.override.eyebrow")),1),o("h1",A3,d(a(m).overrideFriendly?a(c)("editor.override.title_named",{name:a(m).overrideFriendly}):a(c)("editor.override.title")),1),o("p",null,d(a(c)("editor.override.intro")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-override",onClick:E[0]||(E[0]=L=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",P3,[o("span",O3,d(a(Ae)("F0493")),1),o("div",null,[o("strong",null,d(a(c)("editor.override.safe_title")),1),o("span",null,d(a(c)("editor.override.safe_text")),1)])]),o("div",I3,[o("code",L3,d(s.value||t.value||""),1),o("span",{id:"override-state",class:me(["chip",{good:i.value}])},d(i.value?a(c)("editor.override.active"):a(c)("editor.override.ready")),3)]),o("div",M3,[o("div",{ref_key:"gutter",ref:h,class:"yaml-gutter",id:"override-gutter","aria-hidden":"true"},d(b.value),513),Ee(o("textarea",{ref_key:"editor",ref:f,id:"override-editor","onUpdate:modelValue":E[1]||(E[1]=L=>n.value=L),spellcheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","aria-label":a(c)("editor.override.editor_label"),placeholder:`# Example display: - id: !extend my_display - model: ST7789V`,onKeydown:C,onScroll:B},null,40,R3),[[Je,n.value]])]),o("div",N3,[o("button",{type:"button",class:"btn quiet mini",id:"override-example",onClick:S},d(a(c)("editor.override.use_example")),1),o("button",{type:"button",class:"btn quiet mini",id:"override-empty",onClick:D},d(a(c)("editor.override.clear")),1),o("span",F3,d(v.value),1)]),o("p",{id:"override-status",class:me(["status-line",r.value]),role:"status"},d(l.value),3),o("div",D3,[o("button",{type:"button",class:"btn quiet",id:"override-check",disabled:u.value||!t.value,onClick:E[2]||(E[2]=L=>$(!0))},d(a(c)("editor.override.save_check")),9,U3),o("button",{type:"button",class:"btn primary",id:"override-save",disabled:u.value||!t.value,onClick:E[3]||(E[3]=L=>$(!1))},d(a(c)("editor.override.save")),9,j3)])]))}}),W3={class:"main"},B3=Le({__name:"App",setup(e){const t=k(()=>$t.value==="#settings"?m2:$t.value==="#new-screen"?dw:$t.value==="#firmware"?jw:$t.value==="#alerts"?x3:$t.value==="#override"?V3:_t.value&&m.layout?v1:y1);function n(s){(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="k"&&(s.preventDefault(),m.palette=!m.palette)}return En(()=>document.addEventListener("keydown",n)),rs(()=>document.removeEventListener("keydown",n)),(s,i)=>(g(),_("div",{class:me(["app",{dragging:a(m).drag.active}])},[se(Ib),o("main",W3,[(g(),it(Hd(t.value)))]),se(Mb),se(qb)],2))}});Jh().finally(()=>{ip(B3).use(cs).mount("#app"),Jm()}); + model: ST7789V`,onKeydown:C,onScroll:B},null,40,R3),[[Je,n.value]])]),o("div",N3,[o("button",{type:"button",class:"btn quiet mini",id:"override-example",onClick:S},d(a(c)("editor.override.use_example")),1),o("button",{type:"button",class:"btn quiet mini",id:"override-empty",onClick:D},d(a(c)("editor.override.clear")),1),o("span",F3,d(v.value),1)]),o("p",{id:"override-status",class:me(["status-line",r.value]),role:"status"},d(l.value),3),o("div",D3,[o("button",{type:"button",class:"btn quiet",id:"override-check",disabled:u.value||!t.value,onClick:E[2]||(E[2]=L=>$(!0))},d(a(c)("editor.override.save_check")),9,U3),o("button",{type:"button",class:"btn primary",id:"override-save",disabled:u.value||!t.value,onClick:E[3]||(E[3]=L=>$(!1))},d(a(c)("editor.override.save")),9,j3)])]))}}),W3={class:"main"},B3=Le({__name:"App",setup(e){const t=k(()=>$t.value==="#settings"?m2:$t.value==="#new-screen"?dw:$t.value==="#firmware"?jw:$t.value==="#alerts"?x3:$t.value==="#override"?V3:_t.value&&m.layout?v1:y1);function n(s){(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="k"&&(s.preventDefault(),m.palette=!m.palette)}return An(()=>document.addEventListener("keydown",n)),rs(()=>document.removeEventListener("keydown",n)),(s,i)=>(g(),_("div",{class:me(["app",{dragging:a(m).drag.active}])},[se(Ib),o("main",W3,[(g(),it(Hd(t.value)))]),se(Mb),se(qb)],2))}});Jh().finally(()=>{ip(B3).use(cs).mount("#app"),Jm()}); diff --git a/screen_manager/app/static/assets/it-XNNJYTR_.js b/screen_manager/app/static/assets/it-DdketJEs.js similarity index 97% rename from screen_manager/app/static/assets/it-XNNJYTR_.js rename to screen_manager/app/static/assets/it-DdketJEs.js index 319e42d..4ccf5bd 100644 --- a/screen_manager/app/static/assets/it-XNNJYTR_.js +++ b/screen_manager/app/static/assets/it-DdketJEs.js @@ -1 +1 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"sconosciuto"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Modifiche non salvate"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apri Dispositivi e servizi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Salva e invia"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Salvataggio…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Leggi i dati attuali"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 risultato. Continua a scrivere per restringere l'elenco."},{t:2,i:[{t:4,k:"n"},{t:3,v:" risultati. Continua a scrivere per restringere l'elenco."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Cambia"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Caricamento…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Indietro"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nuovo schermo"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato. Ricarica la pagina e riprova."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API copiata."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La chiave API è selezionata. Copiala con Ctrl+C o Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON della disposizione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il JSON della disposizione è selezionato. Copialo con Ctrl+C o Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'azione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'azione è selezionato. Copialo con Ctrl+C o Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML è selezionato. Copialo con Ctrl+C o Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'icona copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'icona è selezionato. Copialo con Ctrl+C o Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Colore vuoto copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il colore vuoto è selezionato. Copialo con Ctrl+C o Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome del colore copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome del colore è selezionato. Copialo con Ctrl+C o Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Pagina di gestione non raggiungibile · nuovo tentativo…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connesso"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Riconnessione a Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Ricarica"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In coda per l'aggiornamento"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato con questo nome dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novità"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registro completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"L'indirizzo IP, una sola volta; poi il nuovo firmware lo comunica da solo."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP, es. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Avvia"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installato, ma non ancora in Home Assistant. Aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e attiva «Allow the device to perform Home Assistant actions» in Configura."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware scaricato, non ancora in Home Assistant. Mettilo sullo schermo con ESPHome Web, poi aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e consenti le azioni di Home Assistant in Configura."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Non ancora in Home Assistant. Firmware già installato? Aggiungi il dispositivo ESPHome in Impostazioni → Dispositivi e servizi, poi consenti le azioni di Home Assistant in Configura. Non ancora installato? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copia chiave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi a questo schermo"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guida rapida e avviso di prova"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niente da salvare"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica questo schermo"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Fa lampeggiare la retroilluminazione e mostra una scheda"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede un firmware più recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Scarica e copia come JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Cerca schermi, entità, azioni…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nessun risultato. Scrivi parte del nome di uno schermo, di un'entità o di un'azione."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno dei tuoi schermi a sinistra per modificarne i riquadri, la barra superiore e le impostazioni."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Inizia con uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Collega un CYD o un Guition via USB alla macchina di Home Assistant. Profilo, firmware e prima installazione in un colpo solo."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Installa un nuovo schermo"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Hai modifiche non salvate. Aprire comunque un altro schermo?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con una copia di quella dell'altro schermo?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con quella importata?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Il tuo schermo si sta aggiornando."}},other:{t:0,b:{t:2,i:[{t:3,v:"Salvato. "},{t:4,k:"name"},{t:3,v:" si sta aggiornando."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo schermo si sta aggiornando."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. La tua ultima modifica non è ancora stata inviata: premi di nuovo Salva e invia."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lampeggia e mostra una scheda per qualche secondo."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · modifiche salvate"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni schermo"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Salvato · inviato allo schermo"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tutto salvato"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"fa lampeggiare lo schermo"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede il firmware 0.2.31 o più recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"da Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia disposizione da…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" schermo"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nessun altro schermo"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadro"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadri"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importa disposizione…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avanzato"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato per questo schermo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Riquadro rimosso: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Non c'è spazio per questo riquadro a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna pagina è libera per un riquadro a pagina intera. Libera prima una pagina."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo ha già un riquadro che porta a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Salva e invia quando ti sembra giusta."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione importata. Salva e invia quando ti sembra giusta."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione importata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Questo non è JSON. Esporta prima una disposizione, oppure incollane una da un altro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Nessun riquadro in questo file. Serve una disposizione esportata da ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagine · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi la tua prima luce, scena o dispositivo dalla libreria."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tocca la barra superiore o un riquadro per cambiarne le impostazioni. Trascina per spostare; rilascia sulla pagina successiva per crearne una nuova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Gli spazi vuoti e le posizioni fisse funzionano a partire dal firmware 0.2.26. Fino a quell'aggiornamento, questo schermo (firmware "},{t:4,k:"firmware"},{t:3,v:") sposta i riquadri verso il primo spazio libero."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione dello schermo"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi pagina"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Al massimo 1 pagina"},{t:2,i:[{t:3,v:"Al massimo "},{t:4,k:"n"},{t:3,v:" pagine"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi pagina"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Le pagine successive scalano di un posto"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Modifica barra superiore"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Spazio vuoto. Fai clic per aggiungere un riquadro qui, o trascinane uno."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Spazio vuoto "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:": aggiungi qui il prossimo riquadro"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Il prossimo riquadro va qui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vuoto"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Libreria"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, dispositivo o area…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi un'entità"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luci"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttori"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatori"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coperture"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensori"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valori"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezioni"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persone"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Area"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Tutte le aree"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi quelle già inserite"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi ciò che è già su questo schermo"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che è qui è già su questo schermo."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata. Prova un altro nome, un'altra area o un altro filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro; aggiorna il suo firmware per averne 48."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri; aggiorna il suo firmware per averne 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Trascina su una pagina, o tocca + per aggiungere al primo spazio libero. ⌘K cerca ovunque."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luce"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Copertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensore"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sole"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persona"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Telecamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Immagine"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entità"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"orologio analogico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"percorso del sole"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"pagina intera"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome sullo schermo"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (da Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (predefinita)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra l'icona scelta a partire dal firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Porta alla pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vuota)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"I riquadri di navigazione richiedono il firmware 0.2.62: premi prima Aggiorna per questo schermo."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo non ha la pagina "},{t:4,k:"page"},{t:3,v:", quindi un tocco apre la sua ultima pagina. Scegli un'altra pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Un tocco sul riquadro apre quella pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Visualizzazione"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Orologio analogico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e stato"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Percorso del sole"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha valori numerici per questa entità, quindi il grafico resta vuoto. Scegli un'altra visualizzazione."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Questo servizio meteo non ha previsioni giornaliere in Home Assistant. Scegli un'altra visualizzazione."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Dimensione"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Larghezza doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera: un grande pulsante che si illumina quando è acceso; in basso trovano posto un cursore, i comandi o un grafico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un riquadro a pagina intera richiede il firmware 0.2.62: premi prima Aggiorna per questo schermo."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nuova pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controllo diretto sul riquadro"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre questo controllo per questa entità, quindi sullo schermo resta vuoto. Scegline un altro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"In basso nel riquadro a pagina intera; un tocco altrove funziona come impostato qui sotto."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"A destra del riquadro a larghezza doppia, come le righe in Home Assistant. Un tocco sul nome funziona come impostato qui sotto."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra il controllo diretto a partire dal firmware 0.2.19; fino ad allora il riquadro resta com'era."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Al tocco"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Apri i controlli"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Solo visualizzazione"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Accendi / spegni"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Esegui azione"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non può accendere e spegnere questa entità, quindi un tocco non fa nulla. Scegli un'altra opzione."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo accende e spegne questa entità a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco apre la sua scheda."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Tieni premuto il riquadro per aprire la sua scheda."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo cursore sul riquadro"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sì, controllo diretto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha nulla che un cursore possa regolare per questa entità. Scegli No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Storico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Sfondo pastello"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Sfondo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:". Enter: configura, tasti freccia: sposta"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi riquadro"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Chiedo a Home Assistant quali azioni ha questa entità…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non risponde al momento. Riprova tra poco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli un'azione"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio toggle, position o play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'azione"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna azione trovata."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre più questa azione per questa entità, quindi un tocco non fa nulla. Scegline un'altra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (facoltativo)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Non impostato"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Disattivo"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant richiede: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo esegue un'azione a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco funziona come Automatico."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio lampada, musica o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona, solo testo"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona trovata."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dati attuali"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connessione, stato e proprietà supportate"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lettura…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Recupero dello stato attuale da HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stato: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Piccolo cursore: "},{t:4,k:"slider"},{t:3,v:" · Visualizzazione: "},{t:4,k:"display"},{t:3,v:" · Dimensione: "},{t:4,k:"size"},{t:3,v:" · Controllo: "},{t:4,k:"control"},{t:3,v:" · Sfondo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sì"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nessuno"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinito"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Leggi di nuovo"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Rimosso dalla barra superiore: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"La barra superiore ha spazio per 1 elemento."},{t:2,i:[{t:3,v:"La barra superiore ha spazio per "},{t:4,k:"n"},{t:3,v:" elementi."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"È già nella barra superiore."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superiore"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superiore: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso, funziona anche senza Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Sinistra: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Per esempio: Soggiorno"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Destra: ora, sensori o orologio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:". Enter: configura, frecce: sposta"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"},{t:3,v:" dalla barra superiore"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Massimo 1 elemento"},{t:2,i:[{t:3,v:"Massimo "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi l'ora, la data, l'orologio analogico o un'entità"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi ora, data o un'entità"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non tutto sta accanto al nome: lo schermo tralascia gli elementi tratteggiati. Rimuovine uno o scegli un nome più corto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Trascina per riordinare; tocca un elemento per configurarlo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensori, data e orologio analogico compaiono a partire dal firmware "},{t:4,k:"version"},{t:3,v:"; fino a quell'aggiornamento questo schermo mostra il nome e, se l'ora è nella barra, l'orologio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto: non attivo al momento"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non sta accanto al nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Quadrante"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto al momento: non attivo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Al momento non sta accanto al nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Come appare sullo schermo"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo quadrante con l'ora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Cosa mostrare"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Ultima modifica» continua a contare sullo schermo stesso: «Proprio ora», «5 min fa», «Ieri»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (come Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostra"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Solo quando attivo» nasconde l'elemento finché è spento, chiuso, fuori casa o a 0. Utile per una porta aperta, una lavatrice in funzione o per sapere chi è a casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 24 ore · si cambia in "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 12 ore · si cambia in "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni → Lingua e regione"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Oggi: "},{t:4,k:"date"},{t:3,v:". La data segue l'orologio dello schermo stesso."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Su"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Giù"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi alla barra superiore"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazio usato"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazi usati"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Già aggiunto"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti da Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Un'entità"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, area o entità, es. temperatura o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'entità per la barra superiore"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Notte"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modalità scura"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Standby automatico"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby dopo"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità standby"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modalità notte"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Inizio"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fine"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità notte"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Torna a pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Dopo"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Anche in standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Scorri tra le pagine"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Pulsanti pagina"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotazione"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Sto ancora salvando le impostazioni dell'altro schermo. Riprova tra poco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"I pulsanti pagina e lo scorrimento sono disattivati, quindi solo i riquadri «Vai alla pagina» cambiano pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagine "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Non hai riquadri «Vai alla pagina»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"I riquadri che portano a "},{t:4,k:"pages"},{t:3,v:" sono solo su pagine che non puoi raggiungere."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Da "},{t:4,k:"pages"},{t:3,v:" nessun riquadro riporta a pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Questo schermo è offline. Le sue impostazioni si potranno cambiare quando torna online."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito sullo schermo, e quelle fatte sullo schermo compaiono qui."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito. A partire dal firmware 0.2.49 lo schermo le conserva da solo."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Questa entità è disattivata in Home Assistant, oppure lo schermo si sta riavviando."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": diminuisci"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": aumenta"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Avvio dell'aggiornamento…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Scrittura del firmware via Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione e installazione…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"In attesa che lo schermo torni online…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Verifica della stabilità…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nuova lingua: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi ora si aggiorneranno automaticamente di notte."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Gli aggiornamenti automatici sono disattivati."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti del firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento al firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo associato finora. I nuovi schermi ricevono il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi hanno il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aggiorna 1 schermo"},{t:2,i:[{t:3,v:"Aggiorna tutti i "},{t:4,k:"n"},{t:3,v:" schermi"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novità del firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna automaticamente ogni notte"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tra le 03:00 e le 06:00, uno schermo alla volta. Si ferma in caso di errore e lo segnala in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Claude Code la rileva subito."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Riavvia Claude Code una volta perché trovi la nuova cartella delle skill."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Insegna ESP Screens a Claude, poi chiedi: «Mostra un avviso su tutti i miei schermi quando la cassetta della posta è piena». Claude conosce gli eventi degli avvisi, ogni campo, colore e icona."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa per Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Installa di nuovo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna la skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Non installata"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installata"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installata · è pronta una versione più recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Per Claude Code in Home Assistant. Scrive un file in "},{t:4,k:"path"},{t:3,v:"; installando di nuovo lo sostituisci."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica per claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carica lo zip in Claude, in Personalizza → Skill."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che riguarda i tuoi schermi."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← I miei schermi"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi uno schermo, oppure compila e reinstalla il firmware di uno che hai già."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa via USB o Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lingua e regione"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Lingua degli schermi"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Lingua di Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Lingua di Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi usano l'inglese finché la lingua di Home Assistant non è disponibile."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non ancora verificato, aiuto benvenuto"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" non è ancora verificato, ogni aiuto è benvenuto: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"come tradurre"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Dopo una modifica ogni schermo ha bisogno di un aggiornamento del firmware, una compilazione per schermo: con il suo pulsante Aggiorna, o con gli aggiornamenti notturni."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato orario"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 ore"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 ore"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formato numerico"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Il tuo profilo Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usa questi"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"L'editor segue la lingua del tuo profilo Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Ogni schermo passa alla nuova lingua con il suo prossimo aggiornamento."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Una scheda a tutto schermo da un'automazione, su uno schermo o su tutti. La guida rapida contiene i nomi delle azioni, i campi, le icone e i colori, e un modulo per provarne uno."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notifiche a schermo intero, da un'automazione"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa il firmware degli schermi"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI di ESPHome integrata usa il tuo profilo (YAML con le chiavi) e i tuoi segreti. Scegli il profilo dello schermo, poi una porta USB (schermo collegato alla macchina di Home Assistant), "},{t:4,k:"ota"},{t:3,v:" con il nome host, oppure "},{t:4,k:"download"},{t:3,v:" per mettere il firmware sullo schermo dal tuo computer. "},{t:4,k:"check"},{t:3,v:" verifica soltanto, "},{t:4,k:"build"},{t:3,v:" compila, "},{t:4,k:"install"},{t:3,v:" mette il firmware sullo schermo. I tuoi riquadri restano come sono in ESP Screens. La prima compilazione richiede qualche minuto."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verifica"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Solo compilazione"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compila e scarica"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Manca la CLI di ESPHome. Aggiorna l'app alla versione 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli il profilo giusto, poi una porta USB, un indirizzo IP o Scarica."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profilo ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installa su"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nessuno schermo rilevato finora sulla macchina di Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Scarica · installa dal tuo computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP o nome host"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Scarica "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Mettilo sullo schermo con "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome o Edge: Connect, scegli la porta USB dello schermo, Install e seleziona questo file. Contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profilo salvato."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un attimo…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da scaricare."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crea il profilo dello schermo con chiavi uniche e compila il firmware. Collega lo schermo con un cavo USB dati alla macchina su cui gira Home Assistant, oppure scarica il firmware e mettilo sullo schermo dal tuo computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Quale schermo hai?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pollici"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pollici"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Schermo del soggiorno"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizza"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Ogni schermo ha il suo profilo con le sue chiavi. Quattro schermi? Ripeti questi passaggi quattro volte con un nome diverso."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lettere minuscole, cifre e trattini. Un nome diverso per ogni schermo."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Password Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Da compilare una sola volta: ESP Screens lo salva nel secrets.yaml di ESPHome e gli schermi successivi lo usano automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Nel tuo secrets.yaml di ESPHome mancano ancora i dati Wi-Fi. ESP Screens compila solo le righe mancanti."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Il Wi-Fi viene dal tuo secrets.yaml di ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Il secrets.yaml nella cartella di ESPHome non è YAML valido. Correggi prima il file; non verrà sovrascritto."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installa tramite"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Più tardi · salva solo il profilo"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo con un cavo USB dati alla macchina di Home Assistant; l'elenco si aggiorna da solo. Oppure scegli Scarica per usare il tuo computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica il firmware e mettilo sullo schermo dal tuo computer, in Chrome o Edge. Dopo, gli aggiornamenti arrivano via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo va nella cartella di ESPHome. Puoi installarlo più tardi da Firmware e USB, o da ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Più schermi collegati: scegli la porta di questo schermo."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Una sola volta via USB; dopo, tutto senza fili."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Salva profilo"}},busy:{t:0,b:{t:2,i:[{t:3,v:"È già in corso una compilazione o un'installazione ("},{t:4,k:"file"},{t:3,v:"). Attendi che finisca."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"In questa installazione manca la CLI di ESPHome; puoi solo salvare il profilo."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" è nella cartella di ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Scrittura del firmware su "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Il firmware per "},{t:4,k:"name"},{t:3,v:" è pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Il firmware è su "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione non riuscita"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installazione non riuscita"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installalo più tardi da Firmware e USB: scegli questo profilo, poi la porta USB della macchina di Home Assistant, oppure Scarica per mettere il firmware sullo schermo dal tuo computer. Conserva la chiave API per l'associazione:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Non scollegare ancora il cavo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: l'installazione continua e la ritrovi in Nuovo schermo."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: la compilazione continua e la ritrovi in Nuovo schermo."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Mettilo sullo schermo dal tuo computer, poi associa lo schermo a Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Ora associalo a Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci. Ora associalo a Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Vedi il registro qui sotto."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" con un cavo USB dati."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo al tuo computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome o Edge, fai clic su Connect e scegli la porta USB dello schermo."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Apri "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fai clic su Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Il file contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Questo avviene fuori da ESP Screens. Home Assistant rileva "},{t:4,k:"name"},{t:3,v:" come dispositivo ESPHome; fai clic su Aggiungi. Non rilevato? Aggiungi ESPHome manualmente con l'indirizzo IP dello schermo."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vai in Home Assistant → Impostazioni → Dispositivi e servizi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" qui sopra quando Home Assistant chiede una chiave di cifratura."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Incolla la chiave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integrazione ESPHome → Configura → «Allow the device to perform Home Assistant actions». Senza questo, lo schermo vede tutto ma non controlla nulla."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Consenti le azioni di HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" In ESP Screens lo schermo compare nell'elenco a sinistra entro una trentina di secondi; fino ad allora è indicato lì come «non ancora in Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Scegli i tuoi riquadri."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registro ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Riprova"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Installa un altro schermo"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Ricomincia"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi · guida rapida"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Una notifica a schermo intero, da un'automazione."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha l'azione "},{t:4,k:"action"},{t:3,v:". Mette una scheda sopra tutto, riattiva lo schermo e mantiene la retroilluminazione a luminosità normale finché qualcuno non tocca il pulsante o non scade il timeout. Home Assistant da solo non mostra spiegazioni né menu a tendina per le azioni ESPHome; qui trovi tutto quello che puoi compilare."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"La guida rapida si sta ancora caricando; un attimo."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"C'è qualcuno alla porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, retro"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Arrivo"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sezioni"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Prova"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"I tuoi schermi"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In un'automazione"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"I campi"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icone"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colori"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventi"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Invia subito un avviso, con gli stessi campi che invia un'automazione. Lo schermo mostra la scheda e, con il lampeggio attivo, fa lampeggiare la retroilluminazione."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},all:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi (pronti: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titolo"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Sottotitolo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Colore"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Testo del pulsante"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (secondi, 0 aspetta il pulsante)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fai lampeggiare la retroilluminazione"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quattro volte all'arrivo dell'avviso."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Invio…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Invia avviso"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Inviato allo schermo."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 schermo saltato (offline o firmware troppo vecchio)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi saltati (offline o firmware troppo vecchio)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Campi lasciati vuoti: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo ha potuto mostrarlo: verifica che uno schermo sia online con il firmware "},{t:4,k:"version"},{t:3,v:" o più recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Bianco (predefinito)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha la sua azione, con il nome del dispositivo. A partire dal firmware "},{t:4,k:"version"},{t:3,v:"; aggiorna uno schermo più vecchio con il suo pulsante Aggiorna in Schermi."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuno schermo associato finora. Installane uno da Nuovo schermo; l'azione compare appena Home Assistant vede lo schermo."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento necessario · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo sconosciuto · aggiorna lo schermo"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostra avviso"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi avviso"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" e cerca "},{t:4,k:"esphome"},{t:3,v:". Scegli l'azione del tuo schermo: Home Assistant la chiama «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi azione"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant li chiede tutti e sette; lascia vuoto ciò che non usi ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", disattivo)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Compila i campi."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Preferisci lo YAML? Scegli "},{t:4,k:"edit"},{t:3,v:" sull'azione e incolla l'esempio qui sotto."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Esempio per"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"uno schermo (non ancora associato)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Modifica in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copia YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi insieme"}},text:{t:0,b:{t:2,i:[{t:3,v:"Attiva l'evento "},{t:4,k:"show"},{t:3,v:" con gli stessi campi ed ESP Screens inoltra l'avviso a ogni schermo online, compresi quelli che aggiungerai in seguito. "},{t:4,k:"dismiss"},{t:3,v:" lo rimuove ovunque. In un'automazione, aggiungi l'azione "},{t:4,k:"event"},{t:3,v:" o incolla l'esempio in "},{t:4,k:"edit"},{t:3,v:". Tralascia i campi che non usi. Perché funzioni, ESP Screens deve essere in esecuzione."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Attiva manualmente evento"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Il testo è libero; il limite è in byte e una lettera accentata conta per due. Ciò che non ci sta finisce con i puntini di sospensione (titolo) o viene tagliato (sottotitolo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Cosa fa"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Esempio"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"testo"}},int:{t:0,b:{t:2,i:[{t:3}],s:"numero"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"attivo / disattivo"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entità"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" byte"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"da 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:", per esempio "},{t:4,k:"example"},{t:3,v:". Funzionano anche "},{t:4,k:"mdi"},{t:3,v:" e il codice esadecimale ("},{t:4,k:"hex"},{t:3,v:"). Nel firmware ci sono solo queste icone; qualsiasi altro nome mostra il triangolo di avvertimento. Tocca un'icona per copiarne il nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Utili per le notifiche"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome o descrizione…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Disponibili anche: icone di controllo e meteo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copia "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nessuna icona per «"},{t:4,k:"query"},{t:3,v:"». I nomi sconosciuti mostrano il triangolo di avvertimento ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:". Sono le tonalità pastello dei riquadri, con testo scuro. Un nome vuoto o sconosciuto dà la scheda bianca. Tocca per copiare."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un avviso riattiva subito uno schermo attenuato o spento e compare sopra ogni pagina, ogni scheda luce aperta e il livello di standby."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Riattiva lo schermo."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Finché la scheda è visibile, la retroilluminazione resta a luminosità normale. Standby e ore notturne aspettano. Dopo il pulsante, riparte il normale tempo di standby."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acceso fino al pulsante."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" aspetta il pulsante, per tutto il tempo necessario. Con "},{t:4,k:"minute"},{t:3,v:" la scheda sparisce dopo un minuto, ma il pulsante la chiude prima."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" fa lampeggiare la retroilluminazione quattro volte all'arrivo dell'avviso (circa un secondo) e poi lascia lo schermo acceso."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Lampeggio."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un nuovo avviso sostituisce quello attuale; gli avvisi non si accumulano. L'avviso sostituito si segnala come "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sostituzione."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" rimuove la scheda, per esempio se la porta è già aperta. Senza un avviso, quell'azione non fa nulla."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Chiusura a distanza."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" non fa nulla; solo il pulsante la chiude. Così un tocco per riattivare lo schermo non chiude mai l'avviso per sbaglio."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Toccare accanto alla scheda"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni volta che un avviso termina, parte l'evento "},{t:4,k:"event"},{t:3,v:" con "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (il nome del dispositivo) e il "},{t:4,k:"device_id"},{t:3,v:" che aggiunge Home Assistant. Visibile in Impostazioni → Strumenti → Eventi."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Aspettare che qualcuno prema il pulsante"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Usa un "},{t:4,k:"bold"},{t:3,v:": arancione per la porta, rosso per fumo o acqua, verde per «fatto». Il testo resta sempre scuro e leggibile."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"colore per ogni tipo di notifica"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tieni il titolo "},{t:4,k:"bold"},{t:3,v:": uno schermo mostra circa venti caratteri su una riga e chiude un titolo più lungo con i puntini di sospensione. Metti i dettagli nel sottotitolo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"breve"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" trasforma la notifica in una domanda: «Arrivo», «Visto», «Spegni». L'evento poi ti dice chi ha risposto."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"testo del pulsante personalizzato"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Per un avviso che si risolve da solo (la porta si apre, il bucato viene ritirato), chiudilo nella stessa automazione con "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi? Attiva "},{t:4,k:"event"},{t:3,v:" una sola volta (vedi Tutti gli schermi insieme). Gli schermi restano indipendenti e ognuno risponde con il proprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Preferisci "},{t:4,k:"bold"},{t:3,v:" l'automazione? Installa la skill di ESP Screens in Impostazioni → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"chiedere a Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campanello: mostra l’avviso e aspetta che qualcuno prema il pulsante."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Qualcuno sta arrivando alla porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avanzate · personalizzazione locale"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizzato · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Questo piccolo file è tuo. Viene caricato dopo il pacchetto condiviso degli schermi e resta al suo posto quando ESP Screens si aggiorna. Cambia qui i dettagli specifici dell'hardware, come il modello del display."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Cosa si può cambiare senza rischi?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pin e altri dettagli del dispositivo. Nome, Wi-Fi, API, OTA e collegamenti ai package restano gestiti automaticamente."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da collegare"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato locale"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usa l'esempio"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancella"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 carattere"},{t:2,i:[{t:4,k:"n"},{t:3,v:" caratteri"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 riga"},{t:2,i:[{t:4,k:"n"},{t:3,v:" righe"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Salva e verifica"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Salva YAML personalizzato"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Non è stato trovato nessun profilo ESPHome per questo schermo."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche fatte qui valgono dalla prossima compilazione."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Salva una volta per collegare questo file al profilo."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Verifica e salvataggio…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo YAML personalizzato viene mantenuto negli aggiornamenti del firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato salvato."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. ESPHome sta verificando il profilo completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sta verificando il profilo…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sta verificando il profilo… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo completo è valido. Puoi compilare e installare senza rischi."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome ha rifiutato il profilo completo. Vedi Firmware e USB per il registro completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire il testo attuale con l'esempio?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Esempio caricato. Salvalo quando vuoi."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancellare lo YAML personalizzato locale?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML personalizzato sarà vuoto dopo il salvataggio."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Sconosciuto"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Non disponibile"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Caldo/Freddo"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Deumidificazione"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilazione"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Raffreddando"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"In deumidificazione"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preriscaldamento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"In apertura"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"In chiusura"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"In attesa"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sopra l'orizzonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sotto l'orizzonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Alla base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"In pulizia"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Ritornando alla base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleggiato"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Sereno, notte"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuvoloso"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parzialmente nuvoloso"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Piovoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Rovescio"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, piovoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebbia"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grandine"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Temporale"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Temporale, piovoso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Eccezionale"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"In carica"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in carica"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connesso"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnesso"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caldo"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luce rilevata"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna luce"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Sbloccato/a"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloccato/a"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Bagnato"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Asciutto"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"In movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Non si muove"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Collegato"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Scollegato"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in esecuzione"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Non Sicuro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicuro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevata manomissione"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento disponibile"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornato"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Attiva"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Esegui"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Premi"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Proprio ora"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min fa"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 ora fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore fa"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ieri"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 giorno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" giorni fa"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 settimana fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" settimane fa"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 mese fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" mesi fa"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 anno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" anni fa"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 ora"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" ore"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Domani"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 giorno"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" giorni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domenica"}},{t:0,b:{t:2,i:[{t:3}],s:"lunedì"}},{t:0,b:{t:2,i:[{t:3}],s:"martedì"}},{t:0,b:{t:2,i:[{t:3}],s:"mercoledì"}},{t:0,b:{t:2,i:[{t:3}],s:"giovedì"}},{t:0,b:{t:2,i:[{t:3}],s:"venerdì"}},{t:0,b:{t:2,i:[{t:3}],s:"sabato"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"gennaio"}},{t:0,b:{t:2,i:[{t:3}],s:"febbraio"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"aprile"}},{t:0,b:{t:2,i:[{t:3}],s:"maggio"}},{t:0,b:{t:2,i:[{t:3}],s:"giugno"}},{t:0,b:{t:2,i:[{t:3}],s:"luglio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"settembre"}},{t:0,b:{t:2,i:[{t:3}],s:"ottobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"dicembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"gen"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mag"}},{t:0,b:{t:2,i:[{t:3}],s:"giu"}},{t:0,b:{t:2,i:[{t:3}],s:"lug"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"set"}},{t:0,b:{t:2,i:[{t:3}],s:"ott"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"sconosciuto"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Modifiche non salvate"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apri Dispositivi e servizi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Salva e invia"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Salvataggio…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Leggi i dati attuali"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 risultato. Continua a scrivere per restringere l'elenco."},{t:2,i:[{t:4,k:"n"},{t:3,v:" risultati. Continua a scrivere per restringere l'elenco."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Cambia"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Caricamento…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Indietro"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nuovo schermo"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato. Ricarica la pagina e riprova."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API copiata."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La chiave API è selezionata. Copiala con Ctrl+C o Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON della disposizione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il JSON della disposizione è selezionato. Copialo con Ctrl+C o Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'azione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'azione è selezionato. Copialo con Ctrl+C o Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML è selezionato. Copialo con Ctrl+C o Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'icona copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'icona è selezionato. Copialo con Ctrl+C o Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Colore vuoto copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il colore vuoto è selezionato. Copialo con Ctrl+C o Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome del colore copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome del colore è selezionato. Copialo con Ctrl+C o Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Pagina di gestione non raggiungibile · nuovo tentativo…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connesso"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Riconnessione a Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Ricarica"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In coda per l'aggiornamento"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato con questo nome dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novità"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registro completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"L'indirizzo IP, una sola volta; poi il nuovo firmware lo comunica da solo."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP, es. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Avvia"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installato, ma non ancora in Home Assistant. Aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e attiva «Allow the device to perform Home Assistant actions» in Configura."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware scaricato, non ancora in Home Assistant. Mettilo sullo schermo con ESPHome Web, poi aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e consenti le azioni di Home Assistant in Configura."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Non ancora in Home Assistant. Firmware già installato? Aggiungi il dispositivo ESPHome in Impostazioni → Dispositivi e servizi, poi consenti le azioni di Home Assistant in Configura. Non ancora installato? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copia chiave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi a questo schermo"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guida rapida e avviso di prova"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niente da salvare"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica questo schermo"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Fa lampeggiare la retroilluminazione e mostra una scheda"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede un firmware più recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Scarica e copia come JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Cerca schermi, entità, azioni…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nessun risultato. Scrivi parte del nome di uno schermo, di un'entità o di un'azione."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno dei tuoi schermi a sinistra per modificarne i riquadri, la barra superiore e le impostazioni."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Inizia con uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Collega un CYD o un Guition via USB alla macchina di Home Assistant. Profilo, firmware e prima installazione in un colpo solo."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Installa un nuovo schermo"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Hai modifiche non salvate. Aprire comunque un altro schermo?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con una copia di quella dell'altro schermo?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con quella importata?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Il tuo schermo si sta aggiornando."}},other:{t:0,b:{t:2,i:[{t:3,v:"Salvato. "},{t:4,k:"name"},{t:3,v:" si sta aggiornando."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo schermo si sta aggiornando."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. La tua ultima modifica non è ancora stata inviata: premi di nuovo Salva e invia."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lampeggia e mostra una scheda per qualche secondo."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · modifiche salvate"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni schermo"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Salvato · inviato allo schermo"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tutto salvato"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"fa lampeggiare lo schermo"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede il firmware 0.2.31 o più recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"da Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia disposizione da…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" schermo"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nessun altro schermo"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadro"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadri"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importa disposizione…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avanzato"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato per questo schermo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Riquadro rimosso: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Non c'è spazio per questo riquadro a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna pagina è libera per un riquadro a pagina intera. Libera prima una pagina."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo ha già un riquadro che porta a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Salva e invia quando ti sembra giusta."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione importata. Salva e invia quando ti sembra giusta."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione importata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Questo non è JSON. Esporta prima una disposizione, oppure incollane una da un altro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Nessun riquadro in questo file. Serve una disposizione esportata da ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagine · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi la tua prima luce, scena o dispositivo dalla libreria."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tocca la barra superiore o un riquadro per cambiarne le impostazioni. Trascina per spostare; rilascia sulla pagina successiva per crearne una nuova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Gli spazi vuoti e le posizioni fisse funzionano a partire dal firmware 0.2.26. Fino a quell'aggiornamento, questo schermo (firmware "},{t:4,k:"firmware"},{t:3,v:") sposta i riquadri verso il primo spazio libero."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione dello schermo"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi pagina"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Al massimo 1 pagina"},{t:2,i:[{t:3,v:"Al massimo "},{t:4,k:"n"},{t:3,v:" pagine"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi pagina"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Le pagine successive scalano di un posto"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Modifica barra superiore"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Spazio vuoto. Fai clic per aggiungere un riquadro qui, o trascinane uno."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Spazio vuoto "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:": aggiungi qui il prossimo riquadro"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Il prossimo riquadro va qui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vuoto"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Libreria"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, dispositivo o area…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi un'entità"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luci"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttori"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatori"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coperture"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensori"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valori"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezioni"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persone"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Area"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Tutte le aree"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi quelle già inserite"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi ciò che è già su questo schermo"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che è qui è già su questo schermo."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata. Prova un altro nome, un'altra area o un altro filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro; aggiorna il suo firmware per averne 48."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri; aggiorna il suo firmware per averne 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Trascina su una pagina, o tocca + per aggiungere al primo spazio libero. ⌘K cerca ovunque."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luce"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Copertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensore"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sole"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persona"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Telecamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Immagine"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entità"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"orologio analogico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"percorso del sole"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"pagina intera"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome sullo schermo"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (da Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (predefinita)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra l'icona scelta a partire dal firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Porta alla pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vuota)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"I riquadri di navigazione richiedono il firmware 0.2.62: premi prima Aggiorna per questo schermo."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo non ha la pagina "},{t:4,k:"page"},{t:3,v:", quindi un tocco apre la sua ultima pagina. Scegli un'altra pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Un tocco sul riquadro apre quella pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Visualizzazione"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Orologio analogico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e stato"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Percorso del sole"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha valori numerici per questa entità, quindi il grafico resta vuoto. Scegli un'altra visualizzazione."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Questo servizio meteo non ha previsioni giornaliere in Home Assistant. Scegli un'altra visualizzazione."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Dimensione"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Larghezza doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera: un grande pulsante che si illumina quando è acceso; in basso trovano posto un cursore, i comandi o un grafico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un riquadro a pagina intera richiede il firmware 0.2.62: premi prima Aggiorna per questo schermo."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nuova pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controllo diretto sul riquadro"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre questo controllo per questa entità, quindi sullo schermo resta vuoto. Scegline un altro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"In basso nel riquadro a pagina intera; un tocco altrove funziona come impostato qui sotto."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"A destra del riquadro a larghezza doppia, come le righe in Home Assistant. Un tocco sul nome funziona come impostato qui sotto."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra il controllo diretto a partire dal firmware 0.2.19; fino ad allora il riquadro resta com'era."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Al tocco"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Apri i controlli"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Solo visualizzazione"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Accendi / spegni"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Esegui azione"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non può accendere e spegnere questa entità, quindi un tocco non fa nulla. Scegli un'altra opzione."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo accende e spegne questa entità a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco apre la sua scheda."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Tieni premuto il riquadro per aprire la sua scheda."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo cursore sul riquadro"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sì, controllo diretto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha nulla che un cursore possa regolare per questa entità. Scegli No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Storico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Sfondo pastello"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Sfondo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:". Enter: configura, tasti freccia: sposta"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi riquadro"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Chiedo a Home Assistant quali azioni ha questa entità…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non risponde al momento. Riprova tra poco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli un'azione"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio toggle, position o play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'azione"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna azione trovata."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre più questa azione per questa entità, quindi un tocco non fa nulla. Scegline un'altra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (facoltativo)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Non impostato"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Disattivo"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant richiede: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo esegue un'azione a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco funziona come Automatico."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio lampada, musica o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona, solo testo"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona trovata."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dati attuali"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connessione, stato e proprietà supportate"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lettura…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Recupero dello stato attuale da HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stato: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Piccolo cursore: "},{t:4,k:"slider"},{t:3,v:" · Visualizzazione: "},{t:4,k:"display"},{t:3,v:" · Dimensione: "},{t:4,k:"size"},{t:3,v:" · Controllo: "},{t:4,k:"control"},{t:3,v:" · Sfondo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sì"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nessuno"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinito"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Leggi di nuovo"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Rimosso dalla barra superiore: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"La barra superiore ha spazio per 1 elemento."},{t:2,i:[{t:3,v:"La barra superiore ha spazio per "},{t:4,k:"n"},{t:3,v:" elementi."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"È già nella barra superiore."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superiore"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superiore: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso, funziona anche senza Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Sinistra: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Per esempio: Soggiorno"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Destra: ora, sensori o orologio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:". Enter: configura, frecce: sposta"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"},{t:3,v:" dalla barra superiore"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Massimo 1 elemento"},{t:2,i:[{t:3,v:"Massimo "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi l'ora, la data, l'orologio analogico o un'entità"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi ora, data o un'entità"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non tutto sta accanto al nome: lo schermo tralascia gli elementi tratteggiati. Rimuovine uno o scegli un nome più corto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Trascina per riordinare; tocca un elemento per configurarlo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensori, data e orologio analogico compaiono a partire dal firmware "},{t:4,k:"version"},{t:3,v:"; fino a quell'aggiornamento questo schermo mostra il nome e, se l'ora è nella barra, l'orologio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto: non attivo al momento"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non sta accanto al nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Quadrante"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto al momento: non attivo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Al momento non sta accanto al nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Come appare sullo schermo"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo quadrante con l'ora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Cosa mostrare"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Ultima modifica» continua a contare sullo schermo stesso: «Proprio ora», «5 min fa», «Ieri»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (come Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostra"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Solo quando attivo» nasconde l'elemento finché è spento, chiuso, fuori casa o a 0. Utile per una porta aperta, una lavatrice in funzione o per sapere chi è a casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 24 ore · si cambia in "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 12 ore · si cambia in "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni → Lingua e regione"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Oggi: "},{t:4,k:"date"},{t:3,v:". La data segue l'orologio dello schermo stesso."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Su"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Giù"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi alla barra superiore"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazio usato"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazi usati"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Già aggiunto"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti da Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Un'entità"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, area o entità, es. temperatura o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'entità per la barra superiore"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Notte"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modalità scura"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Standby automatico"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby dopo"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità standby"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modalità notte"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Inizio"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fine"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità notte"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Torna a pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Dopo"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Anche in standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Scorri tra le pagine"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Pulsanti pagina"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotazione"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Sto ancora salvando le impostazioni dell'altro schermo. Riprova tra poco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"I pulsanti pagina e lo scorrimento sono disattivati, quindi solo i riquadri «Vai alla pagina» cambiano pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagine "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Non hai riquadri «Vai alla pagina»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"I riquadri che portano a "},{t:4,k:"pages"},{t:3,v:" sono solo su pagine che non puoi raggiungere."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Da "},{t:4,k:"pages"},{t:3,v:" nessun riquadro riporta a pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Questo schermo è offline. Le sue impostazioni si potranno cambiare quando torna online."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito sullo schermo, e quelle fatte sullo schermo compaiono qui."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito. A partire dal firmware 0.2.49 lo schermo le conserva da solo."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Questa entità è disattivata in Home Assistant, oppure lo schermo si sta riavviando."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": diminuisci"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": aumenta"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Avvio dell'aggiornamento…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Scrittura del firmware via Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione e installazione…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"In attesa che lo schermo torni online…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Verifica della stabilità…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nuova lingua: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi ora si aggiorneranno automaticamente di notte."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Gli aggiornamenti automatici sono disattivati."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti del firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento al firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo associato finora. I nuovi schermi ricevono il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi hanno il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aggiorna 1 schermo"},{t:2,i:[{t:3,v:"Aggiorna tutti i "},{t:4,k:"n"},{t:3,v:" schermi"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novità del firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna automaticamente ogni notte"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tra le 03:00 e le 06:00, uno schermo alla volta. Si ferma in caso di errore e lo segnala in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Claude Code la rileva subito."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Riavvia Claude Code una volta perché trovi la nuova cartella delle skill."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Insegna ESP Screens a Claude, poi chiedi: «Mostra un avviso su tutti i miei schermi quando la cassetta della posta è piena». Claude conosce gli eventi degli avvisi, ogni campo, colore e icona."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa per Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Installa di nuovo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna la skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Non installata"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installata"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installata · è pronta una versione più recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Per Claude Code in Home Assistant. Scrive un file in "},{t:4,k:"path"},{t:3,v:"; installando di nuovo lo sostituisci."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica per claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carica lo zip in Claude, in Personalizza → Skill."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che riguarda i tuoi schermi."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← I miei schermi"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi uno schermo, oppure compila e reinstalla il firmware di uno che hai già."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa via USB o Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lingua e regione"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Lingua degli schermi"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Lingua di Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Lingua di Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi usano l'inglese finché la lingua di Home Assistant non è disponibile."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non ancora verificato, aiuto benvenuto"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" non è ancora verificato, ogni aiuto è benvenuto: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"come tradurre"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Dopo una modifica ogni schermo ha bisogno di un aggiornamento del firmware, una compilazione per schermo: con il suo pulsante Aggiorna, o con gli aggiornamenti notturni."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato orario"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 ore"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 ore"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formato numerico"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Il tuo profilo Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usa questi"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"L'editor segue la lingua del tuo profilo Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Ogni schermo passa alla nuova lingua con il suo prossimo aggiornamento."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Una scheda a tutto schermo da un'automazione, su uno schermo o su tutti. La guida rapida contiene i nomi delle azioni, i campi, le icone e i colori, e un modulo per provarne uno."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notifiche a schermo intero, da un'automazione"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa il firmware degli schermi"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI di ESPHome integrata usa il tuo profilo (YAML con le chiavi) e i tuoi segreti. Scegli il profilo dello schermo, poi una porta USB (schermo collegato alla macchina di Home Assistant), "},{t:4,k:"ota"},{t:3,v:" con il nome host, oppure "},{t:4,k:"download"},{t:3,v:" per mettere il firmware sullo schermo dal tuo computer. "},{t:4,k:"check"},{t:3,v:" verifica soltanto, "},{t:4,k:"build"},{t:3,v:" compila, "},{t:4,k:"install"},{t:3,v:" mette il firmware sullo schermo. I tuoi riquadri restano come sono in ESP Screens. La prima compilazione richiede qualche minuto."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verifica"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Solo compilazione"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compila e scarica"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Manca la CLI di ESPHome. Aggiorna l'app alla versione 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli il profilo giusto, poi una porta USB, un indirizzo IP o Scarica."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profilo ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installa su"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nessuno schermo rilevato finora sulla macchina di Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Scarica · installa dal tuo computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP o nome host"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Scarica "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Mettilo sullo schermo con "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome o Edge: Connect, scegli la porta USB dello schermo, Install e seleziona questo file. Contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profilo salvato."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un attimo…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da scaricare."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crea il profilo dello schermo con chiavi uniche e compila il firmware. Collega lo schermo con un cavo USB dati alla macchina su cui gira Home Assistant, oppure scarica il firmware e mettilo sullo schermo dal tuo computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Quale schermo hai?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pollici"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pollici"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Schermo del soggiorno"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizza"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Ogni schermo ha il suo profilo con le sue chiavi. Quattro schermi? Ripeti questi passaggi quattro volte con un nome diverso."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lettere minuscole, cifre e trattini. Un nome diverso per ogni schermo."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Password Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Da compilare una sola volta: ESP Screens lo salva nel secrets.yaml di ESPHome e gli schermi successivi lo usano automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Nel tuo secrets.yaml di ESPHome mancano ancora i dati Wi-Fi. ESP Screens compila solo le righe mancanti."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Il Wi-Fi viene dal tuo secrets.yaml di ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Il secrets.yaml nella cartella di ESPHome non è YAML valido. Correggi prima il file; non verrà sovrascritto."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installa tramite"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Più tardi · salva solo il profilo"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo con un cavo USB dati alla macchina di Home Assistant; l'elenco si aggiorna da solo. Oppure scegli Scarica per usare il tuo computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica il firmware e mettilo sullo schermo dal tuo computer, in Chrome o Edge. Dopo, gli aggiornamenti arrivano via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo va nella cartella di ESPHome. Puoi installarlo più tardi da Firmware e USB, o da ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Più schermi collegati: scegli la porta di questo schermo."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Una sola volta via USB; dopo, tutto senza fili."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Salva profilo"}},busy:{t:0,b:{t:2,i:[{t:3,v:"È già in corso una compilazione o un'installazione ("},{t:4,k:"file"},{t:3,v:"). Attendi che finisca."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"In questa installazione manca la CLI di ESPHome; puoi solo salvare il profilo."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" è nella cartella di ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Scrittura del firmware su "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Il firmware per "},{t:4,k:"name"},{t:3,v:" è pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Il firmware è su "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione non riuscita"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installazione non riuscita"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installalo più tardi da Firmware e USB: scegli questo profilo, poi la porta USB della macchina di Home Assistant, oppure Scarica per mettere il firmware sullo schermo dal tuo computer. Conserva la chiave API per l'associazione:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Non scollegare ancora il cavo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: l'installazione continua e la ritrovi in Nuovo schermo."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: la compilazione continua e la ritrovi in Nuovo schermo."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Mettilo sullo schermo dal tuo computer, poi associa lo schermo a Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Ora associalo a Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci. Ora associalo a Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Vedi il registro qui sotto."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" con un cavo USB dati."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo al tuo computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome o Edge, fai clic su Connect e scegli la porta USB dello schermo."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Apri "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fai clic su Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Il file contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Questo avviene fuori da ESP Screens. Home Assistant rileva "},{t:4,k:"name"},{t:3,v:" come dispositivo ESPHome; fai clic su Aggiungi. Non rilevato? Aggiungi ESPHome manualmente con l'indirizzo IP dello schermo."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vai in Home Assistant → Impostazioni → Dispositivi e servizi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" qui sopra quando Home Assistant chiede una chiave di cifratura."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Incolla la chiave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integrazione ESPHome → Configura → «Allow the device to perform Home Assistant actions». Senza questo, lo schermo vede tutto ma non controlla nulla."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Consenti le azioni di HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" In ESP Screens lo schermo compare nell'elenco a sinistra entro una trentina di secondi; fino ad allora è indicato lì come «non ancora in Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Scegli i tuoi riquadri."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registro ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Riprova"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Installa un altro schermo"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Ricomincia"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi · guida rapida"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Una notifica a schermo intero, da un'automazione."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha l'azione "},{t:4,k:"action"},{t:3,v:". Mette una scheda sopra tutto, riattiva lo schermo e mantiene la retroilluminazione a luminosità normale finché qualcuno non tocca il pulsante o non scade il timeout. Home Assistant da solo non mostra spiegazioni né menu a tendina per le azioni ESPHome; qui trovi tutto quello che puoi compilare."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"La guida rapida si sta ancora caricando; un attimo."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"C'è qualcuno alla porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, retro"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Arrivo"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sezioni"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Prova"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"I tuoi schermi"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In un'automazione"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"I campi"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icone"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colori"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventi"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Invia subito un avviso, con gli stessi campi che invia un'automazione. Lo schermo mostra la scheda e, con il lampeggio attivo, fa lampeggiare la retroilluminazione."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},all:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi (pronti: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titolo"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Sottotitolo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Colore"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Testo del pulsante"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (secondi, 0 aspetta il pulsante)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fai lampeggiare la retroilluminazione"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quattro volte all'arrivo dell'avviso."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Invio…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Invia avviso"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Inviato allo schermo."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 schermo saltato (offline o firmware troppo vecchio)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi saltati (offline o firmware troppo vecchio)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Campi lasciati vuoti: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo ha potuto mostrarlo: verifica che uno schermo sia online con il firmware "},{t:4,k:"version"},{t:3,v:" o più recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Bianco (predefinito)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha la sua azione, con il nome del dispositivo. A partire dal firmware "},{t:4,k:"version"},{t:3,v:"; aggiorna uno schermo più vecchio con il suo pulsante Aggiorna in Schermi."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuno schermo associato finora. Installane uno da Nuovo schermo; l'azione compare appena Home Assistant vede lo schermo."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento necessario · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo sconosciuto · aggiorna lo schermo"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostra avviso"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi avviso"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" e cerca "},{t:4,k:"esphome"},{t:3,v:". Scegli l'azione del tuo schermo: Home Assistant la chiama «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi azione"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant li chiede tutti e sette; lascia vuoto ciò che non usi ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", disattivo)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Compila i campi."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Preferisci lo YAML? Scegli "},{t:4,k:"edit"},{t:3,v:" sull'azione e incolla l'esempio qui sotto."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Esempio per"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"uno schermo (non ancora associato)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Modifica in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copia YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi insieme"}},text:{t:0,b:{t:2,i:[{t:3,v:"Attiva l'evento "},{t:4,k:"show"},{t:3,v:" con gli stessi campi ed ESP Screens inoltra l'avviso a ogni schermo online, compresi quelli che aggiungerai in seguito. "},{t:4,k:"dismiss"},{t:3,v:" lo rimuove ovunque. In un'automazione, aggiungi l'azione "},{t:4,k:"event"},{t:3,v:" o incolla l'esempio in "},{t:4,k:"edit"},{t:3,v:". Tralascia i campi che non usi. Perché funzioni, ESP Screens deve essere in esecuzione."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Attiva manualmente evento"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Il testo è libero; il limite è in byte e una lettera accentata conta per due. Ciò che non ci sta finisce con i puntini di sospensione (titolo) o viene tagliato (sottotitolo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Cosa fa"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Esempio"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"testo"}},int:{t:0,b:{t:2,i:[{t:3}],s:"numero"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"attivo / disattivo"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entità"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" byte"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"da 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:", per esempio "},{t:4,k:"example"},{t:3,v:". Funzionano anche "},{t:4,k:"mdi"},{t:3,v:" e il codice esadecimale ("},{t:4,k:"hex"},{t:3,v:"). Nel firmware ci sono solo queste icone; qualsiasi altro nome mostra il triangolo di avvertimento. Tocca un'icona per copiarne il nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Utili per le notifiche"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome o descrizione…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Disponibili anche: icone di controllo e meteo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copia "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nessuna icona per «"},{t:4,k:"query"},{t:3,v:"». I nomi sconosciuti mostrano il triangolo di avvertimento ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:". Sono le tonalità pastello dei riquadri, con testo scuro. Un nome vuoto o sconosciuto dà la scheda bianca. Tocca per copiare."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un avviso riattiva subito uno schermo attenuato o spento e compare sopra ogni pagina, ogni scheda luce aperta e il livello di standby."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Riattiva lo schermo."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Finché la scheda è visibile, la retroilluminazione resta a luminosità normale. Standby e ore notturne aspettano. Dopo il pulsante, riparte il normale tempo di standby."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acceso fino al pulsante."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" aspetta il pulsante, per tutto il tempo necessario. Con "},{t:4,k:"minute"},{t:3,v:" la scheda sparisce dopo un minuto, ma il pulsante la chiude prima."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" fa lampeggiare la retroilluminazione quattro volte all'arrivo dell'avviso (circa un secondo) e poi lascia lo schermo acceso."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Lampeggio."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un nuovo avviso sostituisce quello attuale; gli avvisi non si accumulano. L'avviso sostituito si segnala come "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sostituzione."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" rimuove la scheda, per esempio se la porta è già aperta. Senza un avviso, quell'azione non fa nulla."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Chiusura a distanza."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" non fa nulla; solo il pulsante la chiude. Così un tocco per riattivare lo schermo non chiude mai l'avviso per sbaglio."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Toccare accanto alla scheda"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni volta che un avviso termina, parte l'evento "},{t:4,k:"event"},{t:3,v:" con "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (il nome del dispositivo) e il "},{t:4,k:"device_id"},{t:3,v:" che aggiunge Home Assistant. Visibile in Impostazioni → Strumenti → Eventi."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Aspettare che qualcuno prema il pulsante"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Usa un "},{t:4,k:"bold"},{t:3,v:": arancione per la porta, rosso per fumo o acqua, verde per «fatto». Il testo resta sempre scuro e leggibile."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"colore per ogni tipo di notifica"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tieni il titolo "},{t:4,k:"bold"},{t:3,v:": uno schermo mostra circa venti caratteri su una riga e chiude un titolo più lungo con i puntini di sospensione. Metti i dettagli nel sottotitolo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"breve"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" trasforma la notifica in una domanda: «Arrivo», «Visto», «Spegni». L'evento poi ti dice chi ha risposto."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"testo del pulsante personalizzato"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Per un avviso che si risolve da solo (la porta si apre, il bucato viene ritirato), chiudilo nella stessa automazione con "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi? Attiva "},{t:4,k:"event"},{t:3,v:" una sola volta (vedi Tutti gli schermi insieme). Gli schermi restano indipendenti e ognuno risponde con il proprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Preferisci "},{t:4,k:"bold"},{t:3,v:" l'automazione? Installa la skill di ESP Screens in Impostazioni → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"chiedere a Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campanello: mostra l’avviso e aspetta che qualcuno prema il pulsante."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Qualcuno sta arrivando alla porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avanzate · personalizzazione locale"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizzato · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Questo piccolo file è tuo. Viene caricato dopo il pacchetto condiviso degli schermi e resta al suo posto quando ESP Screens si aggiorna. Cambia qui i dettagli specifici dell'hardware, come il modello del display."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Cosa si può cambiare senza rischi?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pin e altri dettagli del dispositivo. Nome, Wi-Fi, API, OTA e collegamenti ai package restano gestiti automaticamente."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da collegare"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato locale"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usa l'esempio"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancella"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 carattere"},{t:2,i:[{t:4,k:"n"},{t:3,v:" caratteri"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 riga"},{t:2,i:[{t:4,k:"n"},{t:3,v:" righe"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Salva e verifica"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Salva YAML personalizzato"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Non è stato trovato nessun profilo ESPHome per questo schermo."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche fatte qui valgono dalla prossima compilazione."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Salva una volta per collegare questo file al profilo."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Verifica e salvataggio…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo YAML personalizzato viene mantenuto negli aggiornamenti del firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato salvato."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. ESPHome sta verificando il profilo completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sta verificando il profilo…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sta verificando il profilo… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo completo è valido. Puoi compilare e installare senza rischi."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome ha rifiutato il profilo completo. Vedi Firmware e USB per il registro completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire il testo attuale con l'esempio?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Esempio caricato. Salvalo quando vuoi."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancellare lo YAML personalizzato locale?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML personalizzato sarà vuoto dopo il salvataggio."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Sconosciuto"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Non disponibile"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Caldo/Freddo"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Deumidificazione"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilazione"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Raffreddando"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"In deumidificazione"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preriscaldamento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"In apertura"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"In chiusura"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"In attesa"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sopra l'orizzonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sotto l'orizzonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Alla base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"In pulizia"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Ritornando alla base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleggiato"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Sereno, notte"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuvoloso"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parzialmente nuvoloso"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Piovoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Rovescio"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, piovoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebbia"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grandine"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Temporale"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Temporale, piovoso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Eccezionale"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"In carica"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in carica"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connesso"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnesso"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caldo"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luce rilevata"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna luce"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Sbloccato/a"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloccato/a"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Bagnato"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Asciutto"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"In movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Non si muove"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Collegato"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Scollegato"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in esecuzione"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Non Sicuro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicuro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevata manomissione"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento disponibile"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornato"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Attiva"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Esegui"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Premi"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Proprio ora"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min fa"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 ora fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore fa"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ieri"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 giorno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" giorni fa"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 settimana fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" settimane fa"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 mese fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" mesi fa"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 anno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" anni fa"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 ora"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" ore"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Domani"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 giorno"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" giorni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domenica"}},{t:0,b:{t:2,i:[{t:3}],s:"lunedì"}},{t:0,b:{t:2,i:[{t:3}],s:"martedì"}},{t:0,b:{t:2,i:[{t:3}],s:"mercoledì"}},{t:0,b:{t:2,i:[{t:3}],s:"giovedì"}},{t:0,b:{t:2,i:[{t:3}],s:"venerdì"}},{t:0,b:{t:2,i:[{t:3}],s:"sabato"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"lu"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"me"}},{t:0,b:{t:2,i:[{t:3}],s:"gi"}},{t:0,b:{t:2,i:[{t:3}],s:"ve"}},{t:0,b:{t:2,i:[{t:3}],s:"sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"gennaio"}},{t:0,b:{t:2,i:[{t:3}],s:"febbraio"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"aprile"}},{t:0,b:{t:2,i:[{t:3}],s:"maggio"}},{t:0,b:{t:2,i:[{t:3}],s:"giugno"}},{t:0,b:{t:2,i:[{t:3}],s:"luglio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"settembre"}},{t:0,b:{t:2,i:[{t:3}],s:"ottobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"dicembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"gen"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mag"}},{t:0,b:{t:2,i:[{t:3}],s:"giu"}},{t:0,b:{t:2,i:[{t:3}],s:"lug"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"set"}},{t:0,b:{t:2,i:[{t:3}],s:"ott"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pl-CMPJmoaL.js b/screen_manager/app/static/assets/pl-CYmh5Lrf.js similarity index 97% rename from screen_manager/app/static/assets/pl-CMPJmoaL.js rename to screen_manager/app/static/assets/pl-CYmh5Lrf.js index 334c30f..652c733 100644 --- a/screen_manager/app/static/assets/pl-CMPJmoaL.js +++ b/screen_manager/app/static/assets/pl-CYmh5Lrf.js @@ -1 +1 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Cofnij"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"nieznany"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niezapisane zmiany"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Anuluj"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz Urządzenia oraz usługi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i wyślij"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Zapisywanie…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj bieżące dane"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wynik. Pisz dalej, aby zawęzić."},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyniki. Pisz dalej, aby zawęzić."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyników. Pisz dalej, aby zawęzić."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Zmień"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ładowanie…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Wstecz"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nowy ekran"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware i USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerty"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się. Odśwież stronę i spróbuj ponownie."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano klucz API."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano JSON układu."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON układu jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę akcji."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa akcji jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano YAML."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę ikony."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa ikony jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano pusty kolor."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Pusty kolor jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę koloru."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa koloru jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Strona zarządzania nieosiągalna · ponawianie…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Połączono z Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Ponowne łączenie z Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Odśwież"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacja"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"W kolejce do aktualizacji"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aktualizacja "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome o tej nazwie urządzenia."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Co nowego"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Pełny log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, tylko ten jeden raz; nowy firmware sam go zgłasza."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, np. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Rozpocznij"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowany, ale jeszcze nie w Home Assistant. Dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, a potem kliknij „Konfiguruj” i włącz „Zezwól urządzeniu na wykonywanie akcji Home Assistant”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware pobrany, jeszcze nie w Home Assistant. Wgraj go na ekran przez ESPHome Web, potem dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, kliknij „Konfiguruj” i zezwól na akcje Home Assistant."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Jeszcze nie w Home Assistant. Firmware już wgrany? Dodaj urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, potem kliknij „Konfiguruj” i zezwól na akcje Home Assistant. Jeszcze nie wgrany? Firmware i USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj klucz API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Polecenia"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do tego ekranu"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga i alert testowy"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nic do zapisania"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Zidentyfikuj ten ekran"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Miga podświetleniem i pokazuje kartę"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga nowszej wersji firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz i skopiuj jako JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ekranów, encji, poleceń…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Brak wyników. Wpisz część nazwy ekranu, encji lub polecenia."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz ekran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz jeden ze swoich ekranów po lewej, aby zmienić jego kafelki, górny pasek i ustawienia."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od ekranu"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz CYD lub Guition przez USB do komputera z Home Assistant. Profil, firmware i pierwsze wgranie za jednym razem."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj nowy ekran"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Masz niezapisane zmiany. Mimo to otworzyć inny ekran?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ kopią układu innego ekranu?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ zaimportowanym?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twój ekran jest aktualizowany."}},other:{t:0,b:{t:2,i:[{t:3,v:"Zapisano. Trwa aktualizacja: "},{t:4,k:"name"},{t:3,v:"."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Ekran jest aktualizowany."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twoja najnowsza zmiana nie została jeszcze wysłana: naciśnij ponownie „Zapisz i wyślij”."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" miga i przez kilka sekund pokazuje kartę."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · zmiany są zapisywane"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Układ"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia ekranu"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano · wysłano na ekran"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko zapisane"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identyfikuj"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"mignij ekranem"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga wersji firmware 0.2.31 lub nowszej"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"z Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj układ z…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ekran"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekrany"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekranów"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"brak innych ekranów"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelek"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelków"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importuj układ…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"zaawansowane"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Na stronie "},{t:4,k:"page"},{t:3,v:" nie ma miejsca na ten kafelek."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Brak wolnej strony dla kafelka na całą stronę. Najpierw zwolnij stronę."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran ma już kafelek, który prowadzi do strony "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Zaimportowano układ. Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Zaimportowano układ. Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"To nie jest JSON. Najpierw wyeksportuj układ albo wklej układ z innej instalacji ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Brak kafelków w tym pliku. Oczekiwano układu wyeksportowanego z ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" strona · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" strony · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" stron · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj pierwsze światło, scenę lub urządzenie z biblioteki."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij górny pasek lub kafelek, aby go zmienić. Przeciągnij, aby przenieść; upuść na następnej stronie, aby utworzyć nową."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsca i stałe pozycje działają od wersji firmware 0.2.26. Do czasu tej aktualizacji ten ekran (firmware "},{t:4,k:"firmware"},{t:3,v:") przesuwa kafelki w górę, na pierwsze wolne miejsce."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Układ ekranu"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj stronę"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 strona"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" strony"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" stron"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń stronę"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Strony po tej przesuną się o jedno miejsce w górę"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj górny pasek"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Puste miejsce. Kliknij, aby dodać tu kafelek, albo przeciągnij go tutaj."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:": dodaj tu następny kafelek"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Tu trafi następny kafelek"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Puste"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteka"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" encja"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encje"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encji"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, urządzeniu lub obszarze…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj encję"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Światła"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełączniki"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcje"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypty"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylatory"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłony"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Sceny"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacze"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensory"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartości"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektory"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoby"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutniki"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Obszar"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie obszary"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj dodane"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj to, co już jest na tym ekranie"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko z tej listy jest już na tym ekranie."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji. Spróbuj innej nazwy, obszaru lub filtra."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek; zaktualizuj jego firmware, aby zmieścić 48."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki; zaktualizuj jego firmware, aby zmieścić 48."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków; zaktualizuj jego firmware, aby zmieścić 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij na stronę albo kliknij +, aby dodać w pierwszym wolnym miejscu. ⌘K przeszukuje wszystko."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Światło"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacz"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłona"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypt"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Słońce"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutnik"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoba"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Kamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Obraz"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standardowy"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"wykres"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"zegar analogowy"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"tor słońca"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"podwójny"}},full:{t:0,b:{t:2,i:[{t:3}],s:"cała strona"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa na ekranie"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (z Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (domyślna)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje wybraną ikonę od wersji firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Przechodzi do strony"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (pusta)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelki nawigacji wymagają wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran nie ma strony "},{t:4,k:"page"},{t:3,v:", więc dotknięcie otwiera jego ostatnią stronę. Wybierz inną stronę."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie kafelka otwiera tę stronę."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Widok"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Zegar analogowy"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa i stan"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Wykres"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Tor słońca"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma wartości liczbowych dla tej encji, więc wykres pozostanie pusty. Wybierz inny widok."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Ta usługa pogodowa nie ma prognozy dziennej w Home Assistant. Wybierz inny widok."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Rozmiar"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Podwójna szerokość"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona: jeden duży przycisk, który świeci, gdy encja jest włączona; suwak, przyciski lub wykres są na jego dole."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelek na całą stronę wymaga wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Strona"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nowa strona"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bezpośrednie sterowanie na kafelku"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje tego sterowania dla tej encji, więc na ekranie to miejsce pozostanie puste. Wybierz inne."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na dole kafelka na całą stronę; dotknięcie w innym miejscu działa zgodnie z ustawieniem poniżej."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej stronie kafelka podwójnej szerokości, jak w wierszach encji w Home Assistant. Dotknięcie nazwy działa zgodnie z ustawieniem poniżej."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje bezpośrednie sterowanie od wersji firmware 0.2.19; do tego czasu kafelek pozostaje bez zmian."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Po dotknięciu"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz sterowanie"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Tylko podgląd"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Włącz / wyłącz"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Wykonaj akcję"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie może tego włączać ani wyłączać, więc dotknięcie nic nie robi. Wybierz inną opcję."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Włączanie i wyłączanie dotknięciem działa od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie otwiera kartę."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Przytrzymaj kafelek, aby otworzyć jego kartę."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mały suwak na kafelku"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nie"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Tak, steruj bezpośrednio"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma dla tej encji niczego, co suwak mógłby zmieniać. Wybierz „Nie”."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historia"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" godzina"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelowe tło"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Tło: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń kafelek"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie akcji tej encji z Home Assistant…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant teraz nie odpowiada. Spróbuj ponownie za chwilę."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz akcję"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład toggle, position lub play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj akcji"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono akcji."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje już tej akcji dla tej encji, więc dotknięcie nic nie robi. Wybierz inną."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcjonalnie)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Nie ustawiono"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Włączone"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Wyłączone"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant wymaga: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran wykonuje akcje od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie działa jak „Automatycznie”."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład lampa, muzyka lub drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony, tylko tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ikona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono ikony."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bieżące dane"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Połączenie, stan i obsługiwane właściwości"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Odczytywanie…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie bieżącego stanu z HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stan: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Mały suwak: "},{t:4,k:"slider"},{t:3,v:" · Widok: "},{t:4,k:"display"},{t:3,v:" · Rozmiar: "},{t:4,k:"size"},{t:3,v:" · Sterowanie: "},{t:4,k:"control"},{t:3,v:" · Tło: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"tak"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nie"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Domyślne"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj ponownie"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto z górnego paska: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Górny pasek mieści 1 element."},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementy."}]},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementów."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"To już jest na górnym pasku."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Górny pasek"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Górny pasek: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu, działa też bez Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementu"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Po lewej: nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Na przykład: Salon"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej: godzina, sensory lub zegar"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"},{t:3,v:" z górnego paska"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 element"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementy"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj godzinę, datę, zegar analogowy lub encję"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj godzinę, datę lub encję"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie wszystko mieści się obok nazwy: ekran pomija elementy z przerywaną ramką. Usuń jeden z nich albo wybierz krótszą nazwę."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij, aby zmienić kolejność; kliknij element, aby go skonfigurować."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensory, data i zegar analogowy pojawiają się od wersji firmware "},{t:4,k:"version"},{t:3,v:"; do tej aktualizacji ekran pokazuje nazwę oraz zegar, jeśli godzina jest na pasku."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Ukryty: teraz nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie mieści się obok nazwy"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Tarcza"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Teraz ukryty: nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Obecnie nie mieści się obok nazwy"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Tak wygląda na ekranie"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mała tarcza z godziną"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Co pokazać"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Ostatnia zmiana” aktualizuje się na samym ekranie: „Przed chwilą”, „5 min temu”, „Wczoraj”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (jak w Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pokazuj"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Tylko gdy aktywne” ukrywa element, dopóki jest wyłączony, zamknięty, poza domem albo równy 0. Przydatne dla otwartych drzwi, pracującej pralki albo tego, kto jest w domu."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Zegar 24-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Zegar 12-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia → Język i region"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Dziś: "},{t:4,k:"date"},{t:3,v:". Data pochodzi z zegara samego ekranu."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ W górę"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ W dół"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do górnego paska"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsca"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Już dodano"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Propozycje z Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, obszarze lub encji, np. temperatura albo drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj encji dla górnego paska"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noc"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Tryb ciemny"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto czuwanie"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Czuwanie po"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność czuwania"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Tryb nocny"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Początek"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Koniec"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność nocna"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Wróć do strony 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Po"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Także w czuwaniu"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Przesuwanie stron"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Obrót"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" godz."}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" godz. "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Trwa jeszcze zapisywanie ustawień innego ekranu. Spróbuj ponownie za chwilę."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron i przesuwanie są wyłączone, więc stronę zmieniają tylko kafelki „Przejdź do strony”."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"strony "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie masz kafelków „Przejdź do strony”."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Kafelki do "},{t:4,k:"pages"},{t:3,v:" są tylko na stronach, do których nie możesz dotrzeć."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Ze "},{t:4,k:"pages"},{t:3,v:" żaden kafelek nie prowadzi z powrotem do strony 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Ten ekran jest offline. Jego ustawienia można zmienić, gdy wróci."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają na ekranie od razu, a gdy zmienisz coś na ekranie, zobaczysz to tutaj."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają od razu. Od wersji firmware 0.2.49 ekran przechowuje je sam."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Ta encja jest wyłączona w Home Assistant albo ekran uruchamia się ponownie."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zmniejsz"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zwiększ"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Rozpoczynanie aktualizacji…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Wgrywanie firmware przez Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie i instalowanie…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Oczekiwanie na powrót ekranu…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie, czy działa stabilnie…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nowy język: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany będą teraz aktualizowane automatycznie w nocy."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatyczne aktualizacje są wyłączone."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aktualizowanie do firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nie sparowano jeszcze żadnego ekranu. Nowe ekrany dostaną firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranu."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany mają firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aktualizuj 1 ekran"},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Co nowego w firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj automatycznie co noc"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Między 03:00 a 06:00, po jednym ekranie naraz. Przy błędzie zatrzymuje się i zgłasza go w Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Claude Code od razu ją wykrywa."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Uruchom ponownie Claude Code jeden raz, aby znalazł nowy folder umiejętności."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dzięki tej umiejętności Claude pozna ESP Screens. Potem poproś: „Pokaż alert na wszystkich moich ekranach, gdy skrzynka na listy jest pełna”. Claude zna zdarzenia alertów, każde pole, kolor i ikonę."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj dla Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj ponownie"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Zaktualizuj umiejętność"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Nie zainstalowano"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Zainstalowano"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowano · dostępna jest nowsza wersja"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Dla Claude Code w Home Assistant. Zapisuje jeden plik w "},{t:4,k:"path"},{t:3,v:"; ponowna instalacja go zastępuje."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz dla claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Prześlij plik zip w Claude: Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko wokół Twoich ekranów."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Moje ekrany"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj ekran albo skompiluj i ponownie zainstaluj firmware ekranu, który już masz."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj przez USB lub Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Język i region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Język ekranów"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Język Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Język Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany używają angielskiego, dopóki język Home Assistant nie będzie dostępny."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · jeszcze niesprawdzony, pomoc mile widziana"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" nie jest jeszcze sprawdzony, pomoc mile widziana: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"jak tłumaczyć"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po zmianie każdy ekran wymaga aktualizacji firmware, po jednej kompilacji na ekran: przyciskiem „Aktualizuj” albo w nocnych aktualizacjach."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Format czasu"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24-godzinny"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12-godzinny"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Format liczbowy"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Twój profil Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Użyj tych"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"Sam edytor używa języka Twojego profilu Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Każdy ekran przejdzie na nowy język przy najbliższej aktualizacji."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Karta na cały ekran uruchamiana z automatyzacji, na jednym ekranie lub na wszystkich. Ściąga zawiera nazwy akcji, pola, ikony i kolory oraz formularz do wypróbowania alertu."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienia na cały ekran, z automatyzacji"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj firmware ekranu"}},intro:{t:0,b:{t:2,i:[{t:3,v:"Wbudowane narzędzie ESPHome CLI korzysta z Twojego własnego profilu (YAML z kluczami) i sekretów. Wybierz profil ekranu, a potem port USB (ekran podłączony do komputera z Home Assistant), "},{t:4,k:"ota"},{t:3,v:" z nazwą hosta albo "},{t:4,k:"download"},{t:3,v:", aby wgrać firmware na ekran z własnego komputera. "},{t:4,k:"check"},{t:3,v:" tylko sprawdza poprawność, "},{t:4,k:"build"},{t:3,v:" kompiluje, "},{t:4,k:"install"},{t:3,v:" wgrywa firmware na ekran. Twoje kafelki w ESP Screens zostają bez zmian. Pierwsza kompilacja trwa kilka minut."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdź"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Tylko kompiluj"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i zainstaluj"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i pobierz"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Brak narzędzia ESPHome CLI. Zaktualizuj aplikację do wersji 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz właściwy profil, a potem port USB, adres IP lub „Pobierz”."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj na"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nie znaleziono jeszcze płytki na komputerze z Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz · wgraj z własnego komputera"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP lub nazwa hosta"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Pobierz "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Wgraj go na ekran przez "},{t:4,k:"esphome_web"},{t:3,v:" w Chrome lub Edge: „Connect”, wybierz port USB ekranu, „Install” i wskaż ten plik. Zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil zapisany."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Chwileczkę…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do pobrania."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens tworzy własny profil ekranu z unikalnymi kluczami i kompiluje firmware. Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant albo pobierz firmware i wgraj go na ekran z własnego komputera."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Jaki masz ekran?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 cala"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 cale"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ekran w salonie"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa urządzenia"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"dostosuj"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Każdy ekran dostaje własny profil z własnymi kluczami. Cztery ekrany? Przejdź przez to cztery razy, za każdym razem z inną nazwą."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Małe litery, cyfry i myślniki. Inna nazwa dla każdego ekranu."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa sieci Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Hasło Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij raz: ESP Screens zapisze to w pliku secrets.yaml ESPHome, a kolejne ekrany użyją tego automatycznie."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"W Twoim pliku secrets.yaml ESPHome wciąż brakuje danych Wi-Fi. ESP Screens uzupełni tylko brakujące wiersze."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Dane Wi-Fi pochodzą z Twojego pliku secrets.yaml ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Plik secrets.yaml w folderze ESPHome nie jest poprawnym YAML. Najpierw popraw plik; nie zostanie nadpisany."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj przez"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Później · tylko zapisz profil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant; lista odświeża się sama. Albo wybierz „Pobierz”, aby użyć własnego komputera."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz firmware i wgraj go na ekran z własnego komputera, w Chrome lub Edge. Potem aktualizacje idą przez Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Profil trafi do folderu ESPHome. Zainstalujesz go później w sekcji „Firmware i USB” albo w ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Podłączono więcej niż jedną płytkę: wybierz port tego ekranu."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Raz przez USB; potem wszystko bezprzewodowo."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz profil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Kompilacja lub instalacja już trwa ("},{t:4,k:"file"},{t:3,v:"). Poczekaj, aż się zakończy."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"W tej instalacji brakuje narzędzia ESPHome CLI; można tylko zapisać profil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" jest w folderze ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Wgrywanie firmware: "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware gotowy: "},{t:4,k:"name"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware wgrany: "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Kompilacja nieudana"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Instalacja nieudana"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj go później w sekcji „Firmware i USB”: wybierz ten profil, a potem port USB komputera z Home Assistant albo „Pobierz”, aby wgrać firmware na ekran z własnego komputera. Zachowaj klucz API do parowania:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Nie odłączaj jeszcze kabla USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: instalacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: kompilacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Wgraj go na ekran z własnego komputera, a potem sparuj ekran z Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. Teraz sparuj go z Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków. Teraz sparuj go z Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Zobacz log poniżej."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" kablem USB do transmisji danych."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran do komputera"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" w Chrome lub Edge, kliknij „Connect” i wybierz port USB ekranu."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Otwórz "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij „Install”"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Plik zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" To dzieje się poza ESP Screens. Home Assistant wykryje "},{t:4,k:"name"},{t:3,v:" jako urządzenie ESPHome; kliknij „Dodaj”. Nie wykryto? Dodaj ESPHome ręcznie, podając adres IP ekranu."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Przejdź do Home Assistant → Ustawienia → Urządzenia oraz usługi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" widoczny powyżej, gdy Home Assistant poprosi o klucz szyfrujący."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wklej klucz API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integracja ESPHome → Konfiguruj → „Zezwól urządzeniu na wykonywanie akcji Home Assistant”. Bez tego ekran widzi wszystko, ale niczym nie steruje."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zezwól na akcje HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Po powrocie do ESP Screens ekran pojawi się na liście po lewej w ciągu około trzydziestu sekund; do tego czasu jest tam opisany jako „jeszcze nie w Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz kafelki."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Ponów"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj kolejny ekran"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od nowa"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerty · ściąga"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienie na cały ekran, z automatyzacji."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma akcję "},{t:4,k:"action"},{t:3,v:". Wyświetla ona kartę nad wszystkim, budzi ekran i utrzymuje normalną jasność podświetlenia, dopóki ktoś nie dotknie przycisku albo nie upłynie limit czasu. Sam Home Assistant nie pokazuje dla akcji ESPHome żadnych objaśnień ani list rozwijanych; wszystko, co możesz wypełnić, znajdziesz tutaj."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga wciąż się ładuje; chwileczkę."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś jest przy drzwiach"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Drzwi 3, tylne"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Idę"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sekcje"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Wypróbuj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Twoje ekrany"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"W automatyzacji"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Pola"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ikony"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kolory"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Działanie"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Zdarzenia"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Wskazówki"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij teraz jeden alert z tymi samymi polami, które wysyła automatyzacja. Ekran pokaże kartę, a przy włączonym miganiu mignie podświetleniem."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},all:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany (gotowe: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niegotowy"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tytuł"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Podtytuł"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kolor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Tekst przycisku"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu (sekundy, 0 czeka na przycisk)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Migaj podświetleniem"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cztery razy, gdy przychodzi alert."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Wysyłanie…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekran."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekrany."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Wysłano na ekran "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Wysłano na ekran."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Pominięto 1 ekran (offline lub stary firmware)."},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekrany (offline lub stary firmware)."}]},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekranów (offline lub stary firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Puste pola: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Żaden ekran nie mógł go pokazać: sprawdź, czy któryś ekran jest online i ma firmware "},{t:4,k:"version"},{t:3,v:" lub nowszy."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Biały (domyślny)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma własną akcję, której nazwa zawiera nazwę urządzenia. Od wersji firmware "},{t:4,k:"version"},{t:3,v:"; starszy ekran zaktualizuj przyciskiem „Aktualizuj” na liście ekranów."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie sparowano jeszcze żadnego ekranu. Zainstaluj go w sekcji „Nowy ekran”; akcja pojawi się, gdy Home Assistant zobaczy ekran."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Potrzebna aktualizacja · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznana nazwa urządzenia · zaktualizuj ekran"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Pokaż alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" i wyszukaj "},{t:4,k:"esphome"},{t:3,v:". Wybierz akcję swojego ekranu: Home Assistant opisuje ją po angielsku jako „Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj akcję"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nazwa urządzenia"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant pyta o wszystkie siedem; to, czego nie używasz, zostaw puste ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", wyłączone)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij pola."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Wolisz YAML? Wybierz "},{t:4,k:"edit"},{t:3,v:" w menu akcji i wklej poniższy przykład."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Przykład dla"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"ekranu (jeszcze niesparowanego)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj w YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany naraz"}},text:{t:0,b:{t:2,i:[{t:3,v:"Wywołaj zdarzenie "},{t:4,k:"show"},{t:3,v:" z tymi samymi polami, a ESP Screens przekaże alert każdemu ekranowi, który jest online, także ekranom dodanym później. "},{t:4,k:"dismiss"},{t:3,v:" usuwa go wszędzie. W automatyzacji dodaj akcję "},{t:4,k:"event"},{t:3,v:" albo wybierz "},{t:4,k:"edit"},{t:3,v:" i wklej przykład. Pomiń pola, których nie używasz. ESP Screens musi przy tym działać."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom zdarzenie ręcznie"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst jest dowolny; limit liczy się w bajtach, a litera ze znakiem diakrytycznym (np. ą, ł, ś) liczy się jako dwa. Co się nie zmieści, kończy się wielokropkiem (tytuł) lub zostaje pominięte (podtytuł)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Pole"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Typ"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Co robi"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Przykład"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"liczba"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"wł. / wył."}},entity:{t:0,b:{t:2,i:[{t:3}],s:"encja"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" B · Guition "},{t:4,k:"guition"},{t:3,v:" B"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"od 0 do 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:", na przykład "},{t:4,k:"example"},{t:3,v:". Działa też "},{t:4,k:"mdi"},{t:3,v:" i kod szesnastkowy ("},{t:4,k:"hex"},{t:3,v:"). Firmware zawiera tylko te ikony; każda inna nazwa pokazuje trójkąt ostrzegawczy. Kliknij ikonę, aby skopiować jej nazwę."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Przydatne do powiadomień"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie lub opisie…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Dostępne też: ikony sterowania i pogody"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Kopiuj "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Brak ikony dla „"},{t:4,k:"query"},{t:3,v:"”. Nieznane nazwy pokazują trójkąt ostrzegawczy ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:". To pastelowe odcienie kafelków, z ciemnym tekstem. Pusta lub nieznana nazwa daje białą kartę. Kliknij, aby skopiować."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Alert od razu budzi przyciemniony lub wygaszony ekran i pojawia się nad każdą stroną, każdą otwartą kartą światła i warstwą czuwania."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Budzi ekran."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dopóki karta jest widoczna, podświetlenie ma normalną jasność. Czuwanie i godziny nocne czekają. Po naciśnięciu przycisku zwykły czas do czuwania biegnie od nowa."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Świeci do naciśnięcia przycisku."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" czeka na przycisk bez względu na to, jak długo to trwa. Przy "},{t:4,k:"minute"},{t:3,v:" karta znika po minucie, ale przycisk zamyka ją wcześniej."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" miga podświetleniem cztery razy, gdy przychodzi alert (około sekundy), a potem zostawia ekran włączony."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Miganie."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Nowy alert zastępuje bieżący; alerty się nie kumulują. Zastąpiony alert zgłasza się jako "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zastępowanie."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" usuwa kartę, na przykład gdy drzwi są już otwarte. Gdy nie ma alertu, ta akcja nic nie robi."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zdalne zamykanie."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" nic nie robi; kartę zamyka tylko przycisk. Dzięki temu dotknięcie budzące ekran nigdy przypadkiem nie zamknie alertu."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie obok karty"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Każde zakończenie alertu wywołuje zdarzenie "},{t:4,k:"event"},{t:3,v:" z polami "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (nazwa urządzenia) i "},{t:4,k:"device_id"},{t:3,v:", które dodaje Home Assistant. Zobaczysz je w sekcji Ustawienia → Narzędzia → Zdarzenia."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Kiedy"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Czekanie, aż ktoś naciśnie przycisk"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Użyj "},{t:4,k:"bold"},{t:3,v:": pomarańczowy dla drzwi, czerwony dla dymu lub wody, zielony dla „gotowe”. Tekst zawsze pozostaje ciemny i czytelny."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"osobnego koloru dla każdego rodzaju powiadomienia"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tytuł niech będzie "},{t:4,k:"bold"},{t:3,v:"; ekran pokazuje około dwudziestu znaków w jednym wierszu, a dłuższy tytuł kończy wielokropkiem. Szczegóły umieść w podtytule."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"krótki"}},button:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" zamienia powiadomienie w pytanie: „Idę”, „Widzę”, „Wyłącz”. Zdarzenie powie Ci potem, kto odpowiedział."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"Własny tekst przycisku"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Alert, który sam się rozwiązuje (drzwi się otwierają, ktoś wyjmuje pranie), zamknij w tej samej automatyzacji akcją "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany? Wywołaj "},{t:4,k:"event"},{t:3,v:" raz (zobacz „Wszystkie ekrany naraz”). Ekrany nadal działają niezależnie i każdy zgłasza się z własnym polem "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Wolisz "},{t:4,k:"bold"},{t:3,v:" o automatyzację? Zainstaluj umiejętność ESP Screens w sekcji Ustawienia → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"poprosić Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Dzwonek: pokaż alert i poczekaj, aż ktoś naciśnie przycisk."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś idzie do drzwi."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Zaawansowane · lokalne nadpisanie"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Nadpisanie YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Ten mały plik należy do Ciebie. Jest wczytywany po wspólnym pakiecie ekranu i zostaje na miejscu, gdy ESP Screens się aktualizuje. Zmieniaj tu szczegóły sprzętu, na przykład model wyświetlacza."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Co można bezpiecznie zmieniać?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Wyświetlacz, ekran dotykowy, substitutions, piny i inne szczegóły urządzenia. Nazwa, Wi-Fi, API, OTA i odnośniki do pakietów pozostają zarządzane przez aplikację."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Aktywne"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do dołączenia"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokalne nadpisanie YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Użyj przykładu"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyść"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 znak"},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaków"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wiersz"},{t:2,i:[{t:4,k:"n"},{t:3,v:" wiersze"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wierszy"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i sprawdź"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz nadpisanie"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany tutaj zadziałają przy następnej kompilacji."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz raz, aby dołączyć ten plik do profilu."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie i zapisywanie…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Nadpisanie zostaje zachowane podczas aktualizacji firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano nadpisanie YAML."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. ESPHome sprawdza cały profil…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sprawdza profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sprawdza profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Cały profil jest poprawny. Można bezpiecznie kompilować i instalować."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome odrzucił cały profil. Pełny log znajdziesz w sekcji „Firmware i USB”."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić obecny tekst przykładem?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Wczytano przykład. Zapisz go, kiedy zechcesz."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyścić lokalne nadpisanie?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Po zapisaniu nadpisanie będzie puste."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Dom"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznany"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"niedostępny"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"grzanie/chłodzenie"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"tylko wentylator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"wentylator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"podgrzewanie wstępne"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"rozmrażanie"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"otwieranie"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"zamykanie"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"odtwarzanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"tryb czuwania"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"w domu"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"poza domem"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"powyżej horyzontu"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"poniżej horyzontu"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"zadokowany"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"sprzątanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"wraca do stacji dokującej"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"słonecznie"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"pogodna noc"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"pochmurno"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"częściowe zachmurzenie"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszczowo"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"ulewa"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"opady śniegu"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszcz ze śniegiem"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"mgła"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"grad"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"wyładowania atmosferyczne"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"burza"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"wietrznie"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"warunki nadzwyczajne"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ładowania"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"zimno"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"połączono"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"rozłączono"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"gorąco"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"odblokowano"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"zablokowano"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"w ruchu"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ruchu"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"podłączono"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"odłączono"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"ok"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"działa"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"nie działa"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"zagrożenie"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"brak zagrożenia"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"dostępna aktualizacja"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"brak aktualizacji"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktywuj"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Naciśnij"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Przed chwilą"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min temu"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 godzinę temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin temu"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Wczoraj"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 tydzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodnie temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodni temu"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 miesiąc temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesiące temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesięcy temu"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 rok temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lata temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lat temu"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 godzinę"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godzin"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Jutro"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 dzień"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"niedziela"}},{t:0,b:{t:2,i:[{t:3}],s:"poniedziałek"}},{t:0,b:{t:2,i:[{t:3}],s:"wtorek"}},{t:0,b:{t:2,i:[{t:3}],s:"środa"}},{t:0,b:{t:2,i:[{t:3}],s:"czwartek"}},{t:0,b:{t:2,i:[{t:3}],s:"piątek"}},{t:0,b:{t:2,i:[{t:3}],s:"sobota"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"nie"}},{t:0,b:{t:2,i:[{t:3}],s:"pon"}},{t:0,b:{t:2,i:[{t:3}],s:"wt"}},{t:0,b:{t:2,i:[{t:3}],s:"śr"}},{t:0,b:{t:2,i:[{t:3}],s:"czw"}},{t:0,b:{t:2,i:[{t:3}],s:"pt"}},{t:0,b:{t:2,i:[{t:3}],s:"sob"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"stycznia"}},{t:0,b:{t:2,i:[{t:3}],s:"lutego"}},{t:0,b:{t:2,i:[{t:3}],s:"marca"}},{t:0,b:{t:2,i:[{t:3}],s:"kwietnia"}},{t:0,b:{t:2,i:[{t:3}],s:"maja"}},{t:0,b:{t:2,i:[{t:3}],s:"czerwca"}},{t:0,b:{t:2,i:[{t:3}],s:"lipca"}},{t:0,b:{t:2,i:[{t:3}],s:"sierpnia"}},{t:0,b:{t:2,i:[{t:3}],s:"września"}},{t:0,b:{t:2,i:[{t:3}],s:"października"}},{t:0,b:{t:2,i:[{t:3}],s:"listopada"}},{t:0,b:{t:2,i:[{t:3}],s:"grudnia"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"sty"}},{t:0,b:{t:2,i:[{t:3}],s:"lut"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"kwi"}},{t:0,b:{t:2,i:[{t:3}],s:"maj"}},{t:0,b:{t:2,i:[{t:3}],s:"cze"}},{t:0,b:{t:2,i:[{t:3}],s:"lip"}},{t:0,b:{t:2,i:[{t:3}],s:"sie"}},{t:0,b:{t:2,i:[{t:3}],s:"wrz"}},{t:0,b:{t:2,i:[{t:3}],s:"paź"}},{t:0,b:{t:2,i:[{t:3}],s:"lis"}},{t:0,b:{t:2,i:[{t:3}],s:"gru"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"n"}]}}}}};export{t as default}; +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Cofnij"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"nieznany"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niezapisane zmiany"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Anuluj"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz Urządzenia oraz usługi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i wyślij"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Zapisywanie…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj bieżące dane"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wynik. Pisz dalej, aby zawęzić."},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyniki. Pisz dalej, aby zawęzić."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyników. Pisz dalej, aby zawęzić."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Zmień"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ładowanie…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Wstecz"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nowy ekran"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware i USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerty"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się. Odśwież stronę i spróbuj ponownie."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano klucz API."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano JSON układu."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON układu jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę akcji."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa akcji jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano YAML."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę ikony."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa ikony jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano pusty kolor."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Pusty kolor jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę koloru."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa koloru jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Strona zarządzania nieosiągalna · ponawianie…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Połączono z Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Ponowne łączenie z Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Odśwież"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacja"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"W kolejce do aktualizacji"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aktualizacja "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome o tej nazwie urządzenia."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Co nowego"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Pełny log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, tylko ten jeden raz; nowy firmware sam go zgłasza."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, np. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Rozpocznij"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowany, ale jeszcze nie w Home Assistant. Dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, a potem kliknij „Konfiguruj” i włącz „Zezwól urządzeniu na wykonywanie akcji Home Assistant”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware pobrany, jeszcze nie w Home Assistant. Wgraj go na ekran przez ESPHome Web, potem dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, kliknij „Konfiguruj” i zezwól na akcje Home Assistant."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Jeszcze nie w Home Assistant. Firmware już wgrany? Dodaj urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, potem kliknij „Konfiguruj” i zezwól na akcje Home Assistant. Jeszcze nie wgrany? Firmware i USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj klucz API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Polecenia"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do tego ekranu"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga i alert testowy"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nic do zapisania"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Zidentyfikuj ten ekran"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Miga podświetleniem i pokazuje kartę"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga nowszej wersji firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz i skopiuj jako JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ekranów, encji, poleceń…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Brak wyników. Wpisz część nazwy ekranu, encji lub polecenia."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz ekran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz jeden ze swoich ekranów po lewej, aby zmienić jego kafelki, górny pasek i ustawienia."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od ekranu"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz CYD lub Guition przez USB do komputera z Home Assistant. Profil, firmware i pierwsze wgranie za jednym razem."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj nowy ekran"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Masz niezapisane zmiany. Mimo to otworzyć inny ekran?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ kopią układu innego ekranu?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ zaimportowanym?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twój ekran jest aktualizowany."}},other:{t:0,b:{t:2,i:[{t:3,v:"Zapisano. Trwa aktualizacja: "},{t:4,k:"name"},{t:3,v:"."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Ekran jest aktualizowany."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twoja najnowsza zmiana nie została jeszcze wysłana: naciśnij ponownie „Zapisz i wyślij”."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" miga i przez kilka sekund pokazuje kartę."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · zmiany są zapisywane"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Układ"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia ekranu"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano · wysłano na ekran"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko zapisane"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identyfikuj"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"mignij ekranem"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga wersji firmware 0.2.31 lub nowszej"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"z Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj układ z…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ekran"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekrany"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekranów"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"brak innych ekranów"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelek"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelków"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importuj układ…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"zaawansowane"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Na stronie "},{t:4,k:"page"},{t:3,v:" nie ma miejsca na ten kafelek."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Brak wolnej strony dla kafelka na całą stronę. Najpierw zwolnij stronę."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran ma już kafelek, który prowadzi do strony "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Zaimportowano układ. Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Zaimportowano układ. Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"To nie jest JSON. Najpierw wyeksportuj układ albo wklej układ z innej instalacji ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Brak kafelków w tym pliku. Oczekiwano układu wyeksportowanego z ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" strona · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" strony · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" stron · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj pierwsze światło, scenę lub urządzenie z biblioteki."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij górny pasek lub kafelek, aby go zmienić. Przeciągnij, aby przenieść; upuść na następnej stronie, aby utworzyć nową."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsca i stałe pozycje działają od wersji firmware 0.2.26. Do czasu tej aktualizacji ten ekran (firmware "},{t:4,k:"firmware"},{t:3,v:") przesuwa kafelki w górę, na pierwsze wolne miejsce."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Układ ekranu"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj stronę"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 strona"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" strony"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" stron"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń stronę"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Strony po tej przesuną się o jedno miejsce w górę"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj górny pasek"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Puste miejsce. Kliknij, aby dodać tu kafelek, albo przeciągnij go tutaj."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:": dodaj tu następny kafelek"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Tu trafi następny kafelek"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Puste"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteka"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" encja"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encje"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encji"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, urządzeniu lub obszarze…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj encję"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Światła"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełączniki"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcje"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypty"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylatory"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłony"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Sceny"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacze"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensory"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartości"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektory"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoby"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutniki"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Obszar"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie obszary"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj dodane"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj to, co już jest na tym ekranie"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko z tej listy jest już na tym ekranie."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji. Spróbuj innej nazwy, obszaru lub filtra."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek; zaktualizuj jego firmware, aby zmieścić 48."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki; zaktualizuj jego firmware, aby zmieścić 48."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków; zaktualizuj jego firmware, aby zmieścić 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij na stronę albo kliknij +, aby dodać w pierwszym wolnym miejscu. ⌘K przeszukuje wszystko."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Światło"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacz"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłona"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypt"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Słońce"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutnik"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoba"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Kamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Obraz"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standardowy"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"wykres"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"zegar analogowy"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"tor słońca"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"podwójny"}},full:{t:0,b:{t:2,i:[{t:3}],s:"cała strona"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa na ekranie"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (z Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (domyślna)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje wybraną ikonę od wersji firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Przechodzi do strony"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (pusta)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelki nawigacji wymagają wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran nie ma strony "},{t:4,k:"page"},{t:3,v:", więc dotknięcie otwiera jego ostatnią stronę. Wybierz inną stronę."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie kafelka otwiera tę stronę."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Widok"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Zegar analogowy"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa i stan"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Wykres"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Tor słońca"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma wartości liczbowych dla tej encji, więc wykres pozostanie pusty. Wybierz inny widok."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Ta usługa pogodowa nie ma prognozy dziennej w Home Assistant. Wybierz inny widok."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Rozmiar"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Podwójna szerokość"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona: jeden duży przycisk, który świeci, gdy encja jest włączona; suwak, przyciski lub wykres są na jego dole."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelek na całą stronę wymaga wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Strona"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nowa strona"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bezpośrednie sterowanie na kafelku"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje tego sterowania dla tej encji, więc na ekranie to miejsce pozostanie puste. Wybierz inne."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na dole kafelka na całą stronę; dotknięcie w innym miejscu działa zgodnie z ustawieniem poniżej."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej stronie kafelka podwójnej szerokości, jak w wierszach encji w Home Assistant. Dotknięcie nazwy działa zgodnie z ustawieniem poniżej."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje bezpośrednie sterowanie od wersji firmware 0.2.19; do tego czasu kafelek pozostaje bez zmian."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Po dotknięciu"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz sterowanie"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Tylko podgląd"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Włącz / wyłącz"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Wykonaj akcję"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie może tego włączać ani wyłączać, więc dotknięcie nic nie robi. Wybierz inną opcję."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Włączanie i wyłączanie dotknięciem działa od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie otwiera kartę."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Przytrzymaj kafelek, aby otworzyć jego kartę."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mały suwak na kafelku"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nie"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Tak, steruj bezpośrednio"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma dla tej encji niczego, co suwak mógłby zmieniać. Wybierz „Nie”."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historia"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" godzina"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelowe tło"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Tło: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń kafelek"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie akcji tej encji z Home Assistant…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant teraz nie odpowiada. Spróbuj ponownie za chwilę."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz akcję"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład toggle, position lub play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj akcji"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono akcji."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje już tej akcji dla tej encji, więc dotknięcie nic nie robi. Wybierz inną."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcjonalnie)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Nie ustawiono"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Włączone"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Wyłączone"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant wymaga: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran wykonuje akcje od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie działa jak „Automatycznie”."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład lampa, muzyka lub drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony, tylko tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ikona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono ikony."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bieżące dane"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Połączenie, stan i obsługiwane właściwości"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Odczytywanie…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie bieżącego stanu z HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stan: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Mały suwak: "},{t:4,k:"slider"},{t:3,v:" · Widok: "},{t:4,k:"display"},{t:3,v:" · Rozmiar: "},{t:4,k:"size"},{t:3,v:" · Sterowanie: "},{t:4,k:"control"},{t:3,v:" · Tło: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"tak"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nie"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Domyślne"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj ponownie"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto z górnego paska: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Górny pasek mieści 1 element."},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementy."}]},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementów."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"To już jest na górnym pasku."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Górny pasek"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Górny pasek: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu, działa też bez Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementu"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Po lewej: nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Na przykład: Salon"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej: godzina, sensory lub zegar"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"},{t:3,v:" z górnego paska"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 element"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementy"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj godzinę, datę, zegar analogowy lub encję"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj godzinę, datę lub encję"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie wszystko mieści się obok nazwy: ekran pomija elementy z przerywaną ramką. Usuń jeden z nich albo wybierz krótszą nazwę."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij, aby zmienić kolejność; kliknij element, aby go skonfigurować."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensory, data i zegar analogowy pojawiają się od wersji firmware "},{t:4,k:"version"},{t:3,v:"; do tej aktualizacji ekran pokazuje nazwę oraz zegar, jeśli godzina jest na pasku."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Ukryty: teraz nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie mieści się obok nazwy"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Tarcza"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Teraz ukryty: nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Obecnie nie mieści się obok nazwy"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Tak wygląda na ekranie"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mała tarcza z godziną"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Co pokazać"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Ostatnia zmiana” aktualizuje się na samym ekranie: „Przed chwilą”, „5 min temu”, „Wczoraj”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (jak w Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pokazuj"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Tylko gdy aktywne” ukrywa element, dopóki jest wyłączony, zamknięty, poza domem albo równy 0. Przydatne dla otwartych drzwi, pracującej pralki albo tego, kto jest w domu."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Zegar 24-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Zegar 12-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia → Język i region"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Dziś: "},{t:4,k:"date"},{t:3,v:". Data pochodzi z zegara samego ekranu."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ W górę"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ W dół"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do górnego paska"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsca"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Już dodano"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Propozycje z Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, obszarze lub encji, np. temperatura albo drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj encji dla górnego paska"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noc"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Tryb ciemny"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto czuwanie"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Czuwanie po"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność czuwania"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Tryb nocny"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Początek"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Koniec"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność nocna"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Wróć do strony 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Po"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Także w czuwaniu"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Przesuwanie stron"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Obrót"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" godz."}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" godz. "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Trwa jeszcze zapisywanie ustawień innego ekranu. Spróbuj ponownie za chwilę."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron i przesuwanie są wyłączone, więc stronę zmieniają tylko kafelki „Przejdź do strony”."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"strony "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie masz kafelków „Przejdź do strony”."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Kafelki do "},{t:4,k:"pages"},{t:3,v:" są tylko na stronach, do których nie możesz dotrzeć."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Ze "},{t:4,k:"pages"},{t:3,v:" żaden kafelek nie prowadzi z powrotem do strony 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Ten ekran jest offline. Jego ustawienia można zmienić, gdy wróci."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają na ekranie od razu, a gdy zmienisz coś na ekranie, zobaczysz to tutaj."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają od razu. Od wersji firmware 0.2.49 ekran przechowuje je sam."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Ta encja jest wyłączona w Home Assistant albo ekran uruchamia się ponownie."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zmniejsz"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zwiększ"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Rozpoczynanie aktualizacji…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Wgrywanie firmware przez Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie i instalowanie…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Oczekiwanie na powrót ekranu…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie, czy działa stabilnie…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nowy język: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany będą teraz aktualizowane automatycznie w nocy."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatyczne aktualizacje są wyłączone."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aktualizowanie do firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nie sparowano jeszcze żadnego ekranu. Nowe ekrany dostaną firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranu."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany mają firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aktualizuj 1 ekran"},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Co nowego w firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj automatycznie co noc"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Między 03:00 a 06:00, po jednym ekranie naraz. Przy błędzie zatrzymuje się i zgłasza go w Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Claude Code od razu ją wykrywa."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Uruchom ponownie Claude Code jeden raz, aby znalazł nowy folder umiejętności."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dzięki tej umiejętności Claude pozna ESP Screens. Potem poproś: „Pokaż alert na wszystkich moich ekranach, gdy skrzynka na listy jest pełna”. Claude zna zdarzenia alertów, każde pole, kolor i ikonę."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj dla Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj ponownie"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Zaktualizuj umiejętność"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Nie zainstalowano"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Zainstalowano"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowano · dostępna jest nowsza wersja"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Dla Claude Code w Home Assistant. Zapisuje jeden plik w "},{t:4,k:"path"},{t:3,v:"; ponowna instalacja go zastępuje."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz dla claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Prześlij plik zip w Claude: Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko wokół Twoich ekranów."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Moje ekrany"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj ekran albo skompiluj i ponownie zainstaluj firmware ekranu, który już masz."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj przez USB lub Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Język i region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Język ekranów"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Język Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Język Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany używają angielskiego, dopóki język Home Assistant nie będzie dostępny."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · jeszcze niesprawdzony, pomoc mile widziana"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" nie jest jeszcze sprawdzony, pomoc mile widziana: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"jak tłumaczyć"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po zmianie każdy ekran wymaga aktualizacji firmware, po jednej kompilacji na ekran: przyciskiem „Aktualizuj” albo w nocnych aktualizacjach."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Format czasu"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24-godzinny"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12-godzinny"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Format liczbowy"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Twój profil Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Użyj tych"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"Sam edytor używa języka Twojego profilu Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Każdy ekran przejdzie na nowy język przy najbliższej aktualizacji."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Karta na cały ekran uruchamiana z automatyzacji, na jednym ekranie lub na wszystkich. Ściąga zawiera nazwy akcji, pola, ikony i kolory oraz formularz do wypróbowania alertu."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienia na cały ekran, z automatyzacji"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj firmware ekranu"}},intro:{t:0,b:{t:2,i:[{t:3,v:"Wbudowane narzędzie ESPHome CLI korzysta z Twojego własnego profilu (YAML z kluczami) i sekretów. Wybierz profil ekranu, a potem port USB (ekran podłączony do komputera z Home Assistant), "},{t:4,k:"ota"},{t:3,v:" z nazwą hosta albo "},{t:4,k:"download"},{t:3,v:", aby wgrać firmware na ekran z własnego komputera. "},{t:4,k:"check"},{t:3,v:" tylko sprawdza poprawność, "},{t:4,k:"build"},{t:3,v:" kompiluje, "},{t:4,k:"install"},{t:3,v:" wgrywa firmware na ekran. Twoje kafelki w ESP Screens zostają bez zmian. Pierwsza kompilacja trwa kilka minut."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdź"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Tylko kompiluj"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i zainstaluj"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i pobierz"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Brak narzędzia ESPHome CLI. Zaktualizuj aplikację do wersji 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz właściwy profil, a potem port USB, adres IP lub „Pobierz”."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj na"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nie znaleziono jeszcze płytki na komputerze z Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz · wgraj z własnego komputera"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP lub nazwa hosta"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Pobierz "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Wgraj go na ekran przez "},{t:4,k:"esphome_web"},{t:3,v:" w Chrome lub Edge: „Connect”, wybierz port USB ekranu, „Install” i wskaż ten plik. Zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil zapisany."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Chwileczkę…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do pobrania."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens tworzy własny profil ekranu z unikalnymi kluczami i kompiluje firmware. Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant albo pobierz firmware i wgraj go na ekran z własnego komputera."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Jaki masz ekran?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 cala"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 cale"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ekran w salonie"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa urządzenia"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"dostosuj"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Każdy ekran dostaje własny profil z własnymi kluczami. Cztery ekrany? Przejdź przez to cztery razy, za każdym razem z inną nazwą."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Małe litery, cyfry i myślniki. Inna nazwa dla każdego ekranu."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa sieci Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Hasło Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij raz: ESP Screens zapisze to w pliku secrets.yaml ESPHome, a kolejne ekrany użyją tego automatycznie."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"W Twoim pliku secrets.yaml ESPHome wciąż brakuje danych Wi-Fi. ESP Screens uzupełni tylko brakujące wiersze."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Dane Wi-Fi pochodzą z Twojego pliku secrets.yaml ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Plik secrets.yaml w folderze ESPHome nie jest poprawnym YAML. Najpierw popraw plik; nie zostanie nadpisany."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj przez"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Później · tylko zapisz profil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant; lista odświeża się sama. Albo wybierz „Pobierz”, aby użyć własnego komputera."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz firmware i wgraj go na ekran z własnego komputera, w Chrome lub Edge. Potem aktualizacje idą przez Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Profil trafi do folderu ESPHome. Zainstalujesz go później w sekcji „Firmware i USB” albo w ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Podłączono więcej niż jedną płytkę: wybierz port tego ekranu."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Raz przez USB; potem wszystko bezprzewodowo."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz profil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Kompilacja lub instalacja już trwa ("},{t:4,k:"file"},{t:3,v:"). Poczekaj, aż się zakończy."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"W tej instalacji brakuje narzędzia ESPHome CLI; można tylko zapisać profil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" jest w folderze ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Wgrywanie firmware: "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware gotowy: "},{t:4,k:"name"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware wgrany: "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Kompilacja nieudana"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Instalacja nieudana"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj go później w sekcji „Firmware i USB”: wybierz ten profil, a potem port USB komputera z Home Assistant albo „Pobierz”, aby wgrać firmware na ekran z własnego komputera. Zachowaj klucz API do parowania:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Nie odłączaj jeszcze kabla USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: instalacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: kompilacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Wgraj go na ekran z własnego komputera, a potem sparuj ekran z Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. Teraz sparuj go z Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków. Teraz sparuj go z Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Zobacz log poniżej."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" kablem USB do transmisji danych."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran do komputera"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" w Chrome lub Edge, kliknij „Connect” i wybierz port USB ekranu."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Otwórz "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij „Install”"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Plik zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" To dzieje się poza ESP Screens. Home Assistant wykryje "},{t:4,k:"name"},{t:3,v:" jako urządzenie ESPHome; kliknij „Dodaj”. Nie wykryto? Dodaj ESPHome ręcznie, podając adres IP ekranu."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Przejdź do Home Assistant → Ustawienia → Urządzenia oraz usługi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" widoczny powyżej, gdy Home Assistant poprosi o klucz szyfrujący."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wklej klucz API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integracja ESPHome → Konfiguruj → „Zezwól urządzeniu na wykonywanie akcji Home Assistant”. Bez tego ekran widzi wszystko, ale niczym nie steruje."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zezwól na akcje HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Po powrocie do ESP Screens ekran pojawi się na liście po lewej w ciągu około trzydziestu sekund; do tego czasu jest tam opisany jako „jeszcze nie w Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz kafelki."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Ponów"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj kolejny ekran"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od nowa"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerty · ściąga"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienie na cały ekran, z automatyzacji."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma akcję "},{t:4,k:"action"},{t:3,v:". Wyświetla ona kartę nad wszystkim, budzi ekran i utrzymuje normalną jasność podświetlenia, dopóki ktoś nie dotknie przycisku albo nie upłynie limit czasu. Sam Home Assistant nie pokazuje dla akcji ESPHome żadnych objaśnień ani list rozwijanych; wszystko, co możesz wypełnić, znajdziesz tutaj."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga wciąż się ładuje; chwileczkę."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś jest przy drzwiach"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Drzwi 3, tylne"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Idę"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sekcje"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Wypróbuj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Twoje ekrany"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"W automatyzacji"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Pola"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ikony"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kolory"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Działanie"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Zdarzenia"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Wskazówki"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij teraz jeden alert z tymi samymi polami, które wysyła automatyzacja. Ekran pokaże kartę, a przy włączonym miganiu mignie podświetleniem."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},all:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany (gotowe: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niegotowy"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tytuł"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Podtytuł"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kolor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Tekst przycisku"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu (sekundy, 0 czeka na przycisk)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Migaj podświetleniem"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cztery razy, gdy przychodzi alert."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Wysyłanie…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekran."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekrany."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Wysłano na ekran "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Wysłano na ekran."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Pominięto 1 ekran (offline lub stary firmware)."},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekrany (offline lub stary firmware)."}]},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekranów (offline lub stary firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Puste pola: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Żaden ekran nie mógł go pokazać: sprawdź, czy któryś ekran jest online i ma firmware "},{t:4,k:"version"},{t:3,v:" lub nowszy."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Biały (domyślny)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma własną akcję, której nazwa zawiera nazwę urządzenia. Od wersji firmware "},{t:4,k:"version"},{t:3,v:"; starszy ekran zaktualizuj przyciskiem „Aktualizuj” na liście ekranów."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie sparowano jeszcze żadnego ekranu. Zainstaluj go w sekcji „Nowy ekran”; akcja pojawi się, gdy Home Assistant zobaczy ekran."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Potrzebna aktualizacja · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznana nazwa urządzenia · zaktualizuj ekran"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Pokaż alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" i wyszukaj "},{t:4,k:"esphome"},{t:3,v:". Wybierz akcję swojego ekranu: Home Assistant opisuje ją po angielsku jako „Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj akcję"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nazwa urządzenia"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant pyta o wszystkie siedem; to, czego nie używasz, zostaw puste ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", wyłączone)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij pola."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Wolisz YAML? Wybierz "},{t:4,k:"edit"},{t:3,v:" w menu akcji i wklej poniższy przykład."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Przykład dla"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"ekranu (jeszcze niesparowanego)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj w YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany naraz"}},text:{t:0,b:{t:2,i:[{t:3,v:"Wywołaj zdarzenie "},{t:4,k:"show"},{t:3,v:" z tymi samymi polami, a ESP Screens przekaże alert każdemu ekranowi, który jest online, także ekranom dodanym później. "},{t:4,k:"dismiss"},{t:3,v:" usuwa go wszędzie. W automatyzacji dodaj akcję "},{t:4,k:"event"},{t:3,v:" albo wybierz "},{t:4,k:"edit"},{t:3,v:" i wklej przykład. Pomiń pola, których nie używasz. ESP Screens musi przy tym działać."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom zdarzenie ręcznie"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst jest dowolny; limit liczy się w bajtach, a litera ze znakiem diakrytycznym (np. ą, ł, ś) liczy się jako dwa. Co się nie zmieści, kończy się wielokropkiem (tytuł) lub zostaje pominięte (podtytuł)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Pole"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Typ"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Co robi"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Przykład"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"liczba"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"wł. / wył."}},entity:{t:0,b:{t:2,i:[{t:3}],s:"encja"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" B · Guition "},{t:4,k:"guition"},{t:3,v:" B"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"od 0 do 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:", na przykład "},{t:4,k:"example"},{t:3,v:". Działa też "},{t:4,k:"mdi"},{t:3,v:" i kod szesnastkowy ("},{t:4,k:"hex"},{t:3,v:"). Firmware zawiera tylko te ikony; każda inna nazwa pokazuje trójkąt ostrzegawczy. Kliknij ikonę, aby skopiować jej nazwę."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Przydatne do powiadomień"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie lub opisie…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Dostępne też: ikony sterowania i pogody"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Kopiuj "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Brak ikony dla „"},{t:4,k:"query"},{t:3,v:"”. Nieznane nazwy pokazują trójkąt ostrzegawczy ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:". To pastelowe odcienie kafelków, z ciemnym tekstem. Pusta lub nieznana nazwa daje białą kartę. Kliknij, aby skopiować."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Alert od razu budzi przyciemniony lub wygaszony ekran i pojawia się nad każdą stroną, każdą otwartą kartą światła i warstwą czuwania."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Budzi ekran."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dopóki karta jest widoczna, podświetlenie ma normalną jasność. Czuwanie i godziny nocne czekają. Po naciśnięciu przycisku zwykły czas do czuwania biegnie od nowa."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Świeci do naciśnięcia przycisku."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" czeka na przycisk bez względu na to, jak długo to trwa. Przy "},{t:4,k:"minute"},{t:3,v:" karta znika po minucie, ale przycisk zamyka ją wcześniej."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" miga podświetleniem cztery razy, gdy przychodzi alert (około sekundy), a potem zostawia ekran włączony."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Miganie."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Nowy alert zastępuje bieżący; alerty się nie kumulują. Zastąpiony alert zgłasza się jako "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zastępowanie."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" usuwa kartę, na przykład gdy drzwi są już otwarte. Gdy nie ma alertu, ta akcja nic nie robi."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zdalne zamykanie."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" nic nie robi; kartę zamyka tylko przycisk. Dzięki temu dotknięcie budzące ekran nigdy przypadkiem nie zamknie alertu."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie obok karty"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Każde zakończenie alertu wywołuje zdarzenie "},{t:4,k:"event"},{t:3,v:" z polami "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (nazwa urządzenia) i "},{t:4,k:"device_id"},{t:3,v:", które dodaje Home Assistant. Zobaczysz je w sekcji Ustawienia → Narzędzia → Zdarzenia."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Kiedy"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Czekanie, aż ktoś naciśnie przycisk"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Użyj "},{t:4,k:"bold"},{t:3,v:": pomarańczowy dla drzwi, czerwony dla dymu lub wody, zielony dla „gotowe”. Tekst zawsze pozostaje ciemny i czytelny."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"osobnego koloru dla każdego rodzaju powiadomienia"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tytuł niech będzie "},{t:4,k:"bold"},{t:3,v:"; ekran pokazuje około dwudziestu znaków w jednym wierszu, a dłuższy tytuł kończy wielokropkiem. Szczegóły umieść w podtytule."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"krótki"}},button:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" zamienia powiadomienie w pytanie: „Idę”, „Widzę”, „Wyłącz”. Zdarzenie powie Ci potem, kto odpowiedział."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"Własny tekst przycisku"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Alert, który sam się rozwiązuje (drzwi się otwierają, ktoś wyjmuje pranie), zamknij w tej samej automatyzacji akcją "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany? Wywołaj "},{t:4,k:"event"},{t:3,v:" raz (zobacz „Wszystkie ekrany naraz”). Ekrany nadal działają niezależnie i każdy zgłasza się z własnym polem "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Wolisz "},{t:4,k:"bold"},{t:3,v:" o automatyzację? Zainstaluj umiejętność ESP Screens w sekcji Ustawienia → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"poprosić Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Dzwonek: pokaż alert i poczekaj, aż ktoś naciśnie przycisk."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś idzie do drzwi."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Zaawansowane · lokalne nadpisanie"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Nadpisanie YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Ten mały plik należy do Ciebie. Jest wczytywany po wspólnym pakiecie ekranu i zostaje na miejscu, gdy ESP Screens się aktualizuje. Zmieniaj tu szczegóły sprzętu, na przykład model wyświetlacza."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Co można bezpiecznie zmieniać?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Wyświetlacz, ekran dotykowy, substitutions, piny i inne szczegóły urządzenia. Nazwa, Wi-Fi, API, OTA i odnośniki do pakietów pozostają zarządzane przez aplikację."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Aktywne"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do dołączenia"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokalne nadpisanie YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Użyj przykładu"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyść"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 znak"},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaków"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wiersz"},{t:2,i:[{t:4,k:"n"},{t:3,v:" wiersze"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wierszy"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i sprawdź"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz nadpisanie"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany tutaj zadziałają przy następnej kompilacji."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz raz, aby dołączyć ten plik do profilu."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie i zapisywanie…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Nadpisanie zostaje zachowane podczas aktualizacji firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano nadpisanie YAML."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. ESPHome sprawdza cały profil…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sprawdza profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sprawdza profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Cały profil jest poprawny. Można bezpiecznie kompilować i instalować."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome odrzucił cały profil. Pełny log znajdziesz w sekcji „Firmware i USB”."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić obecny tekst przykładem?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Wczytano przykład. Zapisz go, kiedy zechcesz."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyścić lokalne nadpisanie?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Po zapisaniu nadpisanie będzie puste."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Dom"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznany"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"niedostępny"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"grzanie/chłodzenie"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"tylko wentylator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"wentylator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"podgrzewanie wstępne"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"rozmrażanie"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"otwieranie"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"zamykanie"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"odtwarzanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"tryb czuwania"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"w domu"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"poza domem"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"powyżej horyzontu"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"poniżej horyzontu"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"zadokowany"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"sprzątanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"wraca do stacji dokującej"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"słonecznie"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"pogodna noc"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"pochmurno"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"częściowe zachmurzenie"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszczowo"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"ulewa"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"opady śniegu"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszcz ze śniegiem"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"mgła"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"grad"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"wyładowania atmosferyczne"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"burza"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"wietrznie"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"warunki nadzwyczajne"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ładowania"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"zimno"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"połączono"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"rozłączono"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"gorąco"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"odblokowano"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"zablokowano"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"w ruchu"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ruchu"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"podłączono"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"odłączono"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"ok"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"działa"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"nie działa"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"zagrożenie"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"brak zagrożenia"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"dostępna aktualizacja"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"brak aktualizacji"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktywuj"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Naciśnij"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Przed chwilą"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min temu"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 godzinę temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin temu"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Wczoraj"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 tydzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodnie temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodni temu"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 miesiąc temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesiące temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesięcy temu"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 rok temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lata temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lat temu"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 godzinę"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godzin"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Jutro"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 dzień"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"niedziela"}},{t:0,b:{t:2,i:[{t:3}],s:"poniedziałek"}},{t:0,b:{t:2,i:[{t:3}],s:"wtorek"}},{t:0,b:{t:2,i:[{t:3}],s:"środa"}},{t:0,b:{t:2,i:[{t:3}],s:"czwartek"}},{t:0,b:{t:2,i:[{t:3}],s:"piątek"}},{t:0,b:{t:2,i:[{t:3}],s:"sobota"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"nd"}},{t:0,b:{t:2,i:[{t:3}],s:"pn"}},{t:0,b:{t:2,i:[{t:3}],s:"wt"}},{t:0,b:{t:2,i:[{t:3}],s:"śr"}},{t:0,b:{t:2,i:[{t:3}],s:"cz"}},{t:0,b:{t:2,i:[{t:3}],s:"pt"}},{t:0,b:{t:2,i:[{t:3}],s:"sb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"stycznia"}},{t:0,b:{t:2,i:[{t:3}],s:"lutego"}},{t:0,b:{t:2,i:[{t:3}],s:"marca"}},{t:0,b:{t:2,i:[{t:3}],s:"kwietnia"}},{t:0,b:{t:2,i:[{t:3}],s:"maja"}},{t:0,b:{t:2,i:[{t:3}],s:"czerwca"}},{t:0,b:{t:2,i:[{t:3}],s:"lipca"}},{t:0,b:{t:2,i:[{t:3}],s:"sierpnia"}},{t:0,b:{t:2,i:[{t:3}],s:"września"}},{t:0,b:{t:2,i:[{t:3}],s:"października"}},{t:0,b:{t:2,i:[{t:3}],s:"listopada"}},{t:0,b:{t:2,i:[{t:3}],s:"grudnia"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"sty"}},{t:0,b:{t:2,i:[{t:3}],s:"lut"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"kwi"}},{t:0,b:{t:2,i:[{t:3}],s:"maj"}},{t:0,b:{t:2,i:[{t:3}],s:"cze"}},{t:0,b:{t:2,i:[{t:3}],s:"lip"}},{t:0,b:{t:2,i:[{t:3}],s:"sie"}},{t:0,b:{t:2,i:[{t:3}],s:"wrz"}},{t:0,b:{t:2,i:[{t:3}],s:"paź"}},{t:0,b:{t:2,i:[{t:3}],s:"lis"}},{t:0,b:{t:2,i:[{t:3}],s:"gru"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pt-Brrep2mC.js b/screen_manager/app/static/assets/pt-CJagQk1v.js similarity index 97% rename from screen_manager/app/static/assets/pt-Brrep2mC.js rename to screen_manager/app/static/assets/pt-CJagQk1v.js index 1f671dd..742e15e 100644 --- a/screen_manager/app/static/assets/pt-Brrep2mC.js +++ b/screen_manager/app/static/assets/pt-CJagQk1v.js @@ -1 +1 @@ -const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Desfazer"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"desconhecido"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Alterações não guardadas"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancelar"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Abrir Dispositivos & serviços"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e enviar"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A guardar…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Ler dados atuais"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" resultado. Continue a escrever para filtrar."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultados. Continue a escrever para filtrar."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Fechar"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Alterar"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"A carregar…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Voltar"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Novo ecrã"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertas"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou. Recarregue a página e tente novamente."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chave API copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A chave API está selecionada. Copie-a com Ctrl+C ou Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON do layout copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O JSON do layout está selecionado. Copie-o com Ctrl+C ou Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da ação copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da ação está selecionado. Copie-o com Ctrl+C ou Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O YAML está selecionado. Copie-o com Ctrl+C ou Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome do ícone copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome do ícone está selecionado. Copie-o com Ctrl+C ou Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Cor vazia copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A cor vazia está selecionada. Copie-a com Ctrl+C ou Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da cor copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da cor está selecionado. Copie-o com Ctrl+C ou Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Página de gestão inacessível · a tentar novamente…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Ligado ao Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"A ligar novamente ao Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Recarregar"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Na fila para atualizar"}},available:{t:0,b:{t:2,i:[{t:3,v:"Atualização para "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome com este nome de dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novidades"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registo completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"O endereço IP, só desta vez; o firmware novo passa a comunicá-lo sozinho."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP, p. ex. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Instalado, mas ainda não está no Home Assistant. Adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e ative «Permitir que o dispositivo execute ações do Home Assistant» em Configurar."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware descarregado; ainda não está no Home Assistant. Instale-o no ecrã com o ESPHome Web e depois adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e permita as ações do Home Assistant em Configurar."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Ainda não está no Home Assistant. Já instalou o firmware? Adicione o dispositivo ESPHome em Configuração → Dispositivos & serviços e depois permita as ações do Home Assistant em Configurar. Ainda não? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copiar chave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar a este ecrã"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guia rápido e um alerta de teste"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nada para guardar"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar este ecrã"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Faz piscar a retroiluminação e mostra um cartão"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa de um firmware mais recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar e copiar como JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Procurar ecrãs, entidades, ações…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Sem resultados. Escreva parte do nome de um ecrã, entidade ou ação."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um dos seus ecrãs à esquerda para alterar os mosaicos, a barra superior e as definições."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Comece com um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ligue um CYD ou um Guition por USB à máquina do Home Assistant. Perfil, firmware e primeira instalação ficam feitos de uma só vez."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novo ecrã"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Tem alterações não guardadas. Abrir outro ecrã mesmo assim?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado por uma cópia do layout do outro ecrã?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado pelo importado?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O seu ecrã está a ser atualizado."}},other:{t:0,b:{t:2,i:[{t:3,v:"Guardado. "},{t:4,k:"name"},{t:3,v:" está a ser atualizado."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ecrã está a ser atualizado."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. A sua alteração mais recente ainda não foi enviada: prima Guardar e enviar outra vez."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" pisca e mostra um cartão durante alguns segundos."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · as alterações ficam guardadas"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições do ecrã"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Guardado · enviado para o ecrã"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tudo guardado"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"faz piscar o ecrã"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa do firmware 0.2.31 ou mais recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"do Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar layout de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum outro ecrã"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaico"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaicos"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importar layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avançado"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Não há espaço para este mosaico na página "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Não há nenhuma página livre para um mosaico de página inteira. Liberte primeiro uma página."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã já tem um mosaico que leva à página "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado. Prima Guardar e enviar quando estiver bem."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout importado. Prima Guardar e enviar quando estiver bem."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout importado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Isso não é JSON. Exporte primeiro um layout ou cole um de outro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Este ficheiro não tem mosaicos. Era esperado um layout exportado do ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" página · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" páginas · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a primeira luz, cena ou dispositivo a partir da biblioteca."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Toque na barra superior ou num mosaico para o alterar. Arraste para mover; largue na página seguinte para criar uma nova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Os espaços vazios e as posições fixas funcionam a partir do firmware 0.2.26. Até essa atualização, este ecrã (firmware "},{t:4,k:"firmware"},{t:3,v:") sobe os mosaicos para o primeiro espaço livre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Layout do ecrã"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar página"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" página"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" páginas"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover página"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"As páginas seguintes sobem uma posição"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Editar barra superior"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Espaço vazio. Clique para adicionar aqui um mosaico ou arraste um para cá."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Espaço vazio "},{t:4,k:"slot"},{t:3,v:" na página "},{t:4,k:"page"},{t:3,v:": adicione aqui o próximo mosaico"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"O próximo mosaico fica aqui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vazio"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteca"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entidade"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entidades"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome, dispositivo ou divisão…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar uma entidade"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tudo"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luzes"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptores"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinhas"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coberturas"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cenas"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensores"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valores"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletores"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoas"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizadores"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Divisão"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Todas as divisões"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar adicionadas"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar o que já está neste ecrã"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que está aqui já está neste ecrã."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada. Experimente outro nome, divisão ou filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico; atualize o firmware para ter 48."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos; atualize o firmware para ter 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para uma página ou toque em + para adicionar ao primeiro espaço livre. ⌘K procura em tudo."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luz"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinha"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cobertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sol"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizador"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoa"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Câmara"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Imagem"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entidade"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"padrão"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"gráfico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"relógio analógico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"trajetória do sol"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"duplo"}},full:{t:0,b:{t:2,i:[{t:3}],s:"página inteira"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome no ecrã"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automático (do Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automático (predefinido)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o ícone escolhido a partir do firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Leva à página"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vazia)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Os mosaicos de navegação precisam do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã não tem página "},{t:4,k:"page"},{t:3,v:", por isso um toque abre a última página. Escolha outra página."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Um toque no mosaico abre essa página."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Apresentação"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Relógio analógico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e estado"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Gráfico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Trajetória do sol"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem valores numéricos para esta entidade, por isso o gráfico fica vazio. Escolha outra apresentação."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Este serviço meteorológico não tem previsão diária no Home Assistant. Escolha outra apresentação."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tamanho"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Largura dupla"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira: um botão grande que se ilumina enquanto está ligado; em baixo fica um controlo deslizante, controlos ou um gráfico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Um mosaico de página inteira precisa do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Página"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nova página"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo direto no mosaico"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não oferece este controlo para esta entidade, por isso fica vazio no ecrã. Escolha outro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na parte de baixo do mosaico de página inteira; um toque em qualquer outro sítio funciona como definido abaixo."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"À direita do mosaico de largura dupla, como as linhas no Home Assistant. Tocar no nome funciona como definido abaixo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o controlo direto a partir do firmware 0.2.19; até lá, o mosaico fica como estava."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ao tocar"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automático"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Abrir controlo"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Só ver"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Ligar / desligar"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Executar ação"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não consegue ligar e desligar isto, por isso um toque não faz nada. Escolha outra opção."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã liga e desliga isto a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque abre o respetivo cartão."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Mantenha o mosaico premido para abrir o respetivo cartão."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo deslizante pequeno no mosaico"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Não"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sim, controlo direto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem nada que um controlo deslizante possa alterar nesta entidade. Escolha Não."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Histórico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" horas"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fundo pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fundo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:" da página "},{t:4,k:"page"},{t:3,v:". Enter: configurar; teclas de seta: mover"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover mosaico"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"A perguntar ao Home Assistant que ações tem esta entidade…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não está a responder neste momento. Tente novamente daqui a pouco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha uma ação"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo alternar, posição ou reproduzir"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma ação"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma ação encontrada."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant já não oferece esta ação para esta entidade, por isso um toque não faz nada. Escolha outra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Não definido"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ativado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desativado"}},needs:{t:0,b:{t:2,i:[{t:3,v:"O Home Assistant precisa de "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã executa ações a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque funciona como Automático."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo candeeiro, música ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone, só texto"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ícone: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhum ícone encontrado."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dados atuais"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ligação, estado e propriedades suportadas"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"A ler…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"A obter o estado atual do HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Estado: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Controlo deslizante pequeno: "},{t:4,k:"slider"},{t:3,v:" · Apresentação: "},{t:4,k:"display"},{t:3,v:" · Tamanho: "},{t:4,k:"size"},{t:3,v:" · Controlo: "},{t:4,k:"control"},{t:3,v:" · Fundo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sim"}},no:{t:0,b:{t:2,i:[{t:3}],s:"não"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinido"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Ler novamente"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido da barra superior: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Na barra superior cabe "},{t:4,k:"n"},{t:3,v:" elemento."}]},{t:2,i:[{t:3,v:"Na barra superior cabem "},{t:4,k:"n"},{t:3,v:" elementos."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Isto já está na barra superior."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superior"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superior: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã; também funciona sem o Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Esquerda: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Por exemplo: Sala de estar"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Direita: hora, sensores ou um relógio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:". Enter: configurar; setas: mover"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"},{t:3,v:" da barra superior"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a hora, a data, o relógio analógico ou uma entidade"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar hora, data ou uma entidade"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nem tudo cabe ao lado do nome: o ecrã omite os elementos tracejados. Remova um ou escolha um nome mais curto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para reordenar; toque num elemento para o configurar."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Os sensores, a data e o relógio analógico aparecem a partir do firmware "},{t:4,k:"version"},{t:3,v:"; até essa atualização, este ecrã mostra o nome e, se a hora estiver na barra, o relógio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto: agora não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Não cabe ao lado do nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto neste momento: não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"De momento não cabe ao lado do nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Assim fica no ecrã"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador pequeno com a hora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"O que mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Última alteração» continua a contar no próprio ecrã: «Agora mesmo», «Há 5 min», «Ontem»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automático (como no Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Apenas quando ativo» oculta o elemento enquanto estiver desligado, fechado, ausente ou a 0. Útil para uma porta aberta, uma máquina de lavar a funcionar ou quem está em casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 24 horas · altere em "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 12 horas · altere em "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições → Idioma e região"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Hoje: "},{t:4,k:"date"},{t:3,v:". A data segue o relógio do próprio ecrã."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Subir"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Descer"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar à barra superior"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaço usado"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaços usados"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Já adicionado"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Sugestões do Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Uma entidade"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure por nome, divisão ou entidade, p. ex. temperatura ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma entidade para a barra superior"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noite"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modo escuro"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Espera automática"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Espera após"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho em espera"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modo noturno"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Início"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fim"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho noturno"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Voltar à página 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Após"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Também em espera"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Deslizar entre páginas"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Botões de página"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotação"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da manhã"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da tarde"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Ainda se estão a guardar as definições do outro ecrã. Tente novamente daqui a pouco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Os botões de página e o deslizar estão desativados, por isso só os mosaicos «Ir para a página» mudam de página."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"a página "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"as páginas "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Não tem mosaicos «Ir para a página»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Os mosaicos para "},{t:4,k:"pages"},{t:3,v:" só estão em páginas a que não consegue chegar."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Desde "},{t:4,k:"pages"},{t:3,v:", nenhum mosaico leva de volta à página 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Este ecrã está offline. Poderá alterar as definições quando voltar."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato no ecrã e aparecem aqui quando são feitas lá."}},app:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato. Com o firmware 0.2.49, o próprio ecrã guarda-as."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Esta entidade está desativada no Home Assistant ou o ecrã está a reiniciar."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": menos"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": mais"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"A iniciar a atualização…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"A gravar o firmware por Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"A compilar e a instalar…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"À espera que o ecrã volte…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"A verificar se se mantém estável…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Novo idioma: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs vão passar a atualizar-se automaticamente à noite."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"As atualizações automáticas estão desativadas."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações de firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A atualizar para o firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Ainda não há nenhum ecrã emparelhado. Os novos ecrãs recebem o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs têm o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Atualizar "},{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:3,v:"Atualizar os "},{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novidades do firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar automaticamente todas as noites"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre as 03:00 e as 06:00, um ecrã de cada vez. Para se houver um erro e comunica-o no Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. O Claude Code deteta-a de imediato."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. Reinicie o Claude Code uma vez para que encontre a nova pasta de habilidades."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ensine o Claude a usar o ESP Screens e depois peça: «Mostra um alerta em todos os meus ecrãs quando a caixa do correio estiver cheia.» O Claude conhece os eventos de alerta e todos os campos, cores e ícones."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar para o Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novamente"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar a habilidade"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Não instalada"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Instalada"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Instalada · há uma versão mais recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Para o Claude Code no Home Assistant. Escreve um ficheiro em "},{t:4,k:"path"},{t:3,v:"; instalar novamente substitui-o."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar para o claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carregue o zip no Claude, em Personalizar → Habilidades."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que rodeia os seus ecrãs."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Os meus ecrãs"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Adicione um ecrã, ou compile e reinstale o firmware de um que já tenha."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar por USB ou Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Idioma e região"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Idioma dos ecrãs"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Idioma do Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Idioma do Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs usam inglês até o idioma do Home Assistant estar disponível."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · ainda não revisto, ajuda bem-vinda"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" ainda não foi revisto; toda a ajuda é bem-vinda: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"como traduzir"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Depois de uma alteração, cada ecrã precisa de uma atualização de firmware, uma compilação por ecrã: com o respetivo botão Atualizar ou nas atualizações noturnas."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato de hora"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 horas"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 horas"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formatação numérica"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"O seu perfil do Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usar estes"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"O próprio editor segue o idioma do seu perfil do Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Cada ecrã passa a usar o novo idioma na próxima atualização."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Um cartão sobre todo o ecrã a partir de uma automatização, num ecrã ou em todos. O guia rápido tem os nomes das ações, os campos, os ícones e as cores, e um formulário para experimentar um alerta."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notificações em ecrã inteiro, a partir de uma automatização"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar o firmware dos ecrãs"}},intro:{t:0,b:{t:2,i:[{t:3,v:"A CLI do ESPHome integrada usa o seu próprio perfil (YAML com chaves) e os seus segredos. Escolha o perfil do ecrã e depois uma porta USB (ecrã ligado à máquina do Home Assistant), "},{t:4,k:"ota"},{t:3,v:" com o nome do anfitrião, ou "},{t:4,k:"download"},{t:3,v:" para instalar o firmware no ecrã a partir do seu próprio computador. "},{t:4,k:"check"},{t:3,v:" só valida, "},{t:4,k:"build"},{t:3,v:" compila e "},{t:4,k:"install"},{t:3,v:" instala o firmware no ecrã. Os seus mosaicos ficam como estão no ESP Screens. A primeira compilação demora alguns minutos."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verificar"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Só compilar"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e descarregar"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome. Atualize a app para a versão 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha o perfil pretendido e depois uma porta USB, um endereço IP ou Descarregar."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Perfil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Instalar em"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · ainda não foi encontrada nenhuma placa na máquina do Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar · instalar a partir do seu próprio computador"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP ou nome do anfitrião"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Descarregar "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Instale-o no ecrã com o "},{t:4,k:"esphome_web"},{t:3,v:" no Chrome ou no Edge: Connect, escolha a porta USB do ecrã, Install e selecione este ficheiro. Contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Perfil guardado."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Um momento…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para descarregar."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"O ESP Screens cria o perfil próprio do ecrã com chaves únicas e compila o firmware. Ligue o ecrã com um cabo USB de dados à máquina onde corre o Home Assistant, ou descarregue o firmware e instale-o no ecrã a partir do seu próprio computador."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Que ecrã tem?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 polegadas"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 polegadas"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã da sala"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizar"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cada ecrã tem o seu próprio perfil com as suas próprias chaves. Quatro ecrãs? Faça isto quatro vezes com um nome diferente."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Letras minúsculas, algarismos e hífenes. Um nome diferente para cada ecrã."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome da rede Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Palavra-passe da rede Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Preencha só uma vez: o ESP Screens guarda isto no secrets.yaml do ESPHome e os ecrãs seguintes usam-no automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Ainda faltam os dados de Wi-Fi no seu secrets.yaml do ESPHome. O ESP Screens só preenche as linhas em falta."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"A rede Wi-Fi vem do seu secrets.yaml do ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"O secrets.yaml na pasta do ESPHome não é YAML válido. Corrija primeiro o ficheiro; não vai ser substituído."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Instalar através de"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Mais tarde · só guardar o perfil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã com um cabo USB de dados à máquina do Home Assistant; a lista atualiza-se sozinha. Ou escolha Descarregar para usar o seu próprio computador."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregue o firmware e instale-o no ecrã a partir do seu próprio computador, no Chrome ou no Edge. Depois disso, as atualizações são feitas por Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"O perfil fica na pasta do ESPHome. Pode instalar mais tarde através de Firmware e USB ou a partir do ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Há mais do que uma placa ligada: escolha a porta deste ecrã."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Uma vez por USB; depois disso, tudo é sem fios."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Guardar perfil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Já está a decorrer uma compilação ou instalação ("},{t:4,k:"file"},{t:3,v:"). Aguarde que termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome nesta instalação; só é possível guardar o perfil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" está na pasta do ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"A gravar o firmware em "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"O firmware para "},{t:4,k:"name"},{t:3,v:" está pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"O firmware já está em "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"A compilação falhou"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"A instalação falhou"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o mais tarde a partir de Firmware e USB: escolha este perfil e depois a porta USB da máquina do Home Assistant, ou Descarregar para instalar o firmware no ecrã a partir do seu próprio computador. Guarde a chave API para o emparelhamento:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Não desligue ainda o cabo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a instalação continua e volta a encontrá-la em Novo ecrã."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a compilação continua e volta a encontrá-la em Novo ecrã."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o no ecrã a partir do seu próprio computador e depois emparelhe o ecrã com o Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. Emparelhe-o agora com o Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes. Emparelhe-o agora com o Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Consulte o registo abaixo."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" com um cabo USB de dados."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã ao seu computador"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" no Chrome ou no Edge, clique em Connect e escolha a porta USB do ecrã."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Abra o "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Clique em Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"O ficheiro contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Isto acontece fora do ESP Screens. O Home Assistant descobre "},{t:4,k:"name"},{t:3,v:" como dispositivo ESPHome; clique em Adicionar. Não foi descoberto? Adicione o ESPHome manualmente com o endereço IP do ecrã."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vá ao Home Assistant → Configuração → Dispositivos & serviços."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" acima quando o Home Assistant pedir a chave de encriptação."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cole a chave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integração ESPHome → Configurar → «Permitir que o dispositivo execute ações do Home Assistant». Sem isto, o ecrã vê tudo mas não controla nada."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Permita as ações do HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De volta ao ESP Screens, o ecrã aparece na lista à esquerda em cerca de trinta segundos; até lá, aparece aí como «ainda não está no Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Escolha os seus mosaicos."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registo do ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Tentar novamente"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Instalar outro ecrã"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Recomeçar"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertas · guia rápido"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Uma notificação em ecrã inteiro, a partir de uma automatização."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a ação "},{t:4,k:"action"},{t:3,v:". Coloca um cartão por cima de tudo, acorda o ecrã e mantém a retroiluminação no brilho normal até alguém tocar no botão ou o tempo limite acabar. O próprio Home Assistant não mostra explicações nem listas pendentes para as ações do ESPHome; tudo o que pode preencher está aqui."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"O guia rápido ainda está a carregar; um momento."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Está alguém à porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, traseira"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Já vou"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Secções"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Experimente"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Os seus ecrãs"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"Numa automatização"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Os campos"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ícones"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Cores"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventos"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Dicas"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envie agora um alerta, com os mesmos campos que uma automatização envia. O ecrã mostra o cartão e, com a intermitência ativada, faz piscar a retroiluminação."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},all:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs (prontos: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · não está pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Título"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtítulo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Cor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texto do botão"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite (segundos; 0 espera pelo botão)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fazer piscar a retroiluminação"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quatro vezes quando o alerta chega."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"A enviar…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Enviar alerta"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Enviado para o ecrã."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã ignorado (offline ou firmware antigo)."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs ignorados (offline ou firmware antigo)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Deixados vazios: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ecrã o conseguiu mostrar: verifique se há um ecrã online com o firmware "},{t:4,k:"version"},{t:3,v:" ou mais recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Branco (predefinido)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a sua própria ação, com o nome do dispositivo. A partir do firmware "},{t:4,k:"version"},{t:3,v:"; atualize um ecrã mais antigo com o respetivo botão Atualizar em Ecrãs."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Ainda não há nenhum ecrã emparelhado. Instale um através de Novo ecrã; a ação aparece assim que o Home Assistant vir o ecrã."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Atualização necessária · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo desconhecido · atualize o ecrã"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar alerta"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Descartar alerta"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Clique em "},{t:4,k:"add"},{t:3,v:" e procure "},{t:4,k:"esphome"},{t:3,v:". Escolha a ação do seu ecrã: o Home Assistant chama-lhe «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar ação"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome do dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" O Home Assistant pede os sete; deixe vazio o que não usar ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", desativado)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Preencha os campos."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefere YAML? Escolha "},{t:4,k:"edit"},{t:3,v:" na ação e cole o exemplo abaixo."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo para"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"um ecrã (ainda não emparelhado)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Editar em YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copiar YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs de uma vez"}},text:{t:0,b:{t:2,i:[{t:3,v:"Dispare o evento "},{t:4,k:"show"},{t:3,v:" com os mesmos campos e o ESP Screens passa o alerta a todos os ecrãs online, incluindo os que adicionar mais tarde. "},{t:4,k:"dismiss"},{t:3,v:" remove-o em todo o lado. Numa automatização, adicione a ação "},{t:4,k:"event"},{t:3,v:" ou cole o exemplo em "},{t:4,k:"edit"},{t:3,v:". Omita os campos que não usar. Para isto, o ESP Screens tem de estar em execução."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Dispara evento manual"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"O texto é livre; o limite é em bytes e uma letra acentuada conta como dois. O que não couber termina em reticências (título) ou é descartado (subtítulo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"O que faz"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texto"}},int:{t:0,b:{t:2,i:[{t:3}],s:"número"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"ativado / desativado"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entidade"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"de 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:", por exemplo "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" e o código hexadecimal ("},{t:4,k:"hex"},{t:3,v:") também funcionam. O firmware só inclui estes ícones; qualquer outro nome mostra o triângulo de aviso. Toque num ícone para copiar o nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Úteis para notificações"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome ou descrição…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Também disponíveis: ícones de controlo e de meteorologia"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copiar "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ícone para «"},{t:4,k:"query"},{t:3,v:"». Os nomes desconhecidos mostram o triângulo de aviso ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:". São os tons pastel dos mosaicos, com texto escuro. Vazio ou desconhecido dá o cartão branco. Toque para copiar."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta acorda de imediato um ecrã com brilho reduzido ou apagado e aparece por cima de todas as páginas, de todos os cartões de luz abertos e da camada de espera."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acorda o ecrã."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Enquanto o cartão estiver visível, a retroiluminação mantém o brilho normal. A espera automática e o modo noturno ficam em pausa. Depois de premir o botão, o tempo de espera normal recomeça."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aceso até premir o botão."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" espera pelo botão, demore o que demorar. Com "},{t:4,k:"minute"},{t:3,v:", o cartão desaparece ao fim de um minuto, mas o botão fecha-o mais cedo."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" faz piscar a retroiluminação quatro vezes quando o alerta chega (cerca de um segundo) e depois deixa o ecrã ligado."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Intermitência."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta novo substitui o atual; não se acumulam. O alerta substituído é reportado como "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Substituição."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" remove o cartão, por exemplo se a porta já estiver aberta. Sem alerta, essa ação não faz nada."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fecho remoto."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" não faz nada; só o botão o fecha. Assim, um toque para acordar o ecrã nunca descarta o alerta por acidente."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tocar fora do cartão"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Sempre que um alerta termina, é disparado o evento "},{t:4,k:"event"},{t:3,v:" com "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (o nome do dispositivo) e o "},{t:4,k:"device_id"},{t:3,v:" que o Home Assistant acrescenta. Visível em Configuração → Ferramentas → Eventos."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Esperar que alguém prima o botão"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use uma "},{t:4,k:"bold"},{t:3,v:": laranja para a porta, vermelho para fumo ou água, verde para «concluído». O texto fica sempre escuro e legível."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"cor por tipo de notificação"}},short:{t:0,b:{t:2,i:[{t:3,v:"Mantenha o título "},{t:4,k:"bold"},{t:3,v:"; um ecrã mostra cerca de vinte caracteres numa linha e termina um título mais longo com reticências. Coloque os detalhes no subtítulo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"curto"}},button:{t:0,b:{t:2,i:[{t:3,v:"Um "},{t:4,k:"bold"},{t:3,v:" transforma a notificação numa pergunta: «Já vou», «Visto», «Desligar». Depois, o evento diz-lhe quem respondeu."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texto de botão personalizado"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Para um alerta que se resolve sozinho (a porta abre-se, alguém tira a roupa da máquina), feche-o na mesma automatização com "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs? Dispare "},{t:4,k:"event"},{t:3,v:" uma vez (ver «Todos os ecrãs de uma vez»). Os ecrãs continuam a funcionar de forma independente e cada um reporta com o seu próprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Prefere "},{t:4,k:"bold"},{t:3,v:" que faça a automatização? Instale a habilidade do ESP Screens em Definições → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"pedir ao Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campainha: mostra o alerta e espera que alguém prima o botão."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Vem alguém à porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avançado · personalização local"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizado · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Este pequeno ficheiro é seu. É carregado depois do pacote partilhado dos ecrãs e mantém-se quando o ESP Screens é atualizado. Altere aqui detalhes específicos do hardware, como o modelo do ecrã."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"O que é seguro alterar?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"As secções display, touchscreen e substitutions, os pinos e outros detalhes do dispositivo. O nome, a rede Wi-Fi, a API, a OTA e as ligações aos pacotes continuam a ser geridos pelo ESP Screens."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Ativo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para associar"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usar exemplo"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" carácter"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" caracteres"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" linha"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" linhas"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e verificar"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Guardar YAML"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"As alterações feitas aqui aplicam-se na próxima compilação."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Guarde uma vez para associar este ficheiro ao perfil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A verificar e a guardar…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O YAML personalizado mantém-se nas atualizações de firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado guardado."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ESPHome está a verificar o perfil completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome está a verificar o perfil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"O ESPHome está a verificar o perfil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"O perfil completo é válido. Pode compilar e instalar com segurança."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome rejeitou o perfil completo. Consulte Firmware e USB para ver o registo completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o texto atual pelo exemplo?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo carregado. Guarde-o quando estiver pronto."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar o YAML personalizado local?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"O YAML personalizado ficará vazio quando guardar."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Desconhecido"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponível"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Arrefecer"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer/Arrefecer"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Secar"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"A aquecer"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"A arrefecer"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Desumidificação"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Pré-Aquecimento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Descongelação"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"A abrir"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"A fechar"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"A reproduzir"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausado"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Acima do horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Abaixo do horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Na Base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"A Limpar"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Em pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"A regressar à base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensolarado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Limpo, noite"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Chuvoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Aguaceiros"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, chuvoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nevoeiro"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada, chuva"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excecional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"A carregar"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Não está a carregar"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frio"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Quente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detetada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sem luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Destrancada"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Trancado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmido"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Em movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Em casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Em execução"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Adulteração detetada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Atualização disponível"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Atualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Ativar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Executar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pressione"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Agora mesmo"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ontem"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semana"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" mês"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" ano"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" anos"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Amanhã"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"da manhã"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"da tarde"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"terça-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"seg"}},{t:0,b:{t:2,i:[{t:3}],s:"ter"}},{t:0,b:{t:2,i:[{t:3}],s:"qua"}},{t:0,b:{t:2,i:[{t:3}],s:"qui"}},{t:0,b:{t:2,i:[{t:3}],s:"sex"}},{t:0,b:{t:2,i:[{t:3}],s:"sáb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janeiro"}},{t:0,b:{t:2,i:[{t:3}],s:"fevereiro"}},{t:0,b:{t:2,i:[{t:3}],s:"março"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"maio"}},{t:0,b:{t:2,i:[{t:3}],s:"junho"}},{t:0,b:{t:2,i:[{t:3}],s:"julho"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"setembro"}},{t:0,b:{t:2,i:[{t:3}],s:"outubro"}},{t:0,b:{t:2,i:[{t:3}],s:"novembro"}},{t:0,b:{t:2,i:[{t:3}],s:"dezembro"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan."}},{t:0,b:{t:2,i:[{t:3}],s:"fev."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"abr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai."}},{t:0,b:{t:2,i:[{t:3}],s:"jun."}},{t:0,b:{t:2,i:[{t:3}],s:"jul."}},{t:0,b:{t:2,i:[{t:3}],s:"ago."}},{t:0,b:{t:2,i:[{t:3}],s:"set."}},{t:0,b:{t:2,i:[{t:3}],s:"out."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Desfazer"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"desconhecido"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Alterações não guardadas"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancelar"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Abrir Dispositivos & serviços"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e enviar"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A guardar…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Ler dados atuais"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" resultado. Continue a escrever para filtrar."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultados. Continue a escrever para filtrar."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Fechar"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Alterar"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"A carregar…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Voltar"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Novo ecrã"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertas"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou. Recarregue a página e tente novamente."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chave API copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A chave API está selecionada. Copie-a com Ctrl+C ou Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON do layout copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O JSON do layout está selecionado. Copie-o com Ctrl+C ou Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da ação copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da ação está selecionado. Copie-o com Ctrl+C ou Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O YAML está selecionado. Copie-o com Ctrl+C ou Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome do ícone copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome do ícone está selecionado. Copie-o com Ctrl+C ou Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Cor vazia copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A cor vazia está selecionada. Copie-a com Ctrl+C ou Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da cor copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da cor está selecionado. Copie-o com Ctrl+C ou Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Página de gestão inacessível · a tentar novamente…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Ligado ao Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"A ligar novamente ao Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Recarregar"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Na fila para atualizar"}},available:{t:0,b:{t:2,i:[{t:3,v:"Atualização para "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome com este nome de dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novidades"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registo completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"O endereço IP, só desta vez; o firmware novo passa a comunicá-lo sozinho."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP, p. ex. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Instalado, mas ainda não está no Home Assistant. Adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e ative «Permitir que o dispositivo execute ações do Home Assistant» em Configurar."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware descarregado; ainda não está no Home Assistant. Instale-o no ecrã com o ESPHome Web e depois adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e permita as ações do Home Assistant em Configurar."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Ainda não está no Home Assistant. Já instalou o firmware? Adicione o dispositivo ESPHome em Configuração → Dispositivos & serviços e depois permita as ações do Home Assistant em Configurar. Ainda não? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copiar chave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar a este ecrã"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guia rápido e um alerta de teste"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nada para guardar"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar este ecrã"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Faz piscar a retroiluminação e mostra um cartão"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa de um firmware mais recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar e copiar como JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Procurar ecrãs, entidades, ações…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Sem resultados. Escreva parte do nome de um ecrã, entidade ou ação."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um dos seus ecrãs à esquerda para alterar os mosaicos, a barra superior e as definições."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Comece com um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ligue um CYD ou um Guition por USB à máquina do Home Assistant. Perfil, firmware e primeira instalação ficam feitos de uma só vez."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novo ecrã"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Tem alterações não guardadas. Abrir outro ecrã mesmo assim?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado por uma cópia do layout do outro ecrã?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado pelo importado?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O seu ecrã está a ser atualizado."}},other:{t:0,b:{t:2,i:[{t:3,v:"Guardado. "},{t:4,k:"name"},{t:3,v:" está a ser atualizado."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ecrã está a ser atualizado."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. A sua alteração mais recente ainda não foi enviada: prima Guardar e enviar outra vez."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" pisca e mostra um cartão durante alguns segundos."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · as alterações ficam guardadas"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições do ecrã"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Guardado · enviado para o ecrã"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tudo guardado"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"faz piscar o ecrã"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa do firmware 0.2.31 ou mais recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"do Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar layout de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum outro ecrã"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaico"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaicos"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importar layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avançado"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Não há espaço para este mosaico na página "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Não há nenhuma página livre para um mosaico de página inteira. Liberte primeiro uma página."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã já tem um mosaico que leva à página "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado. Prima Guardar e enviar quando estiver bem."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout importado. Prima Guardar e enviar quando estiver bem."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout importado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Isso não é JSON. Exporte primeiro um layout ou cole um de outro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Este ficheiro não tem mosaicos. Era esperado um layout exportado do ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" página · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" páginas · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a primeira luz, cena ou dispositivo a partir da biblioteca."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Toque na barra superior ou num mosaico para o alterar. Arraste para mover; largue na página seguinte para criar uma nova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Os espaços vazios e as posições fixas funcionam a partir do firmware 0.2.26. Até essa atualização, este ecrã (firmware "},{t:4,k:"firmware"},{t:3,v:") sobe os mosaicos para o primeiro espaço livre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Layout do ecrã"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar página"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" página"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" páginas"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover página"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"As páginas seguintes sobem uma posição"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Editar barra superior"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Espaço vazio. Clique para adicionar aqui um mosaico ou arraste um para cá."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Espaço vazio "},{t:4,k:"slot"},{t:3,v:" na página "},{t:4,k:"page"},{t:3,v:": adicione aqui o próximo mosaico"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"O próximo mosaico fica aqui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vazio"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteca"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entidade"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entidades"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome, dispositivo ou divisão…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar uma entidade"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tudo"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luzes"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptores"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinhas"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coberturas"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cenas"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensores"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valores"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletores"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoas"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizadores"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Divisão"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Todas as divisões"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar adicionadas"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar o que já está neste ecrã"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que está aqui já está neste ecrã."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada. Experimente outro nome, divisão ou filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico; atualize o firmware para ter 48."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos; atualize o firmware para ter 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para uma página ou toque em + para adicionar ao primeiro espaço livre. ⌘K procura em tudo."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luz"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinha"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cobertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sol"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizador"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoa"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Câmara"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Imagem"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entidade"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"padrão"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"gráfico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"relógio analógico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"trajetória do sol"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"duplo"}},full:{t:0,b:{t:2,i:[{t:3}],s:"página inteira"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome no ecrã"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automático (do Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automático (predefinido)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o ícone escolhido a partir do firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Leva à página"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vazia)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Os mosaicos de navegação precisam do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã não tem página "},{t:4,k:"page"},{t:3,v:", por isso um toque abre a última página. Escolha outra página."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Um toque no mosaico abre essa página."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Apresentação"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Relógio analógico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e estado"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Gráfico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Trajetória do sol"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem valores numéricos para esta entidade, por isso o gráfico fica vazio. Escolha outra apresentação."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Este serviço meteorológico não tem previsão diária no Home Assistant. Escolha outra apresentação."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tamanho"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Largura dupla"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira: um botão grande que se ilumina enquanto está ligado; em baixo fica um controlo deslizante, controlos ou um gráfico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Um mosaico de página inteira precisa do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Página"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nova página"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo direto no mosaico"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não oferece este controlo para esta entidade, por isso fica vazio no ecrã. Escolha outro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na parte de baixo do mosaico de página inteira; um toque em qualquer outro sítio funciona como definido abaixo."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"À direita do mosaico de largura dupla, como as linhas no Home Assistant. Tocar no nome funciona como definido abaixo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o controlo direto a partir do firmware 0.2.19; até lá, o mosaico fica como estava."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ao tocar"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automático"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Abrir controlo"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Só ver"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Ligar / desligar"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Executar ação"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não consegue ligar e desligar isto, por isso um toque não faz nada. Escolha outra opção."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã liga e desliga isto a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque abre o respetivo cartão."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Mantenha o mosaico premido para abrir o respetivo cartão."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo deslizante pequeno no mosaico"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Não"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sim, controlo direto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem nada que um controlo deslizante possa alterar nesta entidade. Escolha Não."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Histórico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" horas"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fundo pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fundo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:" da página "},{t:4,k:"page"},{t:3,v:". Enter: configurar; teclas de seta: mover"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover mosaico"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"A perguntar ao Home Assistant que ações tem esta entidade…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não está a responder neste momento. Tente novamente daqui a pouco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha uma ação"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo alternar, posição ou reproduzir"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma ação"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma ação encontrada."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant já não oferece esta ação para esta entidade, por isso um toque não faz nada. Escolha outra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Não definido"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ativado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desativado"}},needs:{t:0,b:{t:2,i:[{t:3,v:"O Home Assistant precisa de "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã executa ações a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque funciona como Automático."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo candeeiro, música ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone, só texto"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ícone: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhum ícone encontrado."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dados atuais"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ligação, estado e propriedades suportadas"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"A ler…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"A obter o estado atual do HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Estado: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Controlo deslizante pequeno: "},{t:4,k:"slider"},{t:3,v:" · Apresentação: "},{t:4,k:"display"},{t:3,v:" · Tamanho: "},{t:4,k:"size"},{t:3,v:" · Controlo: "},{t:4,k:"control"},{t:3,v:" · Fundo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sim"}},no:{t:0,b:{t:2,i:[{t:3}],s:"não"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinido"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Ler novamente"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido da barra superior: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Na barra superior cabe "},{t:4,k:"n"},{t:3,v:" elemento."}]},{t:2,i:[{t:3,v:"Na barra superior cabem "},{t:4,k:"n"},{t:3,v:" elementos."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Isto já está na barra superior."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superior"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superior: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã; também funciona sem o Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Esquerda: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Por exemplo: Sala de estar"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Direita: hora, sensores ou um relógio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:". Enter: configurar; setas: mover"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"},{t:3,v:" da barra superior"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a hora, a data, o relógio analógico ou uma entidade"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar hora, data ou uma entidade"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nem tudo cabe ao lado do nome: o ecrã omite os elementos tracejados. Remova um ou escolha um nome mais curto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para reordenar; toque num elemento para o configurar."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Os sensores, a data e o relógio analógico aparecem a partir do firmware "},{t:4,k:"version"},{t:3,v:"; até essa atualização, este ecrã mostra o nome e, se a hora estiver na barra, o relógio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto: agora não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Não cabe ao lado do nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto neste momento: não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"De momento não cabe ao lado do nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Assim fica no ecrã"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador pequeno com a hora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"O que mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Última alteração» continua a contar no próprio ecrã: «Agora mesmo», «Há 5 min», «Ontem»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automático (como no Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Apenas quando ativo» oculta o elemento enquanto estiver desligado, fechado, ausente ou a 0. Útil para uma porta aberta, uma máquina de lavar a funcionar ou quem está em casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 24 horas · altere em "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 12 horas · altere em "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições → Idioma e região"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Hoje: "},{t:4,k:"date"},{t:3,v:". A data segue o relógio do próprio ecrã."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Subir"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Descer"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar à barra superior"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaço usado"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaços usados"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Já adicionado"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Sugestões do Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Uma entidade"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure por nome, divisão ou entidade, p. ex. temperatura ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma entidade para a barra superior"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noite"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modo escuro"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Espera automática"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Espera após"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho em espera"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modo noturno"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Início"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fim"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho noturno"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Voltar à página 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Após"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Também em espera"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Deslizar entre páginas"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Botões de página"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotação"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da manhã"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da tarde"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Ainda se estão a guardar as definições do outro ecrã. Tente novamente daqui a pouco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Os botões de página e o deslizar estão desativados, por isso só os mosaicos «Ir para a página» mudam de página."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"a página "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"as páginas "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Não tem mosaicos «Ir para a página»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Os mosaicos para "},{t:4,k:"pages"},{t:3,v:" só estão em páginas a que não consegue chegar."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Desde "},{t:4,k:"pages"},{t:3,v:", nenhum mosaico leva de volta à página 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Este ecrã está offline. Poderá alterar as definições quando voltar."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato no ecrã e aparecem aqui quando são feitas lá."}},app:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato. Com o firmware 0.2.49, o próprio ecrã guarda-as."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Esta entidade está desativada no Home Assistant ou o ecrã está a reiniciar."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": menos"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": mais"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"A iniciar a atualização…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"A gravar o firmware por Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"A compilar e a instalar…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"À espera que o ecrã volte…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"A verificar se se mantém estável…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Novo idioma: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs vão passar a atualizar-se automaticamente à noite."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"As atualizações automáticas estão desativadas."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações de firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A atualizar para o firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Ainda não há nenhum ecrã emparelhado. Os novos ecrãs recebem o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs têm o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Atualizar "},{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:3,v:"Atualizar os "},{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novidades do firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar automaticamente todas as noites"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre as 03:00 e as 06:00, um ecrã de cada vez. Para se houver um erro e comunica-o no Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. O Claude Code deteta-a de imediato."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. Reinicie o Claude Code uma vez para que encontre a nova pasta de habilidades."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ensine o Claude a usar o ESP Screens e depois peça: «Mostra um alerta em todos os meus ecrãs quando a caixa do correio estiver cheia.» O Claude conhece os eventos de alerta e todos os campos, cores e ícones."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar para o Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novamente"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar a habilidade"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Não instalada"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Instalada"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Instalada · há uma versão mais recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Para o Claude Code no Home Assistant. Escreve um ficheiro em "},{t:4,k:"path"},{t:3,v:"; instalar novamente substitui-o."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar para o claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carregue o zip no Claude, em Personalizar → Habilidades."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que rodeia os seus ecrãs."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Os meus ecrãs"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Adicione um ecrã, ou compile e reinstale o firmware de um que já tenha."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar por USB ou Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Idioma e região"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Idioma dos ecrãs"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Idioma do Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Idioma do Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs usam inglês até o idioma do Home Assistant estar disponível."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · ainda não revisto, ajuda bem-vinda"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" ainda não foi revisto; toda a ajuda é bem-vinda: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"como traduzir"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Depois de uma alteração, cada ecrã precisa de uma atualização de firmware, uma compilação por ecrã: com o respetivo botão Atualizar ou nas atualizações noturnas."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato de hora"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 horas"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 horas"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formatação numérica"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"O seu perfil do Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usar estes"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"O próprio editor segue o idioma do seu perfil do Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Cada ecrã passa a usar o novo idioma na próxima atualização."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Um cartão sobre todo o ecrã a partir de uma automatização, num ecrã ou em todos. O guia rápido tem os nomes das ações, os campos, os ícones e as cores, e um formulário para experimentar um alerta."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notificações em ecrã inteiro, a partir de uma automatização"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar o firmware dos ecrãs"}},intro:{t:0,b:{t:2,i:[{t:3,v:"A CLI do ESPHome integrada usa o seu próprio perfil (YAML com chaves) e os seus segredos. Escolha o perfil do ecrã e depois uma porta USB (ecrã ligado à máquina do Home Assistant), "},{t:4,k:"ota"},{t:3,v:" com o nome do anfitrião, ou "},{t:4,k:"download"},{t:3,v:" para instalar o firmware no ecrã a partir do seu próprio computador. "},{t:4,k:"check"},{t:3,v:" só valida, "},{t:4,k:"build"},{t:3,v:" compila e "},{t:4,k:"install"},{t:3,v:" instala o firmware no ecrã. Os seus mosaicos ficam como estão no ESP Screens. A primeira compilação demora alguns minutos."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verificar"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Só compilar"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e descarregar"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome. Atualize a app para a versão 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha o perfil pretendido e depois uma porta USB, um endereço IP ou Descarregar."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Perfil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Instalar em"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · ainda não foi encontrada nenhuma placa na máquina do Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar · instalar a partir do seu próprio computador"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP ou nome do anfitrião"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Descarregar "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Instale-o no ecrã com o "},{t:4,k:"esphome_web"},{t:3,v:" no Chrome ou no Edge: Connect, escolha a porta USB do ecrã, Install e selecione este ficheiro. Contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Perfil guardado."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Um momento…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para descarregar."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"O ESP Screens cria o perfil próprio do ecrã com chaves únicas e compila o firmware. Ligue o ecrã com um cabo USB de dados à máquina onde corre o Home Assistant, ou descarregue o firmware e instale-o no ecrã a partir do seu próprio computador."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Que ecrã tem?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 polegadas"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 polegadas"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã da sala"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizar"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cada ecrã tem o seu próprio perfil com as suas próprias chaves. Quatro ecrãs? Faça isto quatro vezes com um nome diferente."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Letras minúsculas, algarismos e hífenes. Um nome diferente para cada ecrã."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome da rede Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Palavra-passe da rede Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Preencha só uma vez: o ESP Screens guarda isto no secrets.yaml do ESPHome e os ecrãs seguintes usam-no automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Ainda faltam os dados de Wi-Fi no seu secrets.yaml do ESPHome. O ESP Screens só preenche as linhas em falta."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"A rede Wi-Fi vem do seu secrets.yaml do ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"O secrets.yaml na pasta do ESPHome não é YAML válido. Corrija primeiro o ficheiro; não vai ser substituído."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Instalar através de"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Mais tarde · só guardar o perfil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã com um cabo USB de dados à máquina do Home Assistant; a lista atualiza-se sozinha. Ou escolha Descarregar para usar o seu próprio computador."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregue o firmware e instale-o no ecrã a partir do seu próprio computador, no Chrome ou no Edge. Depois disso, as atualizações são feitas por Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"O perfil fica na pasta do ESPHome. Pode instalar mais tarde através de Firmware e USB ou a partir do ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Há mais do que uma placa ligada: escolha a porta deste ecrã."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Uma vez por USB; depois disso, tudo é sem fios."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Guardar perfil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Já está a decorrer uma compilação ou instalação ("},{t:4,k:"file"},{t:3,v:"). Aguarde que termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome nesta instalação; só é possível guardar o perfil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" está na pasta do ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"A gravar o firmware em "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"O firmware para "},{t:4,k:"name"},{t:3,v:" está pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"O firmware já está em "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"A compilação falhou"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"A instalação falhou"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o mais tarde a partir de Firmware e USB: escolha este perfil e depois a porta USB da máquina do Home Assistant, ou Descarregar para instalar o firmware no ecrã a partir do seu próprio computador. Guarde a chave API para o emparelhamento:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Não desligue ainda o cabo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a instalação continua e volta a encontrá-la em Novo ecrã."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a compilação continua e volta a encontrá-la em Novo ecrã."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o no ecrã a partir do seu próprio computador e depois emparelhe o ecrã com o Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. Emparelhe-o agora com o Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes. Emparelhe-o agora com o Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Consulte o registo abaixo."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" com um cabo USB de dados."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã ao seu computador"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" no Chrome ou no Edge, clique em Connect e escolha a porta USB do ecrã."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Abra o "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Clique em Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"O ficheiro contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Isto acontece fora do ESP Screens. O Home Assistant descobre "},{t:4,k:"name"},{t:3,v:" como dispositivo ESPHome; clique em Adicionar. Não foi descoberto? Adicione o ESPHome manualmente com o endereço IP do ecrã."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vá ao Home Assistant → Configuração → Dispositivos & serviços."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" acima quando o Home Assistant pedir a chave de encriptação."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cole a chave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integração ESPHome → Configurar → «Permitir que o dispositivo execute ações do Home Assistant». Sem isto, o ecrã vê tudo mas não controla nada."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Permita as ações do HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De volta ao ESP Screens, o ecrã aparece na lista à esquerda em cerca de trinta segundos; até lá, aparece aí como «ainda não está no Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Escolha os seus mosaicos."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registo do ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Tentar novamente"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Instalar outro ecrã"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Recomeçar"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertas · guia rápido"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Uma notificação em ecrã inteiro, a partir de uma automatização."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a ação "},{t:4,k:"action"},{t:3,v:". Coloca um cartão por cima de tudo, acorda o ecrã e mantém a retroiluminação no brilho normal até alguém tocar no botão ou o tempo limite acabar. O próprio Home Assistant não mostra explicações nem listas pendentes para as ações do ESPHome; tudo o que pode preencher está aqui."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"O guia rápido ainda está a carregar; um momento."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Está alguém à porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, traseira"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Já vou"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Secções"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Experimente"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Os seus ecrãs"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"Numa automatização"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Os campos"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ícones"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Cores"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventos"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Dicas"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envie agora um alerta, com os mesmos campos que uma automatização envia. O ecrã mostra o cartão e, com a intermitência ativada, faz piscar a retroiluminação."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},all:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs (prontos: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · não está pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Título"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtítulo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Cor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texto do botão"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite (segundos; 0 espera pelo botão)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fazer piscar a retroiluminação"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quatro vezes quando o alerta chega."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"A enviar…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Enviar alerta"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Enviado para o ecrã."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã ignorado (offline ou firmware antigo)."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs ignorados (offline ou firmware antigo)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Deixados vazios: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ecrã o conseguiu mostrar: verifique se há um ecrã online com o firmware "},{t:4,k:"version"},{t:3,v:" ou mais recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Branco (predefinido)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a sua própria ação, com o nome do dispositivo. A partir do firmware "},{t:4,k:"version"},{t:3,v:"; atualize um ecrã mais antigo com o respetivo botão Atualizar em Ecrãs."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Ainda não há nenhum ecrã emparelhado. Instale um através de Novo ecrã; a ação aparece assim que o Home Assistant vir o ecrã."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Atualização necessária · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo desconhecido · atualize o ecrã"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar alerta"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Descartar alerta"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Clique em "},{t:4,k:"add"},{t:3,v:" e procure "},{t:4,k:"esphome"},{t:3,v:". Escolha a ação do seu ecrã: o Home Assistant chama-lhe «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar ação"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome do dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" O Home Assistant pede os sete; deixe vazio o que não usar ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", desativado)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Preencha os campos."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefere YAML? Escolha "},{t:4,k:"edit"},{t:3,v:" na ação e cole o exemplo abaixo."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo para"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"um ecrã (ainda não emparelhado)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Editar em YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copiar YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs de uma vez"}},text:{t:0,b:{t:2,i:[{t:3,v:"Dispare o evento "},{t:4,k:"show"},{t:3,v:" com os mesmos campos e o ESP Screens passa o alerta a todos os ecrãs online, incluindo os que adicionar mais tarde. "},{t:4,k:"dismiss"},{t:3,v:" remove-o em todo o lado. Numa automatização, adicione a ação "},{t:4,k:"event"},{t:3,v:" ou cole o exemplo em "},{t:4,k:"edit"},{t:3,v:". Omita os campos que não usar. Para isto, o ESP Screens tem de estar em execução."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Dispara evento manual"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"O texto é livre; o limite é em bytes e uma letra acentuada conta como dois. O que não couber termina em reticências (título) ou é descartado (subtítulo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"O que faz"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texto"}},int:{t:0,b:{t:2,i:[{t:3}],s:"número"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"ativado / desativado"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entidade"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"de 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:", por exemplo "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" e o código hexadecimal ("},{t:4,k:"hex"},{t:3,v:") também funcionam. O firmware só inclui estes ícones; qualquer outro nome mostra o triângulo de aviso. Toque num ícone para copiar o nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Úteis para notificações"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome ou descrição…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Também disponíveis: ícones de controlo e de meteorologia"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copiar "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ícone para «"},{t:4,k:"query"},{t:3,v:"». Os nomes desconhecidos mostram o triângulo de aviso ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:". São os tons pastel dos mosaicos, com texto escuro. Vazio ou desconhecido dá o cartão branco. Toque para copiar."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta acorda de imediato um ecrã com brilho reduzido ou apagado e aparece por cima de todas as páginas, de todos os cartões de luz abertos e da camada de espera."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acorda o ecrã."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Enquanto o cartão estiver visível, a retroiluminação mantém o brilho normal. A espera automática e o modo noturno ficam em pausa. Depois de premir o botão, o tempo de espera normal recomeça."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aceso até premir o botão."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" espera pelo botão, demore o que demorar. Com "},{t:4,k:"minute"},{t:3,v:", o cartão desaparece ao fim de um minuto, mas o botão fecha-o mais cedo."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" faz piscar a retroiluminação quatro vezes quando o alerta chega (cerca de um segundo) e depois deixa o ecrã ligado."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Intermitência."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta novo substitui o atual; não se acumulam. O alerta substituído é reportado como "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Substituição."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" remove o cartão, por exemplo se a porta já estiver aberta. Sem alerta, essa ação não faz nada."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fecho remoto."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" não faz nada; só o botão o fecha. Assim, um toque para acordar o ecrã nunca descarta o alerta por acidente."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tocar fora do cartão"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Sempre que um alerta termina, é disparado o evento "},{t:4,k:"event"},{t:3,v:" com "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (o nome do dispositivo) e o "},{t:4,k:"device_id"},{t:3,v:" que o Home Assistant acrescenta. Visível em Configuração → Ferramentas → Eventos."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Esperar que alguém prima o botão"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use uma "},{t:4,k:"bold"},{t:3,v:": laranja para a porta, vermelho para fumo ou água, verde para «concluído». O texto fica sempre escuro e legível."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"cor por tipo de notificação"}},short:{t:0,b:{t:2,i:[{t:3,v:"Mantenha o título "},{t:4,k:"bold"},{t:3,v:"; um ecrã mostra cerca de vinte caracteres numa linha e termina um título mais longo com reticências. Coloque os detalhes no subtítulo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"curto"}},button:{t:0,b:{t:2,i:[{t:3,v:"Um "},{t:4,k:"bold"},{t:3,v:" transforma a notificação numa pergunta: «Já vou», «Visto», «Desligar». Depois, o evento diz-lhe quem respondeu."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texto de botão personalizado"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Para um alerta que se resolve sozinho (a porta abre-se, alguém tira a roupa da máquina), feche-o na mesma automatização com "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs? Dispare "},{t:4,k:"event"},{t:3,v:" uma vez (ver «Todos os ecrãs de uma vez»). Os ecrãs continuam a funcionar de forma independente e cada um reporta com o seu próprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Prefere "},{t:4,k:"bold"},{t:3,v:" que faça a automatização? Instale a habilidade do ESP Screens em Definições → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"pedir ao Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campainha: mostra o alerta e espera que alguém prima o botão."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Vem alguém à porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avançado · personalização local"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizado · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Este pequeno ficheiro é seu. É carregado depois do pacote partilhado dos ecrãs e mantém-se quando o ESP Screens é atualizado. Altere aqui detalhes específicos do hardware, como o modelo do ecrã."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"O que é seguro alterar?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"As secções display, touchscreen e substitutions, os pinos e outros detalhes do dispositivo. O nome, a rede Wi-Fi, a API, a OTA e as ligações aos pacotes continuam a ser geridos pelo ESP Screens."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Ativo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para associar"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usar exemplo"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" carácter"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" caracteres"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" linha"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" linhas"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e verificar"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Guardar YAML"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"As alterações feitas aqui aplicam-se na próxima compilação."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Guarde uma vez para associar este ficheiro ao perfil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A verificar e a guardar…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O YAML personalizado mantém-se nas atualizações de firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado guardado."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ESPHome está a verificar o perfil completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome está a verificar o perfil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"O ESPHome está a verificar o perfil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"O perfil completo é válido. Pode compilar e instalar com segurança."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome rejeitou o perfil completo. Consulte Firmware e USB para ver o registo completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o texto atual pelo exemplo?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo carregado. Guarde-o quando estiver pronto."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar o YAML personalizado local?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"O YAML personalizado ficará vazio quando guardar."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Desconhecido"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponível"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Arrefecer"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer/Arrefecer"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Secar"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"A aquecer"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"A arrefecer"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Desumidificação"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Pré-Aquecimento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Descongelação"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"A abrir"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"A fechar"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"A reproduzir"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausado"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Acima do horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Abaixo do horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Na Base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"A Limpar"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Em pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"A regressar à base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensolarado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Limpo, noite"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Chuvoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Aguaceiros"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, chuvoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nevoeiro"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada, chuva"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excecional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"A carregar"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Não está a carregar"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frio"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Quente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detetada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sem luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Destrancada"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Trancado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmido"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Em movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Em casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Em execução"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Adulteração detetada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Atualização disponível"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Atualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Ativar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Executar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pressione"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Agora mesmo"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ontem"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semana"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" mês"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" ano"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" anos"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Amanhã"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"da manhã"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"da tarde"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"terça-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"sg"}},{t:0,b:{t:2,i:[{t:3}],s:"te"}},{t:0,b:{t:2,i:[{t:3}],s:"qu"}},{t:0,b:{t:2,i:[{t:3}],s:"qi"}},{t:0,b:{t:2,i:[{t:3}],s:"sx"}},{t:0,b:{t:2,i:[{t:3}],s:"sb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janeiro"}},{t:0,b:{t:2,i:[{t:3}],s:"fevereiro"}},{t:0,b:{t:2,i:[{t:3}],s:"março"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"maio"}},{t:0,b:{t:2,i:[{t:3}],s:"junho"}},{t:0,b:{t:2,i:[{t:3}],s:"julho"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"setembro"}},{t:0,b:{t:2,i:[{t:3}],s:"outubro"}},{t:0,b:{t:2,i:[{t:3}],s:"novembro"}},{t:0,b:{t:2,i:[{t:3}],s:"dezembro"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan."}},{t:0,b:{t:2,i:[{t:3}],s:"fev."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"abr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai."}},{t:0,b:{t:2,i:[{t:3}],s:"jun."}},{t:0,b:{t:2,i:[{t:3}],s:"jul."}},{t:0,b:{t:2,i:[{t:3}],s:"ago."}},{t:0,b:{t:2,i:[{t:3}],s:"set."}},{t:0,b:{t:2,i:[{t:3}],s:"out."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/index.html b/screen_manager/app/static/index.html index e7a6331..ec342a4 100644 --- a/screen_manager/app/static/index.html +++ b/screen_manager/app/static/index.html @@ -5,7 +5,7 @@ ESP Screens - + diff --git a/screen_manager/translations/de.json b/screen_manager/translations/de.json index fc86229..b5787bc 100644 --- a/screen_manager/translations/de.json +++ b/screen_manager/translations/de.json @@ -142,7 +142,7 @@ "hours_minutes": "{h} Std. {m}" }, "tile": { - "tap_to_open": "Zum Öffnen tippen", + "tap_to_open": "Zum Öffnen", "page": "Seite {n}", "refused": "Abgelehnt", "command_sent": "Befehl gesendet...", @@ -214,7 +214,7 @@ }, "media": { "muted": "Stumm", - "not_playing": "Keine Wiedergabe", + "not_playing": "Nichts läuft", "loading": "Wird geladen" }, "timer": { @@ -245,7 +245,7 @@ "loading": "Bild wird geladen", "live": "Live", "recording": "Aufnahme", - "tap_to_view": "Zum Ansehen tippen", + "tap_to_view": "Ansehen", "no_image_yet": "Noch kein Bild" }, "calibration": { diff --git a/screen_manager/translations/en.json b/screen_manager/translations/en.json index 3f1861f..4b19829 100644 --- a/screen_manager/translations/en.json +++ b/screen_manager/translations/en.json @@ -86,7 +86,7 @@ "Nov", "Dec" ], - "top_bar": "{weekday} {day} {month}", + "top_bar": "{weekday_min} {day} {month}", "full": "{weekday} {day} {month}", "day_month": "{day} {month}", "weekday_time": "{weekday} {time}" diff --git a/screen_manager/translations/es.json b/screen_manager/translations/es.json index 8eeb908..f626d33 100644 --- a/screen_manager/translations/es.json +++ b/screen_manager/translations/es.json @@ -50,13 +50,13 @@ "sáb" ], "weekdays_min": [ - "dom", - "lun", - "mar", - "mié", - "jue", - "vie", - "sáb" + "do", + "lu", + "ma", + "mi", + "ju", + "vi", + "sá" ], "months": [ "enero", @@ -214,7 +214,7 @@ }, "media": { "muted": "Silenciado", - "not_playing": "No se reproduce nada", + "not_playing": "Inactivo", "loading": "Cargando" }, "timer": { @@ -246,7 +246,7 @@ "live": "En directo", "recording": "Grabando", "tap_to_view": "Toca para ver", - "no_image_yet": "Aún no hay imagen" + "no_image_yet": "Sin imagen" }, "calibration": { "title": "Sigue la calibración", diff --git a/screen_manager/translations/fr.json b/screen_manager/translations/fr.json index d7acd0a..c0251df 100644 --- a/screen_manager/translations/fr.json +++ b/screen_manager/translations/fr.json @@ -50,13 +50,13 @@ "sam." ], "weekdays_min": [ - "dim", - "lun", - "mar", - "mer", - "jeu", - "ven", - "sam" + "di", + "lu", + "ma", + "me", + "je", + "ve", + "sa" ], "months": [ "janvier", @@ -142,7 +142,7 @@ "hours_minutes": "{h} h {m}" }, "tile": { - "tap_to_open": "Touchez pour ouvrir", + "tap_to_open": "Ouvrir", "page": "Page {n}", "refused": "Refusé", "command_sent": "Commande envoyée...", @@ -246,7 +246,7 @@ "live": "En direct", "recording": "Enregistrement", "tap_to_view": "Touchez pour voir", - "no_image_yet": "Pas encore d'image" + "no_image_yet": "Pas d'image" }, "calibration": { "title": "Suivez l'étalonnage", diff --git a/screen_manager/translations/it.json b/screen_manager/translations/it.json index 052893b..819fb35 100644 --- a/screen_manager/translations/it.json +++ b/screen_manager/translations/it.json @@ -50,13 +50,13 @@ "sab" ], "weekdays_min": [ - "dom", - "lun", - "mar", - "mer", - "gio", - "ven", - "sab" + "do", + "lu", + "ma", + "me", + "gi", + "ve", + "sa" ], "months": [ "gennaio", @@ -214,7 +214,7 @@ }, "media": { "muted": "Muto", - "not_playing": "Nessuna riproduzione", + "not_playing": "Inattivo", "loading": "Caricamento" }, "timer": { @@ -246,7 +246,7 @@ "live": "Dal vivo", "recording": "Registrazione", "tap_to_view": "Tocca per vedere", - "no_image_yet": "Ancora nessuna immagine" + "no_image_yet": "Niente immagine" }, "calibration": { "title": "Segui la calibrazione", diff --git a/screen_manager/translations/nl.json b/screen_manager/translations/nl.json index 3e76c18..5f2a995 100644 --- a/screen_manager/translations/nl.json +++ b/screen_manager/translations/nl.json @@ -245,7 +245,7 @@ "loading": "Beeld laden", "live": "Live", "recording": "Neemt op", - "tap_to_view": "Tik om te bekijken", + "tap_to_view": "Tik om te kijken", "no_image_yet": "Nog geen beeld" }, "calibration": { diff --git a/screen_manager/translations/pl.json b/screen_manager/translations/pl.json index d3e3671..eb32ad0 100644 --- a/screen_manager/translations/pl.json +++ b/screen_manager/translations/pl.json @@ -50,13 +50,13 @@ "sob." ], "weekdays_min": [ - "nie", - "pon", + "nd", + "pn", "wt", "śr", - "czw", + "cz", "pt", - "sob" + "sb" ], "months": [ "stycznia", @@ -142,7 +142,7 @@ "hours_minutes": "{h} godz. {m}" }, "tile": { - "tap_to_open": "Dotknij, aby otworzyć", + "tap_to_open": "Otwórz", "page": "Strona {n}", "refused": "Odrzucono", "command_sent": "Wysłano polecenie...", @@ -235,7 +235,7 @@ }, "script": { "running": "Działa...", - "never_run": "Nigdy nie uruchomiono", + "never_run": "Nie uruchamiano", "last_time": "Ostatnio {time}", "yesterday_time": "Wczoraj {time}", "last_date": "Ostatnio {date}" @@ -245,7 +245,7 @@ "loading": "Ładowanie obrazu", "live": "Na żywo", "recording": "Nagrywanie", - "tap_to_view": "Dotknij, aby zobaczyć", + "tap_to_view": "Zobacz", "no_image_yet": "Brak obrazu" }, "calibration": { diff --git a/screen_manager/translations/pt.json b/screen_manager/translations/pt.json index 2502e48..2862f41 100644 --- a/screen_manager/translations/pt.json +++ b/screen_manager/translations/pt.json @@ -50,13 +50,13 @@ "sábado" ], "weekdays_min": [ - "dom", - "seg", - "ter", - "qua", - "qui", - "sex", - "sáb" + "do", + "sg", + "te", + "qu", + "qi", + "sx", + "sb" ], "months": [ "janeiro", @@ -214,7 +214,7 @@ }, "media": { "muted": "Sem som", - "not_playing": "Nada a reproduzir", + "not_playing": "Inativo", "loading": "A carregar" }, "timer": { @@ -246,7 +246,7 @@ "live": "Em direto", "recording": "A gravar", "tap_to_view": "Toque para ver", - "no_image_yet": "Ainda sem imagem" + "no_image_yet": "Sem imagem" }, "calibration": { "title": "Siga a calibração", diff --git a/tests/screen_text_en.h b/tests/screen_text_en.h index ccfb012..a961acb 100644 --- a/tests/screen_text_en.h +++ b/tests/screen_text_en.h @@ -69,7 +69,7 @@ const char *const screen_text::TABLE[] = { "Oct", "Nov", "Dec", - "{weekday} {day} {month}", + "{weekday_min} {day} {month}", "{weekday} {day} {month}", "{day} {month}", "{weekday} {time}", diff --git a/tools/i18n.py b/tools/i18n.py index 1c11838..2c6d9dc 100644 --- a/tools/i18n.py +++ b/tools/i18n.py @@ -87,6 +87,9 @@ def check(): problems, notes = [], [] base = dict(gen.flatten({k: v for k, v in english.items() if k != '_meta'})) drawable = font_letters() + width = text_width() + if width is None: + notes.append('Pillow is missing: tile texts were not measured') for code, data in langs.items(): meta = data.get('_meta', {}) for field in ('name', 'english', 'script', 'plural', 'checked'): @@ -105,7 +108,10 @@ def check(): if key not in base or not isinstance(text, str): continue source = base[key] - if set(PLACEHOLDER.findall(text)) != set(PLACEHOLDER.findall(source)): + if key in EITHER_PLACEHOLDER: + if not set(PLACEHOLDER.findall(text)) <= EITHER_PLACEHOLDER[key]: + problems.append(f'{code}: {key} has placeholders beyond {sorted(EITHER_PLACEHOLDER[key])}') + elif set(PLACEHOLDER.findall(text)) != set(PLACEHOLDER.findall(source)): problems.append(f'{code}: {key} has placeholders {sorted(set(PLACEHOLDER.findall(text)))}, ' f'English {sorted(set(PLACEHOLDER.findall(source)))}') plural = ' | ' in source @@ -126,6 +132,14 @@ def check(): ours = not key.startswith(('screen.ha.', 'screen.date.', 'screen.number.')) if ours and code != 'en' and len(text) > max(8, len(source) * 1.6) and not plural: notes.append(f'{code}: {key} is much longer than the English ({len(text)} vs {len(source)})') + if width and key in TILE_LINES: + for board, (size, room) in TILE_LINES[key].items(): + if width(size, text) > room: + problems.append(f'{code}: {key} "{text}" is too wide for a tile on the {board} ' + f'({width(size, text):.0f} of {room} px); make it shorter') + # The weather columns of the CYD hold a day of two letters beside its icon. + if key.startswith('screen.date.weekdays_min.') and len(text) > 2: + problems.append(f'{code}: {key} "{text}" is longer than two letters; the CYD\'s weather columns cut it') for line in notes: print('note:', line) for line in problems: @@ -134,6 +148,34 @@ def check(): return 1 if problems else 0 +# One line under a tile's name, and the room it has there: Roboto 400 at the CYD's 11 px in about 88 px, at the +# Guition's 16 px in about 128 px (packages/boards: TILE_W, FONT_SUBLABEL_SIZE). A longer text is cut; `check` fails. +TILE_ROOM = {'CYD': (11, 88), 'Guition': (16, 128)} +# Camera tiles are the Guition's alone. +TILE_LINES = {'screen.tile.tap_to_open': TILE_ROOM, 'screen.script.never_run': TILE_ROOM, 'screen.script.running': TILE_ROOM, + 'screen.media.not_playing': TILE_ROOM, 'screen.timer.paused': TILE_ROOM, + 'screen.camera.tap_to_view': {'Guition': TILE_ROOM['Guition']}, + 'screen.camera.no_image_yet': {'Guition': TILE_ROOM['Guition']}} + + +def text_width(): + """(size, text) -> pixels in the screens' Roboto 400, or None without Pillow (the check then skips widths).""" + try: + from PIL import ImageFont + except ImportError: + return None + fonts = {} + def width(size, text): + if size not in fonts: + fonts[size] = ImageFont.truetype(str(ROOT / 'fonts' / 'Roboto-400.ttf'), size) + return fonts[size].getlength(text) + return width + + +# Texts whose placeholders a language picks from a set: the top bar's date takes the weekday's abbreviation ({weekday}, +# "sam.") or its two letters ({weekday_min}, "Sa" in English). +EITHER_PLACEHOLDER = {'screen.date.top_bar': {'weekday', 'weekday_min', 'day', 'month'}} + # English that stays in the firmware on purpose, with why. Everything else a screen shows comes from the translations, # and `lint` fails on a new English text in the code, so it never slips back in. LINT_KEEP = { @@ -397,7 +439,12 @@ def cldr_dates(write, codes=None): before = json.dumps(data, ensure_ascii=False) data.setdefault('_meta', {})['clock'] = cldr['clock'] number = {**cldr['number'], 'percent': ' %' if percent_space(code) else '%'} - merge(data.setdefault('screen', {}), {'number': number, 'time': cldr['time'], 'date': cldr['date']}) + date = dict(cldr['date']) + # The two letters of the weather columns are the language's own choice once it has them (the CLDR's short + # width, which Node's Intl doesn't give): only a new language starts from the abbreviation. + if data.get('screen', {}).get('date', {}).get('weekdays_min'): + date.pop('weekdays_min') + merge(data.setdefault('screen', {}), {'number': number, 'time': cldr['time'], 'date': date}) if json.dumps(data, ensure_ascii=False) != before: print(f'{code}: {"wrote" if write else "would change"} the CLDR texts') if write: diff --git a/web/src/components/TopbarAdd.vue b/web/src/components/TopbarAdd.vue index e57ec91..9f885d1 100644 --- a/web/src/components/TopbarAdd.vue +++ b/web/src/components/TopbarAdd.vue @@ -9,7 +9,7 @@ import type { HeaderItem } from "../types"; const query = ref(""); const taken = computed(() => new Set(topbarItems().map(itemKey))); const samples = computed(() => ({ - clock: clockText(clock24.value, new Date(state.now)), + clock: clockText(clock24.value, new Date(state.now), screenLanguage.value), analog: t("editor.topbar.analog_sample"), date: dateText(new Date(state.now), screenLanguage.value), } as Record)); diff --git a/web/src/components/TopbarInspector.vue b/web/src/components/TopbarInspector.vue index 9e3dcf5..9b58ea8 100644 --- a/web/src/components/TopbarInspector.vue +++ b/web/src/components/TopbarInspector.vue @@ -51,7 +51,7 @@ const liveNote = computed(() => { return !view.shown ? t("editor.topbar.live.hidden") : overflow.value.has(props.index) ? t("editor.topbar.live.overflow") : t("editor.topbar.live.looks"); }); const samples = computed(() => ({ - clock: clockText(clock24.value, new Date(state.now)), + clock: clockText(clock24.value, new Date(state.now), screenLanguage.value), analog: t("editor.topbar.analog_sample"), date: dateText(new Date(state.now), screenLanguage.value), } as Record)); diff --git a/web/src/model/topbar.ts b/web/src/model/topbar.ts index 1729b05..1f7e43f 100644 --- a/web/src/model/topbar.ts +++ b/web/src/model/topbar.ts @@ -12,14 +12,18 @@ export const BUILTIN_ICONS: Record = { clock: "clock-outline", a export const itemKey = (item: HeaderItem) => JSON.stringify(item); export const glyph = (cp: string) => String.fromCodePoint(parseInt(cp, 16)); -export function clockText(clock24: boolean, now = new Date()) { - let hours = now.getHours(); - // The screen formats with %I:%M when the 24-hour clock is off. - if (!clock24) hours = hours % 12 || 12; - return `${String(hours).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}`; +// The time as the screens write it (screen_text::clock_text): "07:12" on 24 hours; on 12 "7:12 PM" in the top bar, with +// the language's day periods, and "7:12" in the clock card's big digits, which have no letters. +export function clockText(clock24: boolean, now = new Date(), locale?: string) { + const minutes = String(now.getMinutes()).padStart(2, "0"); + if (clock24) return `${String(now.getHours()).padStart(2, "0")}:${minutes}`; + const time = `${now.getHours() % 12 || 12}:${minutes}`; + return locale ? `${time} ${t(`screen.time.${now.getHours() < 12 ? "am" : "pm"}`, {}, { locale })}` : time; } +// "Sa 19 Sep", "za 19 sep", "sam. 19 sept.": the language's pattern with its abbreviation or its two letters. export const dateText = (now = new Date(), locale = "en") => t("screen.date.top_bar", { - weekday: t(`screen.date.weekdays_min.${now.getDay()}`, {}, { locale }), + weekday: t(`screen.date.weekdays_short.${now.getDay()}`, {}, { locale }), + weekday_min: t(`screen.date.weekdays_min.${now.getDay()}`, {}, { locale }), day: now.getDate(), month: t(`screen.date.months_short.${now.getMonth()}`, {}, { locale }), }, { locale }); diff --git a/web/src/store.ts b/web/src/store.ts index 67b99fd..46be950 100644 --- a/web/src/store.ts +++ b/web/src/store.ts @@ -583,7 +583,7 @@ export function topbarLabel(item: HeaderItem) { // What the item shows right now: { icon, text, color, shown }. Entities wait for the add-on's preview. export function topbarView(item: HeaderItem): ItemView { const now = new Date(state.now); - if (item.type === "clock") return { text: clockText(clock24.value, now), shown: true }; + if (item.type === "clock") return { text: clockText(clock24.value, now, screenLanguage.value), shown: true }; if (item.type === "date") return { text: dateText(now, screenLanguage.value), shown: true }; if (item.type === "analog") return { analog: true, shown: true }; const p = state.topbarPreviews[itemKey(item)]; diff --git a/web/tests/i18n.spec.ts b/web/tests/i18n.spec.ts index 5646dcd..bc2efe9 100644 --- a/web/tests/i18n.spec.ts +++ b/web/tests/i18n.spec.ts @@ -175,7 +175,8 @@ describe("the mockup speaks the screens' language", () => { ha: { unavailable: "Nicht verfügbar", on: "An", weather: { windy: "Windig" }, binary: { door_on: "Offen" }, button: { run: "Ausführen" } }, tile: { page: "Seite {n}" }, time: { hours_ago: "Vor 1 Stunde | Vor {n} Stunden", just_now: "Gerade eben" }, - date: { weekdays_min: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], months_short: ["Jan.", "Feb.", "März", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."], top_bar: "{weekday}., {day}. {month}" }, + date: { weekdays_min: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], weekdays_short: ["So.", "Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."], + months_short: ["Jan.", "Feb.", "März", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."], top_bar: "{weekday}, {day}. {month}" }, number: { decimal: ",", group: ".", group_min: "2" }, }, }, meta("one_other")); diff --git a/web/tests/topbar.spec.ts b/web/tests/topbar.spec.ts index 85be9ff..207c439 100644 --- a/web/tests/topbar.spec.ts +++ b/web/tests/topbar.spec.ts @@ -28,8 +28,13 @@ describe("clock and date", () => { const evening = new Date(2026, 8, 15, 19, 5); it("formats the clock the way the screen does", () => { expect(clockText(true, evening)).toBe("19:05"); - expect(clockText(false, evening)).toBe("07:05"); + // The clock card's big digits: no leading zero, no day period (its font has no letters). + expect(clockText(false, evening)).toBe("7:05"); expect(clockText(false, new Date(2026, 8, 15, 0, 30))).toBe("12:30"); + // The top bar: with the language's day period, as screen_text::clock_text writes it. + expect(clockText(false, evening, "en")).toBe("7:05 PM"); + expect(clockText(false, new Date(2026, 8, 15, 0, 30), "en")).toBe("12:30 AM"); + expect(clockText(true, evening, "en")).toBe("19:05"); }); it("writes the date short", () => { expect(dateText(evening)).toBe("Tu 15 Sep");