1585 lines
324 KiB
JavaScript
1585 lines
324 KiB
JavaScript
function e(e,t,a,i){var n,o=arguments.length,r=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,a,i);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(r=(o<3?n(r):o>3?n(t,a,r):n(t,a))||r);return o>3&&r&&Object.defineProperty(t,a,r),r
|
||
/**
|
||
* @license
|
||
* Copyright 2019 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/}const t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,a=Symbol(),i=new Map;class n{constructor(e,t){if(this._$cssResult$=!0,t!==a)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e}get styleSheet(){let e=i.get(this.cssText);return t&&void 0===e&&(i.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const o=(e,...t)=>{const i=1===e.length?e[0]:t.reduce(((t,a,i)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(a)+e[i+1]),e[0]);return new n(i,a)},r=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const a of e.cssRules)t+=a.cssText;return(e=>new n("string"==typeof e?e:e+"",a))(t)})(e):e
|
||
/**
|
||
* @license
|
||
* Copyright 2017 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/;var s;const l=window.trustedTypes,c=l?l.emptyScript:"",d=window.reactiveElementPolyfillSupport,m={toAttribute(e,t){switch(t){case Boolean:e=e?c:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let a=e;switch(t){case Boolean:a=null!==e;break;case Number:a=null===e?null:Number(e);break;case Object:case Array:try{a=JSON.parse(e)}catch(e){a=null}}return a}},u=(e,t)=>t!==e&&(t==t||e==e),p={attribute:!0,type:String,converter:m,reflect:!1,hasChanged:u};class _ extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(e){var t;null!==(t=this.l)&&void 0!==t||(this.l=[]),this.l.push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,a)=>{const i=this._$Eh(a,t);void 0!==i&&(this._$Eu.set(i,a),e.push(i))})),e}static createProperty(e,t=p){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const a="symbol"==typeof e?Symbol():"__"+e,i=this.getPropertyDescriptor(e,a,t);void 0!==i&&Object.defineProperty(this.prototype,e,i)}}static getPropertyDescriptor(e,t,a){return{get(){return this[t]},set(i){const n=this[e];this[t]=i,this.requestUpdate(e,n,a)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||p}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),this.elementProperties=new Map(e.elementProperties),this._$Eu=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const a of t)this.createProperty(a,e[a])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const a=new Set(e.flat(1/0).reverse());for(const e of a)t.unshift(r(e))}else void 0!==e&&t.push(r(e));return t}static _$Eh(e,t){const a=t.attribute;return!1===a?void 0:"string"==typeof a?a:"string"==typeof e?e.toLowerCase():void 0}o(){var e;this._$Ep=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(e=this.constructor.l)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,a;(null!==(t=this._$Eg)&&void 0!==t?t:this._$Eg=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(a=e.hostConnected)||void 0===a||a.call(e))}removeController(e){var t;null===(t=this._$Eg)||void 0===t||t.splice(this._$Eg.indexOf(e)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Et.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e;const a=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return((e,a)=>{t?e.adoptedStyleSheets=a.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):a.forEach((t=>{const a=document.createElement("style"),i=window.litNonce;void 0!==i&&a.setAttribute("nonce",i),a.textContent=t.cssText,e.appendChild(a)}))})(a,this.constructor.elementStyles),a}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,a){this._$AK(e,a)}_$ES(e,t,a=p){var i,n;const o=this.constructor._$Eh(e,a);if(void 0!==o&&!0===a.reflect){const r=(null!==(n=null===(i=a.converter)||void 0===i?void 0:i.toAttribute)&&void 0!==n?n:m.toAttribute)(t,a.type);this._$Ei=e,null==r?this.removeAttribute(o):this.setAttribute(o,r),this._$Ei=null}}_$AK(e,t){var a,i,n;const o=this.constructor,r=o._$Eu.get(e);if(void 0!==r&&this._$Ei!==r){const e=o.getPropertyOptions(r),s=e.converter,l=null!==(n=null!==(i=null===(a=s)||void 0===a?void 0:a.fromAttribute)&&void 0!==i?i:"function"==typeof s?s:null)&&void 0!==n?n:m.fromAttribute;this._$Ei=r,this[r]=l(t,e.type),this._$Ei=null}}requestUpdate(e,t,a){let i=!0;void 0!==e&&(((a=a||this.constructor.getPropertyOptions(e)).hasChanged||u)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===a.reflect&&this._$Ei!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,a))):i=!1),!this.isUpdatePending&&i&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((e,t)=>this[t]=e)),this._$Et=void 0);let t=!1;const a=this._$AL;try{t=this.shouldUpdate(a),t?(this.willUpdate(a),null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(a)):this._$EU()}catch(e){throw t=!1,this._$EU(),e}t&&this._$AE(a)}willUpdate(e){}_$AE(e){var t;null===(t=this._$Eg)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$ES(t,this[t],e))),this._$EC=void 0),this._$EU()}updated(e){}firstUpdated(e){}}
|
||
/**
|
||
* @license
|
||
* Copyright 2017 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/
|
||
var g;_.finalized=!0,_.elementProperties=new Map,_.elementStyles=[],_.shadowRootOptions={mode:"open"},null==d||d({ReactiveElement:_}),(null!==(s=globalThis.reactiveElementVersions)&&void 0!==s?s:globalThis.reactiveElementVersions=[]).push("1.3.2");const v=globalThis.trustedTypes,h=v?v.createPolicy("lit-html",{createHTML:e=>e}):void 0,f=`lit$${(Math.random()+"").slice(9)}$`,b="?"+f,y=`<${b}>`,k=document,A=(e="")=>k.createComment(e),x=e=>null===e||"object"!=typeof e&&"function"!=typeof e,E=Array.isArray,w=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,P=/>/g,S=/>|[ \n\r](?:([^\s"'>=/]+)([ \n\r]*=[ \n\r]*(?:[^ \n\r"'`<>=]|("|')|))|$)/g,M=/'/g,T=/"/g,C=/^(?:script|style|textarea|title)$/i,O=e=>(t,...a)=>({_$litType$:e,strings:t,values:a}),N=O(1),R=O(2),j=Symbol.for("lit-noChange"),$=Symbol.for("lit-nothing"),L=new WeakMap,I=k.createTreeWalker(k,129,null,!1),D=(e,t)=>{const a=e.length-1,i=[];let n,o=2===t?"<svg>":"",r=w;for(let t=0;t<a;t++){const a=e[t];let s,l,c=-1,d=0;for(;d<a.length&&(r.lastIndex=d,l=r.exec(a),null!==l);)d=r.lastIndex,r===w?"!--"===l[1]?r=z:void 0!==l[1]?r=P:void 0!==l[2]?(C.test(l[2])&&(n=RegExp("</"+l[2],"g")),r=S):void 0!==l[3]&&(r=S):r===S?">"===l[0]?(r=null!=n?n:w,c=-1):void 0===l[1]?c=-2:(c=r.lastIndex-l[2].length,s=l[1],r=void 0===l[3]?S:'"'===l[3]?T:M):r===T||r===M?r=S:r===z||r===P?r=w:(r=S,n=void 0);const m=r===S&&e[t+1].startsWith("/>")?" ":"";o+=r===w?a+y:c>=0?(i.push(s),a.slice(0,c)+"$lit$"+a.slice(c)+f+m):a+f+(-2===c?(i.push(void 0),t):m)}const s=o+(e[a]||"<?>")+(2===t?"</svg>":"");if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==h?h.createHTML(s):s,i]};class F{constructor({strings:e,_$litType$:t},a){let i;this.parts=[];let n=0,o=0;const r=e.length-1,s=this.parts,[l,c]=D(e,t);if(this.el=F.createElement(l,a),I.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(i=I.nextNode())&&s.length<r;){if(1===i.nodeType){if(i.hasAttributes()){const e=[];for(const t of i.getAttributeNames())if(t.endsWith("$lit$")||t.startsWith(f)){const a=c[o++];if(e.push(t),void 0!==a){const e=i.getAttribute(a.toLowerCase()+"$lit$").split(f),t=/([.?@])?(.*)/.exec(a);s.push({type:1,index:n,name:t[2],strings:e,ctor:"."===t[1]?K:"?"===t[1]?G:"@"===t[1]?Z:X})}else s.push({type:6,index:n})}for(const t of e)i.removeAttribute(t)}if(C.test(i.tagName)){const e=i.textContent.split(f),t=e.length-1;if(t>0){i.textContent=v?v.emptyScript:"";for(let a=0;a<t;a++)i.append(e[a],A()),I.nextNode(),s.push({type:2,index:++n});i.append(e[t],A())}}}else if(8===i.nodeType)if(i.data===b)s.push({type:2,index:n});else{let e=-1;for(;-1!==(e=i.data.indexOf(f,e+1));)s.push({type:7,index:n}),e+=f.length-1}n++}}static createElement(e,t){const a=k.createElement("template");return a.innerHTML=e,a}}function V(e,t,a=e,i){var n,o,r,s;if(t===j)return t;let l=void 0!==i?null===(n=a._$Cl)||void 0===n?void 0:n[i]:a._$Cu;const c=x(t)?void 0:t._$litDirective$;return(null==l?void 0:l.constructor)!==c&&(null===(o=null==l?void 0:l._$AO)||void 0===o||o.call(l,!1),void 0===c?l=void 0:(l=new c(e),l._$AT(e,a,i)),void 0!==i?(null!==(r=(s=a)._$Cl)&&void 0!==r?r:s._$Cl=[])[i]=l:a._$Cu=l),void 0!==l&&(t=V(e,l._$AS(e,t.values),l,i)),t}class U{constructor(e,t){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var t;const{el:{content:a},parts:i}=this._$AD,n=(null!==(t=null==e?void 0:e.creationScope)&&void 0!==t?t:k).importNode(a,!0);I.currentNode=n;let o=I.nextNode(),r=0,s=0,l=i[0];for(;void 0!==l;){if(r===l.index){let t;2===l.type?t=new H(o,o.nextSibling,this,e):1===l.type?t=new l.ctor(o,l.name,l.strings,this,e):6===l.type&&(t=new B(o,this,e)),this.v.push(t),l=i[++s]}r!==(null==l?void 0:l.index)&&(o=I.nextNode(),r++)}return n}m(e){let t=0;for(const a of this.v)void 0!==a&&(void 0!==a.strings?(a._$AI(e,a,t),t+=a.strings.length-2):a._$AI(e[t])),t++}}class H{constructor(e,t,a,i){var n;this.type=2,this._$AH=$,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=a,this.options=i,this._$Cg=null===(n=null==i?void 0:i.isConnected)||void 0===n||n}get _$AU(){var e,t;return null!==(t=null===(e=this._$AM)||void 0===e?void 0:e._$AU)&&void 0!==t?t:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return void 0!==t&&11===e.nodeType&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=V(this,e,t),x(e)?e===$||null==e||""===e?(this._$AH!==$&&this._$AR(),this._$AH=$):e!==this._$AH&&e!==j&&this.$(e):void 0!==e._$litType$?this.T(e):void 0!==e.nodeType?this.k(e):(e=>{var t;return E(e)||"function"==typeof(null===(t=e)||void 0===t?void 0:t[Symbol.iterator])})(e)?this.S(e):this.$(e)}M(e,t=this._$AB){return this._$AA.parentNode.insertBefore(e,t)}k(e){this._$AH!==e&&(this._$AR(),this._$AH=this.M(e))}$(e){this._$AH!==$&&x(this._$AH)?this._$AA.nextSibling.data=e:this.k(k.createTextNode(e)),this._$AH=e}T(e){var t;const{values:a,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=F.createElement(i.h,this.options)),i);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===n)this._$AH.m(a);else{const e=new U(n,this),t=e.p(this.options);e.m(a),this.k(t),this._$AH=e}}_$AC(e){let t=L.get(e.strings);return void 0===t&&L.set(e.strings,t=new F(e)),t}S(e){E(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let a,i=0;for(const n of e)i===t.length?t.push(a=new H(this.M(A()),this.M(A()),this,this.options)):a=t[i],a._$AI(n),i++;i<t.length&&(this._$AR(a&&a._$AB.nextSibling,i),t.length=i)}_$AR(e=this._$AA.nextSibling,t){var a;for(null===(a=this._$AP)||void 0===a||a.call(this,!1,!0,t);e&&e!==this._$AB;){const t=e.nextSibling;e.remove(),e=t}}setConnected(e){var t;void 0===this._$AM&&(this._$Cg=e,null===(t=this._$AP)||void 0===t||t.call(this,e))}}class X{constructor(e,t,a,i,n){this.type=1,this._$AH=$,this._$AN=void 0,this.element=e,this.name=t,this._$AM=i,this.options=n,a.length>2||""!==a[0]||""!==a[1]?(this._$AH=Array(a.length-1).fill(new String),this.strings=a):this._$AH=$}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,a,i){const n=this.strings;let o=!1;if(void 0===n)e=V(this,e,t,0),o=!x(e)||e!==this._$AH&&e!==j,o&&(this._$AH=e);else{const i=e;let r,s;for(e=n[0],r=0;r<n.length-1;r++)s=V(this,i[a+r],t,r),s===j&&(s=this._$AH[r]),o||(o=!x(s)||s!==this._$AH[r]),s===$?e=$:e!==$&&(e+=(null!=s?s:"")+n[r+1]),this._$AH[r]=s}o&&!i&&this.C(e)}C(e){e===$?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=e?e:"")}}class K extends X{constructor(){super(...arguments),this.type=3}C(e){this.element[this.name]=e===$?void 0:e}}const q=v?v.emptyScript:"";class G extends X{constructor(){super(...arguments),this.type=4}C(e){e&&e!==$?this.element.setAttribute(this.name,q):this.element.removeAttribute(this.name)}}class Z extends X{constructor(e,t,a,i,n){super(e,t,a,i,n),this.type=5}_$AI(e,t=this){var a;if((e=null!==(a=V(this,e,t,0))&&void 0!==a?a:$)===j)return;const i=this._$AH,n=e===$&&i!==$||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,o=e!==$&&(i===$||n);n&&this.element.removeEventListener(this.name,this,i),o&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var t,a;"function"==typeof this._$AH?this._$AH.call(null!==(a=null===(t=this.options)||void 0===t?void 0:t.host)&&void 0!==a?a:this.element,e):this._$AH.handleEvent(e)}}class B{constructor(e,t,a){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=a}get _$AU(){return this._$AM._$AU}_$AI(e){V(this,e)}}const Y=window.litHtmlPolyfillSupport;
|
||
/**
|
||
* @license
|
||
* Copyright 2017 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/
|
||
var J,W;null==Y||Y(F,H),(null!==(g=globalThis.litHtmlVersions)&&void 0!==g?g:globalThis.litHtmlVersions=[]).push("2.2.3");class Q extends _{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var e,t;const a=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=a.firstChild),a}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Dt=((e,t,a)=>{var i,n;const o=null!==(i=null==a?void 0:a.renderBefore)&&void 0!==i?i:t;let r=o._$litPart$;if(void 0===r){const e=null!==(n=null==a?void 0:a.renderBefore)&&void 0!==n?n:null;o._$litPart$=r=new H(t.insertBefore(A(),e),e,void 0,null!=a?a:{})}return r._$AI(e),r})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Dt)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Dt)||void 0===e||e.setConnected(!1)}render(){return j}}Q.finalized=!0,Q._$litElement$=!0,null===(J=globalThis.litElementHydrateSupport)||void 0===J||J.call(globalThis,{LitElement:Q});const ee=globalThis.litElementPolyfillSupport;null==ee||ee({LitElement:Q}),(null!==(W=globalThis.litElementVersions)&&void 0!==W?W:globalThis.litElementVersions=[]).push("3.2.0");
|
||
/**
|
||
* @license
|
||
* Copyright 2017 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/
|
||
const te=e=>t=>"function"==typeof t?((e,t)=>(window.customElements.define(e,t),t))(e,t):((e,t)=>{const{kind:a,elements:i}=t;return{kind:a,elements:i,finisher(t){window.customElements.define(e,t)}}})(e,t)
|
||
/**
|
||
* @license
|
||
* Copyright 2017 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/,ae=(e,t)=>"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?{...t,finisher(a){a.createProperty(t.key,e)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:t.key,initializer(){"function"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(a){a.createProperty(t.key,e)}};function ie(e){return(t,a)=>void 0!==a?((e,t,a)=>{t.constructor.createProperty(a,e)})(e,t,a):ae(e,t)
|
||
/**
|
||
* @license
|
||
* Copyright 2017 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/}function ne(e){return ie({...e,state:!0})}
|
||
/**
|
||
* @license
|
||
* Copyright 2021 Google LLC
|
||
* SPDX-License-Identifier: BSD-3-Clause
|
||
*/var oe,re,se;null===(oe=window.HTMLSlotElement)||void 0===oe||oe.prototype.assignedElements,function(e){e.language="language",e.system="system",e.comma_decimal="comma_decimal",e.decimal_comma="decimal_comma",e.space_comma="space_comma",e.none="none"}(re||(re={})),function(e){e.language="language",e.system="system",e.am_pm="12",e.twenty_four="24"}(se||(se={}));var le=["closed","locked","off"],ce=function(e,t,a,i){i=i||{},a=null==a?{}:a;var n=new Event(t,{bubbles:void 0===i.bubbles||i.bubbles,cancelable:Boolean(i.cancelable),composed:void 0===i.composed||i.composed});return n.detail=a,e.dispatchEvent(n),n},de=function(e){ce(window,"haptic",e)},me=function(e,t,a,i){if(i||(i={action:"more-info"}),!i.confirmation||i.confirmation.exemptions&&i.confirmation.exemptions.some((function(e){return e.user===t.user.id}))||(de("warning"),confirm(i.confirmation.text||"Are you sure you want to "+i.action+"?")))switch(i.action){case"more-info":(a.entity||a.camera_image)&&ce(e,"hass-more-info",{entityId:a.entity?a.entity:a.camera_image});break;case"navigate":i.navigation_path&&function(e,t,a){void 0===a&&(a=!1),a?history.replaceState(null,"",t):history.pushState(null,"",t),ce(window,"location-changed",{replace:a})}(0,i.navigation_path);break;case"url":i.url_path&&window.open(i.url_path);break;case"toggle":a.entity&&(function(e,t){(function(e,t,a){void 0===a&&(a=!0);var i,n=function(e){return e.substr(0,e.indexOf("."))}(t),o="group"===n?"homeassistant":n;switch(n){case"lock":i=a?"unlock":"lock";break;case"cover":i=a?"open_cover":"close_cover";break;default:i=a?"turn_on":"turn_off"}e.callService(o,i,{entity_id:t})})(e,t,le.includes(e.states[t].state))}(t,a.entity),de("success"));break;case"call-service":if(!i.service)return void de("failure");var n=i.service.split(".",2);t.callService(n[0],n[1],i.service_data,i.target),de("success");break;case"fire-dom-event":ce(e,"ll-custom",i)}};function ue(e){return void 0!==e&&"none"!==e.action}var pe={version:"Verze",invalid_configuration:"Neplatná konfigurace {0}",description:"Karta pomocí které můžete ovládat váš vysavač",old_configuration:"Detekována zastaralá konfigurace. Upravte prosím konfiguraci nebo kartu vytvořte znovu od začátku.",old_configuration_migration_link:"Návod na úpravu konfigurace"},_e={invalid:"Neplatná šablona",vacuum_goto:"Přesun na bod",vacuum_goto_predefined:"Přesun na bod ze seznamu",vacuum_clean_segment:"Úklid místnosti",vacuum_clean_point:"Úklid bodu",vacuum_clean_point_predefined:"Úklid bodu ze seznamu",vacuum_clean_zone:"Úklid oblasti",vacuum_clean_zone_predefined:"Úklid oblasti ze seznamu",vacuum_follow_path:"Trasa"},ge={preset:{entity:{missing:'Chybějící položka "entity"'},preset_name:{missing:'Chybějící položka "preset_name"'},platform:{invalid:"Neplatná platforma vysavače: {0}"},map_source:{missing:'Chybějící položka "map_source"',none_provided:"Chybějící odkaz na kameru nebo obrázek s mapou",ambiguous:"Povolen pouze jeden zdroj mapy"},calibration_source:{missing:'Chybějící položka "calibration_source"',ambiguous:"Povolen pouze jeden zdroj kalibrace",none_provided:"Chybějící zdroj kalibrace",calibration_points:{invalid_number:"Požadovány 3 nebo 4 kalibrační body",missing_map:"Každý kalibrační bod musí obsahovat souřadnice mapy",missing_vacuum:"Každý kalibrační bod musí obsahovat souřadnice vysavače",missing_coordinate:'Souřadnice mapy i vysavače musí vždy obsahovat položku "x" a "y"'}},icons:{invalid:'Neplatná konfigurace pro položku "icons"',icon:{missing:'Každý záznam v seznamu ikon musí vždy obsahovat položku "icon"'}},tiles:{invalid:'Neplatná konfigurace pro položku "tiles"',entity:{missing_outdated_translation:'Každý záznam v seznamu dlaždic musí vždy obsahovat položku "entity"'},label:{missing:'Každý záznam v seznamu dlaždic musí vždy obsahovat položku "label"'}},map_modes:{invalid:'Neplatná konfigurace pro položku "map_modes"',icon:{missing:"Chybějící ikona pro mapový režim"},name:{missing:"Chybějící název pro mapový režim"},template:{invalid:"Neplatná šablona: {0}"},predefined_selections:{not_applicable:"Režim {0} nepodporuje výběr z přednastavených možností",zones:{missing:"Chybějící konfigurace oblastí",invalid_parameters_number:"Každá oblast musí mít 4 parametry"},points:{position:{missing:"Chybějící konfigurace bodů",invalid_parameters_number:"Každý bod musí mít 2 parametry"}},rooms:{id:{missing:"Chybějící identifikátor místnosti",invalid_format:"Neplatný identifikátor místnosti: {0}"},outline:{invalid_parameters_number:"Každý bod ohraničení místnosti musí mít 2 parametry"}},label:{x:{missing:'Popisek musí mít položku "x"'},y:{missing:'Popisek musí mít položku "y"'},text:{missing:'Popisek musí mít položku "text"'}},icon:{x:{missing:'Ikona musí mít položku "x"'},y:{missing:'Ikona musí mít položku "y"'},name:{missing:'Ikona musí mít položku "name"'}}},service_call_schema:{missing:"Chybějící formát volání služby",service:{missing:'Formát volání služby musí obsahovat položku "service"',invalid:"Neplatná služba: {0}"}}}},invalid_entities:"Neplatné entity:",invalid_calibration:"Neplatná kalibrace, prosím zkontrolujte konfiguraci"},ve={status:{label:"Stav",value:{starting:"Zapínání","charger disconnected":"Nabíječka odpojena",idle:"Nečinný","remote control active":"Dálkové ovládání aktivní",cleaning:"Uklízení","returning home":"Návrat do základny","manual mode":"Manuální režim",charging:"Nabíjení","charging problem":"Problém s nabíjením",paused:"Pozastaven","spot cleaning":"Uklízení bodu",error:"Chyba","shutting down":"Vypínání",updating:"Probíhá aktualizace",docking:"Parkování","going to target":"Přesun na bod","zoned cleaning":"Uklízení oblasti","segment cleaning":"Uklízení místnosti","emptying the bin":"Vyprazdňování zásobníku","charging complete":"Nabíjení dokončeno","device offline":"Zařízení je nedostupné"}},battery_level:{label:"Baterie"},fan_speed:{label:"Stupeň vysávání",value:{silent:"Tichý",standard:"Standardní",medium:"Střední",turbo:"Turbo",auto:"Automatický",gentle:"Slabý"}},sensor_dirty_left:{label:"Čistota senzorů"},filter_left:{label:"Životnost filtru"},main_brush_left:{label:"Životnost hlavního kartáče"},side_brush_left:{label:"Životnost bočních kartáčů"},cleaning_count:{label:"Počet úklidů"},cleaned_area:{label:"Uklizená plocha"},cleaning_time:{label:"Doba uklízení"},mop_left:{label:"Životnost mopu"}},he={vacuum_start:"Zahájit úklid",vacuum_pause:"Pozastavit úklid",vacuum_stop:"Ukončit úklid",vacuum_return_to_base:"Návrat do základny",vacuum_clean_spot:"Uklidit bod",vacuum_locate:"Najít",vacuum_set_fan_speed:"Nastavit stupeň vysávání"},fe={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},be={success:"Volání služby bylo úspěšné",no_selection:"Nebyl proveden žádný výběr",failed:"Volání služby selhalo"},ye={description:{before_link:"Tento editor podporuje pouze základní konfiguraci s použitím entity kamera vytvořené pomocí ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Pro pokročilá nastavení použijte editor kódu."},label:{name:"Titulek (volitelná položka)",entity:"Entita vysavače (povinná položka)",camera:"Entita kamery (povinná položka)",vacuum_platform:"Platforma vysavače (povinná položka)",map_locked:"Uzamčení mapy",two_finger_pan:"Posuv mapy dvěma prsty"}},ke={common:pe,map_mode:_e,validation:ge,tile:ve,icon:he,unit:fe,popups:be,editor:ye},Ae=Object.freeze({__proto__:null,common:pe,map_mode:_e,validation:ge,tile:ve,icon:he,unit:fe,popups:be,editor:ye,default:ke}),xe={version:"Version",invalid_configuration:"Ugyldig konfiguration {0}",description:"Et kort som lader dig styre din robotstøvsuger",old_configuration:"Gammel opsætning fundet. Juster dine indstillinger til det seneste format, eller lav et nyt kort fra bunden.",old_configuration_migration_link:"Migrerings vejledning"},Ee={invalid:"Ugyldigt template!",vacuum_goto:"Klik & Gå",vacuum_goto_predefined:"Punkter",vacuum_clean_segment:"Rum",vacuum_clean_zone:"Zone rengøring",vacuum_clean_zone_predefined:"Zoner",vacuum_follow_path:"Sti"},we={preset:{entity:{missing:"Mangler indstilling: entity"},preset_name:{missing:"Mangler indstilling: preset_name"},platform:{invalid:"Ugyldig støvsuger platform: {0}"},map_source:{missing:"Mangler indstilling: map_source",none_provided:"Intet kamera eller billede er angivet",ambiguous:"Kun en kort-kilde tilladt"},calibration_source:{missing:"Mangler indstilling: calibration_source",ambiguous:"Kun en kalibrerings-kilde tilladt",none_provided:"Ingen kalibrerings kilde angivet",calibration_points:{invalid_number:"Nøjagtigt 3 eller 4 kalibreringspunkter påkrævet",missing_map:"Alle kalibreringspunkter skal indeholde kort koordinater",missing_vacuum:"Alle kalibreringspunkter skal indeholde støvsuger koordinater",missing_coordinate:"Kort og støvsugers kalibreringspunkter skal indeholde både x og y koordinater"}},icons:{invalid:"Fejl i konfiguration: icons",icon:{missing:"Alle punkter i icons listen skal indeholde icon egenskaben"}},tiles:{invalid:"Fejl i konfiguration: tiles",entity:{missing_outdated_translation:"Alle punkter i tiles listen skal indehold entity egenskaben"},label:{missing:"Alle punkter i tiles listen skal indehold label egenskaben"}},map_modes:{invalid:"Fejl i konfiguration: map_modes",icon:{missing:"Ikon mangler"},name:{missing:"Navn mangler"},template:{invalid:"Ugyldigt template: {0}"},predefined_selections:{not_applicable:"Mode {0} understøtter ikke predefinerede valg",zones:{missing:"Zone konfiguration mangler",invalid_parameters_number:"En zone skal indeholde 4 parametre."},points:{position:{missing:"Punkt konfiguration mangler",invalid_parameters_number:"Et punkt skal indeholde 2 parametre"}},rooms:{id:{missing:"Rummets id mangler",invalid_format:"Ugyldigt rum id: {0}"},outline:{invalid_parameters_number:"Et punkt i rummets kant skal indeholde 2 parametre"}},label:{x:{missing:"Label skal indeholde egenskaben x"},y:{missing:"Label skal indeholde egenskaben y"},text:{missing:"Label skal indeholde egenskaben text"}},icon:{x:{missing:"Icon skal indeholde egenskaben x"},y:{missing:"Icon skal indeholde egenskaben y"},name:{missing:"Icon skal indeholde egenskaben name"}}},service_call_schema:{missing:"Service-kald indstillingerne mangler",service:{missing:"Service-kald indstillinger skal indeholde en service",invalid:"Ugyldig service: {0}"}}}},invalid_entities:"Ugyldige entiteter:",invalid_calibration:"Ugyldig kalibrering, du bedes gennemgå din konfiguration"},ze={status:{label:"Status",value:{starting:"Starter","charger disconnected":"Oplader koblet fra",idle:"Ledig","remote control active":"Fjernstyring aktivt",cleaning:"Rengører","returning home":"Vender hjem","manual mode":"Manuel tilstand",charging:"Oplader","charging problem":"Opladnings-problem",paused:"Sat på pause","spot cleaning":"Spot rengøring",error:"Fejl","shutting down":"Slukker",updating:"Opdaterer",docking:"Docker","going to target":"Går til mål","zoned cleaning":"Zone rengøring","segment cleaning":"Segment rengøring","emptying the bin":"Tømmes","charging complete":"Fuldt opladt","device offline":"Enhed offline"}},battery_level:{label:"Batteri"},fan_speed:{label:"Hastighed",value:{silent:"Stille",standard:"Standard",medium:"Medium",turbo:"Turbo",auto:"Auto",gentle:"Mild"}},sensor_dirty_left:{label:"Sensor vedl."},filter_left:{label:"Filter vedl."},main_brush_left:{label:"Hovedbørste vedl."},side_brush_left:{label:"Sidebørste vedl."},cleaning_count:{label:"Rengøringstæller"},cleaned_area:{label:"Rengjort areal"},cleaning_time:{label:"Rengørings tid"}},Pe={vacuum_start:"Start",vacuum_pause:"Pause",vacuum_stop:"Stop",vacuum_return_to_base:"Returner",vacuum_clean_spot:"Spotrengør",vacuum_locate:"Find",vacuum_set_fan_speed:"Skift hastighed"},Se={hour_shortcut:"t",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},Me={success:"Succes!",no_selection:"Intet valg angivet",failed:"Service-kald fejlede"},Te={description:{before_link:"Den visuelle editor understøtter kun kun en konfiguration med en kamera entitet lavet med ",link_text:"Xiaomi Cloud Map Extractor",after_link:". For en mere advanceret konfiguration, brug YAML mode."},label:{name:"Titel (valgfrit)",entity:"Støvsuger entitet (påkrævet)",camera:"Kamera entitet (påkrævet)",vacuum_platform:"Støvsuger platform (påkrævet)",map_locked:"Kort låst (valgfrit)",two_finger_pan:"To-finger panorering (valgfrit)"}},Ce={common:xe,map_mode:Ee,validation:we,tile:ze,icon:Pe,unit:Se,popups:Me,editor:Te},Oe=Object.freeze({__proto__:null,common:xe,map_mode:Ee,validation:we,tile:ze,icon:Pe,unit:Se,popups:Me,editor:Te,default:Ce}),Ne={version:"Version",invalid_configuration:"Ungültige Konfiguration {0}",description:"Eine Karte, mit der Sie Ihren Staubsauger kontrollieren können.",old_configuration:"Es wurde eine alte Konfiguration erkannt. Passen Sie Ihre Konfiguration an das neueste Schema an oder erstellen Sie eine neue Karte von Grund auf.",old_configuration_migration_link:"Migrationsanleitung"},Re={invalid:"Ungültige Vorlage!",vacuum_goto:"Pin & Go",vacuum_goto_predefined:"Punkte",vacuum_clean_segment:"Räume",vacuum_clean_point:"Reinige Punkte",vacuum_clean_point_predefined:"Punkte",vacuum_clean_zone:"Zone reinigen",vacuum_clean_zone_predefined:"Zonenliste",vacuum_follow_path:"Pfad"},je={preset:{entity:{missing:"Fehlende Eigenschaft: entity"},preset_name:{missing:"Fehlende Eigenschaft: preset_name,"},platform:{invalid:"Ungültige Staubsauger-Plattform: {0}"},map_source:{missing:"Fehlende Eigenschaft: map_source",none_provided:"Keine Kamera und kein Bild vorhanden",ambiguous:"Nur eine Kartenquelle erlaubt"},calibration_source:{missing:"Fehlende Eigenschaft: calibration_source",ambiguous:"Nur eine Kalibrierungsquelle erlaubt",none_provided:"Keine Kalibrierungsquelle vorhanden",calibration_points:{invalid_number:"Genau 3 oder 4 Kalibrierungspunkte erforderlich",missing_map:"Jeder Kalibrierungspunkt muss Kartenkoordinaten enthalten",missing_vacuum:"Jeder Kalibrierungspunkt muss Stabsauger-Koordinaten enthalten",missing_coordinate:"Karten- und Vakuumkalibrierungspunkte müssen sowohl x- als auch y-Koordinaten enthalten"}},icons:{invalid:"Fehler in der Konfiguration: icons",icon:{missing:"Jeder Eintrag der Icon-Liste muss die Ikoneneigenschaft"}},tiles:{invalid:"Fehler in der Konfiguration: tiles",entity:{missing_outdated_translation:"Jeder Eintrag der Kachel-Liste muss eine Entität enthalten"},label:{missing:"Jeder Eintrag der Kachel-Liste muss ein Label enthalten"}},map_modes:{invalid:"Fehler in der Konfiguration: map_modes",icon:{missing:"Fehlendes Symbol für den Kartenmodus"},name:{missing:"Fehlender Name für den Kartenmodus"},template:{invalid:"Ungültige Vorlage: {0}"},predefined_selections:{not_applicable:"Modus {0} unterstützt keine vordefinierte Auswahl",zones:{missing:"Fehlende Zonenkonfiguration",invalid_parameters_number:"Jede Zone muss 4 Parameter haben"},points:{position:{missing:"Konfiguration der fehlenden Punkte",invalid_parameters_number:"Jeder Punkt muss 2 Parameter haben"}},rooms:{id:{missing:"Fehlende Raum ID",invalid_format:"Ungültige Raum ID: {0}"},outline:{invalid_parameters_number:"Jeder Punkt des Raumes muss 2 Parameter haben."}},label:{x:{missing:"Das Label muss die Eigenschaft x haben"},y:{missing:"Das Label muss die Eigenschaft y haben"},text:{missing:"Das Label muss eine Text-Eigenschaft haben"}},icon:{x:{missing:"Das Icon muss die Eigenschaft x haben"},y:{missing:"Das Icon muss die Eigenschaft y haben"},name:{missing:"Das Icon muss eine Text-Eigenschaft haben"}}},service_call_schema:{missing:"Fehlendes Schema des Service-Aufrufs",service:{missing:"Schema des Service-Aufrufs muss Dienst enthalten",invalid:"Ungültiger Service: {0}"}}}},invalid_entities:"Ungültige Entitäten:",invalid_calibration:"Ungültige Kalibrierung, bitte überprüfen Sie Ihre Konfiguration"},$e={status:{label:"Status",value:{starting:"Starte","charger disconnected":"Ladegerät getrennt",idle:"Inaktiv","remote control active":"Fernsteuerung aktiv",cleaning:"Säubern","returning home":"Kehre zur Ladestation zurück","manual mode":"Manueller Modus",charging:"Lade","charging problem":"Lade-Problem",paused:"Pause","spot cleaning":"Spot-Reinigung",error:"Fehler","shutting down":"Herunterfahren",updating:"Aktualisiere",docking:"Andocken","going to target":"Fahre zum Ziel","zoned cleaning":"Zonen-Reinigung","segment cleaning":"Segment-Reinigung","emptying the bin":"Leere den Staubbehälter","charging complete":"Ladung vollständig","device offline":"Gerät offline"}},battery_level:{label:"Batterie"},fan_speed:{label:"Lüftergeschwindigkeit",value:{silent:"Leise",standard:"Standard",medium:"Medium",turbo:"Turbo",auto:"Auto",gentle:"Sanft"}},sensor_dirty_left:{label:"Sensoren verbleibend"},filter_left:{label:"Filter verbleibend"},main_brush_left:{label:"Hauptbürste verbleibend"},side_brush_left:{label:"Seitenbürste verbleibend"},cleaning_count:{label:"Anzahl der Reinigungen"},cleaned_area:{label:"Gereinigte Fläche"},cleaning_time:{label:"Zeit der Reinigung"}},Le={vacuum_start:"Start",vacuum_pause:"Pause",vacuum_stop:"Stop",vacuum_return_to_base:"Rückkehr zur Basis",vacuum_clean_spot:"Reinige Stelle",vacuum_locate:"Finden",vacuum_set_fan_speed:"Lüftergeschwindigkeit ändern"},Ie={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},De={success:"Erfolg!",no_selection:"Keine Auswahl vorgesehen",failed:"Der Dienst konnte nicht aufgerufen werden"},Fe={description:{before_link:"Dieser visuelle Editor unterstützt nur eine einfache Konfiguration mit einer Kameraeinheit, die mit ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Für erweiterte Einstellungen verwenden Sie den YAML-Modus."},label:{name:"Titel (optional)",entity:"Staubsauger Entität (required)",camera:"Kamera Entität (required)",vacuum_platform:"Staubsauger-Plattform (required)",map_locked:"Karte gesperrt (optional)",two_finger_pan:"Zwei-Finger-Pan (optional)"}},Ve={common:Ne,map_mode:Re,validation:je,tile:$e,icon:Le,unit:Ie,popups:De,editor:Fe},Ue={version:"Έκδοση",invalid_configuration:"Μη αποδεκτές ρυθμίσεις {0}",description:"Μία κάρτα που σας επιτρέπει να ελέγξετε την σκούπα σας",old_configuration:"Ανιχνεύθυκαν παλιές ρυθμίσεις. Προσαρμόστε τις ρυθμίσεις σας στο πιο πρόσφατο μοντέλο ή δημιουργήστε μια νέα κάρτα από την αρχή.",old_configuration_migration_link:"Οδηγός μετατροπής παλιών ρυθμίσεων"},He={invalid:"Μη αποδεκτό πρότυπο!",vacuum_goto:"Πήγαινε Εδώ",vacuum_goto_predefined:"Σημεία",vacuum_clean_segment:"Δωμάτια",vacuum_clean_point:"Σκούπισμα σε σημείο",vacuum_clean_point_predefined:"Σημεία",vacuum_clean_zone:"Σκούπισμα σε ζώνη",vacuum_clean_zone_predefined:"Λίστα ζωνών καθαρισμού",vacuum_follow_path:"Διαδρομή"},Xe={preset:{entity:{missing:"Λείπει η ιδιότητα: entity"},preset_name:{missing:"Λείπει η ιδιότητα: preset_name"},platform:{invalid:"Μη αποδεκτή πλατφόρμα σκούπας: {0}"},map_source:{missing:"Λείπει η ιδιότητα: map_source",none_provided:"Δεν ρυθμίστηκε ούτε κάμερα ούτε εικόνα",ambiguous:"Επιτρέπεται μόνο μία πηγή χάρτη"},calibration_source:{missing:"Λείπει η ιδιότητα: calibration_source",ambiguous:"Επιτρέπεται μόνο μία πηγή βαθμονόμησης",none_provided:"Δεν ρυθμίστηκε πηγή βαθμονόμησης",calibration_points:{invalid_number:"Απαιτούνται ακριβώς 3 ή 4 σημεία βαθμονόμησης",missing_map:"Κάθε σημείο βαθμονόμησης πρέπει να περιέχει συντεταγμένες του χάρτη",missing_vacuum:"Κάθε σημείο βαθμονόμησης πρέπει να περιέχει συντεταγμένες της σκούπας",missing_coordinate:"Τα σημεία βαθμονόμησης του χάρτη και της σκούπας πρέπει να περιέχουν συντεταγμένες x και y"}},icons:{invalid:"Λάθος στις ρυθμίσεις: icons",icon:{missing:"Κάθε εγγραφή icon πρέπει να περιέχει μια ιδιότητα icon"}},tiles:{invalid:"Λάθος στις ρυθμίσεις: tiles",entity:{missing_outdated_translation:"Κάθε εγγραφή tile πρέπει να περιέχει entity"},label:{missing:"Κάθε εγγραφή tile πρέπει να περιέχει label"}},map_modes:{invalid:"Λάθος στις ρυθμίσεις: map_modes",icon:{missing:"Λείπει το εικονίδιο του τρόπου λειτουργίας χάρτη"},name:{missing:"Λείπει το όνομα του τρόπου λειτουργίας χάρτη"},template:{invalid:"Μη αποδεκτό πρότυπο: {0}"},predefined_selections:{not_applicable:"Η λειτουργία {0} δεν υποστηρίζει προκαθορισμένες επιλογές",zones:{missing:"Λείπει η ρύθμιση ζωνών καθαρισμού",invalid_parameters_number:"Κάθε ζώνη καθαρισμού πρέπει να έχει 4 παραμέτρους"},points:{position:{missing:"Λείπει η ρύθμιση σημείων",invalid_parameters_number:"Each point must have 2 parameters"}},rooms:{id:{missing:"Λείπει το αναγνωριστικό του δωματίου",invalid_format:"Λάθος αναγνωριστικό δωματίου: {0}"},outline:{invalid_parameters_number:"Κάθε σημείο του περιγράμματος του δωματίου πρέπει να έχει 2 παραμέτρους"}},label:{x:{missing:"Η ταμπέλα πρέπει να έχει ιδιότητα x"},y:{missing:"Η ταμπέλα πρέπει να έχει ιδιότητα y"},text:{missing:"Η ταμπέλα πρέπει να έχει ιδιότητα κειμένου"}},icon:{x:{missing:"Το εικονίδιο πρέπει να έχει ιδιότητα x"},y:{missing:"Το εικονίδιο πρέπει να έχει ιδιότητα y"},name:{missing:"Το εικονίδιο πρέπει να έχει ιδιότητα ονόματος"}}},service_call_schema:{missing:"Λείπει το μοντέλο κλήσης υπηρεσίας",service:{missing:"Το μοντέλο κλήσης υπηρεσίας πρέπει να εμπεριέχει υπηρεσία",invalid:"Μη έγκυρη υπηρεσία: {0}"}}}},invalid_entities:"Λάθος οντότητες:",invalid_calibration:"Λάθος βαθμονόμηση, παρακαλώ ελέγξτε τις ρυθμίσεις σας"},Ke={status:{label:"Κατάσταση",value:{starting:"Γίνεται εκκίνηση","charger disconnected":"Αποσυνδέθηκε από τη φόρτιση",idle:"Σε αδράνεια","remote control active":"Χειροκίνητος έλεγχος ενεργός",cleaning:"Γίνεται καθαρισμός","returning home":"Επιστροφή στη βάση","manual mode":"Χειροκίνητη λειτουργία",charging:"Σε φόρτιση","charging problem":"Πρόβλημα φόρτισης",paused:"Σε παύση","spot cleaning":"Καθαρισμός σημείου",error:"Σφάλμα","shutting down":"Γίνεται τερματισμός",updating:"Γίνεται αναβάθμιση",docking:"Σύνδεση στη βάση","going to target":"Πορεία προς προορισμό","zoned cleaning":"Καθαρισμός ζώνης","segment cleaning":"Καθαρισμός τμήματος","emptying the bin":"Άδειασμα κάδου","charging complete":"Φόρτιση πλήρης","device offline":"Συσκευή εκτός δικτύου"}},battery_level:{label:"Μπαταρία"},fan_speed:{label:"Ταχύτητα ανεμιστήρα",value:{silent:"Αθόρυβο",standard:"Τυπικό",medium:"Μέτριο",turbo:"Τούρμπο",auto:"Αυτόματο",gentle:"Ήπιο"}},sensor_dirty_left:{label:"Συντήρηση αισθητήρων"},filter_left:{label:"Συντήρηση φίλτρου"},main_brush_left:{label:"Συντήρηση κύριας βούρτσας"},side_brush_left:{label:"Συντήρηση πλαϊνής βούρτσας"},cleaning_count:{label:"Αριθμός σκουπισμάτων"},cleaned_area:{label:"Έκταση που καθαρίστηκε"},cleaning_time:{label:"Χρόνος καθαρισμού"},mop_left:{label:"Συντήρηση σφουγγαρίστρας"}},qe={vacuum_start:"Έναρξη",vacuum_pause:"Παύση",vacuum_stop:"Διακοπή",vacuum_return_to_base:"Επιστροφή στη βάση",vacuum_clean_spot:"Καθαρισμός σημείου",vacuum_locate:"Εντοπισμός",vacuum_set_fan_speed:"Αλλαγή ταχύτητας ανεμιστήρα"},Ge={hour_shortcut:"ω",meter_shortcut:"μ",meter_squared_shortcut:"τ.μ.",minute_shortcut:"λεπ"},Ze={success:"Επιτυχία!",no_selection:"Δεν δόθηκε επιλογή",failed:"Αποτυχία κλήσης υπηρεσίας"},Be={description:{before_link:"Αυτό η οπτική διεπαφή επεξεργασίας υποστηρίζει μόνο βασικές ρυθμίσεις με μια οντότητα κάμερας που δημιουργήθηκε χρησιμοποιώντας ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Για πιο εξελιγμένες ρυθμίσεις χρησιμοποιήστε τη μέθοδο επεξεργασίας αρχείου YAML."},label:{name:"Τίτλος (προεραιτικό)",entity:"Οντότητα σκούπας (απαραίτητο)",camera:"Οντότητα κάμερας (απαραίτητο)",vacuum_platform:"Πλατφόρμα σκούπας (απαραίτητο)",map_locked:"Κλείδωμα χάρτη (προεραιτικό)",two_finger_pan:"Μετακίνηση με δύο δάχτυλα (προεραιτικό)"}},Ye={common:Ue,map_mode:He,validation:Xe,tile:Ke,icon:qe,unit:Ge,popups:Ze,editor:Be},Je={version:"Version",invalid_configuration:"Invalid configuration {0}",description:"A card that lets you control your vacuum",old_configuration:"Old configuration detected. Adjust your config to the latest schema or create a new card from the scratch.",old_configuration_migration_link:"Migration guide"},We={invalid:"Invalid template!",vacuum_goto:"Pin & Go",vacuum_goto_predefined:"Points",vacuum_clean_segment:"Rooms",vacuum_clean_point:"Clean point",vacuum_clean_point_predefined:"Points",vacuum_clean_zone:"Zone cleanup",vacuum_clean_zone_predefined:"Zones list",vacuum_follow_path:"Path"},Qe={preset:{entity:{missing:"Missing property: entity"},preset_name:{missing:"Missing property: preset_name"},platform:{invalid:"Invalid vacuum platform: {0}"},map_source:{missing:"Missing property: map_source",none_provided:"No camera neither image provided",ambiguous:"Only one map source allowed"},calibration_source:{missing:"Missing property: calibration_source",ambiguous:"Only one calibration source allowed",none_provided:"No calibration source provided",calibration_points:{invalid_number:"Exactly 3 or 4 calibration points required",missing_map:"Each calibration point must contain map coordinates",missing_vacuum:"Each calibration point must contain vacuum coordinates",missing_coordinate:"Map and vacuum calibration points must contain both x and y coordinate"}},icons:{invalid:"Error in configuration: icons",icon:{missing:"Each entry of icons list must contain icon property"}},tiles:{invalid:"Error in configuration: tiles",entity:{missing:"Each entry of tiles list must contain entity or internal variable"},label:{missing:"Each entry of tiles list must contain label"}},map_modes:{invalid:"Error in configuration: map_modes",icon:{missing:"Missing icon of map mode"},name:{missing:"Missing name of map mode"},template:{invalid:"Invalid template: {0}"},predefined_selections:{not_applicable:"Mode {0} does not support predefined selections",zones:{missing:"Missing zones configuration",invalid_parameters_number:"Each zone must have 4 parameters"},points:{position:{missing:"Missing points configuration",invalid_parameters_number:"Each point must have 2 parameters"}},rooms:{id:{missing:"Missing room id",invalid_format:"Invalid room id: {0}"},outline:{invalid_parameters_number:"Each point of room outline must have 2 parameters"}},label:{x:{missing:"Label must have x property"},y:{missing:"Label must have y property"},text:{missing:"Label must have text property"}},icon:{x:{missing:"Icon must have x property"},y:{missing:"Icon must have y property"},name:{missing:"Icon must have name property"}}},service_call_schema:{missing:"Missing service call schema",service:{missing:"Service call schema must contain service",invalid:"Invalid service: {0}"}}}},invalid_entities:"Invalid entities:",invalid_calibration:"Invalid calibration, please check your configuration"},et={status:{label:"Status",value:{starting:"Starting","charger disconnected":"Charger disconnected",idle:"Idle","remote control active":"Remote control active",cleaning:"Cleaning","returning home":"Returning home","manual mode":"Manual mode",charging:"Charging","charging problem":"Charging problem",paused:"Paused","spot cleaning":"Spot cleaning",error:"Error","shutting down":"Shutting down",updating:"Updating",docking:"Docking","going to target":"Going to target","zoned cleaning":"Zoned cleaning","segment cleaning":"Segment cleaning","emptying the bin":"Emptying the bin","charging complete":"Charging complete","device offline":"Device offline"}},battery_level:{label:"Battery"},fan_speed:{label:"Fan speed",value:{silent:"Silent",standard:"Standard",medium:"Medium",turbo:"Turbo",auto:"Auto",gentle:"Gentle"}},sensor_dirty_left:{label:"Sensors left"},filter_left:{label:"Filter left"},main_brush_left:{label:"Main brush left"},side_brush_left:{label:"Side brush left"},cleaning_count:{label:"Cleaning count"},cleaned_area:{label:"Cleaned area"},cleaning_time:{label:"Cleaning time"},mop_left:{label:"Mop left"},bin_full:{label:"Bin full",value:{true:"Yes",false:"No"}},bin_present:{label:"Bin present",value:{true:"Yes",false:"No"}}},tt={vacuum_start:"Start",vacuum_pause:"Pause",vacuum_stop:"Stop",vacuum_return_to_base:"Return to base",vacuum_clean_spot:"Clean spot",vacuum_locate:"Locate",vacuum_set_fan_speed:"Change fan speed"},at={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},it={success:"Success!",no_selection:"No selection provided",failed:"Failed to call service"},nt={description:{before_link:"This visual editor supports only a basic configuration with a camera entity created using ",link_text:"Xiaomi Cloud Map Extractor",after_link:". For more advanced setup use YAML mode."},label:{name:"Title (optional)",entity:"Vacuum entity (required)",camera:"Camera entity (required)",vacuum_platform:"Vacuum platform (required)",map_locked:"Map locked (optional)",two_finger_pan:"Two finger pan (optional)",platforms_documentation:"Chosen platform's documentation ({0})",selection:"Selection:",copy:"Copy",copied:"Copied!",set_static_config:"Generate static config",config_set:"Config set!\nOpen config editor to adjust it.",config_set_failed:"Failed to update config.",generate_rooms_config:"Generate rooms config",copy_service_call:"Copy service call"}},ot={common:Je,map_mode:We,validation:Qe,tile:et,icon:tt,unit:at,popups:it,editor:nt},rt={version:"Versión",invalid_configuration:"Configuración no válida {0}",description:"Una tarjeta que te permite controlar la aspiradora",old_configuration:"Se ha detectado una configuración antigua. Ajusta tu configuración al último esquema o crea una nueva tarjeta desde cero.",old_configuration_migration_link:"Guía de migrado."},st={invalid:"Plantilla no válida!",vacuum_goto:"Marcar e ir",vacuum_goto_predefined:"Puntos",vacuum_clean_segment:"Habitaciones",vacuum_clean_point:"Limpiar punto",vacuum_clean_point_predefined:"Puntos",vacuum_clean_zone:"Limpiar zona",vacuum_clean_zone_predefined:"Lista de zonas",vacuum_follow_path:"Ruta"},lt={preset:{entity:{missing:"Propiedad no encontrada: entity"},preset_name:{missing:"Propiedad no encontrada: preset_name"},platform:{invalid:"Plataforma de aspiradora no válida: {0}"},map_source:{missing:"Propiedad no encontrada: map_source",none_provided:"Sin cámara ni imagen proporcionada",ambiguous:"Solo se permite una fuente de mapa"},calibration_source:{missing:"Propiedad no encontrada: calibration_source",ambiguous:"Sólo se permite una fuente de calibración",none_provided:"No se proporciona fuente de calibración",calibration_points:{invalid_number:"Se requieren 3 o 4 puntos de calibración",missing_map:"Cada punto de calibración debe contener las coordenadas del mapa",missing_vacuum:"Cada punto de calibración debe contener las coordenadas de la aspiradora",missing_coordinate:"Los puntos de calibración de la aspiradora y del mapa deben contener las coordenadas x e y"}},icons:{invalid:"Error en la configuración: icons",icon:{missing:"Cada entrada de la lista de iconos debe contener la propiedad del icono."}},tiles:{invalid:"Error en la configuración: tiles",entity:{missing_outdated_translation:"Cada entrada de la lista de mosaicos debe contener la entidad."},label:{missing:"Cada entrada de la lista de mosaicos debe contener una etiqueta."}},map_modes:{invalid:"Error en la configuración: map_modes",icon:{missing:"Falta el icono del modo de mapa"},name:{missing:"Falta el nombre del modo de mapa"},template:{invalid:"Plantilla no válida: {0}"},predefined_selections:{not_applicable:"El modo {0} no admite selecciones predefinidas",zones:{missing:"Faltan configuraciones de zonas",invalid_parameters_number:"Cada zona debe tener 4 parámetros"},points:{position:{missing:"Faltan configuraciones de puntos",invalid_parameters_number:"Cada punto debe tener 2 parámetros"}},rooms:{id:{missing:"Falta la identificación de la habitación",invalid_format:"Identificación de la habitación no válida: {0}"},outline:{invalid_parameters_number:"Cada punto del contorno de la habitación debe tener 2 parámetros"}},label:{x:{missing:"La etiqueta debe tener la propiedad x"},y:{missing:"La etiqueta debe tener la propiedad y"},text:{missing:"La etiqueta debe tener la propiedad text"}},icon:{x:{missing:"El ícono debe tener la propiedad x"},y:{missing:"El ícono debe tener la propiedad y"},name:{missing:"El ícono debe tener la propiedad name"}}},service_call_schema:{missing:"Falta un esquema de llamada de servicio",service:{missing:"El esquema de llamada de servicio debe contener service",invalid:"Servicio no válido: {0}"}}}},invalid_entities:"Entidades no válidas:",invalid_calibration:"Calibración no válida, verifica la configuración."},ct={status:{label:"Estado",value:{starting:"Iniciando","charger disconnected":"Cargador desconectado",idle:"Inactivo","remote control active":"Control remoto activo",cleaning:"Limpiando","returning home":"Volviendo a la base","manual mode":"Modo manual",charging:"Cargando","charging problem":"Error de carga",paused:"Pausado","spot cleaning":"Limpieza por puntos",error:"Error","shutting down":"Apagando",updating:"Actualizando",docking:"Acoplamiento","going to target":"Ir al objetivo","zoned cleaning":"Limpieza por zonas","segment cleaning":"Limpieza por segmentos","emptying the bin":"Vaciando el depósito","charging complete":"Carga completa","device offline":"Dispositivo desconectado"}},battery_level:{label:"Batería"},fan_speed:{label:"Velocidad del ventilador",value:{silent:"Silencioso",standard:"Normal",medium:"Medio",turbo:"Turbo",auto:"Automático",gentle:"Suave"}},sensor_dirty_left:{label:"Sensores"},filter_left:{label:"Filtro"},main_brush_left:{label:"Cepillo"},side_brush_left:{label:"Cepillo lateral"},cleaning_count:{label:"Contador de limpieza"},cleaned_area:{label:"Área limpiada"},cleaning_time:{label:"Tiempo de limpieza"},mop_left:{label:"Mopa"}},dt={vacuum_start:"Iniciar",vacuum_pause:"Pausar",vacuum_stop:"Detener",vacuum_return_to_base:"Volver a la base",vacuum_clean_spot:"Limpiar punto",vacuum_locate:"Localizar",vacuum_set_fan_speed:"Cambiar la velocidad del ventilador"},mt={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},ut={success:"¡Listo!",no_selection:"No se ha proporcionado ninguna selección",failed:"No se pudo llamar al servicio"},pt={description:{before_link:"Este editor visual sólo admite una configuración básica con una entidad de cámara creada utilizando ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Para una configuración más avanzada, utiliza el modo YAML."},label:{name:"Título (opcional)",entity:"Entidad de la aspiradora (requerido)",camera:"Entidad de la cámara (requerido)",vacuum_platform:"Plataforma de la aspiradora (requerido)",map_locked:"Bloquear mapa (opcional)",two_finger_pan:"Mover con dos dedos (opcional)"}},_t={common:rt,map_mode:st,validation:lt,tile:ct,icon:dt,unit:mt,popups:ut,editor:pt},gt={version:"Version",invalid_configuration:"Configuration invalide {0}",description:"Une carte qui vous permet de contrôler votre robot aspirateur",old_configuration:"Ancienne configuration détectée. Ajustez votre configuration à la nouvelle version ou récréez totalement une nouvelle carte.",old_configuration_migration_link:"Guide de migration"},vt={invalid:"Template incorrect !",vacuum_goto:"Cible",vacuum_goto_predefined:"Points",vacuum_clean_segment:"Pièces",vacuum_clean_point:"Nettoyage ciblé",vacuum_clean_point_predefined:"Points",vacuum_clean_zone:"Nettoyage de zone",vacuum_clean_zone_predefined:"Liste des zones",vacuum_follow_path:"Chemin"},ht={preset:{entity:{missing:"Paramètre manquant : entity"},preset_name:{missing:"Paramètre manquant : preset_name"},platform:{invalid:"Plateforme incorrecte : {0}"},map_source:{missing:"Paramètre manquant : map_source",none_provided:"Aucune caméra ou image fournie",ambiguous:"Une seule source de carte autorisée"},calibration_source:{missing:"Paramètre manquant : calibration_source",ambiguous:"Une seule source de calibration autorisée",none_provided:"Aucune source de calibration fournie",calibration_points:{invalid_number:"3 ou 4 points de calibration sont nécessaires",missing_map:"Chaque point de calibration doit avoir des coordonnées de carte",missing_vacuum:"Chaque point de calibration doit avoir des coordonnées de robot",missing_coordinate:"Tous les points de calibration doivent avoir des coordonnées x et y"}},icons:{invalid:"Erreur de configuration : icônes",icon:{missing:"Chaque élément de la liste d'icônes doit avoir une propriété « icon »"}},tiles:{invalid:"Erreur de configuration : tuiles",entity:{missing_outdated_translation:"Chaque élément de la liste de tuiles doit avoir une propriété « entity »"},label:{missing:"Chaque élément de la liste de tuiles doit avoir une propriété « label »"}},map_modes:{invalid:"Erreur de configuration : modes de carte",icon:{missing:"Icône de mode de carte manquante"},name:{missing:"Nom de mode de carte manquant"},template:{invalid:"Template incorrect : {0}"},predefined_selections:{not_applicable:"Ce mode {0} ne supporte pas les sélections prédéfinies",zones:{missing:"Configuration des zones manquante",invalid_parameters_number:"Chaque zone doit avoir 4 paramètres"},points:{position:{missing:"Configuration des points manquante",invalid_parameters_number:"Chaque point doit avoir 2 paramètres"}},rooms:{id:{missing:"id de pièce manquant",invalid_format:"id de pièce incorrect : {0}"},outline:{invalid_parameters_number:"Chaque point de contour de pièce doit avoir 2 paramètres"}},label:{x:{missing:"L'étiquette doit avoir une propriété « x »"},y:{missing:"L'étiquette doit avoir une propriété « y »"},text:{missing:"L'étiquette doit avoir une propriété « text »"}},icon:{x:{missing:"L'icône doit avoir une propriété x property"},y:{missing:"L'icône doit avoir une propriété y property"},name:{missing:"L'icône doit avoir une propriété « name »"}}},service_call_schema:{missing:"Schema d'appel du service manquant",service:{missing:"Le schema doit contenir un service",invalid:"Service incorrect : {0}"}}}},invalid_entities:"Entités incorrectes :",invalid_calibration:"Calibration incorrecte, vérifiez votre configuration"},ft={status:{label:"Statut",value:{starting:"Démarrage...","charger disconnected":"Chargeur déconnecté",idle:"Inactif","remote control active":"Télécommande active",cleaning:"Nettoyage","returning home":"Retour à la station","manual mode":"Mode manuel",charging:"En charge","charging problem":"Problème de chargement",paused:"En pause","spot cleaning":"Nettoyage ciblé",error:"Erreur","shutting down":"Arrêt en cours...",updating:"Mise à jour",docking:"Retour à la station","going to target":"En route vers la cible","zoned cleaning":"Nettoyage de zone","segment cleaning":"Nettoyage de pièce","emptying the bin":"Vidage du réservoir","charging complete":"Chargement terminé","device offline":"Hors ligne"}},battery_level:{label:"Batterie"},fan_speed:{label:"Puissance",value:{silent:"Silencieux",standard:"Standard",medium:"Moyen",turbo:"Turbo",auto:"Auto",gentle:"Calme"}},sensor_dirty_left:{label:"Capteurs"},filter_left:{label:"Filtre"},main_brush_left:{label:"Brosse principale"},side_brush_left:{label:"Brosse latérale"},cleaning_count:{label:"Nombre de nettoyages"},cleaned_area:{label:"Surface nettoyée"},cleaning_time:{label:"Durée de nettoyage"},mop_left:{label:"Serpillère"}},bt={vacuum_start:"Démarrage",vacuum_pause:"Pause",vacuum_stop:"Stop",vacuum_return_to_base:"Retour à la station",vacuum_clean_spot:"Nettoyage ciblé",vacuum_locate:"Localiser",vacuum_set_fan_speed:"Changer la puissance"},yt={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},kt={success:"Réussi !",no_selection:"Sélection non fournie",failed:"L'appel au service a échoué"},At={description:{before_link:"Cet éditeur visuel ne permet qu'une configuration de base avec une entité caméra créée avec ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Pour un paramétrage plus avancé, utilisez le mode YAML."},label:{name:"Titre (optionnel)",entity:"Entité de l'aspirateur (obligatoire)",camera:"Entité de la caméra (obligatoire)",vacuum_platform:"Plateforme (obligatoire)",map_locked:"Carte verrouillée (optionnel)",two_finger_pan:"Déplacement à deux doigts (optionnel)"}},xt={common:gt,map_mode:vt,validation:ht,tile:ft,icon:bt,unit:yt,popups:kt,editor:At},Et={version:"גירסה",invalid_configuration:"תצורה לא חוקית {0}",description:"כרטיס המאפשר לך לשלוט בשואב שלך",old_configuration:"זוהתה תצורה ישנה. התאם את התצורה שלך לסכמה העדכנית ביותר או צור כרטיס חדש מההתחלה.",old_configuration_migration_link:"מדריך להגירה"},wt={invalid:"תבנית לא חוקית!",vacuum_goto:"נעץ וסע",vacuum_goto_predefined:"נקודות",vacuum_clean_segment:"חדרים",vacuum_clean_point:"נקה נקודה",vacuum_clean_point_predefined:"נקודות",vacuum_clean_zone:"ניקוי אזור",vacuum_clean_zone_predefined:"רשימת אזורים",vacuum_follow_path:"נתיב"},zt={preset:{entity:{missing:"נכס חסר: ישות"},preset_name:{missing:"חסר מאפיין: preset_name"},platform:{invalid:"פלטפורמת שואב לא חוקית: {0}"},map_source:{missing:"נכס חסר: map_source",none_provided:"לא סופקה אף תמונה",ambiguous:"מותר רק מקור מפה אחד"},calibration_source:{missing:"חסר מאפיין: calibration_source",ambiguous:"מותר רק מקור כיול אחד",none_provided:"לא סופק מקור כיול",calibration_points:{invalid_number:"דרושות בדיוק 3 או 4 נקודות כיול",missing_map:"כל נקודת כיול חייבת להכיל קואורדינטות מפה",missing_vacuum:"כל נקודת כיול חייבת להכיל קואורדינטות שואב",missing_coordinate:"נקודות כיול במפה ובשואב חייבות להכיל גם קואורדינטות x וגם y"}},icons:{invalid:"שגיאה בתצורה: סמלילים",icon:{missing:"כל כניסה של רשימת הסמלילים חייבת להכיל מאפיין סמליל"}},tiles:{invalid:"שגיאה בתצורה: אריחים",entity:{missing_outdated_translation:"כל ערך של רשימת אריחים חייב להכיל ישות"},label:{missing:"כל כניסה של רשימת אריחים חייבת להכיל תווית"}},map_modes:{invalid:"שגיאה בתצורה: map_modes",icon:{missing:"חסר סמליל של מצב מפה"},name:{missing:"חסר שם של מצב מפה"},template:{invalid:"תבנית לא חוקית: {0}"},predefined_selections:{not_applicable:"מצב {0} אינו תומך בבחירות מוגדרות מראש",zones:{missing:"תצורת אזורים חסרים",invalid_parameters_number:"כל אזור חייב לכלול 4 פרמטרים"},points:{position:{missing:"תצורת נקודות חסרות",invalid_parameters_number:"לכל נקודה חייבת להיות 2 פרמטרים"}},rooms:{id:{missing:"מזהה חדר חסר",invalid_format:"מזהה חדר לא חוקי: {0}"},outline:{invalid_parameters_number:"כל נקודה של מתאר החדר חייבת להיות בעלת 2 פרמטרים"}},label:{x:{missing:"חייב להיות מאפיין x לתבנית"},y:{missing:"חייב להיות מאפיין y לתבנית"},text:{missing:"חייב להיות מאפיין שם לתבנית"}},icon:{x:{missing:"חייב להיות מאפיין x לסמליל"},y:{missing:"חייב להיות מאפיין y לסמליל"},name:{missing:"חייב להיות מאפיין שם לסמליל"}}},service_call_schema:{missing:"סכימת קריאת שירות חסרה",service:{missing:"סכימת קריאת השירות חייבת להכיל שירות",invalid:"שירות לא חוקי: {0}"}}}},invalid_entities:"ישויות לא חוקיות:",invalid_calibration:"כיול לא חוקי, אנא בדוק את התצורה שלך"},Pt={status:{label:"סטטוס"},battery_level:{label:"סוללה"},fan_speed:{label:"מהירות מאוורר"},sensor_dirty_left:{label:"נותר לחיישנים"},filter_left:{label:"נותר למסנן"},main_brush_left:{label:"נותר למברשת ראשית"},side_brush_left:{label:"נותר למברשת צד"},cleaning_count:{label:"כמות נקיונות"},cleaned_area:{label:"שטח שנוקה"},cleaning_time:{label:"זמן ניקיון"},mop_left:{label:"נותר למטלית"}},St={vacuum_start:"התחל",vacuum_pause:"השהה",vacuum_stop:"עצור",vacuum_return_to_base:"חוזר לתחנת עגינה",vacuum_clean_spot:"ניקוי נקודה",vacuum_locate:"איתור",vacuum_set_fan_speed:"שנה מהירות מאוורר"},Mt={hour_shortcut:"ש",meter_shortcut:"מ",meter_squared_shortcut:"m²",minute_shortcut:"דק"},Tt={success:"הצליח!",no_selection:"לא סופקה בחירה",failed:"התקשרות לשירות נכשלה"},Ct={description:{before_link:"עורך חזותי זה תומך רק בתצורה בסיסית עם ישות מצלמה שנוצרה באמצעות ",link_text:"Xiaomi Cloud Map Extractor",after_link:". להגדרה מתקדמת יותר השתמש במצב YAML."},label:{name:"כותרת (אופציונלי)",entity:"יישות שואב (נדרש)",camera:"יישות מצלמה (נדרש)",vacuum_platform:"פלטפורמת שואב (נדרש)",map_locked:"נעילת מפה (אופציונלי)",two_finger_pan:"צביטת שתי אצבעות (אופציונלי)"}},Ot={common:Et,map_mode:wt,validation:zt,tile:Pt,icon:St,unit:Mt,popups:Tt,editor:Ct},Nt={version:"Verzió",invalid_configuration:"Érvénytelen konfiguráció {0}",description:"Egy kártya, amely lehetővé teszi a vákuum szabályozását",old_configuration:"Régi konfiguráció észlelve. Állítsa be a konfigurációt a legújabb sémához, vagy hozzon létre egy új kártyát.",old_configuration_migration_link:"Migrációs útmutató"},Rt={invalid:"Érvénytelen sablon!",vacuum_goto:"Pin & Go",vacuum_goto_predefined:"Pontok",vacuum_clean_segment:"Szobák",vacuum_clean_zone:"Zóna takarítás",vacuum_clean_zone_predefined:"Zónák listája",vacuum_follow_path:"Pálya"},jt={preset:{entity:{missing:"Hiányzó tulajdonság: entity"},preset_name:{missing:"Hiányzó tulajdonság: preset_name"},platform:{invalid:"Érvénytelen vákuumplatform: {0}"},map_source:{missing:"Hiányzó tulajdonság: map_source",none_provided:"Nincs kamera és kép sem biztosított",ambiguous:"Csak egy térképforrás engedélyezett"},calibration_source:{missing:"Hiányzó tulajdonság: calibration_source",ambiguous:"Csak egy kalibrációs forrás engedélyezett",none_provided:"Nincs megadva kalibrációs forrás",calibration_points:{invalid_number:"Pontosan 3 vagy 4 kalibrációs pont szükséges",missing_map:"Minden kalibrációs pontnak tartalmaznia kell a térkép koordinátáit",missing_vacuum:"Minden kalibrációs pontnak vákuumkoordinátákat kell tartalmaznia",missing_coordinate:"A térképi és vákuumkalibrációs pontoknak x és y koordinátát is tartalmazniuk kell"}},icons:{invalid:"Hiba a konfigurációban: icons",icon:{missing:"Az ikonlista minden bejegyzésének tartalmaznia kell az ikon tulajdonságot"}},tiles:{invalid:"Hiba a konfigurációban: tiles",entity:{missing_outdated_translation:"A csempelista minden bejegyzésének tartalmaznia kell entitást"},label:{missing:"A csempelista minden bejegyzésének tartalmaznia kell egy címkét"}},map_modes:{invalid:"Hiba a konfigurációban: map_modes",icon:{missing:"Hiányzik a térkép mód ikonja"},name:{missing:"A térképmód neve hiányzik"},template:{invalid:"Érvénytelen sablon: {0}"},predefined_selections:{not_applicable:"A(z) {0} mód nem támogatja az előre meghatározott kijelöléseket",zones:{missing:"Hiányzó zónák konfigurációja",invalid_parameters_number:"Minden zónának 4 paraméterrel kell rendelkeznie"},points:{position:{missing:"Hiányzó pontok konfigurációja",invalid_parameters_number:"Minden pontnak 2 paraméterrel kell rendelkeznie"}},rooms:{id:{missing:"Hiányzó szoba id",invalid_format:"Érvénytelen szoba id: {0}"},outline:{invalid_parameters_number:"A helyiség körvonalának minden pontján 2 paraméterrel kell rendelkeznie"}},label:{x:{missing:"A címkének x tulajdonsággal kell rendelkeznie"},y:{missing:"A címkének y tulajdonsággal kell rendelkeznie"},text:{missing:"A címkének szövegtulajdonsággal kell rendelkeznie"}},icon:{x:{missing:"Az ikonnak x tulajdonsággal kell rendelkeznie"},y:{missing:"Az ikonnak y tulajdonsággal kell rendelkeznie"},name:{missing:"Az ikonnak név tulajdonsággal kell rendelkeznie"}}},service_call_schema:{missing:"Hiányzó szolgáltatáshívási séma",service:{missing:"A szolgáltatáshívási sémának tartalmaznia kell a szolgáltatást",invalid:"Érvénytelen szolgáltatás: {0}"}}}},invalid_entities:"Érvénytelen entitások:",invalid_calibration:"Érvénytelen kalibráció, ellenőrizze a konfigurációt"},$t={status:{label:"Státusz"},battery_level:{label:"Akkumulátor"},fan_speed:{label:"Ventilátor üzemmód"},sensor_dirty_left:{label:"Szenzorok"},filter_left:{label:"Szűrő"},main_brush_left:{label:"Fő kefe"},side_brush_left:{label:"Oldalkefe"},cleaning_count:{label:"Takarítás számláló"},cleaned_area:{label:"Tisztított terület"},cleaning_time:{label:"Takarítási idő"}},Lt={vacuum_start:"Indítás",vacuum_pause:"Szünet",vacuum_stop:"Álljon meg",vacuum_return_to_base:"Vissza a bázisra",vacuum_clean_spot:"Clean spot",vacuum_locate:"Robot megkeresése",vacuum_set_fan_speed:"Ventilátor üzemmódjának módosítása"},It={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},Dt={success:"Siker!",no_selection:"Nincs kiválasztva",failed:"Nem sikerült meghívni a szolgáltatást"},Ft={description:{before_link:"Ez a vizuális szerkesztő csak az alapkonfigurációt támogatja a segítségével létrehozott kameraentitással ",link_text:"Xiaomi Cloud Map Extractor",after_link:". A fejlettebb beállításhoz használja a YAML módot."},label:{name:"Cím (nem kötelező)",entity:"Vákuum entitás (kötelező)",camera:"Kamera entitás (kötelező)",vacuum_platform:"Vákuumos platform (szükséges)",map_locked:"Térkép zárolva (opcionális)",two_finger_pan:"Kétujjas pásztázás (opcionális)"}},Vt={common:Nt,map_mode:Rt,validation:jt,tile:$t,icon:Lt,unit:It,popups:Dt,editor:Ft},Ut={version:"Útgáfa",invalid_configuration:"Ógildar stillingar {0}",description:"Spjald sem leyfir þér að stjórna ryksuguvélmenni þínu",old_configuration:"Gamlar stillingar fundust. Uppfærðu stillingarnar fyrir nýjustu útgáfu eða búðu til nýtt spjald frá grunni.",old_configuration_migration_link:"Aðlögunar leiðbeiningar"},Ht={invalid:"Ógilt sniðmát!",vacuum_goto:"Velja og af stað!",vacuum_goto_predefined:"Deplar",vacuum_clean_segment:"Herbergi",vacuum_clean_point:"Hreinn depill",vacuum_clean_point_predefined:"Deplar",vacuum_clean_zone:"Þrífa svæði",vacuum_clean_zone_predefined:"Svæðislistar",vacuum_follow_path:"Ferill"},Xt={preset:{entity:{missing:"Vantar einingu: entity"},preset_name:{missing:"Vantar einingu: preset_name"},platform:{invalid:"Rangt ryksugu sniðmát: {0}"},map_source:{missing:"Vantar einingu: map_source",none_provided:"Enginn myndavél né mynd er skráð",ambiguous:"Aðeins einn uppruni fyrir kort leyfður"},calibration_source:{missing:"Vantar einindi: calibration_source",ambiguous:"Aðeins ein kvörðunar stilling leyfð",none_provided:"Engin kvörðunarstilling er skilgreind",calibration_points:{invalid_number:":Þú verður að skilagreina nákvæmlega 3 eða 4 kvörðunar punkta",missing_map:"Hver punktur verður að vera hnit á kortinu",missing_vacuum:"Hver punktur á kortinu verður að vera hnit fyrir ryksuguna.",missing_coordinate:"Kort og ryksugu stillingar verða að innihalda x og y hnit"}},icons:{invalid:"Villa í stillingum: icons",icon:{missing:'Hver færsla fyrir smámynd verður að innihalda "icon" stillingu'}},tiles:{invalid:"Villa í stillingum: tiles",entity:{missing_outdated_translation:'Hver færsla á lista verður að innihalda "entity"'},label:{missing:'Hver færsla á lista verður að innihalda "label"'}},map_modes:{invalid:"Villa í stillingum: map_modes",icon:{missing:'Það vantar "icon" fyrir kortaham'},name:{missing:'Það vantar "name" einindið fyrir kortaham'},template:{invalid:"Rangt sniðmát: {0}"},predefined_selections:{not_applicable:"Hamur {0} styður ekki fyrirfram skilgreint val",zones:{missing:"Það vantar skilgreiningar fyrir svæði",invalid_parameters_number:"Hvert svæði verður að hafa 4 færibreytur"},points:{position:{missing:"Það vantar stillingar fyrir hnit",invalid_parameters_number:"Hvert hnit verður að hafa 2 færibreytur"}},rooms:{id:{missing:"Það vantar auðkenni herbergis",invalid_format:"Vitlaust auðkenni : {0}"},outline:{invalid_parameters_number:"Hvert hnit í útlínum fyrir herbergi verður að innihalda 2 færibreytur"}},label:{x:{missing:"Merkimiði verður að innihalda x einingu"},y:{missing:"Merkimiði verður að innihalda y einingu"},text:{missing:'Merkimiði verður að innihalda "text" einingu'}},icon:{x:{missing:"Smámynd verður að innihalda x einingu"},y:{missing:"Smámynd verður að innihalda y einingu"},name:{missing:'Smámynd verður að innihalda "name" einingu'}}},service_call_schema:{missing:"Skema fyrir þjónustukall vantar",service:{missing:'Skema fyrir þjónustukall verður að innihalda "service"',invalid:"Röng þjónusta: {0}"}}}},invalid_entities:"Röng einindi:",invalid_calibration:"Röng kvörðun, athugaðu stillingarnar þínar"},Kt={status:{label:"Staða",value:{starting:"Ræsi","charger disconnected":"Hleðslutæki aftengt",idle:"Aðgerðarlaus","remote control active":"Fjarstýring virk",cleaning:"Að þrífa","returning home":"Á leiðinni heim","manual mode":"Handvirk stýring",charging:"Í hleðslu","charging problem":"Vandamál við hleðslu",paused:"Í bið","spot cleaning":"Hreinsa blett",error:"Villa","shutting down":"Slekk á",updating:"Uppfæri",docking:"Við hleðslustöð","going to target":"Fer á skotmark","zoned cleaning":"Þrífa svæði","segment cleaning":"Þrífa herbergi","emptying the bin":"Tæma ruslatunnu","charging complete":"Hleðslu lokið","device offline":"Tæki er ótengt"}},battery_level:{label:"Rafhlaða"},fan_speed:{label:"Viftuhraði",value:{silent:"Hljóðlátur",standard:"Venjulegur",medium:"Miðlungs",turbo:"Túrbó",auto:"Sjálfvirkt",gentle:"Þægilegur"}},sensor_dirty_left:{label:"Vegg og fallskynjarar eftir"},filter_left:{label:"Sía eftir"},main_brush_left:{label:"Aðalbursti eftir"},side_brush_left:{label:"Hliðarbursti eftir"},cleaning_count:{label:"Fjöldi þrifa"},cleaned_area:{label:"Svæði þrifið"},cleaning_time:{label:"Þriftími"},mop_left:{label:"Moppa eftir"}},qt={vacuum_start:"Ræsa",vacuum_pause:"Gera hlé",vacuum_stop:"Stoppa",vacuum_return_to_base:"Tilbaka á stöð",vacuum_clean_spot:"Hreinsa blett",vacuum_locate:"Finna",vacuum_set_fan_speed:"Breyta viftuhraða"},Gt={hour_shortcut:"k",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"mín"},Zt={success:"Virkaði!",no_selection:"Ekkert val",failed:"Villa við þjónustukall"},Bt={description:{before_link:'Sjónrænn ritill styður aðeins grunn stillingar með "camera" einingunni sem notar ',link_text:"Xiaomi Cloud Map Extractor",after_link:". Fyrir ítarstillingar, notaðu YAML ham."},label:{name:"Titill (valkvætt)",entity:"Vacuum eining (nauðsynlegt)",camera:"Camera eining (nauðsynlegt)",vacuum_platform:"Vacuum platform (nauðsynlegt)",map_locked:"Læsa korti (valkvætt)",two_finger_pan:"Val með 2 fingrum (valkvætt)"}},Yt={common:Ut,map_mode:Ht,validation:Xt,tile:Kt,icon:qt,unit:Gt,popups:Zt,editor:Bt},Jt={version:"Versione",invalid_configuration:"Configurazione non valida {0}",description:"Una card per controllare il tuo robot aspirapolvere",old_configuration:"Trovata una vecchia configurazione. Correggi la configurazione all'ultima possibile o crea una nuova card.",old_configuration_migration_link:"Guida Migrazione"},Wt={invalid:"Template non valido!",vacuum_goto:"Pin & Go",vacuum_goto_predefined:"Punti",vacuum_clean_segment:"Stanze",vacuum_clean_zone:"Pulizia a Zone",vacuum_clean_zone_predefined:"Lista Zone",vacuum_follow_path:"Percorso"},Qt={preset:{entity:{missing:"Proprietà Mancante: entity"},preset_name:{missing:"Proprietà Mancante: preset_name"},platform:{invalid:"Piattaforma aspirapolvere non valida: {0}"},map_source:{missing:"Proprietà Mancante: map_source",none_provided:"Inserire camera o immagine",ambiguous:"È consentita una sola sorgente della mappa"},calibration_source:{missing:"Proprietà Mancante: calibration_source",ambiguous:"È consentita una solo una sorgente di calibrazione",none_provided:"Nessuna fonte di calibrazione fornita",calibration_points:{invalid_number:"Esattamente 3 o 4 punti di calibrazione richiesti",missing_map:"Ogni punto di calibrazione deve contenere le coordinate della mappa",missing_vacuum:"Ciascun punto di calibrazione deve contenere le coordinate dell'aspirapolvere",missing_coordinate:"I punti di calibrazione della mappa e dell'aspirapolvere devono contenere sia le coordinate x che y"}},icons:{invalid:"Errore nella configurazione: icons",icon:{missing:"Ogni voce dell'elenco delle icone deve contenere la proprietà dell'icona"}},tiles:{invalid:"Errore nella configurazione: tiles",entity:{missing_outdated_translation:"Ogni voce dell'elenco 'tile' deve contenere una entity"},label:{missing:"Ogni voce dell'elenco 'tile' deve contenere una label"}},map_modes:{invalid:"Errore nella configurazione: map_modes",icon:{missing:"Icona della modalità mappa mancante"},name:{missing:"Nome della modalità mappa mancante"},template:{invalid:"Template non valido: {0}"},predefined_selections:{not_applicable:"Modalità {0} non supporta le selezioni predefinite",zones:{missing:"Configurazione zone mancante",invalid_parameters_number:"Ogni zona deve avere 4 parametri"},points:{position:{missing:"Configurazione punti mancante",invalid_parameters_number:"Ogni punto deve avere 2 parametri"}},rooms:{id:{missing:"ID stanza mancante",invalid_format:"ID stanza non valido: {0}"},outline:{invalid_parameters_number:"Ogni punto del contorno della stanza deve avere 2 parametri"}},label:{x:{missing:"Label deve avere la proprietà x"},y:{missing:"Label deve avere la proprietà y"},text:{missing:"Label deve avere la proprietà text"}},icon:{x:{missing:"Icon deve avere la proprietà x"},y:{missing:"Icon deve avere la proprietà y"},name:{missing:"Icon deve avere la proprietà name"}}},service_call_schema:{missing:"Schema della chiamata al servizio mancante",service:{missing:"La chiamata al servizio deve contenere un servizio",invalid:"Servizio non valido: {0}"}}}},invalid_entities:"Entità non valide:",invalid_calibration:"Calibrazione non valida, per favore controlla la configurazione"},ea={status:{label:"Stato",value:{starting:"Avvio","charger disconnected":"Caricabatterie scollegato",idle:"Riposo","remote control active":"Controllo remoto attivo",cleaning:"Pulizia","returning home":"Ritorno alla base","manual mode":"Modalità Manuale",charging:"Caricamento","charging problem":"Problema di ricarica",paused:"Pausa","spot cleaning":"Pulizia a punti",error:"Errore","shutting down":"Spegnimento",updating:"Aggiornamento in corso",docking:"In base","going to target":"Andando al punto","zoned cleaning":"Pulizia a zone","segment cleaning":"Pulizia segmenti","emptying the bin":"Svuotare il contenitore","charging complete":"Carica Completata","device offline":"Device offline"}},battery_level:{label:"Batteria"},fan_speed:{label:"Velocità Ventola",value:{silent:"Silenzioso",standard:"Standard",medium:"Media",turbo:"Turbo",auto:"Auto",gentle:"Delicato"}},sensor_dirty_left:{label:"Sensori"},filter_left:{label:"Filtro"},main_brush_left:{label:"Spazzola Principale"},side_brush_left:{label:"Spazzola laterale"},cleaning_count:{label:"Conteggio pulizia"},cleaned_area:{label:"Area pulita"},cleaning_time:{label:"Tempo di pulizia"},mop_left:{label:"Panno"}},ta={vacuum_start:"Avvia",vacuum_pause:"Pausa",vacuum_stop:"Stop",vacuum_return_to_base:"Ritorna alla base",vacuum_clean_spot:"Pulizia spot",vacuum_locate:"Localizza",vacuum_set_fan_speed:"Cambia velocità ventola"},aa={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},ia={success:"Confermato!",no_selection:"Nessuna Selezione",failed:"Chiamata al servizio fallita"},na={description:{before_link:"Questo editor visivo supporta solo una configurazione di base con un'entità telecamera creata utilizzando ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Per una configurazione più avanzata usa la modalità YAML."},label:{name:"Titolo (opzionale)",entity:"Entità Aspirapolvere (obbligatorio)",camera:"Entità camera (obbligatorio)",vacuum_platform:"Piattaforma aspirapolvere (obbligatorio)",map_locked:"Blocco mappa (opzionale)",two_finger_pan:"Zoom a due dita (opzionale)"}},oa={common:Jt,map_mode:Wt,validation:Qt,tile:ea,icon:ta,unit:aa,popups:ia,editor:na},ra={version:"Versjon",invalid_configuration:"Ugyldig konfigurasjon {0}",description:"Et kort som lar deg kontrollere støvsugeren din",old_configuration:"Gammel konfigurasjon oppdaget. Rediger din konfigurasjon til nyeste skjema, eller lag et nytt kort.",old_configuration_migration_link:"Guide for migrering"},sa={invalid:"Ugyldig template!",vacuum_goto:"Klikk & Gå",vacuum_goto_predefined:"Punkter",vacuum_clean_segment:"Rom",vacuum_clean_point:"Rengjøringspunkt",vacuum_clean_point_predefined:"Punkter",vacuum_clean_zone:"Sonerengjøring",vacuum_clean_zone_predefined:"Soneliste",vacuum_follow_path:"Sti"},la={preset:{entity:{missing:"Mangler egenskap: entity"},preset_name:{missing:"Mangler egenskap: preset_name"},platform:{invalid:"Ugyldig støvsugerplattform: {0}"},map_source:{missing:"Mangler egenskap: map_source",none_provided:"Ingen kamera eller bilder spesifisert",ambiguous:"Bare en kart-kilde er tillatt"},calibration_source:{missing:"Mangler egenskap: calibration_source",ambiguous:"Kun en kalibreringskilde tillatt",none_provided:"Ingen kalibreringskilde spesifisert",calibration_points:{invalid_number:"Eksakt 3 eller 4 kalibreringspunkter kreves",missing_map:"Hvert kalibreringspunkt må inneholde koordinater for kart",missing_vacuum:"Hvert kalibreringspunkt må inneholde koordinater for støvsuger",missing_coordinate:"Kalibreringspunkter for kart og støvsuger må inneholde både x og y koordinater"}},icons:{invalid:"Feil i konfigurasjon: icons",icon:{missing:"Hver post med icons må inneholde icon-egenskap"}},tiles:{invalid:"Feil i konfigurasjon: tiles",entity:{missing_outdated_translation:"Hver post med tiles må inneholde entity"},label:{missing:"Hver post med tiles må inneholde label"}},map_modes:{invalid:"Feil i konfigurasjon: map_modes",icon:{missing:"Ikon for map mode mangler"},name:{missing:"Navn for map mode mangler"},template:{invalid:"Ugyldig template: {0}"},predefined_selections:{not_applicable:"Modus {0} støtter ikke forhåndsdefinerte valg",zones:{missing:"Mangler sonens konfigurasjon",invalid_parameters_number:"Hver sone må ha 4 parametere"},points:{position:{missing:"Konfigurasjon av punktet mangler",invalid_parameters_number:"Hvert punkt må ha 2 parametere"}},rooms:{id:{missing:"Rommets id mangler",invalid_format:"Feil id på rom: {0}"},outline:{invalid_parameters_number:"Hvert punkt i romomrisset må ha 2 parametere"}},label:{x:{missing:"Label må ha egenskapen x"},y:{missing:"Label må ha egenskapen y"},text:{missing:"Label må ha egenskapen text"}},icon:{x:{missing:"Icon må ha egenskapen x"},y:{missing:"Icon må ha egenskapen y"},name:{missing:"Icon må ha egenskapen name"}}},service_call_schema:{missing:"Manglende service call schema",service:{missing:"Service call schema må inneholde service",invalid:"Ugyldig service: {0}"}}}},invalid_entities:"Ugyldige entiteter:",invalid_calibration:"Ugyldig kalibrering, vennligst se over din konfigurasjon"},ca={status:{label:"Status",value:{starting:"Starter","charger disconnected":"Lader frakoblet",idle:"Inaktiv","remote control active":"Fjernkontroll aktiv",cleaning:"Rengjøring","returning home":"På vei hjem","manual mode":"Manuell modus",charging:"Lader","charging problem":"Ladeproblem",paused:"Pause","spot cleaning":"Flekkrengjøring",error:"Feil","shutting down":"Slår av",updating:"Oppdaterer",docking:"Docking","going to target":"Går til destinasjon","zoned cleaning":"Sonerengjøring","segment cleaning":"Rengjøring av rom","emptying the bin":"Tømmer beholderen","charging complete":"Lading fullført","device offline":"Enhet offline"}},battery_level:{label:"Batteri"},fan_speed:{label:"Viftehastighet",value:{Silent:"Stille",Standard:"Standard",Medium:"Medium",Turbo:"Turbo",Auto:"Auto",Gentle:"Forsiktig"}},sensor_dirty_left:{label:"Sensorer igjen"},filter_left:{label:"Filter igjen"},main_brush_left:{label:"Hovedbørste igjen"},side_brush_left:{label:"Sidebørste igjen"},cleaning_count:{label:"Antall rengjøringer"},cleaned_area:{label:"Rengjort område"},cleaning_time:{label:"Rengjøringstid"},mop_left:{label:"Mopp igjen"}},da={vacuum_start:"Start",vacuum_pause:"Pause",vacuum_stop:"Stopp",vacuum_return_to_base:"Gå tilbake til basen",vacuum_clean_spot:"Flekkrengjøring",vacuum_locate:"Lokaliser",vacuum_set_fan_speed:"Endre viftehastighet"},ma={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},ua={success:"Suksess!",no_selection:"Ingen valg er gitt",failed:"Kunne ikke kalle tjenesten"},pa={description:{before_link:"Denne visuelle editoren støtter bare en grunnleggende konfigurasjon med en kameraenhet opprettet ved hjelp av ",link_text:"Xiaomi Cloud Map Extractor",after_link:". For mer avansert oppsett bruk YAML-modus."},label:{name:"Tittel (valgfritt)",entity:"Støvsuger-entitet (obligatorisk)",camera:"Kamera-entitet (obligatorisk)",vacuum_platform:"Støvsugerplattform (obligatorisk)",map_locked:"Låst kart (valgfritt)",two_finger_pan:"Panorering med to fingre (valgfritt)"}},_a={common:ra,map_mode:sa,validation:la,tile:ca,icon:da,unit:ma,popups:ua,editor:pa},ga={version:"Versie",invalid_configuration:"Ongeldige configuratie {0}",description:"Een kaart waarmee je jouw robotstofzuiger kunt bedienen.",old_configuration:"Oude configuratie gevonden. Pas je configuratie aan op basis van de nieuwe versie of maak een volledig nieuwe kaart.",old_configuration_migration_link:"Uitleg configuratie aanpassen"},va={invalid:"Ongeldig sjabloon!",vacuum_goto:"Pin & Go",vacuum_goto_predefined:"Punten",vacuum_clean_segment:"Kamers",vacuum_clean_point:"Schoonmaak punten",vacuum_clean_point_predefined:"Punten",vacuum_clean_zone:"Zone schoonmaak",vacuum_clean_zone_predefined:"Zone lijst",vacuum_follow_path:"Pad"},ha={preset:{entity:{missing:"Ontbrekende parameter: entity"},preset_name:{missing:"Ontbrekende parameter: preset_name"},platform:{invalid:"Ongeldig stofzuigerplatform: {0}"},map_source:{missing:"Ontbrekende parameter: map_source",none_provided:"Geen camera of afbeelding opgegeven",ambiguous:"Slechts één kaartbron toegestaan"},calibration_source:{missing:"Ontbrekende parameter: calibration_source",ambiguous:"Slechts één kalibratiebron toegestaan",none_provided:"Geen kalibratiebron opgegeven",calibration_points:{invalid_number:"Precies 3 of 4 kalibratiepunten vereist",missing_map:"Elk kalibratiepunt moet kaart coördinaten bevatten",missing_vacuum:"Elk kalibratiepunt moet stofzuiger coördinaten bevatten",missing_coordinate:"Kaart en stofzuiger kalibratiepunten moeten zowel een x als y coödinaat bevatten"}},icons:{invalid:"Fout in configuratie: icons",icon:{missing:"Elk item in de lijst moet de eigenschap « icon » bevatten"}},tiles:{invalid:"Fout in configuratie: tiles",entity:{missing_outdated_translation:"Elk item in de lijst moet de eigenschap « entity » bevatten"},label:{missing:"Elk item in de lijst moet de eigenschap « label » bevatten"}},map_modes:{invalid:"Fout in configuratie: map_modes",icon:{missing:"Pictogram van kaartmodus ontbreekt"},name:{missing:"Naam van kaartmodus ontbreekt"},template:{invalid:"Ongeldig sjabloon: {0}"},predefined_selections:{not_applicable:"Modus {0} ondersteunt geen vooraf gedefinieerde selecties",zones:{missing:"Zone configuratie ontbreekt",invalid_parameters_number:"Elke zone moet 4 coördinaten hebben"},points:{position:{missing:"Punten configuratie ontbreekt",invalid_parameters_number:"Elk punt moet 2 coördinaten hebben"}},rooms:{id:{missing:"Kamer id ontbreekt",invalid_format:"Ongeldige kamer id: {0}"},outline:{invalid_parameters_number:"Elk punt van de kamer omtrek moet 2 coördinaten hebben"}},label:{x:{missing:"Elk label moet de eigenschap « x » bevatten"},y:{missing:"Elk label moet de eigenschap « y » bevatten"},text:{missing:"Elk label moet de eigenschap « text » bevatten"}},icon:{x:{missing:"Elk pictogram moet de eigenschap « x » bevatten"},y:{missing:"Elk pictogram moet de eigenschap « y » bevatten"},name:{missing:"Elk pictogram moet de eigenschap « name » bevatten"}}},service_call_schema:{missing:"Serviceoproep schema",service:{missing:"Serviceoproep schema moet een service bevatten",invalid:"Ongeldige service: {0}"}}}},invalid_entities:"Ongeldige entiteiten:",invalid_calibration:"Ongeldige kalibratie, controleer je configuratie"},fa={status:{label:"Status",value:{starting:"Starten","charger disconnected":"Lader niet aangesloten",idle:"Inactief","remote control active":"Afstandsbediening actief",cleaning:"Schoonmaken","returning home":"Terugkeren naar basisstation","manual mode":"Handmatige modus",charging:"Laden","charging problem":"Laadprobleem",paused:"Gepauzeerd","spot cleaning":"Spot schoonmaken",error:"Fout","shutting down":"Afsluiten",updating:"Updaten",docking:"Docking","going to target":"Onderweg naar doel","zoned cleaning":"Zone schoonmaken","segment cleaning":"Kamers schoonmaken","emptying the bin":"Opvangbak leegmaken","charging complete":"Opladen voltooid","device offline":"Apparaat offline"}},battery_level:{label:"Batterij"},fan_speed:{label:"Fan snelheid",value:{silent:"Stil",standard:"Standaard",medium:"Medium",turbo:"Turbo",auto:"Automatisch",gentle:"Zacht"}},sensor_dirty_left:{label:"Sensors"},filter_left:{label:"Filter"},main_brush_left:{label:"Hoofdborstel"},side_brush_left:{label:"Zijborstel"},cleaning_count:{label:"Schoonmaakteller"},cleaned_area:{label:"Oppervlakte"},cleaning_time:{label:"Schoonmaaktijd"},mop_left:{label:"Dweil"}},ba={vacuum_start:"Start",vacuum_pause:"Pause",vacuum_stop:"Stop",vacuum_return_to_base:"Terug naar basisstation",vacuum_clean_spot:"Spot schoonmaak",vacuum_locate:"Lokaliseren",vacuum_set_fan_speed:"Fan snelheid aanpassen"},ya={hour_shortcut:"u",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},ka={success:"Succes!",no_selection:"Geen selectie opgegeven",failed:"Fout bij aanroepen service"},Aa={description:{before_link:"Deze grafische editor ondersteunt slechts een basis configuratie met een camera entiteit welke gemaakt is met ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Gebruik de YAML modus voor een geavanceerde configuratie."},label:{name:"Titel (optioneel)",entity:"Stofzuiger entiteit (verplicht)",camera:"Camera entiteit (verplicht)",vacuum_platform:"stofzuigerplatform (verplicht)",map_locked:"Kaart vergrendelen (optioneel)",two_finger_pan:"Kaart verplaatsen met twee vingers (optioneel)"}},xa={common:ga,map_mode:va,validation:ha,tile:fa,icon:ba,unit:ya,popups:ka,editor:Aa},Ea={version:"Wersja",invalid_configuration:"Nieprawidłowa konfiguracja {0}",description:"Karta pozwalająca na kontrolowanie odkurzacza",old_configuration:"Wykryto starą wersję konfiguracji. Dostosuj kartę do najnowszej wersji, albo utwórz ją od nowa.",old_configuration_migration_link:"Przewodnik po migracji"},wa={invalid:"Nieprawidłowa wartość template",vacuum_goto:"Idź do punktu",vacuum_goto_predefined:"Zapisane punkty",vacuum_clean_segment:"Pokoje",vacuum_clean_point:"Sprzątanie punktowe",vacuum_clean_point_predefined:"Zapisane punkty",vacuum_clean_zone:"Sprzątanie strefowe",vacuum_clean_zone_predefined:"Zapisane strefy",vacuum_follow_path:"Ścieżka"},za={preset:{entity:{missing:"Brakujący parametr: entity"},preset_name:{missing:"Brakujący parametr: preset_name"},platform:{invalid:"Nieprawidłowa platforma odkurzacza: {0}"},map_source:{missing:"Brakujący parametr: map_source",none_provided:"Nie podano źródła mapy",ambiguous:"Można podać tylko jedno źródło mapy"},calibration_source:{missing:"Brakujący parametr: calibration_source",ambiguous:"Można podać tylko jedno źródło kalibracji",none_provided:"Nie podano źródła kalibracji",calibration_points:{invalid_number:"Wymagane 3 bądź 4 punkty kalibracyjne",missing_map:"Każdy punkt kalibracyjny musi posiadać współrzędne na mapie",missing_vacuum:"Każdy punkt kalibracyjny musi posiadać współrzędne w układzie odkurzacza",missing_coordinate:"Każdy punkt kalibracyjny musi mieć współrzędne x i y"}},icons:{invalid:"Błąd w konfiguracji: icons",icon:{missing:'Każda pozycja na liście ikon musi posiadać parametr "icon"'}},tiles:{invalid:"Błąd w konfiguracji: tiles",entity:{missing:'Każda pozycja na liście kafelków musi posiadać parametr "entity" albo "internal_variable"'},label:{missing:'Każda pozycja na liście kafelków musi posiadać parametr "label"'}},map_modes:{invalid:"Błąd w konfiguracji: map_modes",icon:{missing:"Brakująca ikona szablonu trybu mapy"},name:{missing:"Brakująca nazwa szablonu trybu mapy"},template:{invalid:"Nieprawidłowy szablon trybu mapy: {0}"},predefined_selections:{not_applicable:"Szablon {0} nie wspiera zapisywania zaznaczeń",zones:{missing:"Brakująca lista zapisanych stref",invalid_parameters_number:"Każda zapisana strefa musi posiadać 4 współrzędne"},points:{position:{missing:"Brakująca lista zapisanych punktów",invalid_parameters_number:"Każdy zapisany punkt musi posiadać 2 współrzędne"}},rooms:{id:{missing:"Brakujący identyfikator pokoju",invalid_format:"Nieprawidłowy identyfikator pokoju: {0}"},outline:{invalid_parameters_number:"Każdy punkt obrysu pokoju musi posiadać 2 współrzędne"}},label:{x:{missing:"Każda etykieta musi posiadać współrzędną x"},y:{missing:"Każda etykieta musi posiadać współrzędną y"},text:{missing:"Każda etykieta musi posiadać tekst"}},icon:{x:{missing:"Każda ikona musi posiadać współrzędną x"},y:{missing:"Każda ikona musi posiadać współrzędną y"},name:{missing:'Każda ikona musi posiadać parametr "name"'}}},service_call_schema:{missing:"Brakujący schemat wywołania usługi",service:{missing:"Każdy schemat usługi musi posiadać podaną nazwę usługi ",invalid:"Nieprawidłowa usługa: {0}"}}}},invalid_entities:"Nieprawidłowe encje:",invalid_calibration:"Nieprawidłowa kalibracja, sprawdź konfigurację"},Pa={status:{label:"Status",value:{starting:"Uruchamianie","charger disconnected":"Ładowarka odłączona",idle:"Nieaktywny","remote control active":"Zdalne sterowanie",cleaning:"Sprzątanie","returning home":"Powrót do stacji","manual mode":"Tryb manualny",charging:"Ładowanie","charging problem":"Problem z ładowaniem",paused:"Wstrzymany","spot cleaning":"Sprzątanie punktowe",error:"Błąd","shutting down":"Wyłączanie",updating:"Aktualizowanie",docking:"Dokowanie","going to target":"W drodze do celu","zoned cleaning":"Sprzątanie strefowe","segment cleaning":"Sprzątanie pokoju","emptying the bin":"Opróżnianie pojemnika","charging complete":"Ładowanie zakończone","device offline":"Offline"}},battery_level:{label:"Bateria"},fan_speed:{label:"Wentylator",value:{silent:"Cichy",standard:"Normalny",medium:"Średni",turbo:"Turbo",auto:"Automatyczny",gentle:"Delikatny"}},sensor_dirty_left:{label:"Sensory"},filter_left:{label:"Filtr"},main_brush_left:{label:"Główna szczotka"},side_brush_left:{label:"Boczna szczotka"},cleaning_count:{label:"Licznik sprzątań"},cleaned_area:{label:"Powierzchnia"},cleaning_time:{label:"Czas sprzątania"},mop_left:{label:"Mop"},bin_full:{label:"Pojemnik pełny",value:{true:"Tak",false:"Nie"}},bin_present:{label:"Pojemnik włożony",value:{true:"Tak",false:"Nie"}}},Sa={vacuum_start:"Uruchom",vacuum_pause:"Wstrzymaj",vacuum_stop:"Zatrzymaj",vacuum_return_to_base:"Wróć do stacji dokującej",vacuum_clean_spot:"Wyczyść miejsce",vacuum_locate:"Zlokalizuj",vacuum_set_fan_speed:"Zmień prędkość wentylatora"},Ma={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},Ta={success:"Usługa wywołana!",no_selection:"Nie wybrano zaznaczenia",failed:"Błąd wywołania usługi"},Ca={description:{before_link:"Ten edytor interfejsu wspiera jedynie podstawową konfigurację dla kamery utworzonej przy użyciu ",link_text:"Xiaomi Cloud Map Extractora",after_link:". W celu bardziej zaawansowanej konfiguracji użyj trybu YAML."},label:{name:"Tytuł (opcjonalny)",entity:"Encja odkurzacza (wymagana)",camera:"Kamera z mapą (wymagana)",vacuum_platform:"Platforma integracji odkurzacza (wymagana)",map_locked:"Blokada mapy (opcjonalna)",two_finger_pan:"Przesuwanie mapy dwoma palcami (opcjonalne)",platforms_documentation:"Dokumentacja wybranej platformy ({0})",selection:"Zaznaczenie:",copy:"Kopiuj",copied:"Skopiowano!",set_static_config:"Wygeneruj statyczną konfigurację",config_set:"Ustawiono konfigurację!\nOtwórz edytor YAML w celu dostosowania.",config_set_failed:"Błąd aktualizacji konfiguracji.",generate_rooms_config:"Wygeneruj konfigurację pokoi",copy_service_call:"Skopiuj wywołanie usługi"}},Oa={common:Ea,map_mode:wa,validation:za,tile:Pa,icon:Sa,unit:Ma,popups:Ta,editor:Ca},Na={version:"Versão",invalid_configuration:"configuração inválida {0}",description:"Um cartão que permite que você controlar seu aspirador",old_configuration:"Configuração antiga detectada. Ajuste sua configuração para a versão mais recente ou crie um novo cartão do zero.",old_configuration_migration_link:"Guia de migração"},Ra={invalid:"template inválido!",vacuum_goto:"Click & vai",vacuum_goto_predefined:"Local",vacuum_clean_segment:"Quartos",vacuum_clean_zone:"Limpar zona",vacuum_clean_zone_predefined:"Lista de zonas",vacuum_follow_path:"Seguir caminho"},ja={preset:{entity:{missing:"Propriedade ausente: entidade"},preset_name:{missing:"Propriedade ausente: preset_name"},platform:{invalid:"Plataforma de aspirador inválida: {0}"},map_source:{missing:"Propriedade ausente: map_source",none_provided:"Nenhuma câmera nem imagem fornecida",ambiguous:"Apenas uma fonte de mapa permitida"},calibration_source:{missing:"Propriedade ausente: calibration_source",ambiguous:"Apenas uma fonte de calibração permitida",none_provided:"Nenhuma fonte de calibração fornecida",calibration_points:{invalid_number:"Exatamente 3 ou 4 pontos de calibração são necessários",missing_map:"Cada ponto de calibração deve conter coordenadas do mapa",missing_vacuum:"Cada ponto de calibração deve conter coordenadas do aspirador",missing_coordinate:"Os pontos de calibração do mapa e do aspirador devem conter as coordenadas x e y"}},icons:{invalid:"Erro na configuração: icones",icon:{missing:"Cada entrada na lista de ícones deve conter a propriedade do ícone"}},tiles:{invalid:"Erro na configuração: tiles",entity:{missing_outdated_translation:"Cada entrada da lista de tiles deve conter entidade"},label:{missing:"Cada entrada da lista de tiles deve conter label"}},map_modes:{invalid:"Erro na configuração: map_modes",icon:{missing:"Falta o ícone no modo de mapa"},name:{missing:"Falta o nome no modo de mapa"},template:{invalid:"Template inválido: {0}"},predefined_selections:{not_applicable:"O modo {0} não oferece suporte a seleções predefinidas",zones:{missing:"Falta a Configuração de zonas",invalid_parameters_number:"Cada zona deve ter 4 parâmetros"},points:{position:{missing:"Falta a configuração do local",invalid_parameters_number:"Cada local deve ter 2 parâmetros"}},rooms:{id:{missing:"Falta o id do quarto",invalid_format:"Id inválido do quarto: {0}"},outline:{invalid_parameters_number:"Cada local da borda do quarto deve ter 2 parâmetros"}},label:{x:{missing:"A label deve ter a propriedade x"},y:{missing:"A label deve ter a propriedade y"},text:{missing:"A label deve ter um texto"}},icon:{x:{missing:"O ícone deve ter a propriedade x"},y:{missing:"O ícone deve ter a propriedade y"},name:{missing:"O ícone deve ter um nome"}}},service_call_schema:{missing:"Falta o call service",service:{missing:"O call service deve conter o serviço",invalid:"serviço inválido: {0}"}}}},invalid_entities:"entidades inválidas:",invalid_calibration:"Calibração inválida, verifique sua configuração"},$a={status:{label:"Status"},battery_level:{label:"Bateria"},fan_speed:{label:"Velocidade"},sensor_dirty_left:{label:"Sensores"},filter_left:{label:"Filtro"},main_brush_left:{label:"Escova principal"},side_brush_left:{label:"Escova lateral"},cleaning_count:{label:"Contagem de limpezas"},cleaned_area:{label:"Área limpa"},cleaning_time:{label:"Tempo de limpeza"}},La={vacuum_start:"Começar",vacuum_pause:"Pausar",vacuum_stop:"Parar",vacuum_return_to_base:"Voltar para a base",vacuum_clean_spot:"Limpar local",vacuum_locate:"Localizar",vacuum_set_fan_speed:"Mudar velocidade"},Ia={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},Da={success:"Successo!",no_selection:"Nenhuma seleção fornecida",failed:"Falha em chamar o serviço"},Fa={description:{before_link:"Este editor suporta apenas uma configuração básica usando uma entidade de câmera",link_text:"Xiaomi Cloud Map Extractor",after_link:". Para um setup avancado use o YAML mode."},label:{name:"Título (opicional)",entity:"Entidade do aspirador (Obrigatório)",camera:"Entidade da camera (Obrigatório)",vacuum_platform:"Plataforma do aspirador (Obrigatório)",map_locked:"Mapa travado (Opicional)",two_finger_pan:"Movimente com dois dedos (Opicional)"}},Va={common:Na,map_mode:Ra,validation:ja,tile:$a,icon:La,unit:Ia,popups:Da,editor:Fa},Ua={version:"Версия",invalid_configuration:"Неверная конфигурация {0}",description:"Карточка, позволяющая управлять вашим пылесосом",old_configuration:"Обнаружена устаревшая конфигурация. Приведите ваш конфиг в соответствие с новой версией, или создайте новую карточку с нуля.",old_configuration_migration_link:"Руководство по переходу с предыдущих версий."},Ha={invalid:"Неверный шаблон!",vacuum_goto:"Точка назначения",vacuum_goto_predefined:"Предустановленные точки",vacuum_clean_segment:"Комнаты",vacuum_clean_point:"Уборка точки",vacuum_clean_point_predefined:"Список точек",vacuum_clean_zone:"Уборка зоны",vacuum_clean_zone_predefined:"Список зон",vacuum_follow_path:"Путь"},Xa={preset:{entity:{missing:"Не указано свойство: entity"},preset_name:{missing:"Не указано свойство: preset_name"},platform:{invalid:"Неверная платформа: {0}"},map_source:{missing:"Не указано свойство: map_source",none_provided:"Не предоставлена ни камера ни изображение",ambiguous:"Допустим только один источник для карты"},calibration_source:{missing:"Не указано свойство: calibration_source",ambiguous:"Допустим только один источник для калибровки",none_provided:"Не предоставлен источник калибровки",calibration_points:{invalid_number:"Для калибровки требуется 3 или 4 точки",missing_map:"Каждая точка калибровки должна содержать координаты карты",missing_vacuum:"Каждая точка калибровки должна содержать координаты пылесоса",missing_coordinate:"Калибровочные точки карты и пылесоса должны содержать как x так и y координаты"}},icons:{invalid:"Ошибка в конфигурации: icons",icon:{missing:"Каждое вхождение в списке иконок должен содержать icon property"}},tiles:{invalid:"Ошибка в конфигурации: tiles",entity:{missing_outdated_translation:"Каждое вхождение в списке плиток должно содержать entity"},label:{missing:"Каждое вхождение в списке плиток должно содержать label"}},map_modes:{invalid:"Ошибка в конфигурации: map_modes",icon:{missing:"Не указана иконка для влажной уборки"},name:{missing:"Не указано имя для влажной уборки"},template:{invalid:"Неверный шаблон: {0}"},predefined_selections:{not_applicable:"Режим {0} не поддерживает предустановленые элементы",zones:{missing:"Не указана конфигурация зоны",invalid_parameters_number:"Каждая зона должна содержать 4 параметра"},points:{position:{missing:"Не указана конфигурация для точек",invalid_parameters_number:"Каждая точка должна содержать 2 параметра"}},rooms:{id:{missing:"Не указан id комнаты",invalid_format:"Некорректный id комнаты: {0}"},outline:{invalid_parameters_number:"Каждая точка контура комнаты должна содержать 2 параметра"}},label:{x:{missing:"Ярлык должен содержать свойство x"},y:{missing:"Ярлык должен содержать свойство y"},text:{missing:"Ярлык должен содержать свойство text"}},icon:{x:{missing:"Иконка должна содержать свойство x"},y:{missing:"Иконка должна содержать свойство y"},name:{missing:"Иконка должна содержать свойство name"}}},service_call_schema:{missing:"Отсутствует схема вызова службы",service:{missing:"Схема вызова службы должна содержать service",invalid:"Некорректная служба: {0}"}}}},invalid_entities:"Некорректные сущности:",invalid_calibration:"Некорректная калибровка, проверьте вашу конфигурацию"},Ka={status:{label:"Статус",value:{starting:"Начало уборки","charger disconnected":"Зарядное устройство отключено",idle:"Ожидание","remote control active":"Включено управление через пульт",cleaning:"Уборка","returning home":"Возвращение на базу","manual mode":"Ручной режим",charging:"Зарядка","charging problem":"Проблема с зарядкой",paused:"Пауза","spot cleaning":"Уборка точки",error:"Ошибка","shutting down":"Выключение",updating:"Обновление",docking:"Остановка у базы","going to target":"Направление до точки","zoned cleaning":"Уборка зоны","segment cleaning":"Уборка","emptying the bin":"Очистка бака","charging complete":"Зарядка завершена","device offline":"Устройство не в сети"}},battery_level:{label:"Уровень заряда"},fan_speed:{label:"Мощность всасывания",value:{silent:"Тихий",standard:"Стандарт",medium:"Средний",turbo:"Турбо",auto:"Авто",gentle:"Слабый"}},sensor_dirty_left:{label:"Уровень загрязнения датчиков"},filter_left:{label:"Ресурс фильтра"},main_brush_left:{label:"Ресурс основной щётки"},side_brush_left:{label:"Ресурс боковой щётки"},cleaning_count:{label:"Число уборок"},cleaned_area:{label:"Площадь уборки"},cleaning_time:{label:"Время уборки"},mop_left:{label:"Ресурс тряпки"}},qa={vacuum_start:"Старт",vacuum_pause:"Пауза",vacuum_stop:"Стоп",vacuum_return_to_base:"Вернуть к базе",vacuum_clean_spot:"Убрать точку",vacuum_locate:"Обнаружить",vacuum_set_fan_speed:"Изменить мощность всасывания"},Ga={hour_shortcut:"ч",meter_shortcut:"м",meter_squared_shortcut:"м²",minute_shortcut:"мин"},Za={success:"Успех!",no_selection:"Ничего не выбрано",failed:"Не удалось вызвать службу"},Ba={description:{before_link:"Данный редактор поддерживает только базовую конфигурацию с камерой, созданной посредством",link_text:"Xiaomi Cloud Map Extractor",after_link:". Для более тонкой настройки, используйте YAML-мод."},label:{name:"Заголовок (опционально)",entity:"Сущность пылесоса (обязательно)",camera:"Сущность камеры (обязательно)",vacuum_platform:"Платформа пылесоса (обязательно)",map_locked:"Блокировка карты (опционально)",two_finger_pan:"Перемещение жестом двумя пальцами (опционально)"}},Ya={common:Ua,map_mode:Ha,validation:Xa,tile:Ka,icon:qa,unit:Ga,popups:Za,editor:Ba},Ja={version:"Verzia",invalid_configuration:"Neplatná konfigurácia {0}",description:"Karta pomocou ktorej môžete ovládať váš vysávač",old_configuration:"Detekovaná zastaralá konfigurácia. Upravte prosím konfiguráciu alebo kartu vytvorte znovu od začiatku.",old_configuration_migration_link:"Návod na úpravu konfigurácie"},Wa={invalid:"Neplatná šablóna",vacuum_goto:"Presun na bod",vacuum_goto_predefined:"Presun na bod zo zoznamu",vacuum_clean_segment:"Upratovanie miestnosti",vacuum_clean_point:"Upratovanie bodu",vacuum_clean_point_predefined:"Upratovanie bodu zo zoznamu",vacuum_clean_zone:"Upratovanie oblasti",vacuum_clean_zone_predefined:"Upratovanie oblasti zo zoznamu",vacuum_follow_path:"Trasa"},Qa={preset:{entity:{missing:'Chýbajúca položka "entity"'},preset_name:{missing:'Chýbajúca položka "preset_name"'},platform:{invalid:"Neplatná platforma vysávača: {0}"},map_source:{missing:'Chýbajúca položka "map_source"',none_provided:"Chýbajúci odkaz na kameru alebo obrázok s mapou",ambiguous:"Povolený iba jeden zdroj mapy"},calibration_source:{missing:'Chýbajúca položka "calibration_source"',ambiguous:"Povolený iba jeden zdroj kalibrácie",none_provided:"Chýbajúci zdroj kalibrácie",calibration_points:{invalid_number:"Požadované 3 alebo 4 kalibračné body",missing_map:"Každý kalibračný bod musí obsahovať súradnice mapy",missing_vacuum:"Každý kalibračný bod musí obsahovať súradnice vysávača",missing_coordinate:'Súradnice mapy aj vysávače musia vždy obsahovať položku "x" a "y"'}},icons:{invalid:'Neplatná konfigurácia pre položku "icons"',icon:{missing:'Každý záznam v zozname ikon musí vždy obsahovať položku "icon"'}},tiles:{invalid:'Neplatná konfigurácia pre položku "tiles"',entity:{missing_outdated_translation:'Každý záznam v zozname dlaždíc musí vždy obsahovať položku "entity"'},label:{missing:'Každý záznam v zozname dlaždíc musí vždy obsahovať položku "label"'}},map_modes:{invalid:'Neplatná konfigurácia pre položku "map_modes"',icon:{missing:"Chýbajúca ikona pre mapový režim"},name:{missing:"Chýbajúci názov pre mapový režim"},template:{invalid:"Neplatná šablóna: {0}"},predefined_selections:{not_applicable:"Režim {0} nepodporuje výber z prednastavených možností",zones:{missing:"Chýbajúce konfigurácie oblastí",invalid_parameters_number:"Každá oblasť musí mať 4 parametre"},points:{position:{missing:"Chýbajúce konfigurácie bodov",invalid_parameters_number:"Každý bod musí mať 2 parametre"}},rooms:{id:{missing:"Chýbajúci ID miestnosti",invalid_format:"Neplatný ID miestnosti: {0}"},outline:{invalid_parameters_number:"Každý bod ohraničenia miestnosti musí mať 2 parametre"}},label:{x:{missing:'Štítok musí mať položku "x"'},y:{missing:'Štítok musí mať položku "y"'},text:{missing:'Štítok musí mať položku "text"'}},icon:{x:{missing:'Ikona musí mať položku "x"'},y:{missing:'Ikona musí mať položku "y"'},name:{missing:'Ikona musí mať položku "name"'}}},service_call_schema:{missing:"Chýbajúci formát volania služby",service:{missing:'Formát volania služby musí obsahovať položku "service"',invalid:"Neplatná služba: {0}"}}}},invalid_entities:"Neplatné entity:",invalid_calibration:"Neplatná kalibrácia, prosím skontrolujte konfiguráciu"},ei={status:{label:"Stav",value:{starting:"Zapínanie","charger disconnected":"Nabíječka odpojena",idle:"Nečinný","remote control active":"Diaľkové ovládanie aktívne",cleaning:"Upratovanie","returning home":"Návrat do základne","manual mode":"Manuálny režim",charging:"Nabíjanie","charging problem":"Problém s nabíjaním",paused:"Pozastavený","spot cleaning":"Upratovanie bodu",error:"Chyba","shutting down":"Vypínanie",updating:"Prebieha aktualizácia",docking:"Parkovanie","going to target":"Presun na bod","zoned cleaning":"Upratovanie oblasti","segment cleaning":"Upratovanie miestnosti","emptying the bin":"Vyprázdňovanie zásobníka","charging complete":"Nabíjanie dokončené","device offline":"Zariadenie je nedostupné"}},battery_level:{label:"Batéria"},fan_speed:{label:"Stupeň vysávania",value:{silent:"Tiché",standard:"Štandardné",medium:"Stredné",turbo:"Turbo",auto:"Automatické",gentle:"Slabé"}},sensor_dirty_left:{label:"Čistota senzorov"},filter_left:{label:"Životnosť filtra"},main_brush_left:{label:"Životnosť hlavnej kefy"},side_brush_left:{label:"Životnosť bočej kefy"},cleaning_count:{label:"Počet upratovaní"},cleaned_area:{label:"Uprataná plocha"},cleaning_time:{label:"Doba upratovania"},mop_left:{label:"Životnosť mopu"}},ti={vacuum_start:"Začať upratovanie",vacuum_pause:"Pozastaviť upratovanie",vacuum_stop:"Ukončiť upratovanie",vacuum_return_to_base:"Návrat do základne",vacuum_clean_spot:"Upratať bod",vacuum_locate:"Nájsť",vacuum_set_fan_speed:"Nastaviť stupeň vysávania"},ai={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},ii={success:"Volanie služby bolo úspešné",no_selection:"Nebol vykonaný žiadny výber",failed:"Volanie služby zlyhalo"},ni={description:{before_link:"Tento editor podporuje iba základnú konfiguráciu s použitím entity kamera vytvorené pomocou ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Pre pokročilé nastavenia použite editor kódu."},label:{name:"Titulok (voliteľná položka)",entity:"Entita vysávača (povinná položka)",camera:"Entita kamery (povinná položka)",vacuum_platform:"Platforma vysávača (povinná položka)",map_locked:"Uzamknutie mapy",two_finger_pan:"Posuv mapy dvoma prstami"}},oi={common:Ja,map_mode:Wa,validation:Qa,tile:ei,icon:ti,unit:ai,popups:ii,editor:ni},ri={version:"Version",invalid_configuration:"Ogiltig configuration {0}",description:"Ett kort som låter dig kontrollera din dammsugare",old_configuration:"Gammal konfiguration upptäckt. Editera din konfiguration till senaste schema eller skapa ett nytt kort från början.",old_configuration_migration_link:"Guide för migrering"},si={invalid:"Ogiltig template!",vacuum_goto:"Klicka & Gå",vacuum_goto_predefined:"Punkter",vacuum_clean_segment:"Rum",vacuum_clean_point:"Städpunkt",vacuum_clean_point_predefined:"Punkter",vacuum_clean_zone:"Zonstädning",vacuum_clean_zone_predefined:"Zonlista",vacuum_follow_path:"Bana"},li={preset:{entity:{missing:"Saknar egenskap: entity"},preset_name:{missing:"Saknar egenskap: preset_name"},platform:{invalid:"Ogiltig dammsugarplattform: {0}"},map_source:{missing:"Saknar egenskap: map_source",none_provided:"Ingen kamera elle bild angiven",ambiguous:"Endast en kartkälla tillåts"},calibration_source:{missing:"Saknar egenskap: calibration_source",ambiguous:"Endast en kalibreringskälla tillåts",none_provided:"Ingen kallibreringskälla angiven",calibration_points:{invalid_number:"Exakt 3 eller 4 kalibreringspunkter krävs",missing_map:"Varje kalibreringspunkt måste innehålla koordinater för karta",missing_vacuum:"Varje kalibreringspunkt måste innehålla koordinater för dammsugare",missing_coordinate:"Kalibreringspunkter för karta och dammsugare måste innehålla både x och y koordinater"}},icons:{invalid:"Fel i konfigurationen: icons",icon:{missing:"Varje post med icons måste innehålla icon-egenskap"}},tiles:{invalid:"Fel i konfigurationen: tiles",entity:{missing_outdated_translation:"Varje post med tiles måste innehålla entity"},label:{missing:"Varje post med tiles måste innehålla label"}},map_modes:{invalid:"Fel i konfigurationen: map_modes",icon:{missing:"Saknar ikon för map mode"},name:{missing:"Saknar namn för map mode"},template:{invalid:"Ogiltig template: {0}"},predefined_selections:{not_applicable:"Läge {0} har inte stöd för fördefinierade val",zones:{missing:"Zonens konfiguration saknas",invalid_parameters_number:"Varje zon måste ha 4 parametrar"},points:{position:{missing:"Punktens konfiguration saknas",invalid_parameters_number:"Varje punkt måste ha 2 parametrar"}},rooms:{id:{missing:"Rummets id saknas",invalid_format:"Felaktigt id för rum: {0}"},outline:{invalid_parameters_number:"Varje punk för rumskonturen måste ha 2 parametrar"}},label:{x:{missing:"Label måste ha egenskapen x"},y:{missing:"Label måste ha egenskapen y"},text:{missing:"Label måste ha egenskapen text"}},icon:{x:{missing:"Icon måste ha egenskapen x"},y:{missing:"Icon måste ha egenskapen y"},name:{missing:"Icon måste ha egenskapen name"}}},service_call_schema:{missing:"Service call schema saknas",service:{missing:"Service call schema måste innehålla service",invalid:"Ogiltig service: {0}"}}}},invalid_entities:"Ogiltiga entiteter:",invalid_calibration:"Ogiltig kalibrering, vänligen se över din konfiguration"},ci={status:{label:"Status",value:{starting:"Startar","charger disconnected":"Laddare frånkopplad",idle:"Inaktiv","remote control active":"Fjärrkontroll aktiv",cleaning:"Städar","returning home":"Återvänder hem","manual mode":"Manuellt läge",charging:"Laddar","charging problem":"Laddningsproblem",paused:"Pausad","spot cleaning":"Spot-rengöring",error:"Fel","shutting down":"Stänger av",updating:"Uppdaterar",docking:"Dockar","going to target":"Går till destination","zoned cleaning":"Städning av zon","segment cleaning":"Städning av rum","emptying the bin":"Tömmer behållaren","charging complete":"Färdigladdad","device offline":"Enhet offline"}},battery_level:{label:"Batteri"},fan_speed:{label:"Fläkthastighet",value:{silent:"Tyst",standard:"Standard",medium:"Medium",turbo:"Turbo",auto:"Auto",gentle:"Försiktig"}},sensor_dirty_left:{label:"Sensorer kvar"},filter_left:{label:"Filter kvar"},main_brush_left:{label:"Huvudborste kvar"},side_brush_left:{label:"Sidoborste kvar"},cleaning_count:{label:"Antal städningar"},cleaned_area:{label:"Städat område"},cleaning_time:{label:"Städtid"},mop_left:{label:"Mopp kvar"}},di={vacuum_start:"Start",vacuum_pause:"Paus",vacuum_stop:"Stopp",vacuum_return_to_base:"Återgå till basen",vacuum_clean_spot:"Spot-rengöring",vacuum_locate:"Lokalisera",vacuum_set_fan_speed:"Ändra fläkthastighet"},mi={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},ui={success:"Lyckades!",no_selection:"Inget urval tillhandahålls",failed:"Mysslyckades kalla på tjänsten"},pi={description:{before_link:"Denna visuella redigerare stöder endast en grundläggande konfiguration med en kameraenhet skapad med hjälp av ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Använd YAML-läget för avancerade inställningar."},label:{name:"Titel (valfritt)",entity:"Dammsugar-entitet (obligatoriskt)",camera:"Kamera-entitet (obligatoriskt)",vacuum_platform:"Dammsugarplattform (obligatoriskt)",map_locked:"Låst karta (valfritt)",two_finger_pan:"Panorering med två fingrar (valfritt)"}},_i={common:ri,map_mode:si,validation:li,tile:ci,icon:di,unit:mi,popups:ui,editor:pi},gi={version:"Sürüm",invalid_configuration:"Geçersiz yapılandırma {0}",description:"Vakumunuzu kontrol etmenizi sağlayan bir kart",old_configuration:"Eski yapılandırma algılandı. Yapılandırmanızı en son şemaya göre ayarlayın veya sıfırdan yeni bir kart oluşturun.",old_configuration_migration_link:"Taşıma kılavuzu"},vi={invalid:"Geçersiz şablon!",vacuum_goto:"Sabitle ve Git",vacuum_goto_predefined:"Noktalar",vacuum_clean_segment:"Odalar",vacuum_clean_point:"Temiz alan",vacuum_clean_point_predefined:"Noktalar",vacuum_clean_zone:"Bölge temizliği",vacuum_clean_zone_predefined:"Bölge listesi",vacuum_follow_path:"Yol"},hi={preset:{entity:{missing:"Eksik özellik: varlık"},preset_name:{missing:"Eksik özellik: ön_ayar_adı(preset_name)"},platform:{invalid:"Geçersiz vakum platformu: {0}"},map_source:{missing:"Eksik özellik: harita kaynağı (map_source)",none_provided:"Kamera yok, görüntü de sağlanmadı",ambiguous:"Yalnızca bir harita kaynağına izin verilir"},calibration_source:{missing:"Eksik özellik: kalibrasyon_kaynak (calibration_source)",ambiguous:"Yalnızca bir kalibrasyon kaynağına izin verilir",none_provided:"Kalibrasyon kaynağı sağlanmadı",calibration_points:{invalid_number:"Tam olarak 3 veya 4 kalibrasyon noktası gerekli",missing_map:"Her kalibrasyon noktası harita koordinatlarını içermelidir",missing_vacuum:"Her kalibrasyon noktası vakum koordinatlarını içermelidir",missing_coordinate:"Harita ve vakum kalibrasyon noktaları hem x hem de y koordinatını içermelidir"}},icons:{invalid:"Yapılandırmada hata: simgeler",icon:{missing:"Simgeler listesinin her girişi, simge özelliği içermelidir"}},tiles:{invalid:"Yapılandırmada hata: döşemeler",entity:{missing_outdated_translation:"Kutucuk listesinin her girişi varlık içermelidir"},label:{missing:"Fayans listesinin her girişi etiket içermelidir"}},map_modes:{invalid:"Yapılandırmada hata: map_modes",icon:{missing:"Harita modunun eksik simgesi"},name:{missing:"Harita modunun adı eksik"},template:{invalid:"Geçersiz şablon: {0}"},predefined_selections:{not_applicable:"Mod {0} önceden tanımlanmış seçimleri desteklemiyor",zones:{missing:"Eksik bölge yapılandırması",invalid_parameters_number:"Her bölgenin 4 parametresi olmalıdır"},points:{position:{missing:"Eksik nokta yapılandırması",invalid_parameters_number:"Her noktanın 2 parametresi olmalıdır"}},rooms:{id:{missing:"Eksik oda kimliği",invalid_format:"Geçersiz oda kimliği: {0}"},outline:{invalid_parameters_number:"Oda anahattının her noktası 2 parametreye sahip olmalıdır"}},label:{x:{missing:"Etiketin x özelliği olmalıdır"},y:{missing:"Etiketin y özelliği olmalıdır"},text:{missing:"Etiketin metin özelliği olmalıdır"}},icon:{x:{missing:"Simgenin x özelliği olmalıdır"},y:{missing:"Simgenin y özelliği olmalıdır"},name:{missing:"Simge isim özelliğine sahip olmalıdır"}}},service_call_schema:{missing:"Eksik servis çağrısı şeması",service:{missing:"Servis çağrısı şeması servis içermelidir",invalid:"Geçersiz hizmet: {0}"}}}},invalid_entities:"Geçersiz varlıklar:",invalid_calibration:"Geçersiz kalibrasyon, lütfen yapılandırmanızı kontrol edin"},fi={status:{label:"Durum",value:{starting:"Başlangıç","charger disconnected":"Şarj cihazının bağlantısı kesildi",idle:"Idle","remote control active":"Uzaktan kumanda aktif",cleaning:"Temizleme","returning home":"Eve dönüş","manual mode":"Manual mod",charging:"Şarj oluyor","charging problem":"Şarj sorunu",paused:"Duraklatıldı","spot cleaning":"Nokta temizleme",error:"Hata","shutting down":"Kapatılıyor",updating:"Güncelleniyor",docking:"Yerleştirme","going to target":"Hedefe gidiyor","zoned cleaning":"Bölgeli temizlik","segment cleaning":"Segment temizliği","emptying the bin":"Çöp haznesini boşalt","charging complete":"Şarj tamamlandı","device offline":"Cihaz çevrimdışı"}},battery_level:{label:"Pil"},fan_speed:{label:"Süpürme Modu",value:{silent:"Sessiz",standard:"Standart",medium:"Orta",turbo:"Güçlü",auto:"Otomatik",gentle:"Uysal"}},sensor_dirty_left:{label:"Sensör kirli"},filter_left:{label:"Filtre"},main_brush_left:{label:"Ana Fırça"},side_brush_left:{label:"Yan Fırça"},cleaning_count:{label:"Temizleme sayısı"},cleaned_area:{label:"Temizlenmiş alan"},cleaning_time:{label:"Temizlik zamanı"},mop_left:{label:"Paspaslama"}},bi={vacuum_start:"Başlat",vacuum_pause:"Duraklat",vacuum_stop:"Durdur",vacuum_return_to_base:"Üniteye geri dön",vacuum_clean_spot:"Temiz nokta",vacuum_locate:"Bul",vacuum_set_fan_speed:"Fan hızını değiştir"},yi={hour_shortcut:"S",meter_shortcut:"D",meter_squared_shortcut:"m²",minute_shortcut:"Sn"},ki={success:"Başarı!",no_selection:"Seçim sağlanmadı",failed:"Servis aranamadı"},Ai={description:{before_link:"Bu görsel düzenleyici, kullanılarak oluşturulan bir kamera varlığı ile yalnızca temel bir yapılandırmayı destekler.",link_text:"Xiaomi Bulut Haritası Çıkarıcı",after_link:". Daha gelişmiş kurulum için YAML modunu kullanın."},label:{name:"Başlık (isteğe bağlı)",entity:"Vakum varlığı (gerekli)",camera:"Kamera varlığı (gerekli)",vacuum_platform:"Vakum platformu (gerekli)",map_locked:"Harita kilitli (isteğe bağlı)",two_finger_pan:"İki parmaklı tava (isteğe bağlı)"}},xi={common:gi,map_mode:vi,validation:hi,tile:fi,icon:bi,unit:yi,popups:ki,editor:Ai},Ei={version:"Version",invalid_configuration:"Недійсна конфігурація {0}",description:"Картка, яка дає змогу контролювати пилосос",old_configuration:"Виявлено стару конфігурацію. Налаштуйте конфігурацію до останньої схеми або створіть нову картку з початку.",old_configuration_migration_link:"Посібник з міграції"},wi={invalid:"Недійсний шаблон!",vacuum_goto:"Рух до цілі",vacuum_goto_predefined:"Збережені точки",vacuum_clean_segment:"Кімнати",vacuum_clean_point:"Точкове прибирання",vacuum_clean_point_predefined:"Збережені точки",vacuum_clean_zone:"Зональне прибирання",vacuum_clean_zone_predefined:"Список зон",vacuum_follow_path:"Шлях"},zi={preset:{entity:{missing:"Відсутній параметр: entity"},preset_name:{missing:"Відсутній параметр: preset_name"},platform:{invalid:"Недійсна платформа пилососа: {0}"},map_source:{missing:"Відсутній параметр: map_source",none_provided:"Не вказано джерело мапи",ambiguous:"Дозволено тільки одне джерело мапи"},calibration_source:{missing:"Відсутній параметр: calibration_source",ambiguous:"Дозволено тільки одне джерело калібрування",none_provided:"Не вказано джерело калібрування",calibration_points:{invalid_number:"Потрібні 3 або 4 точки калібрування",missing_map:"Кожна точка калібрування повинна мати координати на мапі",missing_vacuum:"Кожна точка калібрування повинна мати координати в системі пилососа",missing_coordinate:"Кожна точка калібрування повинна мати координати x і y"}},icons:{invalid:"Помилка в конфігурації: icons",icon:{missing:'Кожен елемент у списку піктограм повинен мати параметр "icon"'}},tiles:{invalid:"Помилка в конфігурації: tiles",entity:{missing_outdated_translation:'Кожен елемент у списку плиток повинен мати параметр "entity"'},label:{missing:'Кожен елемент у списку плиток повинен мати параметр "label"'}},map_modes:{invalid:"Помилка в конфігурації: map_modes",icon:{missing:"Відсутня піктограма шаблону режиму мапи"},name:{missing:"Відсутня назва шаблону режиму мапи"},template:{invalid:"Недійсний шаблон: {0}"},predefined_selections:{not_applicable:"Шаблон {0} не підтримує збереження вибраних елементів",zones:{missing:"Відсутній список збережених зон",invalid_parameters_number:"Кожна збережена зона повинна мати 4 координати"},points:{position:{missing:"Відсутній список збережених точок",invalid_parameters_number:"Кожна записана точка повинна мати 2 координати"}},rooms:{id:{missing:"Відсутній ідентифікатор кімнати",invalid_format:"Недійсний ідентифікатор кімнати: {0}"},outline:{invalid_parameters_number:"Кожна точка контуру кімнати повинна мати 2 координати"}},label:{x:{missing:"Кожна мітка повинна мати координату x"},y:{missing:"Кожна мітка повинна мати координату y"},text:{missing:"Кожна мітка повинна містити текст"}},icon:{x:{missing:"Кожна піктограма повинна мати координату x"},y:{missing:"Кожна піктограма повинна мати координату y"},name:{missing:'Кожна піктограма повинна мати параметр "name"'}}},service_call_schema:{missing:"Відсутня схема виклику служби",service:{missing:"Кожна схема служби повинна мати назву служби",invalid:"Недійсна служба: {0}"}}}},invalid_entities:"Недійсні сутності:",invalid_calibration:"Неправильне калібрування, перевірте конфігурацію"},Pi={status:{label:"Статус",value:{starting:"Початок","charger disconnected":"Зарядний пристрій відключено",idle:"Неактивний","remote control active":"Пульт",cleaning:"Прибирання","returning home":"Повернення до док-станції","manual mode":"Ручний режим",charging:"Заряджання","charging problem":"Проблема з заряджанням",paused:"Призупинено","spot cleaning":"Точкове очищення",error:"Помилка","shutting down":"Вимкнення",updating:"Оновлення",docking:"Стиковка","going to target":"По шляху до цілі","zoned cleaning":"Зональне прибирання","segment cleaning":"Прибирання кімнати","emptying the bin":"Спорожнення контейнера","charging complete":"Заряджання завершено","device offline":"Офлайн"}},battery_level:{label:"Батарея"},fan_speed:{label:"Потужність",value:{silent:"Тихий",standard:"Стандарт",medium:"Середній",turbo:"Турбо",auto:"Авто",gentle:"Делікатний"}},sensor_dirty_left:{label:"Сенсор"},filter_left:{label:"Фільтр"},main_brush_left:{label:"Основна щітка"},side_brush_left:{label:"Бокова щітка"},cleaning_count:{label:"Лічильник прибирань"},cleaned_area:{label:"Прибрано"},cleaning_time:{label:"Час прибирання"},mop_left:{label:"Швабра"}},Si={vacuum_start:"Старт",vacuum_pause:"Пауза",vacuum_stop:"Стоп",vacuum_return_to_base:"Повернення на базу",vacuum_clean_spot:"Прибрати місце",vacuum_locate:"Пошук",vacuum_set_fan_speed:"Зміна потужності"},Mi={hour_shortcut:"h",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"min"},Ti={success:"Успіх!",no_selection:"Виділення не зроблено",failed:"Не вдалося викликати службу"},Ci={description:{before_link:"Цей редактор інтерфейсу підтримує лише базову конфігурацію для камери, створеної за допомогою ",link_text:"Xiaomi Cloud Map Extractor",after_link:". Для більш розширеного налаштування використовуйте режим YAML."},label:{name:"Назва (опція)",entity:"Сутність пилососу (необхідно)",camera:"Сутність камери (необхідно)",vacuum_platform:"Платформа інтеграції пилососу (необхідно)",map_locked:"Блокування мапи (опція)",two_finger_pan:"Переміщеня мапи двома пальцями (опція)"}},Oi={common:Ei,map_mode:wi,validation:zi,tile:Pi,icon:Si,unit:Mi,popups:Ti,editor:Ci},Ni={version:"版本",invalid_configuration:"配置无效 {0}",description:"一个可以控制扫地机的卡片",old_configuration:"检测到旧版本的配置。请按照新版本说明修改配置或者重新创建新卡片",old_configuration_migration_link:"迁移向导"},Ri={invalid:"模板无效!",vacuum_goto:"指哪到哪",vacuum_goto_predefined:"目标点",vacuum_clean_segment:"选区清扫",vacuum_clean_point:"局部清扫",vacuum_clean_point_predefined:"自定义局部清扫",vacuum_clean_zone:"划区清扫",vacuum_clean_zone_predefined:"自定义区域清扫",vacuum_follow_path:"路径规划"},ji={preset:{entity:{missing:"缺少属性:entity"},preset_name:{missing:"缺少属性:preset_name"},platform:{invalid:"扫地机平台无效:{0}"},map_source:{missing:"缺少属性:map_source",none_provided:"未提供摄像头或者图像",ambiguous:"只允许一张地图"},calibration_source:{missing:"缺少属性:calibration_source",ambiguous:"只允许一个校准源",none_provided:"未提供校准源",calibration_points:{invalid_number:"需要3或4个校准点",missing_map:"每个校准点必须包含地图坐标",missing_vacuum:"每个校准点必须包含扫地机坐标",missing_coordinate:"地图校准点和扫地机校准点必须同时包含x坐标和y坐标"}},icons:{invalid:"配置错误:icons",icon:{missing:"图标列表中每一条记录必须包含icon属性"}},tiles:{invalid:"配置错误:tiles",entity:{missing_outdated_translation:"板块列表中每一条记录必须包含实体"},label:{missing:"板块列表中每一条记录必须包含标签"}},map_modes:{invalid:"配置错误:map_modes",icon:{missing:"缺少该地图模式的图标"},name:{missing:"缺少该地图模式的名称"},template:{invalid:"模板无效:{0}"},predefined_selections:{not_applicable:"模式 {0} 不支持选择预置",zones:{missing:"缺少区域配置",invalid_parameters_number:"每个区域必须包含4个参数"},points:{position:{missing:"缺少坐标点配置",invalid_parameters_number:"每个坐标点必须包含2个参数"}},rooms:{id:{missing:"缺少房间id",invalid_format:"房间id无效:{0}"},outline:{invalid_parameters_number:"每个房间边框必须包含2个参数"}},label:{x:{missing:"标签必须包含x值"},y:{missing:"标签必须包含y值"},text:{missing:"标签必须包含文本值"}},icon:{x:{missing:"图标必须包含x值"},y:{missing:"标题必须包含y值"},name:{missing:"标题必须包含名称"}}},service_call_schema:{missing:"缺少服务调用架构",service:{missing:"服务调用架构必须包含服务",invalid:"服务无效:{0}"}}}},invalid_entities:"实体无效:",invalid_calibration:"校准无效,请检查配置"},$i={status:{label:"状态",value:{starting:"开始清扫","charger disconnected":"与充电座断开",idle:"空闲","remote control active":"开始遥控模式",cleaning:"清扫中","returning home":"正在回充","manual mode":"手动模式",charging:"正在充电","charging problem":"充电错误",paused:"暂停","spot cleaning":"局部清扫",error:"错误","shutting down":"正在关机",updating:"正在更新",docking:"停靠","going to target":"正在前往目标点","zoned cleaning":"划区清扫","segment cleaning":"选区清扫","emptying the bin":"清理尘盒","charging complete":"充电完成","device offline":"设备离线"}},battery_level:{label:"剩余电量"},fan_speed:{label:"吸力",value:{silent:"安静",standard:"标准",medium:"强力",turbo:"MAX",auto:"自动",gentle:"轻柔"}},sensor_dirty_left:{label:"传感器维护剩余"},filter_left:{label:"滤网剩余"},main_brush_left:{label:"主刷剩余"},side_brush_left:{label:"边刷剩余"},cleaning_count:{label:"总清扫次数"},cleaned_area:{label:"总清扫面积"},cleaning_time:{label:"总清扫时间"},mop_left:{label:"拖布剩余"}},Li={vacuum_start:"开始",vacuum_pause:"暂停",vacuum_stop:"结束",vacuum_return_to_base:"回充",vacuum_clean_spot:"局部清扫",vacuum_locate:"定位",vacuum_set_fan_speed:"更改吸力"},Ii={hour_shortcut:"小时",meter_shortcut:"米",meter_squared_shortcut:"平米",minute_shortcut:"分钟"},Di={success:"指令发送成功!",no_selection:"未提供选择",failed:"调用服务失败"},Fi={description:{before_link:"该可视化编辑器仅支持一些基本配置,且必须使用以下集成创建的摄像机实体:",link_text:"Xiaomi Cloud Map Extractor",after_link:"。想要使用高级设置,请使用YAML模式"},label:{name:"标题(可选)",entity:"扫地机实体(必填)",camera:"摄像机实体(必填)",vacuum_platform:"扫地机平台(必填)",map_locked:"地图锁定(可选)",two_finger_pan:"双指缩放(可选)"}},Vi={common:Ni,map_mode:Ri,validation:ji,tile:$i,icon:Li,unit:Ii,popups:Di,editor:Fi},Ui={version:"版本",invalid_configuration:"設定錯誤 {0}",description:"一張能讓您控制掃地機器人的卡片",old_configuration:"檢測到設定已過時,請按照新版本說明並進行修正或重新新增一張新的卡片",old_configuration_migration_link:"移轉指南"},Hi={invalid:"模板錯誤!",vacuum_goto:"指哪到哪",vacuum_goto_predefined:"目標點",vacuum_clean_segment:"選區清掃",vacuum_clean_point:"局部清掃",vacuum_clean_point_predefined:"局部目標",vacuum_clean_zone:"劃區清掃",vacuum_clean_zone_predefined:"目標區域",vacuum_follow_path:"路徑規劃"},Xi={preset:{entity:{missing:"設定錯誤: entity"},preset_name:{missing:"設定錯誤: preset_name"},platform:{invalid:"錯誤的 vacuum platform: {0}"},map_source:{missing:"設定錯誤: map_source",none_provided:"未提供攝影機或圖片",ambiguous:"只允許一張地圖源"},calibration_source:{missing:"設定錯誤: calibration_source",ambiguous:"只允許一個校準源",none_provided:"未提供校準源",calibration_points:{invalid_number:"需要 3 或 4 個校準點",missing_map:"每個校準點必須包含地圖座標",missing_vacuum:"每個校準點必須包含吸塵器座標",missing_coordinate:"地圖校準點和吸塵器校準點必須同時包含 x 座標和 y 座標"}},icons:{invalid:"設定錯誤: icons",icon:{missing:"Icon list 必須包含 icon"}},tiles:{invalid:"設定錯誤: tiles",entity:{missing_outdated_translation:"tiles list 必須包含 entity"},label:{missing:"tiles list 必須包含 label"}},map_modes:{invalid:"設定錯誤: map_modes",icon:{missing:"Map modes 的 icon(圖標) 設定錯誤"},name:{missing:"Map modes 的 name(名稱) 設定錯誤"},template:{invalid:"模板錯誤: {0}"},predefined_selections:{not_applicable:"Mode {0} 不支援 predefined selections",zones:{missing:"zones 設定錯誤",invalid_parameters_number:"zones 必須包含 4 個參數"},points:{position:{missing:"points 設定錯誤",invalid_parameters_number:"points 必須包含 2 個參數"}},rooms:{id:{missing:"room id 錯誤",invalid_format:"room id 錯誤: {0}"},outline:{invalid_parameters_number:"room 的 point(座標) 必須包含 2 個參數"}},label:{x:{missing:"label 必須包含 x 值"},y:{missing:"label 必須包含 y 值"},text:{missing:"label 必須包含 text"}},icon:{x:{missing:"icon 必須包含 x 值"},y:{missing:"icon 必須包含 y 值"},name:{missing:"icon 必須包含 name"}}},service_call_schema:{missing:"服務執行失敗",service:{missing:"執行服務(service)必須包含該服務(service)",invalid:"服務錯誤: {0}"}}}},invalid_entities:"錯誤的 entities(實體): ",invalid_calibration:"calibration(校準)失敗,請檢查設定"},Ki={status:{label:"狀態",value:{starting:"開始清掃","charger disconnected":"與充電座斷開",idle:"閒置","remote control active":"開始遙控模式",cleaning:"清掃中","returning home":"回充中","manual mode":"手動模式",charging:"充電中","charging problem":"充電錯誤",paused:"暫停","spot cleaning":"局部清掃",error:"錯誤","shutting down":"關機中",updating:"更新中",docking:"Docking","going to target":"正在行進至目標點","zoned cleaning":"劃區清掃","segment cleaning":"選區清掃","emptying the bin":"清理集塵盒","charging complete":"充電完成","device offline":"裝置離線"}},battery_level:{label:"剩餘電量"},fan_speed:{label:"吸力",value:{silent:"安靜",standard:"標準",medium:"強力",turbo:"MAX",auto:"自動",gentle:"拖地"}},sensor_dirty_left:{label:"感應器剩餘"},filter_left:{label:"濾網剩餘"},main_brush_left:{label:"主刷剩餘"},side_brush_left:{label:"邊刷剩餘"},cleaning_count:{label:"累積清掃次數"},cleaned_area:{label:"累積清掃面積"},cleaning_time:{label:"累積清掃時間"},mop_left:{label:"抹布剩餘"}},qi={vacuum_start:"開始",vacuum_pause:"暫停",vacuum_stop:"停止",vacuum_return_to_base:"回充",vacuum_clean_spot:"局部清掃",vacuum_locate:"定位",vacuum_set_fan_speed:"調整吸力"},Gi={hour_shortcut:"小時",meter_shortcut:"m",meter_squared_shortcut:"m²",minute_shortcut:"分鐘"},Zi={success:"Success!",no_selection:"未選擇目標",failed:"執行服務失敗"},Bi={description:{before_link:"此面板僅支援基本的設定,並且只能使用以下的附加元件新增攝影機實體: ",link_text:"Xiaomi Cloud Map Extractor",after_link:"。如需更豐富的進階設定,請使用 YAML 編輯"},label:{name:"標題(選填)",entity:"掃地機器人實體(必填)",camera:"攝影機實體(必填)",vacuum_platform:"vacuum platform(必填)",map_locked:"鎖定地圖(選填)",two_finger_pan:"雙指縮放(選填)"}},Yi={common:Ui,map_mode:Hi,validation:Xi,tile:Ki,icon:qi,unit:Gi,popups:Zi,editor:Bi};const Ji={cs:Ae,da:Oe,de:Object.freeze({__proto__:null,common:Ne,map_mode:Re,validation:je,tile:$e,icon:Le,unit:Ie,popups:De,editor:Fe,default:Ve}),el:Object.freeze({__proto__:null,common:Ue,map_mode:He,validation:Xe,tile:Ke,icon:qe,unit:Ge,popups:Ze,editor:Be,default:Ye}),en:Object.freeze({__proto__:null,common:Je,map_mode:We,validation:Qe,tile:et,icon:tt,unit:at,popups:it,editor:nt,default:ot}),es:Object.freeze({__proto__:null,common:rt,map_mode:st,validation:lt,tile:ct,icon:dt,unit:mt,popups:ut,editor:pt,default:_t}),fr:Object.freeze({__proto__:null,common:gt,map_mode:vt,validation:ht,tile:ft,icon:bt,unit:yt,popups:kt,editor:At,default:xt}),he:Object.freeze({__proto__:null,common:Et,map_mode:wt,validation:zt,tile:Pt,icon:St,unit:Mt,popups:Tt,editor:Ct,default:Ot}),hu:Object.freeze({__proto__:null,common:Nt,map_mode:Rt,validation:jt,tile:$t,icon:Lt,unit:It,popups:Dt,editor:Ft,default:Vt}),is:Object.freeze({__proto__:null,common:Ut,map_mode:Ht,validation:Xt,tile:Kt,icon:qt,unit:Gt,popups:Zt,editor:Bt,default:Yt}),it:Object.freeze({__proto__:null,common:Jt,map_mode:Wt,validation:Qt,tile:ea,icon:ta,unit:aa,popups:ia,editor:na,default:oa}),"nb-NO":Object.freeze({__proto__:null,common:ra,map_mode:sa,validation:la,tile:ca,icon:da,unit:ma,popups:ua,editor:pa,default:_a}),nl:Object.freeze({__proto__:null,common:ga,map_mode:va,validation:ha,tile:fa,icon:ba,unit:ya,popups:ka,editor:Aa,default:xa}),pl:Object.freeze({__proto__:null,common:Ea,map_mode:wa,validation:za,tile:Pa,icon:Sa,unit:Ma,popups:Ta,editor:Ca,default:Oa}),"pt-BR":Object.freeze({__proto__:null,common:Na,map_mode:Ra,validation:ja,tile:$a,icon:La,unit:Ia,popups:Da,editor:Fa,default:Va}),ru:Object.freeze({__proto__:null,common:Ua,map_mode:Ha,validation:Xa,tile:Ka,icon:qa,unit:Ga,popups:Za,editor:Ba,default:Ya}),sk:Object.freeze({__proto__:null,common:Ja,map_mode:Wa,validation:Qa,tile:ei,icon:ti,unit:ai,popups:ii,editor:ni,default:oi}),sv:Object.freeze({__proto__:null,common:ri,map_mode:si,validation:li,tile:ci,icon:di,unit:mi,popups:ui,editor:pi,default:_i}),tr:Object.freeze({__proto__:null,common:gi,map_mode:vi,validation:hi,tile:fi,icon:bi,unit:yi,popups:ki,editor:Ai,default:xi}),uk:Object.freeze({__proto__:null,common:Ei,map_mode:wi,validation:zi,tile:Pi,icon:Si,unit:Mi,popups:Ti,editor:Ci,default:Oi}),zh:Object.freeze({__proto__:null,common:Ni,map_mode:Ri,validation:ji,tile:$i,icon:Li,unit:Ii,popups:Di,editor:Fi,default:Vi}),"zh-Hant":Object.freeze({__proto__:null,common:Ui,map_mode:Hi,validation:Xi,tile:Ki,icon:qi,unit:Gi,popups:Zi,editor:Bi,default:Yi})};function Wi(e,t="",a="",i="",n=e){const o="en";if(!i)try{i=JSON.parse(localStorage.getItem("selectedLanguage")||'"en"')}catch(e){i=(localStorage.getItem("selectedLanguage")||o).replace(/['"]+/g,"")}let r;try{r=Qi(e,null!=i?i:o)}catch(t){r=Qi(e,o)}return void 0===r&&(r=Qi(e,o)),r=null!=r?r:n,""!==t&&""!==a&&(r=r.replace(t,a)),r}function Qi(e,t){try{return e.split(".").reduce(((e,t)=>e[t]),Ji[t])}catch(e){return}}function en(e,t,a){return"string"==typeof e?Wi(e,"","",t,a):Wi(...e,t,a)}function tn(e,t,a,i){var n,o;return en(e,null!==(n=null==a?void 0:a.language)&&void 0!==n?n:null===(o=null==t?void 0:t.locale)||void 0===o?void 0:o.language,i)}var an={defaultTemplates:["vacuum_clean_zone","vacuum_goto"],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"REPEAT",max_repeats:3,service_call_schema:{service:"xiaomi_miio.vacuum_clean_segment",service_data:{segments:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!0,max_selections:5,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"xiaomi_miio.vacuum_clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"PREDEFINED_RECTANGLE",max_selections:5,coordinates_rounding:!0,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"xiaomi_miio.vacuum_clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"xiaomi_miio.vacuum_goto",service_data:{x_coord:"[[point_x]]",y_coord:"[[point_y]]",entity_id:"[[entity_id]]"}}},vacuum_goto_predefined:{name:"map_mode.vacuum_goto_predefined",icon:"mdi:map-marker",selection_type:"PREDEFINED_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"xiaomi_miio.vacuum_goto",service_data:{x_coord:"[[point_x]]",y_coord:"[[point_y]]",entity_id:"[[entity_id]]"}}},vacuum_follow_path:{name:"map_mode.vacuum_follow_path",icon:"mdi:map-marker-path",selection_type:"MANUAL_PATH",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"script.vacuum_follow_path",service_data:{service:"xiaomi_miio.vacuum_goto",mode:"individual",path:"[[selection]]",entity_id:"[[entity_id]]"}}}}},nn={from_attributes:[{tile_id:"sensor_dirty_left",attribute:"sensor_dirty_left",label:"tile.sensor_dirty_left.label",icon:"mdi:eye-outline",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"sensor_dirty_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"filter_left",attribute:"filter_left",label:"tile.filter_left.label",icon:"mdi:air-filter",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"filter_work_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"main_brush_left",attribute:"main_brush_left",label:"tile.main_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"main_brush_work_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"side_brush_left",attribute:"side_brush_left",label:"tile.side_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"side_brush_work_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"cleaning_count",attribute:"cleaning_count",label:"tile.cleaning_count.label",icon:"mdi:counter"}],from_sensors:[{tile_id:"sensor_dirty_left",unique_id_regex:"consumable_sensor_dirty_left_",label:"tile.sensor_dirty_left.label",unit:"unit.hour_shortcut",multiplier:.0002777777777777778,hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"sensor_dirty_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"filter_left",unique_id_regex:"consumable_filter_left_",label:"tile.filter_left.label",unit:"unit.hour_shortcut",multiplier:.0002777777777777778,hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"filter_work_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"main_brush_left",unique_id_regex:"consumable_main_brush_left_",label:"tile.main_brush_left.label",unit:"unit.hour_shortcut",multiplier:.0002777777777777778,hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"main_brush_work_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"side_brush_left",unique_id_regex:"consumable_side_brush_left_",label:"tile.side_brush_left.label",unit:"unit.hour_shortcut",multiplier:.0002777777777777778,hold_action:{action:"call-service",service:"vacuum.send_command",confirmation:!0,service_data:{command:"reset_consumable",params:"side_brush_work_time",entity_id:"[[vacuum_entity]]"}}},{tile_id:"cleaning_count",unique_id_regex:"clean_history_count_",label:"tile.cleaning_count.label"}]},on={map_modes:an,sensors_from:"2021.11.0",tiles:nn},rn=Object.freeze({__proto__:null,map_modes:an,sensors_from:"2021.11.0",tiles:nn,default:on}),sn={defaultTemplates:["vacuum_clean_zone","vacuum_goto"],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"REPEAT",max_repeats:3,service_call_schema:{service:"vacuum.vacuum_clean_segment",service_data:{segments:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!1,max_selections:5,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.vacuum_clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"PREDEFINED_RECTANGLE",max_selections:5,coordinates_rounding:!1,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.vacuum_clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"vacuum.vacuum_goto",service_data:{x_coord:"[[point_x]]",y_coord:"[[point_y]]",entity_id:"[[entity_id]]"}}},vacuum_goto_predefined:{name:"map_mode.vacuum_goto_predefined",icon:"mdi:map-marker",selection_type:"PREDEFINED_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"vacuum.vacuum_goto",service_data:{x_coord:"[[point_x]]",y_coord:"[[point_y]]",entity_id:"[[entity_id]]"}}},vacuum_follow_path:{name:"map_mode.vacuum_follow_path",icon:"mdi:map-marker-path",selection_type:"MANUAL_PATH",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"script.vacuum_follow_path",service_data:{service:"vacuum.vacuum_goto",mode:"individual",path:"[[selection]]",entity_id:"[[entity_id]]"}}}}},ln={from_attributes:[{tile_id:"cleaned_area",attribute:"cleaned_area",label:"tile.cleaned_area.label",icon:"mdi:texture-box",unit:"unit.meter_squared_shortcut"},{tile_id:"cleaning_time",attribute:"cleaning_time",label:"tile.cleaning_time.label",icon:"mdi:timer-sand",unit:"unit.minute_shortcut"}]},cn={map_modes:sn,tiles:ln},dn=Object.freeze({__proto__:null,map_modes:sn,tiles:ln,default:cn}),mn={defaultTemplates:["vacuum_clean_zone","vacuum_clean_point"],templates:{vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!1,max_selections:5,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.xiaomi_clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"PREDEFINED_RECTANGLE",max_selections:5,coordinates_rounding:!1,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.xiaomi_clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_clean_point:{name:"map_mode.vacuum_clean_point",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"vacuum.xiaomi_clean_point",service_data:{point:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_point_predefined:{name:"map_mode.vacuum_clean_point_predefined",icon:"mdi:map-marker",selection_type:"PREDEFINED_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"vacuum.xiaomi_clean_point",service_data:{point:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",max_selections:1,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.send_command",service_data:{entity_id:"[[entity_id]]",command:"set_mode_withroom",params:"[ 0, [[repeats]], 1, [[selection_unwrapped]] ]|[[jsonify]]"}}}}},un={from_attributes:[{tile_id:"filter_left",attribute:"filter_left",label:"tile.filter_left.label",icon:"mdi:air-filter",unit:"unit.hour_shortcut"},{tile_id:"main_brush_left",attribute:"main_brush_left",label:"tile.main_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut"},{tile_id:"side_brush_left",attribute:"side_brush_left",label:"tile.side_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut"},{tile_id:"mop_left",attribute:"mop_left",label:"tile.mop_left.label",icon:"mdi:format-color-fill",unit:"unit.hour_shortcut"}]},pn={map_modes:mn,tiles:un},_n=Object.freeze({__proto__:null,map_modes:mn,tiles:un,default:pn}),gn={defaultTemplates:["vacuum_clean_zone","vacuum_goto"],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"mqtt.publish",evaluate_data_as_template:!0,service_data:{topic:"[[topic]]/custom_command",payload:'{ "command": "segmented_cleanup", "segment_ids": [[selection]], "repeats": [[repeats]], "afterCleaning": "{{ \'Base\' if \'afterCleaning\' in \'[[afterCleaning]]\' else \'[[afterCleaning]]\'}}" }'}}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!0,repeats_type:"EXTERNAL",max_selections:5,max_repeats:3,service_call_schema:{service:"mqtt.publish",evaluate_data_as_template:!0,service_data:{topic:"[[topic]]/custom_command",payload:'{"command": "zoned_cleanup","zone_coordinates": [{%for s in (\'[[selection]]\')|from_json %}{ "x1": {{s[0]}}, "y1": {{s[1]}}, "x2": {{s[2]}}, "y2": {{s[3]}}, "repeats": [[repeats]]}{%if not loop.last%},{%endif%}{%endfor%}],"afterCleaning": "{{ \'Base\' if \'afterCleaning\' in \'[[afterCleaning]]\' else \'[[afterCleaning]]\'}}"}'}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"mqtt.publish",evaluate_data_as_template:!0,service_data:{topic:"[[topic]]/custom_command",payload:'{"command": "zoned_cleanup","zone_ids": [{%for s in (\'[[selection]]\')|from_json %}{ "id": "{{s}}", "repeats": [[repeats]]}{%if not loop.last%},{%endif%}{%endfor%}],"afterCleaning": "{{ \'Base\' if \'afterCleaning\' in \'[[afterCleaning]]\' else \'[[afterCleaning]]\'}}"}'}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"mqtt.publish",service_data:{topic:"[[topic]]/custom_command",payload:'{ "command": "go_to", "spot_coordinates": { "x": [[point_x]], "y": [[point_y]] } }'}}},vacuum_goto_predefined:{name:"map_mode.vacuum_goto_predefined",icon:"mdi:map-marker",max_selections:1,selection_type:"ROOM",repeats_type:"NONE",service_call_schema:{service:"mqtt.publish",service_data:{topic:"[[topic]]/custom_command",payload:'{ "command": "go_to", "spot_id": "[[selection_unwrapped]]" }'}}}}},vn={from_attributes:[{tile_id:"filter_left",attribute:"filter",label:"tile.filter_left.label",icon:"mdi:air-filter",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"mqtt.publish",confirmation:!0,service_data:{topic:"[[topic]]/custom_command",payload:'{"command": "reset_consumable",\n"consumable": "filter_work_time"}'}}},{tile_id:"main_brush_left",attribute:"mainBrush",label:"tile.main_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"mqtt.publish",confirmation:!0,service_data:{topic:"[[topic]]/custom_command",payload:'{"command": "reset_consumable",\n"consumable": "main_brush_work_time"}'}}},{tile_id:"side_brush_left",attribute:"sideBrush",label:"tile.side_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut",hold_action:{action:"call-service",service:"mqtt.publish",confirmation:!0,service_data:{topic:"[[topic]]/custom_command",payload:'{"command": "reset_consumable",\n"consumable": "side_brush_work_time"}'}}}]},hn={map_modes:gn,tiles:vn},fn=Object.freeze({__proto__:null,map_modes:gn,tiles:vn,default:hn}),bn={defaultTemplates:["vacuum_clean_zone","vacuum_goto"],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"REPEAT",max_repeats:3,service_call_schema:{service:"vacuum.send_command",service_data:{command:"app_segment_clean",params:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!0,max_selections:5,repeats_type:"INTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.send_command",service_data:{command:"app_zoned_clean",params:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"PREDEFINED_RECTANGLE",max_selections:5,coordinates_rounding:!0,repeats_type:"INTERNAL",max_repeats:3,service_call_schema:{service:"vacuum.send_command",service_data:{command:"app_zoned_clean",params:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"vacuum.send_command",service_data:{command:"app_goto_target",params:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_goto_predefined:{name:"map_mode.vacuum_goto_predefined",icon:"mdi:map-marker",selection_type:"PREDEFINED_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"vacuum.send_command",service_data:{command:"app_goto_target",params:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_follow_path:{name:"map_mode.vacuum_follow_path",icon:"mdi:map-marker-path",selection_type:"MANUAL_PATH",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"script.vacuum_follow_path",service_data:{service:"vacuum.send_command",mode:"send_command",path:"[[selection]]",entity_id:"[[entity_id]]"}}}}},yn={from_attributes:[],from_sensors:[]},kn={map_modes:bn,tiles:yn},An=Object.freeze({__proto__:null,map_modes:bn,tiles:yn,default:kn}),xn={defaultTemplates:[],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"EXTERNAL",max_selections:1,max_repeats:3,service_call_schema:{service:"xiaomi_miot.call_action"}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!0,max_selections:1,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"xiaomi_miot.call_action"}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"PREDEFINED_RECTANGLE",max_selections:1,coordinates_rounding:!0,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"xiaomi_miot.call_action"}}}},En={from_attributes:[{tile_id:"status",attribute:"vacuum.status_desc",label:"tile.status.label",icon:"mdi:robot-vacuum",translation_keys:["starting","charger disconnected","idle","remote control active","cleaning","returning home","manual mode","charging","charging problem","paused","spot cleaning","error","shutting down","updating","docking","going to target","zoned cleaning","segment cleaning","emptying the bin","charging complete","device offline"]}]},wn={map_modes:xn,tiles:En},zn=Object.freeze({__proto__:null,map_modes:xn,tiles:En,default:wn}),Pn={defaultTemplates:["vacuum_clean_zone","vacuum_clean_point"],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"REPEAT",max_repeats:3,service_call_schema:{service:"viomi_vacuum_v8.clean_segment",service_data:{segments:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!1,max_selections:5,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"viomi_vacuum_v8.clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"PREDEFINED_RECTANGLE",max_selections:5,coordinates_rounding:!1,repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"viomi_vacuum_v8.clean_zone",service_data:{zone:"[[selection]]",repeats:"[[repeats]]",entity_id:"[[entity_id]]"}}},vacuum_clean_point:{name:"map_mode.vacuum_clean_point",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"viomi_vacuum_v8.clean_point",service_data:{point:"[[selection]]",entity_id:"[[entity_id]]"}}},vacuum_clean_point_predefined:{name:"map_mode.vacuum_clean_point_predefined",icon:"mdi:map-marker",selection_type:"PREDEFINED_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"viomi_vacuum_v8.clean_point",service_data:{point:"[[selection]]",entity_id:"[[entity_id]]"}}}}},Sn={from_attributes:[{tile_id:"cleaned_area",attribute:"cleaned_area",label:"tile.cleaned_area.label",icon:"mdi:texture-box",unit:"unit.meter_squared_shortcut"},{tile_id:"cleaning_time",attribute:"cleaning_time",label:"tile.cleaning_time.label",icon:"mdi:timer-sand",unit:"unit.minute_shortcut"}]},Mn={map_modes:Pn,tiles:Sn},Tn=Object.freeze({__proto__:null,map_modes:Pn,tiles:Sn,default:Mn}),Cn={defaultTemplates:["vacuum_clean_zone","vacuum_goto"],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"mqtt.publish",service_data:{topic:"[[topic]]/MapSegmentationCapability/clean/set",payload:'{"segment_ids": [[selection]], "iterations": [[repeats]], "customOrder": true}'}}},vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!0,repeats_type:"EXTERNAL",max_selections:5,max_repeats:3,service_call_schema:{service:"mqtt.publish",evaluate_data_as_template:!0,service_data:{topic:"[[topic]]/ZoneCleaningCapability/start/set",payload:'{"zones": [{%for s in (\'[[selection]]\')|from_json %}{ "points": {"pA": { "x": {{s[0]}}, "y": {{s[1]}} }, "pB": { "x": {{s[2]}}, "y": {{s[1]}} }, "pC": { "x": {{s[2]}}, "y": {{s[3]}} }, "pD": { "x": {{s[0]}}, "y": {{s[3]}} } }, "iterations": [[repeats]]}{%if not loop.last%},{%endif%}{%endfor%}]}'}}},vacuum_clean_zone_predefined:{name:"map_mode.vacuum_clean_zone_predefined",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"EXTERNAL",max_repeats:3,service_call_schema:{service:"mqtt.publish",evaluate_data_as_template:!0,service_data:{topic:"[[topic]]/ZoneCleaningCapability/start/set",payload:'{"zones": [{%for s in (\'[[selection]]\')|from_json %}{ "points": {"pA": { "x": {{s[0]}}, "y": {{s[1]}} }, "pB": { "x": {{s[2]}}, "y": {{s[1]}} }, "pC": { "x": {{s[2]}}, "y": {{s[3]}} }, "pD": { "x": {{s[0]}}, "y": {{s[3]}} } }, "iterations": [[repeats]]}{%if not loop.last%},{%endif%}{%endfor%}]}'}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"mqtt.publish",service_data:{topic:"[[topic]]/GoToLocationCapability/go/set",payload:'{ "coordinates": { "x": [[point_x]], "y": [[point_y]] } }'}}},vacuum_goto_predefined:{name:"map_mode.vacuum_goto_predefined",icon:"mdi:map-marker",max_selections:1,selection_type:"ROOM",repeats_type:"NONE",service_call_schema:{service:"mqtt.publish",service_data:{topic:"[[topic]]/GoToLocationCapability/go/set",payload:'{ "coordinates": { "x": "[[point_x]]", "y": "[[point_y]]" } }'}}}}},On={from_sensors:[{tile_id:"filter_left",unique_id_regex:"_sensor_ConsumableMonitoringCapability_filter_main",label:"tile.filter_left.label",icon:"mdi:air-filter",unit:"unit.hour_shortcut",multiplier:.016666666666666666},{tile_id:"main_brush_left",unique_id_regex:"_sensor_ConsumableMonitoringCapability_brush_main",label:"tile.main_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut",multiplier:.016666666666666666},{tile_id:"side_brush_left",unique_id_regex:"_sensor_ConsumableMonitoringCapability_brush_side_right",label:"tile.side_brush_left.label",icon:"mdi:brush",unit:"unit.hour_shortcut",multiplier:.016666666666666666},{tile_id:"cleaned_area",unique_id_regex:"_sensor_CurrentStatisticsCapability_area",label:"tile.cleaned_area.label",icon:"mdi:texture-box",unit:"unit.meter_squared_shortcut",multiplier:1e-4},{tile_id:"cleaning_time",unique_id_regex:"_sensor_CurrentStatisticsCapability_time",label:"tile.cleaning_time.label",icon:"mdi:timer-sand",unit:"unit.minute_shortcut",multiplier:.016666666666666666}]},Nn={map_modes:Cn,tiles:On},Rn=Object.freeze({__proto__:null,map_modes:Cn,tiles:On,default:Nn}),jn={defaultTemplates:[],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"NONE",service_call_schema:{service:"neato.custom_cleaning",service_data:{zone:"[[selection_unwrapped]]",entity_id:"[[entity_id]]"}}}}},$n={from_attributes:[{tile_id:"cleaned_area",attribute:"clean_area",label:"tile.cleaned_area.label",icon:"mdi:texture-box",unit:"unit.meter_squared_shortcut"}]},Ln={map_modes:jn,tiles:$n},In=Object.freeze({__proto__:null,map_modes:jn,tiles:$n,default:Ln}),Dn={defaultTemplates:[],templates:{vacuum_clean_segment:{name:"map_mode.vacuum_clean_segment",icon:"mdi:floor-plan",selection_type:"ROOM",repeats_type:"EXTERNAL",max_repeats:2,service_call_schema:{service:"vacuum.send_command",evaluate_data_as_template:!0,service_data:{entity_id:"[[entity_id]]",command:"start",params:{pmap_id:"[[pmap_id]]",regions:'[{%set s=\'[[selection]]\'|from_json%}{%set v=\'[[variables]]\'|from_json%}{%for i in range(s|length)%} {"params": {"noAutoPasses": true, "twoPass": {{ (([[repeats]] == 2) | string).lower() }}}, "region_id": "{{s[i]}}", "type": "{{v[i][\'type\']}}" }{%if not loop.last%},{%endif%}{%endfor%}]|[[jsonify_jinja]]'}}}}}},Fn={from_attributes:[{tile_id:"bin_present",attribute:"bin_present",label:"tile.bin_present.label",icon:"mdi:delete-restore",translation_keys:["true","false"]},{tile_id:"bin_full",attribute:"bin_full",label:"tile.bin_full.label",icon:"mdi:delete",translation_keys:["true","false"]}]},Vn={map_modes:Dn,tiles:Fn},Un=Object.freeze({__proto__:null,map_modes:Dn,tiles:Fn,default:Vn}),Hn={defaultTemplates:["vacuum_clean_zone","vacuum_goto","vacuum_follow_path"],templates:{vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!1,max_selections:1,repeats_type:"NONE",service_call_schema:{service:"persistent_notification.create",service_data:{zones:"[[selection]]"}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"persistent_notification.create",service_data:{x_coord:"[[point_x]]",y_coord:"[[point_y]]",point:"[[selection]]"}}},vacuum_follow_path:{name:"map_mode.vacuum_follow_path",icon:"mdi:map-marker-path",selection_type:"MANUAL_PATH",coordinates_rounding:!1,repeats_type:"NONE",service_call_schema:{service:"persistent_notification.create",service_data:{path:"[[selection]]"}}}}},Xn={from_attributes:[]},Kn={map_modes:Hn,tiles:Xn},qn=Object.freeze({__proto__:null,map_modes:Hn,tiles:Xn,default:Kn}),Gn={defaultTemplates:["vacuum_clean_zone","vacuum_goto","vacuum_follow_path"],templates:{vacuum_clean_zone:{name:"map_mode.vacuum_clean_zone",icon:"mdi:select-drag",selection_type:"MANUAL_RECTANGLE",coordinates_rounding:!0,max_selections:1,repeats_type:"NONE",service_call_schema:{service:"persistent_notification.create",service_data:{zones:"[[selection]]"}}},vacuum_goto:{name:"map_mode.vacuum_goto",icon:"mdi:map-marker-plus",selection_type:"MANUAL_POINT",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"persistent_notification.create",service_data:{x_coord:"[[point_x]]",y_coord:"[[point_y]]",point:"[[selection]]"}}},vacuum_follow_path:{name:"map_mode.vacuum_follow_path",icon:"mdi:map-marker-path",selection_type:"MANUAL_PATH",coordinates_rounding:!0,repeats_type:"NONE",service_call_schema:{service:"persistent_notification.create",service_data:{path:"[[selection]]"}}}}},Zn={from_attributes:[]},Bn={map_modes:Gn,tiles:Zn},Yn=Object.freeze({__proto__:null,map_modes:Gn,tiles:Zn,default:Bn});const Jn=(e,t,a)=>{oo(a);const i=function(e,t){const a=Qn(e),i=Qn(t),n=a.pop(),o=i.pop(),r=ao(a,i);return 0!==r?r:n&&o?ao(n.split("."),o.split(".")):n||o?n?-1:1:0}(e,t);return io[a].includes(i)},Wn=/^v?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,Qn=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(Wn);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},eo=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},to=(e,t)=>{const[a,i]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(eo(e),eo(t));return a>i?1:a<i?-1:0},ao=(e,t)=>{for(let a=0;a<Math.max(e.length,t.length);a++){const i=to(e[a]||0,t[a]||0);if(0!==i)return i}return 0},io={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},no=Object.keys(io),oo=e=>{if("string"!=typeof e)throw new TypeError("Invalid operator type, expected string but got "+typeof e);if(-1===no.indexOf(e))throw new Error(`Invalid operator, expected one of ${no.join("|")}`)};var ro;!function(e){e[e.MANUAL_RECTANGLE=0]="MANUAL_RECTANGLE",e[e.PREDEFINED_RECTANGLE=1]="PREDEFINED_RECTANGLE",e[e.ROOM=2]="ROOM",e[e.MANUAL_PATH=3]="MANUAL_PATH",e[e.MANUAL_POINT=4]="MANUAL_POINT",e[e.PREDEFINED_POINT=5]="PREDEFINED_POINT"}(ro||(ro={}));class so{static getPlatforms(){return Array.from(so.TEMPLATES.keys())}static getPlatformsDocumentationUrl(e){var t,a;const i=null!==(a=null!==(t=so.TEMPLATE_DOCUMENTATIONS_URLS.get(e))&&void 0!==t?t:so.TEMPLATE_DOCUMENTATIONS_URLS.get(so.XIAOMI_MIIO_PLATFORM))&&void 0!==a?a:"";return so.DOCUMENTATION_URL_FORMAT.replace("{0}",i)}static isValidModeTemplate(e,t){return void 0!==t&&Object.keys(this.getPlatformTemplate(e).map_modes.templates).includes(t)}static getModeTemplate(e,t){return this.getPlatformTemplate(e).map_modes.templates[t]}static generateDefaultModes(e){return this.getPlatformTemplate(e).map_modes.defaultTemplates.map((e=>({template:e})))}static getTilesFromAttributesTemplates(e){var t;return null!==(t=this.getPlatformTemplate(e).tiles.from_attributes)&&void 0!==t?t:[]}static getTilesFromSensorsTemplates(e){var t;return null!==(t=this.getPlatformTemplate(e).tiles.from_sensors)&&void 0!==t?t:[]}static usesSensors(e,t){const a=this.getPlatformTemplate(t).sensors_from;return!!a&&Jn(e.config.version.replace(/\.*[a-z].*/,""),a,">=")}static getRoomsTemplate(e){const t=this.getPlatformTemplate(e);for(const e in t.map_modes.templates){if(t.map_modes.templates[e].selection_type===ro[ro.ROOM])return e}}static getPlatformTemplate(e){var t,a;return null!==(a=null!==(t=this.TEMPLATES.get(e))&&void 0!==t?t:this.TEMPLATES.get(this.XIAOMI_MIIO_PLATFORM))&&void 0!==a?a:{templates:[],defaultTemplates:{}}}}so.XIAOMI_MIIO_PLATFORM="default",so.KRZYSZTOFHAJDAMOWICZ_MIIO2_PLATFORM="KrzysztofHajdamowicz/miio2",so.MAROTOWEB_VIOMISE_PLATFORM="marotoweb/viomise",so.RAND256_VALETUDO_RE_PLATFORM="rand256/ValetudoRE",so.SEND_COMMAND_PLATFORM="send_command",so.ALONE_XIAOMI_MIOT_PLATFORM="al-one/hass-xiaomi-miot",so.TYKAROL_VIOMI_VACUUM_V8_PLATFORM="tykarol/viomi-vacuum-v8",so.HYPFER_VALETUDO_PLATFORM="Hypfer/Valetudo",so.NEATO_PLATFORM="Neato",so.ROOMBA_PLATFORM="Roomba",so.SETUP_INTEGER_PLATFORM="Setup integer",so.SETUP_DECIMAL_PLATFORM="Setup decimal",so.DOCUMENTATION_URL_FORMAT="https://github.com/PiotrMachowski/lovelace-xiaomi-vacuum-map-card/tree/master/docs/templates/{0}.md",so.TEMPLATES=new Map([[so.XIAOMI_MIIO_PLATFORM,rn],[so.KRZYSZTOFHAJDAMOWICZ_MIIO2_PLATFORM,dn],[so.MAROTOWEB_VIOMISE_PLATFORM,_n],[so.TYKAROL_VIOMI_VACUUM_V8_PLATFORM,Tn],[so.HYPFER_VALETUDO_PLATFORM,Rn],[so.RAND256_VALETUDO_RE_PLATFORM,fn],[so.SEND_COMMAND_PLATFORM,An],[so.ALONE_XIAOMI_MIOT_PLATFORM,zn],[so.NEATO_PLATFORM,In],[so.ROOMBA_PLATFORM,Un],[so.SETUP_INTEGER_PLATFORM,Yn],[so.SETUP_DECIMAL_PLATFORM,qn]]),so.TEMPLATE_DOCUMENTATIONS_URLS=new Map([[so.XIAOMI_MIIO_PLATFORM,"xiaomiMiio"],[so.KRZYSZTOFHAJDAMOWICZ_MIIO2_PLATFORM,"krzysztofHajdamowiczMiio2"],[so.MAROTOWEB_VIOMISE_PLATFORM,"marotowebViomise"],[so.RAND256_VALETUDO_RE_PLATFORM,"rand256ValetudoRe"],[so.SEND_COMMAND_PLATFORM,"sendCommand"],[so.ALONE_XIAOMI_MIOT_PLATFORM,"alOneHassXiaomiMiot"],[so.TYKAROL_VIOMI_VACUUM_V8_PLATFORM,"tykarolViomiVacuumV8"],[so.HYPFER_VALETUDO_PLATFORM,"hypferValetudo"],[so.NEATO_PLATFORM,"neato"],[so.ROOMBA_PLATFORM,"roomba"],[so.SETUP_INTEGER_PLATFORM,"setup"],[so.SETUP_DECIMAL_PLATFORM,"setup"]]);const lo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5QsWDwwxfsgRyAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAtkSURBVHja7d19zCVXXQfw725368JuC7JtUWKXKiLUF7aQVhRYSUEUGiGAaEUJEkBAMWZVasQivlQrxVZAFgIiiYCgIWDiGxZECoKKS60FxQCW1yLU0hcXWlraZdc/znmSeWbvs8+duTNz99l+PslNdp699/zuzD33d+ecOedMAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoNh2n+3VWkicneWiSByT5xiTbk3w1yS1Jbkjy8fr41yT/mOTAgjHvmeRRSR6T5CFJTq2PE5P8X5Lrk/xHkquSvCPJfy3wme1O8tga7/QkpyXZkeTGGue/k1xeH/+jmh+zpqozzJk0Dh/lcTDJbUm+lOQTSd6T5DVJnpXkm3rGfPY6MZuPq+co7+FJ9ncoc+Xx9SQfSPL8JCd13IddSV6d5PaOMT+e5NeS3KtDrPPql2HeGIeSvCXJ/QaqC9cm2dahnFNar9+7QWL2ebxoSXXm8MiPbRMfr2XkoYV37lCSf07yY0k2LyEBbkpySX0fi34wP9jh/e9N8rUF492a5IJ14uxI8lcLxLgzyS8PVBcuWEIyuuA4SoBD15m7WgIcNA9tzjA2Jfn+JG9N8uEkD5747PVVSX6l1aR/b5JnJjkzycm1WfHNSb6nNo9fkeTfe8bbmuRNSV5Wy11xXZLLahK9b5K71eb3mfXsbV+Sz7bKunuSRx4l1r1rE/3xrb/vr0ntrNoE/oYk35JkT/0xaDZ9tyS5NMkfDfCZv7A23aa0jJhDm7LO3JW79HrnoXbm3df6/xNqIrlPDfL0JH9SP8B2Jv5akqf12IG3tcqZ55T2ia3X3JLkRzvEvF+S3699gPOeAf7hjF+ei2o/4zwf0uOT/Gfj9X9zlB+oK1qxbkjy1Dni3D3JS2acFV/Yoy78bWv7JROcjS0j5r4Rv5xT1Zm1fKbx2usGaiWOcbyWlof67tzWJM9I8skZH/DTJ0iA7T6/J/U88KfV/rL1EuBTZxzkH+8Rb0uSX6/N07Uq84tasf63nsF28TOtJHiw9pV2qQvnt758X60VcMxktIyYYyXAKevM8Z4AR8tDi+7c9iRvbJVxe5KzR0yA92k9f+yrZNuSfLHDF2we5yZ5w4y/n1o7e5sf5Lk9Y1zaes//1LEuPCXJE1p/e93IyWgZMfdt8DpzV06AC+ehoXbuda1yPlx/ucZIgA9rPf9tIyfAn2/FuyLjDSX6zVas1y9Q1t2SfLpV3vd1TEZJuVLePJN84MgJcOqY+zZ4nZEAO+ahzSPswM/VpsuKByX5qZE+1C0zmrFj+oXW9iX14A5tU5Lntf522QLl3ZYy7KLpeT3K+dVWX8zvTvDFXUbMjVhn6JGHxkiAd+bIYQu/ONJOtgf5Prg2Hcdw3yT3b2x/Ksk7R4p1ZsrV3xX7B2jev6E2o5vNqK4+kOSvG9srg83HtIyYG7HO0CMPbR4p+DtTOiNX7E73wbjz+GQrCe5I8tqUISFDayeMK0b8Jd/T2n7/AGVenzKQdsWu+ujqha1EeskElXkZMTdanaFHHhorAR5OmbrT9OiRYrWbdk9K8rEkL0iZBjeUs2ecmYylPX7pyoHK/dA6cebx0ZRO5hWPTPK4kSvyMmJutDpDjzy0ecTgV7W2v2ukOH8wI9YZKWP7PpYybu7dKQNQn1Ur5bYecdpN60+PeOxOaW1/dqByP7dOnHm9OGUox4rfG7kuTRXz+Rl2ZsOUdWYZhj5ek+ehMStt+8PeNVKc25P88FF+XXfWrL83yR/Xs6Avp/SrXZwyCX0eO1vbN4947Nrzgw8MVO6BdeLM69qsvjq3O8lPjlyRlxFzUVPWGXrkoTET4Jdb2yeNGOuG2ix6TpJr5nj+1iTnpPQt/VtNnues85p7rrN/Q2ofq1sHKveW1vbJC5R1cSuhXpTVU7zGsIyYi5iyztAjD42ZAKce63QoZezPd6RcRLgoZaWIL83x2ocn+WDKmK213DlhQm8nqu0DlbtjwC/kTVl9MeKMJD878mc8dsxX1Xrb5/E7S64zyzD08Zo8D42ZAIf8snVxuJ7Rvbg2fU9LWQThh1LGlL01ZTjCrGPxyhy56MBa73/nyF/0pnsMVG67nBsXLO/lSb7Q2L5wgi/5MmIOdfaxM0ztqHlozAR4xjpt8Sldl+Tv69nD+SmXwnenrI7SHpbw0jV+NdoXEE4fuUm/Zr/FAk5fJ05XtyX5rcb2qem2dNVGidnXlHWGHnlozAR4Vmv76mPswHwkyXNz5OjwB2b2dKv2QOQfGPG9tY/V2QOV2+7nvGqAMl+f1eMLfymrB3GPYRkx+5iyztAjD42ZAB/b+PehJO86Rg/QnyX5l9bfvnvG89rPefSI76k98HnPAGXubCX2TyX5/ADlfj2rl9janrJiyZiWEbOPKesMPfLQWAlwT8p0rhXvTVnK6Vj1kXX6DZIybOb6xva3pixYOYaPZvXFm4cm+c4Fy3xG6/N+z4Dv9+0p91ZZ8ZyMM/Nn2TG7mrLO0CMPjZEAT0gZhNx06TF+oO5obX9xxnMOpUyza7ow41ztPpzSP5lWM6+vbSmTw5teO/B7bi5asDXTXOVbRswupqwz9MhDYyTAl2b1ZPV3J/m7kXZyb8rV3kX3o7k01MGs3Tf2siRfaWw/LN3utTHLuSkr2rbty+qZD89MuYNYHxcl+bbG9vsy3PS65q9r83M+P+PfGmEZMbuass7QMQ8NmQBPTBlG0jxTOZB+yy7Na0vKFcF/WKD588SsvjhweavZ0nRzyhSspouT/ESPuJtrAn9XZk9Juy6rx7xtSvLnKVevu3h26zM52DpzGlJz0YJNM47V8RKziynrDAvkoUUWInxySr9V8/V3pPuE9a4Lor4gqxfL/NN0m3P8tJSl1pvveb2+tk058g5th+rp9rzj9R6XskDjevd3OCHlhkjNWDfX971eM2p7yn002nMw50l+ay1OOo83Ze35n3uP8ZhjLYk/ZZ1Zy2dy/C+IulAemudmJCfVpHRObW68MkeuNLxy274f6bHziyTA5uNDKSsqPyblTmkn1j6ieyX53vqluHJGhXzunO/z5JTb77Xj3pgyUPe8lLF722oFf0DKQOzLUm5a3n7d0SrzvTP7XsBX1l+53fVsYGvKLQIeUc84Pj/jNa+Zs/9pkWR0Rta+7ePeYzzmmDdFmrLOHM8JcLQ8NNQ9P/dn/WXLm82zRe4L/NMpQyIWfc9fqWV1PdV+9QCxb8r607m2J/nLBWIcTLltaN+68JSOx+blEyfAoWKOfV/gKevMFAnwWLsvcN88NEjgD9b+tK79U4veGH1X7Qf8RI/3fEeSN2exmRZ7UtYc6xr76pS5xzs6xDov5V7GXeL8RVYPBZgiAZ6SMuVoygQ4RMwpbow+dZ25qyXATnloS4edP5wyufvW2g/1hXpqvr+ejg8xqLaPzyX5jfr49pSlsR5Uv/S76unySbWJe6A2Oa6uzZG3Z/aQly7eXx/3Txno+oiUW1furE3urfWYXVv7cN6XsjLwNT1ivSPlStZDUgZ4nlub+KfVL8VNKeMHr0mZ+nd5Zs97HtsNtX/rt4/zmBuhzhxvjtU8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf4fJ6JYBxmOptUAAAAASUVORK5CYII=";var co,mo,uo,po,_o;!function(e){e[e.NONE=0]="NONE",e[e.INTERNAL=1]="INTERNAL",e[e.EXTERNAL=2]="EXTERNAL",e[e.REPEAT=3]="REPEAT"}(co||(co={})),function(e){e.ENTITY_ID="entity_id",e.SELECTION="selection",e.SELECTION_SIZE="selection_size",e.SELECTION_UNWRAPPED="selection_unwrapped",e.REPEATS="repeats",e.POINT_X="point_x",e.POINT_Y="point_y"}(mo||(mo={})),function(e){e.ENTITY_ID="entity_id",e.VACUUM_ENTITY="vacuum_entity",e.ATTRIBUTE="attribute"}(uo||(uo={}));class go{constructor(e,t,a,i){this.domain=e,this.service=t,this.serviceData=a,this.target=i}}class vo{constructor(e){var t;this.config=e,this.service=e.service,this.serviceData=e.service_data,this.target=e.target,this.evaluateDataAsTemplate=null!==(t=e.evaluate_data_as_template)&&void 0!==t&&t}apply(e,t,a,i){const n=vo.getDefaultVariables(e,t,a);let o,r;this.serviceData&&(o=To(this.serviceData,n,i)),this.target&&(r=To(this.target,n,i));const s=this.service.split(".");return new go(s[0],s[1],o,r)}static getDefaultVariables(e,t,a){const i={};return i[mo.ENTITY_ID]=e,i[mo.SELECTION]=t,i[mo.SELECTION_SIZE]=t.length,i[mo.SELECTION_UNWRAPPED]=JSON.stringify(t).replaceAll("[","").replaceAll("]","").replaceAll('"',""),i[mo.REPEATS]=a,i[mo.POINT_X]=this.isPoint(t)?t[0]:"",i[mo.POINT_Y]=this.isPoint(t)?t[1]:"",i}static isPoint(e){return"number"==typeof e[0]&&2==e.length}}!function(e){e.JSONIFY="|[[jsonify]]",e.JSONIFY_JINJA="|[[jsonify_jinja]]"}(po||(po={}));class ho{constructor(e,t,a){var i,n,o,r,s,l,c,d,m;this.config=t,this.name=null!==(i=t.name)&&void 0!==i?i:en("map_mode.invalid",a),this.icon=null!==(n=t.icon)&&void 0!==n?n:"mdi:help",this.selectionType=t.selection_type?ro[t.selection_type]:ro.PREDEFINED_POINT,this.maxSelections=null!==(o=t.max_selections)&&void 0!==o?o:999,this.coordinatesRounding=null===(r=t.coordinates_rounding)||void 0===r||r,this.runImmediately=null!==(s=t.run_immediately)&&void 0!==s&&s,this.repeatsType=t.repeats_type?co[t.repeats_type]:co.NONE,this.maxRepeats=null!==(l=t.max_repeats)&&void 0!==l?l:1,this.serviceCallSchema=new vo(null!==(c=t.service_call_schema)&&void 0!==c?c:{}),this.predefinedSelections=null!==(d=t.predefined_selections)&&void 0!==d?d:[],this.variables=null!==(m=t.variables)&&void 0!==m?m:{},this._applyTemplateIfPossible(e,t,a),ho.PREDEFINED_SELECTION_TYPES.includes(this.selectionType)||(this.runImmediately=!1)}async getServiceCall(e,t,a,i,n){let o=this._applyData(t,a,i,n);if(this.serviceCallSchema.evaluateDataAsTemplate)try{const t=await async function(e,t){return new Promise((a=>{e.connection.subscribeMessage((e=>a(e.result)),{type:"render_template",template:t})}))}(e,JSON.stringify(o.serviceData));try{const e="string"==typeof t?JSON.parse(t):t;So(e,(e=>e.endsWith(po.JSONIFY_JINJA)?JSON.parse(e.replace(po.JSONIFY_JINJA,"")):e)),o=Object.assign(Object.assign({},o),{serviceData:e})}catch(e){throw console.error("Failed to parse template output",t),e}}catch(e){console.error("Failed to evaluate template",o.serviceData)}return o}toMapModeConfig(){var e;return{name:this.name,icon:this.icon,run_immediately:this.runImmediately,coordinates_rounding:this.coordinatesRounding,selection_type:ro[this.selectionType],max_selections:this.maxSelections,repeats_type:co[this.repeatsType],max_repeats:this.maxRepeats,service_call_schema:this.serviceCallSchema.config,predefined_selections:this.predefinedSelections,variables:Object.fromEntries(Object.entries(null!==(e=this.variables)&&void 0!==e?e:{}).map((([e,t])=>[e.substr(2,e.length-4),t])))}}_applyTemplateIfPossible(e,t,a){if(!t.template||!so.isValidModeTemplate(e,t.template))return;const i=so.getModeTemplate(e,t.template);!t.name&&i.name&&(this.name=en(i.name,a)),!t.icon&&i.icon&&(this.icon=i.icon),!t.selection_type&&i.selection_type&&(this.selectionType=ro[i.selection_type]),!t.max_selections&&i.max_selections&&(this.maxSelections=i.max_selections),void 0===t.coordinates_rounding&&void 0!==i.coordinates_rounding&&(this.coordinatesRounding=i.coordinates_rounding),void 0===t.run_immediately&&void 0!==i.run_immediately&&(this.runImmediately=i.run_immediately),!t.repeats_type&&i.repeats_type&&(this.repeatsType=co[i.repeats_type]),!t.max_repeats&&i.max_repeats&&(this.maxRepeats=i.max_repeats),!t.service_call_schema&&i.service_call_schema&&(this.serviceCallSchema=new vo(i.service_call_schema))}_applyData(e,t,a,i){return this.serviceCallSchema.apply(e,t,a,Object.assign(Object.assign({},this.variables),i))}}ho.PREDEFINED_SELECTION_TYPES=[ro.PREDEFINED_RECTANGLE,ro.ROOM,ro.PREDEFINED_POINT];class fo{constructor(e,t){this.x=e,this.y=t}}function bo(e){e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()}function yo(e,t){const a=e.indexOf(t,0);return a>-1&&e.splice(a,1),a}function ko(e,t){var a,i,n,o,r;const s=new Set;return e.entity&&s.add(e.entity),e.map_source.camera&&s.add(e.map_source.camera),e.calibration_source.entity&&s.add(e.calibration_source.entity),(null!==(a=e.conditions)&&void 0!==a?a:[]).map((e=>null==e?void 0:e.entity)).forEach((e=>{e&&s.add(e)})),(null!==(i=e.icons)&&void 0!==i?i:[]).filter((e=>e.conditions)).flatMap((e=>e.conditions)).map((e=>null==e?void 0:e.entity)).forEach((e=>{e&&s.add(e)})),(null!==(n=e.tiles)&&void 0!==n?n:[]).forEach((e=>{e.entity&&s.add(e.entity)})),(null!==(o=e.tiles)&&void 0!==o?o:[]).filter((e=>e.conditions)).flatMap((e=>e.conditions)).map((e=>null==e?void 0:e.entity)).forEach((e=>{e&&s.add(e)})),(null!==(r=e.map_modes)&&void 0!==r?r:[]).map((a=>{var i;return new ho(null!==(i=e.vacuum_platform)&&void 0!==i?i:"default",a,t)})).forEach((e=>function(e){const t=new Set;switch(e.selectionType){case ro.PREDEFINED_RECTANGLE:e.predefinedSelections.map((e=>e)).filter((e=>"string"==typeof e.zones)).forEach((e=>t.add(e.zones.split(".attributes.")[0])));break;case ro.PREDEFINED_POINT:e.predefinedSelections.map((e=>e)).filter((e=>"string"==typeof e.position)).forEach((e=>t.add(e.position.split(".attributes.")[0])))}return t}(e).forEach((e=>s.add(e))))),s}function Ao(e,t,a){var i;return(null!==(i=e.conditions)&&void 0!==i?i:[]).every((e=>function(e,t,a){let i="";return e.internal_variable&&e.internal_variable in t?i=t[e.internal_variable]:e.entity&&(i=e.attribute?a.states[e.entity].attributes[e.attribute]:a.states[e.entity].state),e.value?i==e.value:!!e.value_not&&i!=e.value_not}(e,t,a)))}function xo(e,t){return e?t():null}function Eo(e,t){return a=>{e.hass&&t&&a.detail.action&&function(e,t,a,i){var n;"double_tap"===i&&a.double_tap_action?n=a.double_tap_action:"hold"===i&&a.hold_action?n=a.hold_action:"tap"===i&&a.tap_action&&(n=a.tap_action),me(e,t,a,n)}(e,e.hass,t,a.detail.action)}}function wo(e,t,a){let i,n;return e instanceof MouseEvent&&(i=e.offsetX,n=e.offsetY),window.TouchEvent&&e instanceof TouchEvent&&e.touches&&(i=(e.touches[0].clientX-t.getBoundingClientRect().x)/a,n=(e.touches[0].clientY-t.getBoundingClientRect().y)/a),new fo(i,n)}async function zo(e){await new Promise((t=>setTimeout((()=>t()),e)))}function Po(e){const t=document.createElement("textarea");t.style.position="fixed",t.style.left="0",t.style.top="0",t.style.opacity="0",t.value=e,document.body.appendChild(t),t.focus(),t.select(),document.execCommand("copy"),document.body.removeChild(t)}function So(e,t){for(const[a,i]of Object.entries(e))"object"==typeof i?So(i,t):"string"==typeof i&&(e[a]=t(i))}function Mo(e,t){var a;const i=Object.fromEntries(Object.entries(null!=t?t:{}).map((([e,t])=>[`[[${e}]]`,t]))),n=e=>e in i?i[e]:null;return null!==(a=n(e))&&void 0!==a?a:function(e,t,a){let i=e;if(Object.keys(t).forEach((e=>{let t=a(e);"object"==typeof t&&(t=JSON.stringify(t)),i=i.replaceAll(e,`${t}`)})),i.endsWith(po.JSONIFY))return JSON.parse(i.replace(po.JSONIFY,""));return i}(e,i,n)}function To(e,...t){const a=JSON.parse(JSON.stringify(e));let i={};for(const e of t)i=Object.assign(Object.assign({},e),i);return So(a,(e=>Mo(e,i))),a}class Co{static render(e){return N`
|
||
<div id="${e}-toast" class="toast">
|
||
<div id="${e}-toast-icon" class="toast-icon">
|
||
<ha-icon icon="mdi:check" style="vertical-align: center"></ha-icon>
|
||
</div>
|
||
<div id="${e}-toast-text" class="toast-text">Success!</div>
|
||
</div>
|
||
`}static showToast(e,t,a,i,n,o,r="",s=2e3){const l=null==e?void 0:e.getElementById(`${a}-toast`),c=null==e?void 0:e.getElementById(`${a}-toast-text`),d=null==e?void 0:e.getElementById(`${a}-toast-icon`);l&&c&&d&&(l.className+=" show",c.innerText=t(i)+(r?`\n${r}`:""),d.children[0].setAttribute("icon",n),d.style.color=o?"var(--map-card-internal-toast-successful-icon-color)":"var(--map-card-internal-toast-unsuccessful-icon-color)",zo(s).then((()=>l.className=l.className.replace(" show",""))))}static get styles(){return o`
|
||
.toast {
|
||
visibility: hidden;
|
||
display: inline-flex;
|
||
width: calc(100% - 60px);
|
||
min-height: 50px;
|
||
color: var(--primary-text-color);
|
||
text-align: center;
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
padding-inline-start: 30px;
|
||
position: absolute;
|
||
z-index: 1;
|
||
bottom: 30px;
|
||
font-size: 17px;
|
||
}
|
||
|
||
.toast-icon {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
width: 50px;
|
||
background-color: var(--map-card-internal-primary-color);
|
||
border-start-start-radius: var(--map-card-internal-small-radius);
|
||
border-end-start-radius: var(--map-card-internal-small-radius);
|
||
color: #0f0;
|
||
}
|
||
|
||
.toast-text {
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
align-items: center;
|
||
padding-left: 10px;
|
||
padding-right: 10px;
|
||
-moz-box-sizing: border-box;
|
||
-webkit-box-sizing: border-box;
|
||
background-color: var(--paper-listbox-background-color);
|
||
color: var(--primary-text-color);
|
||
vertical-align: middle;
|
||
overflow: hidden;
|
||
border-color: var(--map-card-internal-primary-color);
|
||
border-style: solid;
|
||
border-width: 1px;
|
||
border-start-end-radius: var(--map-card-internal-small-radius);
|
||
border-end-end-radius: var(--map-card-internal-small-radius);
|
||
}
|
||
|
||
.toast.show {
|
||
visibility: visible;
|
||
-webkit-animation: fadein 0.5s, stay 1s 1s, fadeout 0.5s 1.5s;
|
||
animation: fadein 0.5s, stay 1s 1s, fadeout 0.5s 1.5s;
|
||
}
|
||
|
||
@-webkit-keyframes fadein {
|
||
from {
|
||
bottom: 0;
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
bottom: 30px;
|
||
opacity: 1;
|
||
}
|
||
}
|
||
@keyframes fadein {
|
||
from {
|
||
bottom: 0;
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
bottom: 30px;
|
||
opacity: 1;
|
||
}
|
||
}
|
||
@-webkit-keyframes stay {
|
||
}
|
||
@keyframes stay {
|
||
}
|
||
@-webkit-keyframes fadeout {
|
||
from {
|
||
bottom: 30px;
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
bottom: 60px;
|
||
opacity: 0;
|
||
}
|
||
}
|
||
@keyframes fadeout {
|
||
from {
|
||
bottom: 30px;
|
||
opacity: 1;
|
||
}
|
||
to {
|
||
bottom: 60px;
|
||
opacity: 0;
|
||
}
|
||
}
|
||
`}}let Oo=_o=class extends Q{constructor(){super(),this._initialized=!1,this._handleNewSelection=this._handleNewSelection.bind(this),this._handleAutogeneratedConfig=this._handleAutogeneratedConfig.bind(this),this._handleRoomConfig=this._handleRoomConfig.bind(this),this._handleServiceCall=this._handleServiceCall.bind(this)}get _title(){var e;return(null===(e=this._config)||void 0===e?void 0:e.title)||""}get _entity(){var e;return(null===(e=this._config)||void 0===e?void 0:e.entity)||""}get _vacuum_platform(){var e;return(null===(e=this._config)||void 0===e?void 0:e.vacuum_platform)||""}get _camera(){var e,t;return(null===(t=null===(e=this._config)||void 0===e?void 0:e.map_source)||void 0===t?void 0:t.camera)||""}get _map_locked(){var e;return(null===(e=this._config)||void 0===e?void 0:e.map_locked)||!1}get _two_finger_pan(){var e;return(null===(e=this._config)||void 0===e?void 0:e.two_finger_pan)||!1}static _copyServiceCall(){window.dispatchEvent(new Event("map-card-service-call-get"))}static _setStaticConfig(){window.dispatchEvent(new Event("map-card-autogenerated-config-get"))}static _generateRoomsConfig(){window.dispatchEvent(new Event("map-card-room-config-get"))}setConfig(e){this._config=e,this.loadCardHelpers()}connectedCallback(){super.connectedCallback(),window.addEventListener("map-card-selection-changed",this._handleNewSelection),window.addEventListener("map-card-autogenerated-config",this._handleAutogeneratedConfig),window.addEventListener("map-card-room-config",this._handleRoomConfig),window.addEventListener("map-card-service-call",this._handleServiceCall)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("map-card-selection-changed",this._handleNewSelection),window.removeEventListener("map-card-autogenerated-config",this._handleAutogeneratedConfig),window.removeEventListener("map-card-room-config",this._handleRoomConfig),window.removeEventListener("map-card-service-call",this._handleServiceCall)}shouldUpdate(){return this._initialized||this._initialize(),!0}render(){var e,t,a,i,n;if(!this.hass||!this._helpers)return N``;this._helpers.importMoreInfoControl("climate");const o=Object.keys(this.hass.states),r=o.filter((e=>"camera"===e.substr(0,e.indexOf(".")))),s=o.filter((e=>"vacuum"===e.substr(0,e.indexOf(".")))),l=so.getPlatforms(),c=void 0===(null===(t=null===(e=this.hass.states[this._camera])||void 0===e?void 0:e.attributes)||void 0===t?void 0:t.rooms)||void 0===so.getRoomsTemplate(this._vacuum_platform);return N`
|
||
<div class="card-config">
|
||
<div class="description">
|
||
${this._localize("editor.description.before_link")}<a
|
||
target="_blank"
|
||
href="https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor"
|
||
>${this._localize("editor.description.link_text")}</a
|
||
>${this._localize("editor.description.after_link")}
|
||
</div>
|
||
<div class="values">
|
||
<ha-textfield
|
||
label="${this._localize("editor.label.name")}"
|
||
.value="${this._title}"
|
||
.configValue="${"title"}"
|
||
@input="${this._titleChanged}"></ha-textfield>
|
||
</div>
|
||
<div class="values">
|
||
<ha-select
|
||
naturalMenuWidth
|
||
fixedMenuPosition
|
||
label="${this._localize("editor.label.entity")}"
|
||
@selected="${this._entityChanged}"
|
||
@closed="${e=>e.stopPropagation()}"
|
||
.configValue="${"entity"}"
|
||
.value="${this._entity}">
|
||
${s.map((e=>N` <mwc-list-item .value="${e}">${e}</mwc-list-item> `))}
|
||
</ha-select>
|
||
</div>
|
||
<div class="values">
|
||
<ha-select
|
||
naturalMenuWidth
|
||
fixedMenuPosition
|
||
label="${this._localize("editor.label.vacuum_platform")}"
|
||
@selected="${this._entityChanged}"
|
||
@closed="${e=>e.stopPropagation()}"
|
||
.configValue="${"vacuum_platform"}"
|
||
.value="${this._vacuum_platform}">
|
||
${l.map((e=>N` <mwc-list-item .value="${e}">${e}</mwc-list-item> `))}
|
||
</ha-select>
|
||
<p>
|
||
<a
|
||
href="${so.getPlatformsDocumentationUrl(this._vacuum_platform)}"
|
||
target="_blank">
|
||
${this._localize(["editor.label.platforms_documentation","{0}",null!==(i=null===(a=this._config)||void 0===a?void 0:a.vacuum_platform)&&void 0!==i?i:so.XIAOMI_MIIO_PLATFORM])}
|
||
</a>
|
||
</p>
|
||
</div>
|
||
<div class="values">
|
||
<ha-select
|
||
naturalMenuWidth
|
||
fixedMenuPosition
|
||
label="${this._localize("editor.label.camera")}"
|
||
@selected="${this._cameraChanged}"
|
||
@closed="${e=>e.stopPropagation()}"
|
||
.configValue="${"camera"}"
|
||
.value="${this._camera}">
|
||
${r.map((e=>N` <mwc-list-item .value="${e}">${e}</mwc-list-item> `))}
|
||
</ha-select>
|
||
</div>
|
||
<div class="values">
|
||
<ha-formfield class="switch-wrapper" .label="${this._localize("editor.label.map_locked")}">
|
||
<ha-switch
|
||
.checked="${this._map_locked}"
|
||
.configValue="${"map_locked"}"
|
||
@change="${this._valueChanged}"></ha-switch>
|
||
</ha-formfield>
|
||
</div>
|
||
<div class="values">
|
||
<ha-formfield class="switch-wrapper" .label="${this._localize("editor.label.two_finger_pan")}">
|
||
<ha-switch
|
||
.checked="${this._two_finger_pan}"
|
||
.configValue="${"two_finger_pan"}"
|
||
@change="${this._valueChanged}"></ha-switch>
|
||
</ha-formfield>
|
||
</div>
|
||
<div class="values separated selection-controls-wrapper">
|
||
<p>${this._localize("editor.label.selection")}</p>
|
||
<code class="selection-text">${null!==(n=this._lastSelection)&&void 0!==n?n:"[]"}</code>
|
||
<mwc-button @click="${()=>this._copySelection()}">
|
||
${this._localize("editor.label.copy")}
|
||
</mwc-button>
|
||
</div>
|
||
<div class="values config-buttons-wrapper">
|
||
<mwc-button @click="${()=>_o._setStaticConfig()}">
|
||
${this._localize("editor.label.set_static_config")}
|
||
</mwc-button>
|
||
<mwc-button
|
||
@click="${()=>_o._generateRoomsConfig()}"
|
||
.disabled=${c}>
|
||
${this._localize("editor.label.generate_rooms_config")}
|
||
</mwc-button>
|
||
<mwc-button @click="${()=>_o._copyServiceCall()}">
|
||
${this._localize("editor.label.copy_service_call")}
|
||
</mwc-button>
|
||
</div>
|
||
${Co.render("editor")}
|
||
</div>
|
||
`}_initialize(){void 0!==this.hass&&void 0!==this._config&&void 0!==this._helpers&&(this._initialized=!0)}async loadCardHelpers(){this._helpers=await window.loadCardHelpers()}_handleNewSelection(e){this._lastSelection=JSON.stringify(e.selection).replaceAll(",",", ")}_handleAutogeneratedConfig(e){const t=e.presetConfig;this._showToast("editor.label.config_set","mdi:check",!0),this._setConfig(t)}_handleRoomConfig(e){var t,a,i,n,o;const r=so.getRoomsTemplate(this._vacuum_platform),s=e.roomConfig;if(!s)return void this._showToast("editor.label.config_set_failed","mdi:close",!1);const l=null!==(a=null===(t=this._config)||void 0===t?void 0:t.map_modes)&&void 0!==a?a:[];0!==l.length&&(null!==(i=s.modeIndex)&&void 0!==i?i:-1)>=0?l[null!==(n=s.modeIndex)&&void 0!==n?n:-1]=Object.assign(Object.assign({},l[null!==(o=s.modeIndex)&&void 0!==o?o:-1]),{predefined_selections:s.rooms}):(0===l.length&&l.push(...so.generateDefaultModes(this._vacuum_platform)),r&&l.push({template:r,predefined_selections:s.rooms})),this._config&&this._setConfig(Object.assign(Object.assign({},this._config),{map_modes:l})),this._showToast("editor.label.config_set","mdi:check",!0)}_handleServiceCall(e){const t=e.serviceCall;Po(null!=t?t:""),this._showToast("editor.label.copied","mdi:content-copy",!0)}_copySelection(){var e;Po(null!==(e=this._lastSelection)&&void 0!==e?e:[]),this._showToast("editor.label.copied","mdi:content-copy",!0)}_showToast(e,t,a,i=""){Co.showToast(this.shadowRoot,(e=>this._localize(e)),"editor",e,t,a,i)}_entityChanged(e){this._valueChanged(e)}_cameraChanged(e){if(!this._config||!this.hass)return;const t=e.target.value;if(this._camera===t)return;const a=Object.assign({},this._config);a.map_source={camera:t},a.calibration_source={camera:!0},this._config=a,ce(this,"config-changed",{config:this._config})}_titleChanged(e){this._valueChanged(e)}_valueChanged(e){if(!this._config||!this.hass)return;const t=e.target;if(this[`_${t.configValue}`]!==t.value){if(t.configValue)this._config=Object.assign(Object.assign({},this._config),{[t.configValue]:void 0!==t.checked?t.checked:t.value});else{const e=Object.assign({},this._config);delete e[t.configValue],this._config=e}ce(this,"config-changed",{config:this._config})}}_setConfig(e){this._config=Object.assign({},e),ce(this,"config-changed",{config:this._config})}_localize(e){return tn(e,this.hass)}static get styles(){return o`
|
||
.card-config {
|
||
position: relative;
|
||
--map-card-internal-toast-successful-icon-color: var(
|
||
--map-card-toast-successful-icon-color,
|
||
rgb(0, 255, 0)
|
||
);
|
||
--map-card-internal-toast-unsuccessful-icon-color: var(
|
||
--map-card-toast-unsuccessful-icon-color,
|
||
rgb(255, 0, 0)
|
||
);
|
||
--map-card-internal-small-radius: var(--map-card-small-radius, 18px);
|
||
--map-card-internal-primary-color: var(--map-card-primary-color, var(--slider-color));
|
||
}
|
||
|
||
.values {
|
||
padding-left: 16px;
|
||
margin: 8px;
|
||
display: grid;
|
||
}
|
||
|
||
.switch-wrapper {
|
||
padding: 8px;
|
||
}
|
||
|
||
.selection-controls-wrapper {
|
||
display: flex;
|
||
align-content: stretch;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.config-buttons-wrapper {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 20px;
|
||
}
|
||
|
||
.selection-text {
|
||
flex-grow: 1;
|
||
padding: 10px;
|
||
}
|
||
|
||
.separated {
|
||
border-top: solid 1px;
|
||
border-top-color: var(--primary-text-color);
|
||
}
|
||
|
||
${Co.styles}
|
||
`}};e([ie({attribute:!1})],Oo.prototype,"hass",void 0),e([ne()],Oo.prototype,"_config",void 0),e([ne()],Oo.prototype,"_helpers",void 0),e([ne()],Oo.prototype,"_lastSelection",void 0),Oo=_o=e([te("xiaomi-vacuum-map-card-editor")],Oo);const No="ontouchstart"in window||navigator.maxTouchPoints>0;class Ro extends HTMLElement{constructor(){super(),this.holdTime=500,this.held=!1,this.ripple=document.createElement("mwc-ripple")}connectedCallback(){Object.assign(this.style,{position:"absolute",width:No?"100px":"50px",height:No?"100px":"50px",transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:"999"}),this.appendChild(this.ripple),this.ripple.primary=!0,["touchcancel","mouseout","mouseup","touchmove","mousewheel","wheel","scroll"].forEach((e=>{document.addEventListener(e,(()=>{clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0}),{passive:!0})}))}bind(e,t){if(e.actionHandler)return;e.actionHandler=!0,e.addEventListener("contextmenu",(e=>{const t=e||window.event;return t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0,t.returnValue=!1,!1}));const a=e=>{let t,a;this.held=!1,e.touches?(t=e.touches[0].pageX,a=e.touches[0].pageY):(t=e.pageX,a=e.pageY),this.timer=window.setTimeout((()=>{this.startAnimation(t,a),this.held=!0}),this.holdTime)},i=a=>{a.preventDefault(),["touchend","touchcancel"].includes(a.type)&&void 0===this.timer||(clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0,this.held?ce(e,"action",{action:"hold"}):t.hasDoubleClick?"click"===a.type&&a.detail<2||!this.dblClickTimeout?this.dblClickTimeout=window.setTimeout((()=>{this.dblClickTimeout=void 0,ce(e,"action",{action:"tap"})}),250):(clearTimeout(this.dblClickTimeout),this.dblClickTimeout=void 0,ce(e,"action",{action:"double_tap"})):ce(e,"action",{action:"tap"}))};e.addEventListener("touchstart",a,{passive:!0}),e.addEventListener("touchend",i),e.addEventListener("touchcancel",i),e.addEventListener("mousedown",a,{passive:!0}),e.addEventListener("click",i),e.addEventListener("keyup",(e=>{13===e.keyCode&&i(e)}))}startAnimation(e,t){Object.assign(this.style,{left:`${e}px`,top:`${t}px`,display:null}),this.ripple.disabled=!1,this.ripple.active=!0,this.ripple.unbounded=!0}stopAnimation(){this.ripple.active=!1,this.ripple.disabled=!0,this.style.display="none"}}customElements.define("action-handler-xiaomi-vacuum-map-card",Ro);const jo=(e,t)=>{const a=(()=>{const e=document.body;if(e.querySelector("action-handler-xiaomi-vacuum-map-card"))return e.querySelector("action-handler-xiaomi-vacuum-map-card");const t=document.createElement("action-handler-xiaomi-vacuum-map-card");return e.appendChild(t),t})();a&&a.bind(e,t)},$o=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,a){this._$Ct=e,this._$AM=t,this._$Ci=a}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}{update(e,[t]){return jo(e.element,t),j}render(e){}});class Lo{constructor(e){this.id=-1,this.nativePointer=e,this.pageX=e.pageX,this.pageY=e.pageY,this.clientX=e.clientX,this.clientY=e.clientY,self.Touch&&e instanceof Touch?this.id=e.identifier:Io(e)&&(this.id=e.pointerId)}getCoalesced(){return"getCoalescedEvents"in this.nativePointer?this.nativePointer.getCoalescedEvents().map((e=>new Lo(e))):[this]}}const Io=e=>self.PointerEvent&&e instanceof PointerEvent,Do=()=>{};class Fo{constructor(e,{start:t=(()=>!0),move:a=Do,end:i=Do,rawUpdates:n=!1}={}){this._element=e,this.startPointers=[],this.currentPointers=[],this._pointerStart=e=>{if(0===e.button&&this._triggerPointerStart(new Lo(e),e))if(Io(e)){(e.target&&"setPointerCapture"in e.target?e.target:this._element).setPointerCapture(e.pointerId),this._element.addEventListener(this._rawUpdates?"pointerrawupdate":"pointermove",this._move),this._element.addEventListener("pointerup",this._pointerEnd),this._element.addEventListener("pointercancel",this._pointerEnd)}else window.addEventListener("mousemove",this._move),window.addEventListener("mouseup",this._pointerEnd)},this._touchStart=e=>{for(const t of Array.from(e.changedTouches))this._triggerPointerStart(new Lo(t),e)},this._move=e=>{const t=this.currentPointers.slice(),a="changedTouches"in e?Array.from(e.changedTouches).map((e=>new Lo(e))):[new Lo(e)],i=[];for(const e of a){const t=this.currentPointers.findIndex((t=>t.id===e.id));-1!==t&&(i.push(e),this.currentPointers[t]=e)}0!==i.length&&this._moveCallback(t,i,e)},this._triggerPointerEnd=(e,t)=>{const a=this.currentPointers.findIndex((t=>t.id===e.id));if(-1===a)return!1;this.currentPointers.splice(a,1),this.startPointers.splice(a,1);const i="touchcancel"===t.type||"pointercancel"===t.type;return this._endCallback(e,t,i),!0},this._pointerEnd=e=>{if(this._triggerPointerEnd(new Lo(e),e))if(Io(e)){if(this.currentPointers.length)return;this._element.removeEventListener(this._rawUpdates?"pointerrawupdate":"pointermove",this._move),this._element.removeEventListener("pointerup",this._pointerEnd),this._element.removeEventListener("pointercancel",this._pointerEnd)}else window.removeEventListener("mousemove",this._move),window.removeEventListener("mouseup",this._pointerEnd)},this._touchEnd=e=>{for(const t of Array.from(e.changedTouches))this._triggerPointerEnd(new Lo(t),e)},this._startCallback=t,this._moveCallback=a,this._endCallback=i,this._rawUpdates=n&&"onpointerrawupdate"in window,self.PointerEvent?this._element.addEventListener("pointerdown",this._pointerStart):(this._element.addEventListener("mousedown",this._pointerStart),this._element.addEventListener("touchstart",this._touchStart),this._element.addEventListener("touchmove",this._move),this._element.addEventListener("touchend",this._touchEnd),this._element.addEventListener("touchcancel",this._touchEnd))}stop(){this._element.removeEventListener("pointerdown",this._pointerStart),this._element.removeEventListener("mousedown",this._pointerStart),this._element.removeEventListener("touchstart",this._touchStart),this._element.removeEventListener("touchmove",this._move),this._element.removeEventListener("touchend",this._touchEnd),this._element.removeEventListener("touchcancel",this._touchEnd),this._element.removeEventListener(this._rawUpdates?"pointerrawupdate":"pointermove",this._move),this._element.removeEventListener("pointerup",this._pointerEnd),this._element.removeEventListener("pointercancel",this._pointerEnd),window.removeEventListener("mousemove",this._move),window.removeEventListener("mouseup",this._pointerEnd)}_triggerPointerStart(e,t){return!!this._startCallback(e,t)&&(this.currentPointers.push(e),this.startPointers.push(e),!0)}}function Vo(e,t){return t?Math.sqrt((t.clientX-e.clientX)**2+(t.clientY-e.clientY)**2):0}function Uo(e,t){return t?{clientX:(e.clientX+t.clientX)/2,clientY:(e.clientY+t.clientY)/2}:e}function Ho(e,t){return"number"==typeof e?e:e.trimRight().endsWith("%")?t*parseFloat(e)/100:parseFloat(e)}let Xo;function Ko(){return Xo||(Xo=document.createElementNS("http://www.w3.org/2000/svg","svg"))}function qo(){return Ko().createSVGMatrix()}function Go(){return Ko().createSVGPoint()}class Zo extends HTMLElement{constructor(){super(),this._transform=qo(),this._enablePan=!0,this._locked=!1,this._twoFingerPan=!1,new MutationObserver((()=>this._stageElChange())).observe(this,{childList:!0});const e=new Fo(this,{start:(t,a)=>!(a.target.classList.contains("draggable")&&e.currentPointers.length<2)&&(!(2===e.currentPointers.length||!this._positioningEl||this.locked)&&((this.enablePan||1==e.currentPointers.length||a instanceof PointerEvent&&"mouse"==a.pointerType)&&(this.enablePan=!0),!0)),move:t=>{this.enablePan&&this._onPointerMove(t,e.currentPointers)},end:(t,a,i)=>(this.twoFingerPan&&1==e.currentPointers.length&&(this.enablePan=!1),bo(a),!1)});this.addEventListener("wheel",(e=>this._onWheel(e)))}static get observedAttributes(){return["min-scale","max-scale","no-default-pan","two-finger-pan","locked"]}attributeChangedCallback(e,t,a){"min-scale"===e&&this.scale<this.minScale&&this.setTransform({scale:this.minScale}),"max-scale"===e&&this.scale>this.maxScale&&this.setTransform({scale:this.maxScale}),"no-default-pan"===e&&(this.enablePan=!("1"==a||"true"==a)),"two-finger-pan"===e&&("1"==a||"true"==a?(this.twoFingerPan=!0,this.enablePan=!1):(this.twoFingerPan=!1,this.enablePan=!0)),"locked"===e&&(this.locked="1"==a||"true"==a)}get minScale(){const e=this.getAttribute("min-scale");if(!e)return.01;const t=parseFloat(e);return Number.isFinite(t)?Math.max(.01,t):.01}set minScale(e){e&&this.setAttribute("min-scale",String(e))}get maxScale(){const e=this.getAttribute("max-scale");if(!e)return 100;const t=parseFloat(e);return Number.isFinite(t)?Math.min(100,t):100}set maxScale(e){e&&this.setAttribute("max-scale",String(e))}set enablePan(e){this._enablePan=e,this._enablePan?this._enablePan&&"none"!=this.style.touchAction&&(this.style.touchAction="none"):this.style.touchAction="pan-y pan-x"}get enablePan(){return this._enablePan}set locked(e){this._locked=e}get locked(){return this._locked}set twoFingerPan(e){this._twoFingerPan=e}get twoFingerPan(){return this._twoFingerPan}connectedCallback(){this._stageElChange()}get x(){return this._transform.e}get y(){return this._transform.f}get scale(){return this._transform.a}scaleTo(e,t={}){let{originX:a=0,originY:i=0}=t;const{relativeTo:n="content",allowChangeEvent:o=!1}=t,r="content"===n?this._positioningEl:this;if(!r||!this._positioningEl)return void this.setTransform({scale:e,allowChangeEvent:o});const s=r.getBoundingClientRect();if(a=Ho(a,s.width),i=Ho(i,s.height),"content"===n)a+=this.x,i+=this.y;else{const e=this._positioningEl.getBoundingClientRect();a-=e.left,i-=e.top}this._applyChange({allowChangeEvent:o,originX:a,originY:i,scaleDiff:e/this.scale})}setTransform(e={}){const{scale:t=this.scale,allowChangeEvent:a=!1}=e;let{x:i=this.x,y:n=this.y}=e;if(!this._positioningEl)return void this._updateTransform(t,i,n,a);const o=this.getBoundingClientRect(),r=this._positioningEl.getBoundingClientRect();if(!o.width||!o.height)return void this._updateTransform(t,i,n,a);let s=Go();s.x=r.left-o.left,s.y=r.top-o.top;let l=Go();l.x=r.width+s.x,l.y=r.height+s.y;const c=qo().translate(i,n).scale(t).multiply(this._transform.inverse());s=s.matrixTransform(c),l=l.matrixTransform(c),s.x>o.width?i+=o.width-s.x:l.x<0&&(i+=-l.x),s.y>o.height?n+=o.height-s.y:l.y<0&&(n+=-l.y),this._updateTransform(t,i,n,a)}_updateTransform(e,t,a,i){if(!(e<this.minScale)&&!(e>this.maxScale)&&(e!==this.scale||t!==this.x||a!==this.y)&&(this._transform.e=t,this._transform.f=a,this._transform.d=this._transform.a=e,this.style.setProperty("--x",this.x+"px"),this.style.setProperty("--y",this.y+"px"),this.style.setProperty("--scale",this.scale+""),i)){const e=new Event("change",{bubbles:!0});this.dispatchEvent(e)}}_stageElChange(){this._positioningEl=void 0,0!==this.children.length&&(this._positioningEl=this.children[0],this.children.length>1&&console.warn("<pinch-zoom> must not have more than one child."),this.setTransform({allowChangeEvent:!0}))}_onWheel(e){if(!this._positioningEl||this.locked)return;e.preventDefault();const t=this._positioningEl.getBoundingClientRect();let{deltaY:a}=e;const{ctrlKey:i,deltaMode:n}=e;1===n&&(a*=15);const o=1-a/(i?100:300);this._applyChange({scaleDiff:o,originX:e.clientX-t.left,originY:e.clientY-t.top,allowChangeEvent:!0})}_onPointerMove(e,t){if(!this._positioningEl)return;const a=this._positioningEl.getBoundingClientRect(),i=Uo(e[0],e[1]),n=Uo(t[0],t[1]),o=i.clientX-a.left,r=i.clientY-a.top,s=Vo(e[0],e[1]),l=Vo(t[0],t[1]),c=s?l/s:1;this._applyChange({originX:o,originY:r,scaleDiff:c,panX:n.clientX-i.clientX,panY:n.clientY-i.clientY,allowChangeEvent:!0})}_applyChange(e={}){const{panX:t=0,panY:a=0,originX:i=0,originY:n=0,scaleDiff:o=1,allowChangeEvent:r=!1}=e,s=qo().translate(t,a).translate(i,n).translate(this.x,this.y).scale(o).translate(-i,-n).scale(this.scale);this.setTransform({allowChangeEvent:r,scale:s.a,x:s.e,y:s.f})}}customElements.define("pinch-zoom",Zo);class Bo{constructor(e){this._context=e}get variables(){return{}}static findTopLeft(e){const t=e.sort(((e,t)=>e[1]-t[1]))[0],a=e.indexOf(t),i=e[(a+1)%4],n=e[(a+3)%4],o=Bo.calcAngle(t,i)<Bo.calcAngle(t,n)?i:n;return o[0]<t[0]?o:t}static calcAngle(e,t){let a=Math.atan2(t[1]-e[1],t[0]-e[0]);return a>Math.PI/2&&(a=Math.PI-a),a}static _reverse([e,t,a,i]){return[e,i,a,t]}scaled(e){return e/this._context.scale()}scaledCss(e){return parseFloat(this._context.cssEvaluator(e))/this._context.scale()}realScaled(e){return e/this._context.realScale()}realScaled2(e){return e*this._context.realScale()}realScaled2Point(e){return[this.realScaled2(e[0]),this.realScaled2(e[1])]}realScaledPoint(e){return[this.realScaled(e[0]),this.realScaled(e[1])]}update(){this._context.update(),this._context.selectionChanged()}localize(e){return this._context.localize(e)}getMousePosition(e){return this._context.mousePositionCalculator(e)}vacuumToRealMap(e,t){var a;const i=null===(a=this._context.coordinatesConverter())||void 0===a?void 0:a.vacuumToMap(e,t);if(!i)throw Error("Missing calibration");return i}vacuumToScaledMap(e,t){return this.realScaled2Point(this.vacuumToRealMap(e,t))}scaledMapToVacuum(e,t){const[a,i]=this.realScaledPoint([e,t]);return this.realMapToVacuum(a,i)}realMapToVacuum(e,t){var a;const i=null===(a=this._context.coordinatesConverter())||void 0===a?void 0:a.mapToVacuum(e,t);if(!i)throw Error("Missing calibration");return this._context.roundMap(i)}renderIcon(e,t,a){const i=e?this.vacuumToScaledMap(e.x,e.y):[];return R`${xo(null!=e&&i.length>0,(()=>R`
|
||
<foreignObject class="icon-foreign-object"
|
||
style="--x-icon: ${i[0]}px; --y-icon: ${i[1]}px;"
|
||
x="${i[0]}px" y="${i[1]}px" width="36px" height="36px">
|
||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||
<div class="map-icon-wrapper ${a} clickable" @click="${t}" >
|
||
<ha-icon icon="${null==e?void 0:e.name}" style="background: transparent;"></ha-icon>
|
||
</div>
|
||
</body>
|
||
</foreignObject>
|
||
`))}`}renderLabel(e,t){const a=e?this.vacuumToScaledMap(e.x,e.y):[];return R`${xo(null!=e&&a.length>0,(()=>{var i,n;return R`
|
||
<text class="label-text ${t}"
|
||
x="${a[0]+this.scaled(null!==(i=null==e?void 0:e.offset_x)&&void 0!==i?i:0)}px"
|
||
y="${a[1]+this.scaled(null!==(n=null==e?void 0:e.offset_y)&&void 0!==n?n:0)}px">
|
||
${null==e?void 0:e.text}
|
||
</text>
|
||
`}))}`}vacuumToMapRect([e,t,a,i]){const n=[e,t],o=[a,t],r=[a,i],s=[e,i],l=this.vacuumToScaledMap(e,t),c=this.vacuumToScaledMap(a,t),d=this.vacuumToScaledMap(a,i),m=this.vacuumToScaledMap(e,i),u=[n,o,r,s,n,o,r,s],p=[l,c,d,m,l,c,d,m],_=[l,c,d,m],g=p.indexOf(Bo.findTopLeft(_)),v=p.slice(g,g+4),h=this._isCounterClockwise(v),f=u.slice(g,g+4);return h?[Bo._reverse(v),Bo._reverse(f)]:[v,f]}_isCounterClockwise(e){let t=0;return e.forEach(((a,i)=>t+=(e[(i+1)%4][0]-a[0])*(e[(i+1)%4][1]+a[1]))),t<0}static get styles(){return o`
|
||
.icon-foreign-object {
|
||
overflow: visible;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.map-icon-wrapper {
|
||
position: center;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
pointer-events: auto;
|
||
}
|
||
`}}var Yo;!function(e){e[e.NONE=0]="NONE",e[e.RESIZE=1]="RESIZE",e[e.MOVE=2]="MOVE"}(Yo||(Yo={}));class Jo extends Bo{constructor(e,t,a,i,n,o){super(o),this._id=n,this._dragMode=Yo.NONE,this._vacRect=this._toVacuumFromDimensions(e,t,a,i),this._vacRectSnapshot=this._vacRect}static _toPoints(e){const t=e.filter((e=>!isNaN(e[0])&&!isNaN(e[1]))).map((e=>e.join(", "))).join(" ");return 3==t.length&&console.error(`Points: ${t}`),t}render(){const e=this._vacRect,t=this.vacuumToMapRect(e)[0],a=t[0],i=t[2],n=t[3],o=Jo.calcAngle(t[0],t[3]);return R`
|
||
<g class="manual-rectangle-wrapper ${this.isSelected()?"selected":""}"
|
||
style="--x-resize:${i[0]}px;
|
||
--y-resize:${i[1]}px;
|
||
--x-delete:${n[0]}px;
|
||
--y-delete:${n[1]}px;
|
||
--x-description:${a[0]}px;
|
||
--y-description:${a[1]}px;
|
||
--angle-description: ${o}rad;">
|
||
<polygon class="manual-rectangle draggable movable"
|
||
@mousedown="${e=>this._startDrag(e)}"
|
||
@mousemove="${e=>this._drag(e)}"
|
||
@mouseup="${e=>this._endDrag(e)}"
|
||
@touchstart="${e=>this._startDrag(e)}"
|
||
@touchmove="${e=>this._drag(e)}"
|
||
@touchend="${e=>this._endDrag(e)}"
|
||
@touchleave="${e=>this._endDrag(e)}"
|
||
@touchcancel="${e=>this._endDrag(e)}"
|
||
points="${Jo._toPoints(t)}">
|
||
</polygon>
|
||
<g class="manual-rectangle-description">
|
||
<text>
|
||
${this._id} ${this._getDimensions()}
|
||
</text>
|
||
</g>
|
||
<circle class="manual-rectangle-delete-circle clickable"
|
||
@mouseup="${e=>this._delete(e)}"></circle>
|
||
<path class="manual-rectangle-delete-icon"
|
||
d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z">
|
||
</path>
|
||
<circle class="manual-rectangle-resize-circle draggable resizer"
|
||
@mousedown="${e=>this._startDrag(e)}"
|
||
@mousemove="${e=>this._drag(e)}"
|
||
@mouseup="${e=>this._endDrag(e)}"
|
||
@touchstart="${e=>this._startDrag(e)}"
|
||
@touchmove="${e=>this._drag(e)}"
|
||
@touchend="${e=>this._endDrag(e)}"
|
||
@touchleave="${e=>this._endDrag(e)}"
|
||
@touchcancel="${e=>this._endDrag(e)}">
|
||
</circle>
|
||
<path class="manual-rectangle-resize-icon"
|
||
d="M13,21H21V13H19V17.59L6.41,5H11V3H3V11H5V6.41L17.59,19H13V21Z">
|
||
</path>
|
||
</g>
|
||
`}isSelected(){return null!=this._selectedElement}externalDrag(e){this._drag(e)}toVacuum(e=null){const[t,a,i,n]=this._vacRect,o=[Math.min(t,i),Math.min(a,n),Math.max(t,i),Math.max(a,n)];return null!=e?[...o,e]:o}_getDimensions(){const[e,t,a,i]=this.toVacuum(),n=Math.abs(a-e),o=Math.abs(i-t),r=this._context.roundingEnabled()?1e3:1,s=e=>(e/r).toFixed(1);return`${s(n)}${this.localize("unit.meter_shortcut")} x ${s(o)}${this.localize("unit.meter_shortcut")}`}_startDrag(e){var t;if(window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1)return;if(!e.target.classList.contains("draggable"))return;if(!(null===(t=e.target.parentElement)||void 0===t?void 0:t.classList.contains("manual-rectangle-wrapper")))return;if(!e.target.parentElement)return;bo(e),this._selectedTarget=e.target;const a=e.target;a.classList.contains("movable")?this._dragMode=Yo.MOVE:a.classList.contains("resizer")?this._dragMode=Yo.RESIZE:this._dragMode=Yo.NONE,this._selectedElement=e.target.parentElement,this._vacRectSnapshot=[...this._vacRect];const i=this.getMousePosition(e);this._startPointSnapshot=this.scaledMapToVacuum(i.x,i.y),this.update()}_drag(e){if(!(window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1)&&this._selectedElement){bo(e);const t=this.getMousePosition(e);if(t){const e=this.scaledMapToVacuum(t.x,t.y),a=e[0]-this._startPointSnapshot[0],i=e[1]-this._startPointSnapshot[1];switch(this._dragMode){case Yo.MOVE:this._vacRect=[this._vacRectSnapshot[0]+a,this._vacRectSnapshot[1]+i,this._vacRectSnapshot[2]+a,this._vacRectSnapshot[3]+i],this._setup(this.vacuumToMapRect(this._vacRect)[0]);break;case Yo.RESIZE:const e=this.vacuumToMapRect(this._vacRectSnapshot)[1][0],t=[...this._vacRect];e[0]===this._vacRectSnapshot[0]?this._vacRect[2]=this._vacRectSnapshot[2]+a:this._vacRect[0]=this._vacRectSnapshot[0]+a,e[1]===this._vacRectSnapshot[1]?this._vacRect[3]=this._vacRectSnapshot[3]+i:this._vacRect[1]=this._vacRectSnapshot[1]+i,Math.sign(this._vacRect[0]-this._vacRect[2])==Math.sign(t[0]-t[2])&&Math.sign(this._vacRect[1]-this._vacRect[3])==Math.sign(t[1]-t[3])||(this._vacRect=t),this._setup(this.vacuumToMapRect(this._vacRect)[0]);case Yo.NONE:}}}}_setup(e){var t,a,i,n,o,r,s,l,c,d,m,u,p,_,g,v,h;null===(i=null===(a=null===(t=this._selectedElement)||void 0===t?void 0:t.children)||void 0===a?void 0:a.item(0))||void 0===i||i.setAttribute("points",Jo._toPoints(e));const f=e[0],b=e[2],y=e[3],k=Jo.calcAngle(e[0],e[3]);null===(o=null===(n=this._selectedElement)||void 0===n?void 0:n.style)||void 0===o||o.setProperty("--x-resize",b[0]+"px"),null===(s=null===(r=this._selectedElement)||void 0===r?void 0:r.style)||void 0===s||s.setProperty("--y-resize",b[1]+"px"),null===(c=null===(l=this._selectedElement)||void 0===l?void 0:l.style)||void 0===c||c.setProperty("--x-delete",y[0]+"px"),null===(m=null===(d=this._selectedElement)||void 0===d?void 0:d.style)||void 0===m||m.setProperty("--y-delete",y[1]+"px"),null===(p=null===(u=this._selectedElement)||void 0===u?void 0:u.style)||void 0===p||p.setProperty("--x-description",f[0]+"px"),null===(g=null===(_=this._selectedElement)||void 0===_?void 0:_.style)||void 0===g||g.setProperty("--y-description",f[1]+"px"),null===(h=null===(v=this._selectedElement)||void 0===v?void 0:v.style)||void 0===h||h.setProperty("--angle-description",k+"rad")}_endDrag(e){bo(e),this._selectedElement=null,this._selectedTarget=null,this.update()}_delete(e){bo(e);const t=yo(this._context.selectedManualRectangles(),this);if(t>-1){for(let e=t;e<this._context.selectedManualRectangles().length;e++)this._context.selectedManualRectangles()[e]._id=(e+1).toString();de("selection"),this.update()}}_toVacuumFromDimensions(e,t,a,i){const n=this.realScaled(e),o=this.realScaled(t),r=this.realScaled(a),s=this.realScaled(i),l=this.realMapToVacuum(n,o),c=this.realMapToVacuum(n+r,o+s),d=[l[0],c[0]].sort(),m=[l[1],c[1]].sort();return[d[0],m[0],d[1],m[1]]}static get styles(){return o`
|
||
.resizer {
|
||
cursor: nwse-resize;
|
||
}
|
||
|
||
.movable {
|
||
cursor: move;
|
||
}
|
||
|
||
.manual-rectangle-wrapper {
|
||
}
|
||
|
||
.manual-rectangle-wrapper.selected {
|
||
}
|
||
|
||
.manual-rectangle {
|
||
stroke: var(--map-card-internal-manual-rectangle-line-color);
|
||
stroke-linejoin: round;
|
||
stroke-dasharray: calc(var(--map-card-internal-manual-rectangle-line-segment-line) / var(--map-scale)),
|
||
calc(var(--map-card-internal-manual-rectangle-line-segment-gap) / var(--map-scale));
|
||
fill: var(--map-card-internal-manual-rectangle-fill-color);
|
||
stroke-width: calc(var(--map-card-internal-manual-rectangle-line-width) / var(--map-scale));
|
||
}
|
||
|
||
.manual-rectangle-wrapper.selected > .manual-rectangle {
|
||
stroke: var(--map-card-internal-manual-rectangle-line-color-selected);
|
||
fill: var(--map-card-internal-manual-rectangle-fill-color-selected);
|
||
}
|
||
|
||
.manual-rectangle-description {
|
||
transform: translate(
|
||
calc(
|
||
var(--x-description) + var(--map-card-internal-manual-rectangle-description-offset-x) /
|
||
var(--map-scale)
|
||
),
|
||
calc(
|
||
var(--y-description) + var(--map-card-internal-manual-rectangle-description-offset-y) /
|
||
var(--map-scale)
|
||
)
|
||
)
|
||
rotate(var(--angle-description));
|
||
font-size: calc(var(--map-card-internal-manual-rectangle-description-font-size) / var(--map-scale));
|
||
fill: var(--map-card-internal-manual-rectangle-description-color);
|
||
background: transparent;
|
||
}
|
||
|
||
.manual-rectangle-delete-circle {
|
||
r: calc(var(--map-card-internal-manual-rectangle-delete-circle-radius) / var(--map-scale));
|
||
cx: var(--x-delete);
|
||
cy: var(--y-delete);
|
||
stroke: var(--map-card-internal-manual-rectangle-delete-circle-line-color);
|
||
fill: var(--map-card-internal-manual-rectangle-delete-circle-fill-color);
|
||
stroke-width: calc(
|
||
var(--map-card-internal-manual-rectangle-delete-circle-line-width) / var(--map-scale)
|
||
);
|
||
}
|
||
|
||
.manual-rectangle-delete-icon {
|
||
fill: var(--map-card-internal-manual-rectangle-delete-icon-color);
|
||
transform: translate(
|
||
calc(var(--x-delete) - 8.5px / var(--map-scale)),
|
||
calc(var(--y-delete) - 8.5px / var(--map-scale))
|
||
)
|
||
scale(calc(0.71 / var(--map-scale)));
|
||
pointer-events: none;
|
||
}
|
||
|
||
.manual-rectangle-wrapper.selected > .manual-rectangle-delete-circle {
|
||
stroke: var(--map-card-internal-manual-rectangle-delete-circle-line-color-selected);
|
||
fill: var(--map-card-internal-manual-rectangle-delete-circle-fill-color-selected);
|
||
opacity: 50%;
|
||
}
|
||
|
||
.manual-rectangle-wrapper.selected > .manual-rectangle-delete-icon {
|
||
fill: var(--map-card-internal-manual-rectangle-delete-icon-color-selected);
|
||
opacity: 50%;
|
||
}
|
||
|
||
.manual-rectangle-resize-circle {
|
||
r: calc(var(--map-card-internal-manual-rectangle-resize-circle-radius) / var(--map-scale));
|
||
cx: var(--x-resize);
|
||
cy: var(--y-resize);
|
||
stroke: var(--map-card-internal-manual-rectangle-resize-circle-line-color);
|
||
fill: var(--map-card-internal-manual-rectangle-resize-circle-fill-color);
|
||
stroke-width: calc(
|
||
var(--map-card-internal-manual-rectangle-resize-circle-line-width) / var(--map-scale)
|
||
);
|
||
}
|
||
|
||
.manual-rectangle-resize-icon {
|
||
fill: var(--map-card-internal-manual-rectangle-resize-icon-color);
|
||
transform: translate(
|
||
calc(var(--x-resize) - 8.5px / var(--map-scale)),
|
||
calc(var(--y-resize) - 8.5px / var(--map-scale))
|
||
)
|
||
scale(calc(0.71 / var(--map-scale)));
|
||
pointer-events: none;
|
||
}
|
||
|
||
.manual-rectangle-wrapper.selected > .manual-rectangle-resize-circle {
|
||
stroke: var(--map-card-internal-manual-rectangle-resize-circle-line-color-selected);
|
||
fill: var(--map-card-internal-manual-rectangle-resize-circle-fill-color-selected);
|
||
opacity: 50%;
|
||
}
|
||
|
||
.manual-rectangle-wrapper.selected > .manual-rectangle-resize-icon {
|
||
fill: var(--map-card-internal-manual-rectangle-resize-icon-color-selected);
|
||
opacity: 50%;
|
||
}
|
||
`}}class Wo{constructor(e,t,a,i,n,o,r,s,l,c,d,m,u,p,_){this.scale=e,this.realScale=t,this.mousePositionCalculator=a,this.update=i,this.selectionChanged=n,this.coordinatesConverter=o,this.selectedManualRectangles=r,this.selectedPredefinedRectangles=s,this.selectedRooms=l,this.selectedPredefinedPoint=c,this.roundingEnabled=d,this.maxSelections=m,this.cssEvaluator=u,this.runImmediately=p,this.localize=_}roundMap([e,t]){return this.roundingEnabled()?[Math.round(e),Math.round(t)]:[e,t]}}class Qo extends Bo{constructor(e,t,a){super(a),this._x=e,this._y=t}}class er extends Qo{constructor(e,t,a){super(e,t,a)}render(){return R`
|
||
<g class="manual-point-wrapper" style="--x-point:${this._x}px; --y-point:${this._y}px;">
|
||
<circle class="manual-point"></circle>
|
||
</g>
|
||
`}imageX(){return this.realScaled(this._x)}imageY(){return this.realScaled(this._y)}toVacuum(e=null){const[t,a]=this.realMapToVacuum(this.imageX(),this.imageY());return null===e?[t,a]:[t,a,e]}static get styles(){return o`
|
||
.manual-point-wrapper {
|
||
stroke: var(--map-card-internal-manual-point-line-color);
|
||
stroke-width: calc(var(--map-card-internal-manual-point-line-width) / var(--map-scale));
|
||
--radius: calc(var(--map-card-internal-manual-point-radius) / var(--map-scale));
|
||
}
|
||
|
||
.manual-point {
|
||
cx: var(--x-point);
|
||
cy: var(--y-point);
|
||
r: var(--radius);
|
||
fill: var(--map-card-internal-manual-point-fill-color);
|
||
}
|
||
`}}class tr extends Bo{constructor(e,t,a){super(a),this.x=e,this.y=t}imageX(){return this.realScaled(this.x)}imageY(){return this.realScaled(this.y)}renderMask(){return R`
|
||
<circle style="r: var(--radius)"
|
||
cx="${this.x}"
|
||
cy="${this.y}"
|
||
fill="black">
|
||
</circle>`}render(){return R`
|
||
<circle class="manual-path-point"
|
||
cx="${this.x}"
|
||
cy="${this.y}">
|
||
</circle>`}}class ar extends Bo{constructor(e,t){super(t),this.points=e}render(){if(0===this.points.length)return R``;const e=this.points.map((e=>e.x)),t=this.points.map((e=>e.y)),a=Math.max(...e),i=Math.min(...e),n=Math.max(...t),o=Math.min(...t);return R`
|
||
<g class="manual-path-wrapper">
|
||
<defs>
|
||
<mask id="manual-path-circles-filter">
|
||
<rect x="${i}" y="${o}" width="${a-i}" height="${n-o}"
|
||
fill="white"></rect>
|
||
${this.points.map((e=>e.renderMask()))}
|
||
</mask>
|
||
</defs>
|
||
${this.points.map((e=>e.render()))}
|
||
<polyline class="manual-path-line"
|
||
points="${this.points.map((e=>`${e.x},${e.y}`)).join(" ")}"
|
||
mask="url(#manual-path-circles-filter)">
|
||
</polyline>
|
||
</g>
|
||
`}toVacuum(e=null){return this.points.map((t=>{const[a,i]=this.realMapToVacuum(t.imageX(),t.imageY());return null===e?[a,i]:[a,i,e]}))}addPoint(e,t){this.points.push(new tr(e,t,this._context))}clear(){this.points=[]}removeLast(){this.points.pop()}static get styles(){return o`
|
||
.manual-path-wrapper {
|
||
--radius: calc(var(--map-card-internal-manual-path-point-radius) / var(--map-scale));
|
||
}
|
||
|
||
.manual-path-line {
|
||
fill: transparent;
|
||
stroke: var(--map-card-internal-manual-path-line-color);
|
||
stroke-width: calc(var(--map-card-internal-manual-path-line-width) / var(--map-scale));
|
||
}
|
||
|
||
.manual-path-point {
|
||
r: var(--radius);
|
||
stroke: var(--map-card-internal-manual-path-point-line-color);
|
||
fill: var(--map-card-internal-manual-path-point-fill-color);
|
||
stroke-width: calc(var(--map-card-internal-manual-path-point-line-width) / var(--map-scale));
|
||
}
|
||
`}}class ir extends Bo{constructor(e,t){var a;super(t),this._config=e,this._selected=!1,this._iconConfig=null!==(a=this._config.icon)&&void 0!==a?a:{x:this._config.position[0],y:this._config.position[1],name:"mdi:map-marker"}}get variables(){var e;return null!==(e=this._config.variables)&&void 0!==e?e:super.variables}static getFromEntities(e,t,a){return e.predefinedSelections.map((e=>e)).filter((e=>"string"==typeof e.position)).map((e=>e.position.split(".attributes."))).flatMap((e=>{const a=t.states[e[0]],i=2===e.length?a.attributes[e[1]]:a.state;let n;try{n=JSON.parse(i)}catch(e){n=i}return n})).map((e=>new ir({position:e,label:void 0,icon:{x:e[0],y:e[1],name:"mdi:map-marker"}},a())))}render(){return R`
|
||
<g class="predefined-point-wrapper ${this._selected?"selected":""}">
|
||
${this.renderIcon(this._iconConfig,(()=>this._click()),"predefined-point-icon-wrapper")}
|
||
${this.renderLabel(this._config.label,"predefined-point-label")}
|
||
</g>
|
||
`}toVacuum(e=null){return"string"==typeof this._config.position?[0,0]:null===e?this._config.position:[...this._config.position,e]}async _click(){if(this._selected=!this._selected,de("selection"),this._selected){const e=this._context.selectedPredefinedPoint().pop();void 0!==e&&(e._selected=!1),this._context.selectedPredefinedPoint().push(this)}else yo(this._context.selectedPredefinedPoint(),this);if(await this._context.runImmediately())return this._selected=!1,void yo(this._context.selectedPredefinedPoint(),this);this.update()}static get styles(){return o`
|
||
.predefined-point-wrapper {
|
||
}
|
||
|
||
.predefined-point-icon-wrapper {
|
||
x: var(--x-icon);
|
||
y: var(--y-icon);
|
||
height: var(--map-card-internal-predefined-point-icon-wrapper-size);
|
||
width: var(--map-card-internal-predefined-point-icon-wrapper-size);
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
transform-box: fill-box;
|
||
overflow: hidden;
|
||
transform: translate(
|
||
calc(var(--map-card-internal-predefined-point-icon-wrapper-size) / -2),
|
||
calc(var(--map-card-internal-predefined-point-icon-wrapper-size) / -2)
|
||
)
|
||
scale(calc(1 / var(--map-scale)));
|
||
background: var(--map-card-internal-predefined-point-icon-background-color);
|
||
color: var(--map-card-internal-predefined-point-icon-color);
|
||
--mdc-icon-size: var(--map-card-internal-predefined-point-icon-size);
|
||
transition: color var(--map-card-internal-transitions-duration) ease,
|
||
background var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.predefined-point-label {
|
||
text-anchor: middle;
|
||
dominant-baseline: middle;
|
||
pointer-events: none;
|
||
font-size: calc(var(--map-card-internal-predefined-point-label-font-size) / var(--map-scale));
|
||
fill: var(--map-card-internal-predefined-point-label-color);
|
||
transition: color var(--map-card-internal-transitions-duration) ease,
|
||
background var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.predefined-point-wrapper.selected > * > .predefined-point-icon-wrapper {
|
||
background: var(--map-card-internal-predefined-point-icon-background-color-selected);
|
||
color: var(--map-card-internal-predefined-point-icon-color-selected);
|
||
}
|
||
|
||
.predefined-point-wrapper.selected > .predefined-point-label {
|
||
fill: var(--map-card-internal-predefined-point-label-color-selected);
|
||
}
|
||
`}}class nr extends Bo{constructor(e,t){super(t),this._config=e,this._selected=!1}get variables(){var e;return null!==(e=this._config.variables)&&void 0!==e?e:super.variables}static getFromEntities(e,t,a){return e.predefinedSelections.map((e=>e)).filter((e=>"string"==typeof e.zones)).map((e=>e.zones.split(".attributes."))).flatMap((e=>{const a=t.states[e[0]],i=2===e.length?a.attributes[e[1]]:a.state;let n;try{n=JSON.parse(i)}catch(e){n=i}return n})).map((e=>new nr({zones:[e],label:void 0,icon:{x:(e[0]+e[2])/2,y:(e[1]+e[3])/2,name:"mdi:broom"}},a())))}render(){let e=[];"string"!=typeof this._config.zones&&(e=this._config.zones);const t=e.map((e=>this.vacuumToMapRect(e)[0]));return R`
|
||
<g class="predefined-rectangle-wrapper ${this._selected?"selected":""}">
|
||
${t.map((e=>R`
|
||
<polygon class="predefined-rectangle clickable"
|
||
points="${e.map((e=>e.join(", "))).join(" ")}"
|
||
@click="${async()=>this._click()}">
|
||
</polygon>
|
||
`))}
|
||
${this.renderIcon(this._config.icon,(()=>this._click()),"predefined-rectangle-icon-wrapper")}
|
||
${this.renderLabel(this._config.label,"predefined-rectangle-label")}
|
||
</g>
|
||
`}size(){return this._config.zones.length}toVacuum(e){return"string"==typeof this._config.zones?[]:null===e?this._config.zones:this._config.zones.map((t=>[...t,e]))}async _click(){if(!this._selected&&this._context.selectedPredefinedRectangles().map((e=>e.size())).reduce(((e,t)=>e+t),0)+this.size()>this._context.maxSelections())de("failure");else{if(this._selected=!this._selected,this._selected?this._context.selectedPredefinedRectangles().push(this):yo(this._context.selectedPredefinedRectangles(),this),await this._context.runImmediately())return this._selected=!1,void yo(this._context.selectedPredefinedRectangles(),this);de("selection"),this.update()}}static get styles(){return o`
|
||
.predefined-rectangle-wrapper {
|
||
}
|
||
|
||
.predefined-rectangle-wrapper.selected {
|
||
}
|
||
|
||
.predefined-rectangle {
|
||
width: var(--width);
|
||
height: var(--height);
|
||
x: var(--x);
|
||
y: var(--y);
|
||
stroke: var(--map-card-internal-predefined-rectangle-line-color);
|
||
stroke-linejoin: round;
|
||
stroke-dasharray: calc(
|
||
var(--map-card-internal-predefined-rectangle-line-segment-line) / var(--map-scale)
|
||
),
|
||
calc(var(--map-card-internal-predefined-rectangle-line-segment-gap) / var(--map-scale));
|
||
fill: var(--map-card-internal-predefined-rectangle-fill-color);
|
||
stroke-width: calc(var(--map-card-internal-predefined-rectangle-line-width) / var(--map-scale));
|
||
transition: stroke var(--map-card-internal-transitions-duration) ease,
|
||
fill var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.predefined-rectangle-icon-wrapper {
|
||
x: var(--x-icon);
|
||
y: var(--y-icon);
|
||
height: var(--map-card-internal-predefined-rectangle-icon-wrapper-size);
|
||
width: var(--map-card-internal-predefined-rectangle-icon-wrapper-size);
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
transform-box: fill-box;
|
||
transform: translate(
|
||
calc(var(--map-card-internal-predefined-rectangle-icon-wrapper-size) / -2),
|
||
calc(var(--map-card-internal-predefined-rectangle-icon-wrapper-size) / -2)
|
||
)
|
||
scale(calc(1 / var(--map-scale)));
|
||
background: var(--map-card-internal-predefined-rectangle-icon-background-color);
|
||
color: var(--map-card-internal-predefined-rectangle-icon-color);
|
||
--mdc-icon-size: var(--map-card-internal-predefined-rectangle-icon-size);
|
||
transition: color var(--map-card-internal-transitions-duration) ease,
|
||
background var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.predefined-rectangle-label {
|
||
text-anchor: middle;
|
||
dominant-baseline: middle;
|
||
pointer-events: none;
|
||
font-size: calc(var(--map-card-internal-predefined-rectangle-label-font-size) / var(--map-scale));
|
||
fill: var(--map-card-internal-predefined-rectangle-label-color);
|
||
transition: color var(--map-card-internal-transitions-duration) ease,
|
||
background var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.predefined-rectangle-wrapper.selected > .predefined-rectangle {
|
||
stroke: var(--map-card-internal-predefined-rectangle-line-color-selected);
|
||
fill: var(--map-card-internal-predefined-rectangle-fill-color-selected);
|
||
}
|
||
|
||
.predefined-rectangle-wrapper.selected > * > .predefined-rectangle-icon-wrapper {
|
||
background: var(--map-card-internal-predefined-rectangle-icon-background-color-selected);
|
||
color: var(--map-card-internal-predefined-rectangle-icon-color-selected);
|
||
}
|
||
|
||
.predefined-rectangle-wrapper.selected > .predefined-rectangle-label {
|
||
fill: var(--map-card-internal-predefined-rectangle-label-color-selected);
|
||
}
|
||
`}}class or extends Bo{constructor(e,t){super(t),this._config=e,this._selected=!1}get variables(){var e;return null!==(e=this._config.variables)&&void 0!==e?e:super.variables}render(){var e,t;const a=(null!==(t=null===(e=this._config)||void 0===e?void 0:e.outline)&&void 0!==t?t:[]).map((e=>this.vacuumToScaledMap(e[0],e[1])));return R`
|
||
<g class="room-wrapper ${this._selected?"selected":""}
|
||
room-${`${this._config.id}`.replace(" ","_")}-wrapper">
|
||
<polygon class="room-outline clickable"
|
||
points="${a.map((e=>e.join(", "))).join(" ")}"
|
||
@click="${async()=>this._click()}">
|
||
</polygon>
|
||
${this.renderIcon(this._config.icon,(()=>this._click()),"room-icon-wrapper")}
|
||
${this.renderLabel(this._config.label,"room-label")}
|
||
</g>
|
||
`}toVacuum(){return this._config.id}async _click(){if(!this._selected&&this._context.selectedRooms().length>=this._context.maxSelections())de("failure");else{if(this._selected=!this._selected,this._selected?this._context.selectedRooms().push(this):yo(this._context.selectedRooms(),this),this._context.selectionChanged(),await this._context.runImmediately())return this._selected=!1,yo(this._context.selectedRooms(),this),void this._context.selectionChanged();de("selection"),this.update()}}static get styles(){return o`
|
||
.room-wrapper {
|
||
}
|
||
|
||
.room-outline {
|
||
stroke: var(--map-card-internal-room-outline-line-color);
|
||
stroke-width: calc(var(--map-card-internal-room-outline-line-width) / var(--map-scale));
|
||
fill: var(--map-card-internal-room-outline-fill-color);
|
||
stroke-linejoin: round;
|
||
stroke-dasharray: calc(var(--map-card-internal-room-outline-line-segment-line) / var(--map-scale)),
|
||
calc(var(--map-card-internal-room-outline-line-segment-gap) / var(--map-scale));
|
||
transition: stroke var(--map-card-internal-transitions-duration) ease,
|
||
fill var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.room-icon-wrapper {
|
||
x: var(--x-icon);
|
||
y: var(--y-icon);
|
||
height: var(--map-card-internal-room-icon-wrapper-size);
|
||
width: var(--map-card-internal-room-icon-wrapper-size);
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
transform-box: fill-box;
|
||
overflow: hidden;
|
||
transform: translate(
|
||
calc(var(--map-card-internal-room-icon-wrapper-size) / -2),
|
||
calc(var(--map-card-internal-room-icon-wrapper-size) / -2)
|
||
)
|
||
scale(calc(1 / var(--map-scale)));
|
||
background: var(--map-card-internal-room-icon-background-color);
|
||
color: var(--map-card-internal-room-icon-color);
|
||
--mdc-icon-size: var(--map-card-internal-room-icon-size);
|
||
transition: color var(--map-card-internal-transitions-duration) ease,
|
||
background var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.room-label {
|
||
text-anchor: middle;
|
||
dominant-baseline: middle;
|
||
pointer-events: none;
|
||
font-size: calc(var(--map-card-internal-room-label-font-size) / var(--map-scale));
|
||
fill: var(--map-card-internal-room-label-color);
|
||
transition: color var(--map-card-internal-transitions-duration) ease,
|
||
background var(--map-card-internal-transitions-duration) ease;
|
||
}
|
||
|
||
.room-wrapper.selected > .room-outline {
|
||
stroke: var(--map-card-internal-room-outline-line-color-selected);
|
||
fill: var(--map-card-internal-room-outline-fill-color-selected);
|
||
}
|
||
|
||
.room-wrapper.selected > * > .room-icon-wrapper {
|
||
background: var(--map-card-internal-room-icon-background-color-selected);
|
||
color: var(--map-card-internal-room-icon-color-selected);
|
||
}
|
||
|
||
.room-wrapper.selected > .room-label {
|
||
fill: var(--map-card-internal-room-label-color-selected);
|
||
}
|
||
`}}function rr(e){return void 0===e.x?["validation.preset.map_modes.predefined_selections.icon.x.missing"]:void 0===e.y?["validation.preset.map_modes.predefined_selections.icon.y.missing"]:e.name?[]:["validation.preset.map_modes.predefined_selections.icon.name.missing"]}function sr(e){return void 0===e.x?["validation.preset.map_modes.predefined_selections.label.x.missing"]:void 0===e.y?["validation.preset.map_modes.predefined_selections.label.y.missing"]:e.text?[]:["validation.preset.map_modes.predefined_selections.label.text.missing"]}function lr(e,t,a){var i,n;if(!t)return["validation.preset.map_modes.invalid"];if(t.template&&!so.isValidModeTemplate(e,t.template))return[["validation.preset.map_modes.template.invalid","{0}",t.template]];const o=[];t.template||t.icon||o.push("validation.preset.map_modes.icon.missing"),t.template||t.name||o.push("validation.preset.map_modes.name.missing"),t.template||t.service_call_schema||o.push("validation.preset.map_modes.service_call_schema.missing");const r=new ho(e,t,a);switch(r.selectionType){case ro.PREDEFINED_RECTANGLE:r.predefinedSelections.flatMap((e=>function(e){const t=e,a=[];return t.zones||a.push("validation.preset.map_modes.predefined_selections.zones.missing"),"string"!=typeof t.zones&&t.zones.filter((e=>4!=e.length)).length>0&&a.push("validation.preset.map_modes.predefined_selections.zones.invalid_parameters_number"),t.icon&&rr(t.icon).forEach((e=>a.push(e))),t.label&&sr(t.label).forEach((e=>a.push(e))),a}(e))).forEach((e=>o.push(e)));break;case ro.ROOM:r.predefinedSelections.flatMap((e=>function(e){var t;const a=e,i=[];return void 0===a.id&&i.push("validation.preset.map_modes.predefined_selections.rooms.id.missing"),a.id.toString().match(/^[A-Za-z0-9 _]+$/i)||i.push(["validation.preset.map_modes.predefined_selections.rooms.id.invalid_format","{0}",a.id.toString()]),(null!==(t=a.outline)&&void 0!==t?t:[]).filter((e=>2!=e.length)).length>0&&i.push("validation.preset.map_modes.predefined_selections.rooms.outline.invalid_parameters_number"),a.icon&&rr(a.icon).forEach((e=>i.push(e))),a.label&&sr(a.label).forEach((e=>i.push(e))),i}(e))).forEach((e=>o.push(e)));break;case ro.PREDEFINED_POINT:r.predefinedSelections.flatMap((e=>function(e){var t;const a=e,i=[];return a.position||i.push("validation.preset.map_modes.predefined_selections.points.position.missing"),"string"!=typeof a.position&&2!=(null===(t=a.position)||void 0===t?void 0:t.length)&&i.push("validation.preset.map_modes.predefined_selections.points.position.invalid_parameters_number"),a.icon&&rr(a.icon).forEach((e=>i.push(e))),a.label&&sr(a.label).forEach((e=>i.push(e))),i}(e))).forEach((e=>o.push(e)));break;case ro.MANUAL_RECTANGLE:case ro.MANUAL_PATH:case ro.MANUAL_POINT:null!==(n=null===(i=r.predefinedSelections)||void 0===i?void 0:i.length)&&void 0!==n&&n&&o.push(["validation.preset.map_modes.predefined_selections.not_applicable","{0}",ro[r.selectionType]])}return t.service_call_schema&&function(e){return e.service?e.service.includes(".")?[]:[["validation.preset.map_modes.service_call_schema.service.invalid","{0}",e.service]]:["validation.preset.map_modes.service_call_schema.service.missing"]}(t.service_call_schema).forEach((e=>o.push(e))),o}function cr(e,t,a){var i,n,o,r;const s=[],l=new Map([["entity","validation.preset.entity.missing"],["map_source","validation.preset.map_source.missing"],["calibration_source","validation.preset.calibration_source.missing"]]),c=Object.keys(e);var d,m;l.forEach(((e,t)=>{c.includes(t)||s.push(e)})),e.map_source&&(d=e.map_source,d.camera||d.image?d.camera&&d.image?["validation.preset.map_source.ambiguous"]:[]:["validation.preset.map_source.none_provided"]).forEach((e=>s.push(e))),e.calibration_source&&(m=e.calibration_source,Object.keys(m).filter((e=>"attribute"!=e)).length>1?["validation.preset.calibration_source.ambiguous"]:m.calibration_points?[3,4].includes(m.calibration_points.length)?m.calibration_points.flatMap((e=>function(e){const t=[];return(null==e?void 0:e.map)||t.push("validation.preset.calibration_source.calibration_points.missing_map"),(null==e?void 0:e.vacuum)||t.push("validation.preset.calibration_source.calibration_points.missing_vacuum"),[null==e?void 0:e.map,null==e?void 0:e.vacuum].filter((e=>void 0===e.x||void 0===e.y)).length>0&&t.push("validation.preset.calibration_source.calibration_points.missing_coordinate"),t}(e))):["validation.preset.calibration_source.calibration_points.invalid_number"]:[]).forEach((e=>s.push(e))),e.vacuum_platform&&!so.getPlatforms().includes(e.vacuum_platform)&&s.push(["validation.preset.platform.invalid","{0}",e.vacuum_platform]);const u=null!==(i=e.vacuum_platform)&&void 0!==i?i:"default";return(null!==(n=e.icons)&&void 0!==n?n:[]).flatMap((e=>function(e){if(!e)return["validation.preset.icons.invalid"];const t=[];return e.icon||t.push("validation.preset.icons.icon.missing"),t}(e))).forEach((e=>s.push(e))),(null!==(o=e.tiles)&&void 0!==o?o:[]).flatMap((e=>function(e){if(!e)return["validation.preset.tiles.invalid"];const t=[];return e.entity||e.internal_variable||t.push("validation.preset.tiles.entity.missing"),e.label||t.push("validation.preset.tiles.label.missing"),t}(e))).forEach((e=>s.push(e))),(null!==(r=e.map_modes)&&void 0!==r?r:[]).flatMap((e=>lr(u,e,a))).forEach((e=>s.push(e))),!e.preset_name&&t&&s.push("validation.preset.preset_name.missing"),s}class dr{static generate(e,t,a,i,n,o){if(!e)return new Promise((e=>e([])));const r=so.usesSensors(e,a),s=e.states[t],l=[];return s?(l.push(...this.getCommonTiles(s,t,i)),r?this.addTilesFromSensors(e,t,a,l,i,n,o):new Promise((e=>e(this.addTilesFromAttributes(s,t,a,l,i,n,o))))):new Promise((e=>e(l)))}static getCommonTiles(e,t,a){const i=[];return"status"in e.attributes&&i.push({tile_id:"status",entity:t,label:en("tile.status.label",a),attribute:"status",icon:"mdi:robot-vacuum",translations:this.generateTranslationKeys(["starting","charger disconnected","idle","remote control active","cleaning","returning home","manual mode","charging","charging problem","paused","spot cleaning","error","shutting down","updating","docking","going to target","zoned cleaning","segment cleaning","emptying the bin","charging complete","device offline"],"status",a)}),"battery_level"in e.attributes&&"battery_icon"in e.attributes&&i.push({tile_id:"battery_level",entity:t,label:en("tile.battery_level.label",a),attribute:"battery_level",icon:e.attributes.battery_icon,unit:"%"}),"battery_level"in e.attributes&&!("battery_icon"in e.attributes)&&i.push({tile_id:"battery_level",entity:t,label:en("tile.battery_level.label",a),attribute:"battery_level",icon:"mdi:battery",unit:"%"}),"fan_speed"in e.attributes&&i.push({tile_id:"fan_speed",entity:t,label:en("tile.fan_speed.label",a),attribute:"fan_speed",icon:"mdi:fan",translations:this.generateTranslationKeys(["silent","standard","medium","turbo","auto","gentle"],"fan_speed",a)}),i}static addTilesFromAttributes(e,t,a,i,n,o,r){return so.getTilesFromAttributesTemplates(a).filter((t=>t.attribute in e.attributes)).forEach((e=>i.push(this.mapAttributeToTile(t,e,n,r)))),this.replaceDuplicates(i,o)}static async addTilesFromSensors(e,t,a,i,n,o,r){let s;try{s=(await async function(e,t){const a=(await e.callWS({type:"config/entity_registry/get",entity_id:t})).device_id,i=(await e.callWS({type:"config/entity_registry/list"})).filter((e=>e.device_id===a));return Promise.all(i.map((t=>e.callWS({type:"config/entity_registry/get",entity_id:t.entity_id}))))}(e,t)).filter((e=>null===e.disabled_by))}catch(e){s=[]}return s.length>0&&so.getTilesFromSensorsTemplates(a).map((e=>({tile:e,entity:s.filter((t=>t.unique_id.match(e.unique_id_regex)))}))).flatMap((e=>e.entity.map((a=>this.mapEntryToTile(t,a,e.tile,n,r))))).forEach((e=>i.push(e))),new Promise((e=>e(this.replaceDuplicates(i,o))))}static mapEntryToTile(e,t,a,i,n){var o,r;return this.mapToTile(a,e,t.entity_id,void 0,null!==(r=null!==(o=a.icon)&&void 0!==o?o:t.icon)&&void 0!==r?r:t.original_icon,i,n)}static mapAttributeToTile(e,t,a,i){return this.mapToTile(t,e,e,t.attribute,t.icon,a,i)}static mapToTile(e,t,a,i,n,o,r){var s;const l=Object.assign(Object.assign({},e),{entity:a,label:en(e.label,o),attribute:i,icon:n,unit:e.unit?en(e.unit,o):void 0,precision:e.precision?e.precision:0,multiplier:e.multiplier?e.multiplier:void 0,translations:this.generateTranslationKeys(null!==(s=e.translation_keys)&&void 0!==s?s:[],e.tile_id,o)});return To(this.cleanup(l),this.getDefaultVariables(t,a,i),r)}static generateTranslationKeys(e,t,a){const i={};return t&&e.forEach((e=>{const n=en(`tile.${t}.value.${e}`,a,"");n&&(i[e]=n)})),i}static cleanup(e){const t=["unique_id_regex","translation_keys"],a=e;for(const e in a)a.hasOwnProperty(e)&&t.includes(e)&&delete a[e];return a}static getDefaultVariables(e,t,a){const i={};return i[uo.ENTITY_ID]=null!=t?t:e,i[uo.VACUUM_ENTITY]=e,i[uo.ATTRIBUTE]=null!=a?a:"",i}static replaceDuplicates(e,t){var a;const i=t.map((e=>{var t;return null!==(t=e.tile_id)&&void 0!==t?t:""}));for(let n=0;n<e.length;n++){const o=null!==(a=e[n].tile_id)&&void 0!==a?a:"";i.includes(o)&&(e[n]=t[i.indexOf(o)])}return e}}class mr{static generate(e,t,a){var i;if(!e)return[];const n=e.states[t],o=n&&n.attributes,r=[];this.isFeatureSupported(n,8192)&&r.push({icon:"mdi:play",conditions:[{entity:t,value_not:"cleaning"},{entity:t,value_not:"error"},{entity:t,value_not:"returning"}],tooltip:en("icon.vacuum_start",a),tap_action:{action:"call-service",service:"vacuum.start",service_data:{entity_id:t}}}),this.isFeatureSupported(n,4)&&r.push({icon:"mdi:pause",conditions:[{entity:t,value_not:"docked"},{entity:t,value_not:"idle"},{entity:t,value_not:"error"},{entity:t,value_not:"paused"}],tooltip:en("icon.vacuum_pause",a),tap_action:{action:"call-service",service:"vacuum.pause",service_data:{entity_id:t}}}),this.isFeatureSupported(n,8)&&r.push({icon:"mdi:stop",conditions:[{entity:t,value_not:"docked"},{entity:t,value_not:"idle"},{entity:t,value_not:"error"},{entity:t,value_not:"paused"}],tooltip:en("icon.vacuum_stop",a),tap_action:{action:"call-service",service:"vacuum.stop",service_data:{entity_id:t}}}),this.isFeatureSupported(n,16)&&r.push({icon:"mdi:home-map-marker",conditions:[{entity:t,value_not:"docked"},{entity:t,value_not:"returning"}],tooltip:en("icon.vacuum_return_to_base",a),tap_action:{action:"call-service",service:"vacuum.return_to_base",service_data:{entity_id:t}}}),this.isFeatureSupported(n,1024)&&r.push({icon:"mdi:target-variant",conditions:[{entity:t,value_not:"docked"},{entity:t,value_not:"error"},{entity:t,value_not:"cleaning"},{entity:t,value_not:"returning"}],tooltip:en("icon.vacuum_clean_spot",a),tap_action:{action:"call-service",service:"vacuum.clean_spot",service_data:{entity_id:t}}}),this.isFeatureSupported(n,512)&&r.push({icon:"mdi:map-marker",tooltip:en("icon.vacuum_locate",a),tap_action:{action:"call-service",service:"vacuum.locate",service_data:{entity_id:t}}});const s=o&&null!==(i=n.attributes.fan_speed_list)&&void 0!==i?i:[];for(let e=0;e<s.length;e++){const i=s[e],n=s[(e+1)%s.length];r.push({icon:i in this._ICON_MAPPING?this._ICON_MAPPING[i]:"mdi:fan-alert",conditions:[{entity:t,attribute:"fan_speed",value:i}],tooltip:en("icon.vacuum_set_fan_speed",a),tap_action:{action:"call-service",service:"vacuum.set_fan_speed",service_data:{entity_id:t,fan_speed:n}}})}return 0!=s.length&&r.push({icon:"mdi:fan-alert",conditions:s.map((e=>({entity:t,attribute:"fan_speed",value_not:e}))),tooltip:en("icon.vacuum_set_fan_speed",a),tap_action:{action:"call-service",service:"vacuum.set_fan_speed",service_data:{entity_id:t,fan_speed:s[0]}}}),r}static isFeatureSupported(e,t){var a;return e&&e.attributes&&((null!==(a=e.attributes.supported_features)&&void 0!==a?a:0)&t)===t}}mr._ICON_MAPPING={Silent:"mdi:fan-remove",Basic:"mdi:fan-speed-1",Standard:"mdi:fan-speed-1",Strong:"mdi:fan-speed-2",Medium:"mdi:fan-speed-2","Full Speed":"mdi:fan-speed-3",Turbo:"mdi:fan-speed-3",Auto:"mdi:fan-auto",Gentle:"mdi:waves"};class ur{static render(e,t,a){var i,n,o,r;let s="";e.entity?s=e.attribute?a.hass.states[e.entity].attributes[e.attribute]:a.hass.states[e.entity].state:e.internal_variable&&e.internal_variable in t&&(s=t[e.internal_variable]),null===s||"number"!=typeof s&&isNaN(+s)||(s=parseFloat(s.toString())*(null!==(i=e.multiplier)&&void 0!==i?i:1),null!=e.precision&&(s=s.toFixed(e.precision)));const l=null!==(n=e.translations)&&void 0!==n?n:{};return`${s}`.toLowerCase()in l&&(s=l[`${s}`.toLowerCase()]),N`
|
||
<div
|
||
class="tile-wrapper clickable ripple ${e.tile_id?`tile-${e.tile_id}-wrapper`:""}"
|
||
.title=${null!==(o=e.tooltip)&&void 0!==o?o:""}
|
||
@action=${Eo(a,e)}
|
||
.actionHandler=${$o({hasHold:ue(null==e?void 0:e.hold_action),hasDoubleClick:ue(null==e?void 0:e.double_tap_action)})}>
|
||
<div class="tile-title">${e.label}</div>
|
||
<div class="tile-value-wrapper">
|
||
${xo(!!e.icon,(()=>N` <div class="tile-icon">
|
||
<ha-icon icon="${e.icon}"></ha-icon>
|
||
</div>`))}
|
||
<div class="tile-value">${s}${null!==(r=e.unit)&&void 0!==r?r:""}</div>
|
||
</div>
|
||
</div>
|
||
`}static get styles(){return o`
|
||
.tile-wrapper {
|
||
min-width: fit-content;
|
||
width: 80px;
|
||
padding: 10px;
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
background-color: var(--map-card-internal-tertiary-color);
|
||
flex-grow: 1;
|
||
overflow: hidden;
|
||
color: var(--map-card-internal-tertiary-text-color);
|
||
}
|
||
|
||
.tile-title {
|
||
font-size: smaller;
|
||
}
|
||
|
||
.tile-value-wrapper {
|
||
display: inline-flex;
|
||
align-items: flex-end;
|
||
padding-top: 5px;
|
||
}
|
||
|
||
.tile-icon {
|
||
padding-right: 5px;
|
||
}
|
||
|
||
.tile-value {
|
||
}
|
||
`}}class pr{static render(e,t){var a;return N`
|
||
<paper-button
|
||
class="vacuum-actions-item clickable ripple"
|
||
.title=${null!==(a=e.tooltip)&&void 0!==a?a:""}
|
||
@action=${Eo(t,e)}
|
||
.actionHandler=${$o({hasHold:ue(null==e?void 0:e.hold_action),hasDoubleClick:ue(null==e?void 0:e.double_tap_action)})}>
|
||
<ha-icon icon="${e.icon}"></ha-icon>
|
||
</paper-button>
|
||
`}static get styles(){return o`
|
||
.vacuum-actions-item {
|
||
float: left;
|
||
width: 50px;
|
||
height: 50px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
background-color: transparent;
|
||
}
|
||
`}}class _r{static render(e,t,a){const i=()=>e[t];return N`
|
||
<ha-button-menu class="modes-dropdown-menu" fixed="true" @closed="${e=>e.stopPropagation()}">
|
||
<div class="modes-dropdown-menu-button" slot="trigger" alt="bottom align">
|
||
<paper-button class="modes-dropdown-menu-button-button">
|
||
<ha-icon icon="${i().icon}" class="dropdown-icon"></ha-icon>
|
||
</paper-button>
|
||
<div class="modes-dropdown-menu-button-text">${i().name}</div>
|
||
</div>
|
||
${e.map(((i,n)=>N` <mwc-list-item
|
||
?activated="${t===n}"
|
||
@click="${()=>a(n)}">
|
||
<div class="modes-dropdown-menu-entry clickable ${t===n?"selected":""}">
|
||
<div
|
||
class="modes-dropdown-menu-entry-button-wrapper ${0===n?"first":""} ${n===e.length-1?"last":""} ${t===n?"selected":""}">
|
||
<paper-button
|
||
class="modes-dropdown-menu-entry-button ${t===n?"selected":""}">
|
||
<ha-icon icon="${i.icon}"></ha-icon>
|
||
</paper-button>
|
||
</div>
|
||
<div class="modes-dropdown-menu-entry-text">${i.name}</div>
|
||
</div>
|
||
</mwc-list-item>`))}
|
||
</ha-button-menu>
|
||
`}static get styles(){return o`
|
||
.modes-dropdown-menu {
|
||
--mdc-menu-item-height: 50px;
|
||
--mdc-theme-primary: transparent;
|
||
--mdc-list-vertical-padding: 0px;
|
||
--mdc-list-side-padding: 0px;
|
||
--mdc-shape-medium: var(--map-card-internal-big-radius);
|
||
--mdc-ripple-color: transparent;
|
||
}
|
||
|
||
.modes-dropdown-menu-button {
|
||
display: inline-flex;
|
||
}
|
||
|
||
.modes-dropdown-menu-button-button {
|
||
width: 50px;
|
||
height: 50px;
|
||
border-radius: var(--map-card-internal-big-radius);
|
||
display: flex;
|
||
justify-content: center;
|
||
background-color: var(--map-card-internal-primary-color);
|
||
align-items: center;
|
||
}
|
||
|
||
.modes-dropdown-menu-button-text {
|
||
display: inline-flex;
|
||
line-height: 50px;
|
||
background-color: transparent;
|
||
padding-left: 10px;
|
||
padding-right: 15px;
|
||
}
|
||
|
||
.modes-dropdown-menu-entry {
|
||
display: inline-flex;
|
||
width: 100%;
|
||
}
|
||
|
||
.modes-dropdown-menu-entry.selected {
|
||
border-radius: var(--map-card-internal-big-radius);
|
||
background-color: var(--map-card-internal-primary-color);
|
||
color: var(--map-card-internal-primary-text-color);
|
||
}
|
||
|
||
.modes-dropdown-menu-entry-button-wrapper.first:not(.selected) {
|
||
border-top-left-radius: var(--map-card-internal-big-radius);
|
||
border-top-right-radius: var(--map-card-internal-big-radius);
|
||
}
|
||
|
||
.modes-dropdown-menu-entry-button-wrapper.last:not(.selected) {
|
||
border-bottom-left-radius: var(--map-card-internal-big-radius);
|
||
border-bottom-right-radius: var(--map-card-internal-big-radius);
|
||
}
|
||
|
||
.modes-dropdown-menu-entry-button.selected {
|
||
border-start-start-radius: var(--map-card-internal-big-radius);
|
||
border-end-start-radius: var(--map-card-internal-big-radius);
|
||
background-color: var(--map-card-internal-primary-color);
|
||
color: var(--map-card-internal-primary-text-color);
|
||
}
|
||
|
||
.modes-dropdown-menu-entry-button-wrapper {
|
||
background-color: var(--map-card-internal-secondary-color);
|
||
color: var(--map-card-internal-secondary-text-color);
|
||
overflow: hidden;
|
||
}
|
||
|
||
.modes-dropdown-menu-entry-button {
|
||
width: 50px;
|
||
height: 50px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
background-color: var(--map-card-internal-secondary-color);
|
||
color: var(--map-card-internal-secondary-text-color);
|
||
}
|
||
|
||
.modes-dropdown-menu-entry-text {
|
||
display: inline-flex;
|
||
line-height: 50px;
|
||
background-color: transparent;
|
||
padding-left: 10px;
|
||
padding-right: 15px;
|
||
}
|
||
|
||
.modes-dropdown-menu-listbox {
|
||
padding: 0;
|
||
background-color: transparent;
|
||
}
|
||
`}}function gr(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function vr(...e){const t=(e,t)=>({a:e.a*t.a+e.c*t.b,c:e.a*t.c+e.c*t.d,e:e.a*t.e+e.c*t.f+e.e,b:e.b*t.a+e.d*t.b,d:e.b*t.c+e.d*t.d,f:e.b*t.e+e.d*t.f+e.f});switch((e=Array.isArray(e[0])?e[0]:e).length){case 0:throw new Error("no matrices provided");case 1:return e[0];case 2:return t(e[0],e[1]);default:{const[a,i,...n]=e;return vr(t(a,i),...n)}}}function hr(e,t){const a=null!=e[0].x?e[0].x:e[0][0],i=null!=e[0].y?e[0].y:e[0][1],n=null!=t[0].x?t[0].x:t[0][0],o=null!=t[0].y?t[0].y:t[0][1],r=null!=e[1].x?e[1].x:e[1][0],s=null!=e[1].y?e[1].y:e[1][1],l=null!=t[1].x?t[1].x:t[1][0],c=null!=t[1].y?t[1].y:t[1][1],d=null!=e[2].x?e[2].x:e[2][0],m=null!=e[2].y?e[2].y:e[2][1],u=null!=t[2].x?t[2].x:t[2][0],p=null!=t[2].y?t[2].y:t[2][1],_={a:n-u,b:o-p,c:l-u,d:c-p,e:u,f:p},g=function(e){const{a:t,b:a,c:i,d:n,e:o,f:r}=e,s=t*n-a*i;return{a:n/s,b:a/-s,c:i/-s,d:t/s,e:(n*o-i*r)/-s,f:(a*o-t*r)/s}}({a:a-d,b:i-m,c:r-d,d:s-m,e:d,f:m});return function(e,t=1e10){return{a:Math.round(e.a*t)/t,b:Math.round(e.b*t)/t,c:Math.round(e.c*t)/t,d:Math.round(e.d*t)/t,e:Math.round(e.e*t)/t,f:Math.round(e.f*t)/t}}(vr([_,g]))}function fr(e,t,a,i){this.message=e,this.expected=t,this.found=a,this.location=i,this.name="SyntaxError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,fr)}!function(e,t){function a(){this.constructor=e}a.prototype=t.prototype,e.prototype=new a}(fr,Error),fr.buildMessage=function(e,t,a){var i={literal:function(e){return'"'+o(e.text)+'"'},class:function(e){var t=e.parts.map((function(e){return Array.isArray(e)?r(e[0])+"-"+r(e[1]):r(e)}));return"["+(e.inverted?"^":"")+t+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(e){return e.description},not:function(e){return"not "+s(e.expected)}};function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}function o(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+n(e)}))}function r(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+n(e)}))}function s(e){return i[e.type](e)}return"Expected "+function(e){var t,a,i=e.map(s);if(i.sort(),i.length>0){for(t=1,a=1;t<i.length;t++)i[t-1]!==i[t]&&(i[a]=i[t],a++);i.length=a}switch(i.length){case 1:return i[0];case 2:return i[0]+" or "+i[1];default:return i.slice(0,-1).join(", ")+", or "+i[i.length-1]}}(e)+" but "+function(e){return e?'"'+o(e)+'"':"end of input"}(t)+" found."};var br,yr,kr,Ar=(br=function(e,t){function a(e){var t;return"object"==typeof e?"object"==typeof(t=e[0])?[e.length,t.length]:[e.length]:[]}function i(e,t,a,n){if(a===t.length-1)return n(e);var o,r=t[a],s=Array(r);for(o=r-1;o>=0;o--)s[o]=i(e[o],t,a+1,n);return s}function n(e){var t,a=e.length,i=Array(a);for(t=a-1;-1!==t;--t)i[t]=e[t];return i}function o(e){if("object"!=typeof e)return e;var t=n;return i(e,a(e),0,t)}function r(e,t,a){void 0===a&&(a=0);var i,n=e[a],o=Array(n);if(a===e.length-1){for(i=n-2;i>=0;i-=2)o[i+1]=t,o[i]=t;return-1===i&&(o[0]=t),o}for(i=n-1;i>=0;i--)o[i]=r(e,t,a+1);return o}function s(e){return function(e){var t,a,i,n,o=e.length,r=Array(o);for(t=o-1;t>=0;t--){for(n=Array(o),a=t+2,i=o-1;i>=a;i-=2)n[i]=0,n[i-1]=0;for(i>t&&(n[i]=0),n[t]=e[t],i=t-1;i>=1;i-=2)n[i]=0,n[i-1]=0;0===i&&(n[0]=0),r[t]=n}return r}(r([e],1))}function l(e,t){var a,i,n,o,r,s,l,c,d,m,u;for(o=e.length,r=t.length,s=t[0].length,l=Array(o),a=o-1;a>=0;a--){for(c=Array(s),d=e[a],n=s-1;n>=0;n--){for(m=d[r-1]*t[r-1][n],i=r-2;i>=1;i-=2)u=i-1,m+=d[i]*t[i][n]+d[u]*t[u][n];0===i&&(m+=d[0]*t[0][n]),c[n]=m}l[a]=c}return l}function c(e,t){var a,i,n=e.length,o=e[n-1]*t[n-1];for(a=n-2;a>=1;a-=2)i=a-1,o+=e[a]*t[a]+e[i]*t[i];return 0===a&&(o+=e[0]*t[0]),o}function d(e){var t,a,i,n,o,r=e.length,s=e[0].length,l=Array(s);for(a=0;a<s;a++)l[a]=Array(r);for(t=r-1;t>=1;t-=2){for(n=e[t],i=e[t-1],a=s-1;a>=1;--a)(o=l[a])[t]=n[a],o[t-1]=i[a],(o=l[--a])[t]=n[a],o[t-1]=i[a];0===a&&((o=l[0])[t]=n[0],o[t-1]=i[0])}if(0===t){for(i=e[0],a=s-1;a>=1;--a)l[a][0]=i[a],l[--a][0]=i[a];0===a&&(l[0][0]=i[0])}return l}function m(e,t,i){if(i){var n=t;t=e,e=n}var r,m=[[e[0],e[1],1,0,0,0,-1*t[0]*e[0],-1*t[0]*e[1]],[0,0,0,e[0],e[1],1,-1*t[1]*e[0],-1*t[1]*e[1]],[e[2],e[3],1,0,0,0,-1*t[2]*e[2],-1*t[2]*e[3]],[0,0,0,e[2],e[3],1,-1*t[3]*e[2],-1*t[3]*e[3]],[e[4],e[5],1,0,0,0,-1*t[4]*e[4],-1*t[4]*e[5]],[0,0,0,e[4],e[5],1,-1*t[5]*e[4],-1*t[5]*e[5]],[e[6],e[7],1,0,0,0,-1*t[6]*e[6],-1*t[6]*e[7]],[0,0,0,e[6],e[7],1,-1*t[7]*e[6],-1*t[7]*e[7]]],u=t;try{r=function(e){var t,i,n,r,l,c,d,m,u=a(e),p=Math.abs,_=u[0],g=u[1],v=o(e),h=s(_);for(c=0;c<g;++c){var f=-1,b=-1;for(l=c;l!==_;++l)(d=p(v[l][c]))>b&&(f=l,b=d);for(i=v[f],v[f]=v[c],v[c]=i,r=h[f],h[f]=h[c],h[c]=r,m=i[c],d=c;d!==g;++d)i[d]/=m;for(d=g-1;-1!==d;--d)r[d]/=m;for(l=_-1;-1!==l;--l)if(l!==c){for(t=v[l],n=h[l],m=t[c],d=c+1;d!==g;++d)t[d]-=i[d]*m;for(d=g-1;d>0;--d)n[d]-=r[d]*m,n[--d]-=r[d]*m;0===d&&(n[0]-=r[0]*m)}}return h}(l(d(m),m))}catch(e){return[1,0,0,0,1,0,0,0]}for(var p,_=function(e,t){var a,i=e.length,n=Array(i);for(a=i-1;a>=0;a--)n[a]=c(e[a],t);return n}(l(r,d(m)),u),g=0;g<_.length;g++)_[g]=(p=_[g],Math.round(1e10*p)/1e10);return _[8]=1,_}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var a=m(e,t,!1);return function(e,t){return function(e,t,a){var i=[];return i[0]=(e[0]*t+e[1]*a+e[2])/(e[6]*t+e[7]*a+1),i[1]=(e[3]*t+e[4]*a+e[5])/(e[6]*t+e[7]*a+1),i}(a,e,t)}}},br(yr={exports:{}},yr.exports),yr.exports),xr=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(Ar);!function(e){e[e.AFFINE=0]="AFFINE",e[e.PERSPECTIVE=1]="PERSPECTIVE"}(kr||(kr={}));class Er{constructor(e){const t=null==e?void 0:e.map((e=>e.map)),a=null==e?void 0:e.map((e=>e.vacuum));if(t&&a)if(3===t.length)this.transformMode=kr.AFFINE,this.mapToVacuumMatrix=hr(t,a),this.vacuumToMapMatrix=hr(a,t),this.calibrated=!(!this.mapToVacuumMatrix||!this.vacuumToMapMatrix);else{this.transformMode=kr.PERSPECTIVE;const e=t.flatMap((e=>[e.x,e.y])),i=a.flatMap((e=>[e.x,e.y]));this.mapToVacuumTransformer=xr(e,i),this.vacuumToMapTransformer=xr(i,e),this.calibrated=!0}else this.calibrated=!1}mapToVacuum(e,t){if(this.transformMode===kr.AFFINE&&this.mapToVacuumMatrix)return gr(this.mapToVacuumMatrix,[e,t]);if(this.transformMode===kr.PERSPECTIVE&&this.mapToVacuumTransformer)return this.mapToVacuumTransformer(e,t);throw Error("Missing calibration")}vacuumToMap(e,t){if(this.transformMode===kr.AFFINE&&this.vacuumToMapMatrix)return gr(this.vacuumToMapMatrix,[e,t]);if(this.transformMode===kr.PERSPECTIVE&&this.vacuumToMapTransformer)return this.vacuumToMapTransformer(e,t);throw Error("Missing calibration")}}Object.entries||(Object.entries=function(e){const t=Object.keys(e);let a=t.length;const i=new Array(a);for(;a--;)i[a]=[t[a],e[t[a]]];return i})
|
||
/**
|
||
* Object.entriesFrom() polyfill
|
||
* @author Chris Ferdinandi
|
||
* @license MIT
|
||
* https://vanillajstoolkit.com/polyfills/objectfromentries/
|
||
*/,Object.fromEntries||(Object.fromEntries=function(e){if(!e||!e[Symbol.iterator])throw new Error("Object.fromEntries() requires a single iterable argument");const t={};for(const[a,i]of e)t[a]=i;return t});const wr=" XIAOMI-VACUUM-MAP-CARD",zr=` ${en("common.version")} v2.1.2`,Pr=Math.max(wr.length,zr.length)+3,Sr=(e,t)=>e+" ".repeat(t-e.length);console.info(`%c${Sr(wr,Pr)}\n%c${Sr(zr,Pr)}`,"color: orange; font-weight: bold; background: black","color: white; font-weight: bold; background: dimgray");const Mr=window;Mr.customCards=Mr.customCards||[],Mr.customCards.push({type:"xiaomi-vacuum-map-card",name:"Xiaomi Vacuum Map Card",description:en("common.description"),preview:!0});let Tr=class extends Q{constructor(){super(),this.oldConfig=!1,this.repeats=1,this.selectedMode=0,this.mapLocked=!1,this.configErrors=[],this.connected=!1,this.internalVariables={},this.watchedEntities=[],this.selectedManualRectangles=[],this.selectedManualPath=new ar([],this._getContext()),this.selectedPredefinedRectangles=[],this.selectedRooms=[],this.selectedPredefinedPoint=[],this.selectablePredefinedRectangles=[],this.selectableRooms=[],this.selectablePredefinedPoints=[],this.modes=[],this._handleAutogeneratedConfigGet=this._handleAutogeneratedConfigGet.bind(this),this._handleRoomsConfigGet=this._handleRoomsConfigGet.bind(this),this._handleServiceCallGet=this._handleServiceCallGet.bind(this),this._handleLovelaceDomEvent=this._handleLovelaceDomEvent.bind(this)}get hass(){return this._hass}set hass(e){const t=!this._hass&&e;this._hass=e,this.lastHassUpdate=new Date,t&&this._firstHass()}static async getConfigElement(){return document.createElement("xiaomi-vacuum-map-card-editor")}static getStubConfig(e){const t=Object.keys(e.states),a=t.filter((e=>"camera"===e.substr(0,e.indexOf(".")))).filter((t=>null==e?void 0:e.states[t].attributes.calibration_points)),i=t.filter((e=>"vacuum"===e.substr(0,e.indexOf("."))));if(0!==a.length&&0!==i.length)return{type:"custom:xiaomi-vacuum-map-card",map_source:{camera:a[0]},calibration_source:{camera:!0},entity:i[0],vacuum_platform:"default"}}setConfig(e){if(!e)throw new Error(this._localize("common.invalid_configuration"));this.config=e,function(e){return e.map_image||e.map_camera}(e)?this.oldConfig=!0:(this.configErrors=function(e){var t,a,i;const n=[],o=(null!==(a=null===(t=e.additional_presets)||void 0===t?void 0:t.length)&&void 0!==a?a:0)>0;return cr(e,o,e.language).forEach((e=>n.push(e))),null===(i=e.additional_presets)||void 0===i||i.flatMap((t=>cr(t,o,e.language))).forEach((e=>n.push(e))),n.map((t=>en(t,e.language)))}(this.config),this.configErrors.length>0||(this.watchedEntities=function(e){var t;const a=new Set;return[e,...null!==(t=e.additional_presets)&&void 0!==t?t:[]].flatMap((t=>[...ko(t,e.language)])).forEach((e=>a.add(e))),[...a]}(this.config),this._setPresetIndex(0,!1,!0),this.requestUpdate("config")))}getCardSize(){return 12}connectedCallback(){super.connectedCallback(),this._isInEditor()&&(window.addEventListener("map-card-autogenerated-config-get",this._handleAutogeneratedConfigGet),window.addEventListener("map-card-room-config-get",this._handleRoomsConfigGet),window.addEventListener("map-card-service-call-get",this._handleServiceCallGet)),this.config.action_handler_id&&document.addEventListener("ll-custom",this._handleLovelaceDomEvent),this.connected=!0,this._updateElements(),zo(100).then((()=>this.requestUpdate()))}disconnectedCallback(){super.disconnectedCallback(),this._isInEditor()&&(window.removeEventListener("map-card-autogenerated-config-get",this._handleAutogeneratedConfigGet),window.removeEventListener("map-card-room-config-get",this._handleRoomsConfigGet),window.removeEventListener("map-card-service-call-get",this._handleServiceCallGet)),document.removeEventListener("ll-custom",this._handleLovelaceDomEvent),this.connected=!1}shouldUpdate(e){return!!this.config&&function(e,t,a,i){if(t.has("config")||a)return!0;const n=t.get("hass");return!n||e.some((e=>n.states[e]!==(null==i?void 0:i.states[e])))}(this.watchedEntities,e,!1,this.hass)}render(){var e,t,a,i,n,o,r,s,l,c,d,m,u,p;if(this.oldConfig)return this._showOldConfig();if(this.configErrors.length>0)return this._showConfigErrors(this.configErrors);const _=function(e,t){const a=Object.keys(t.states);return e.filter((e=>!a.includes(e)))}(this.watchedEntities,this.hass);if(_.length>0)return this._showInvalidEntities(_);const g="rtl"===(null===(e=getComputedStyle(this))||void 0===e?void 0:e.getPropertyValue("direction"));let v=this._getCurrentPreset();const h=this._getAllPresets();let f=this._getAllAvailablePresets(),b=f.indexOf(h[this.presetIndex]);-1===b&&(this._firstHass(),v=this._getCurrentPreset(),f=this._getAllAvailablePresets(),b=f.indexOf(h[this.presetIndex])),this._updateCalibration(v);const y=null===(t=v.tiles)||void 0===t?void 0:t.filter((e=>Ao(e,this.internalVariables,this.hass))),k=null===(a=v.icons)||void 0===a?void 0:a.filter((e=>Ao(e,this.internalVariables,this.hass))),A=this.modes,x=this._getMapSrc(v),E=!!this.coordinatesConverter&&this.coordinatesConverter.calibrated,w=E?this._createMapControls():[],z=N`
|
||
<div
|
||
id="map-zoomer-content"
|
||
style="
|
||
margin-top: ${-1*(null!==(n=null===(i=v.map_source.crop)||void 0===i?void 0:i.top)&&void 0!==n?n:0)}px;
|
||
margin-bottom: ${-1*(null!==(r=null===(o=v.map_source.crop)||void 0===o?void 0:o.bottom)&&void 0!==r?r:0)}px;
|
||
margin-left: ${-1*(null!==(l=null===(s=v.map_source.crop)||void 0===s?void 0:s.left)&&void 0!==l?l:0)}px;
|
||
margin-right: ${-1*(null!==(d=null===(c=v.map_source.crop)||void 0===c?void 0:c.right)&&void 0!==d?d:0)}px;">
|
||
<img
|
||
id="map-image"
|
||
alt="camera_image"
|
||
class="${this.mapScale*this.realScale>1?"zoomed":""}"
|
||
src="${x}"
|
||
@load="${()=>this._calculateBasicScale()}" />
|
||
<div id="map-image-overlay">
|
||
<svg
|
||
xmlns="http://www.w3.org/2000/svg"
|
||
version="2.0"
|
||
id="svg-wrapper"
|
||
width="100%"
|
||
height="100%"
|
||
@mousedown="${e=>this._mouseDown(e)}"
|
||
@mousemove="${e=>this._mouseMove(e)}"
|
||
@mouseup="${e=>this._mouseUp(e)}">
|
||
${E?this._drawSelection():null}
|
||
</svg>
|
||
</div>
|
||
</div>
|
||
`;return N`
|
||
<ha-card style="--map-scale: ${this.mapScale}; --real-scale: ${this.realScale};">
|
||
${xo((null!==(m=this.config.title)&&void 0!==m?m:"").length>0,(()=>N`<h1 class="card-header">${this.config.title}</h1>`))}
|
||
${xo(f.length>1,(()=>N`
|
||
<div class="preset-selector-wrapper">
|
||
<div
|
||
class="preset-selector-icon-wrapper"
|
||
@click="${()=>this._openPreviousPreset()}">
|
||
<ha-icon
|
||
icon="mdi:chevron-${g?"right":"left"}"
|
||
class="preset-selector-icon ${-1===this._getPreviousPresetIndex()?"disabled":""}">
|
||
</ha-icon>
|
||
</div>
|
||
<div
|
||
class="preset-label-wrapper ${v.activate?"clickable":""}"
|
||
@click="${()=>this._executePresetsActivation()}">
|
||
<div class="preset-label">${v.preset_name}</div>
|
||
<div class="preset-indicator">
|
||
${new Array(f.length).fill(0).map(((e,t)=>t===b?"●":"○"))}
|
||
</div>
|
||
</div>
|
||
<div class="preset-selector-icon-wrapper" @click="${()=>this._openNextPreset()}">
|
||
<ha-icon
|
||
icon="mdi:chevron-${g?"left":"right"}"
|
||
class="preset-selector-icon ${-1===this._getNextPresetIndex()?"disabled":""}">
|
||
</ha-icon>
|
||
</div>
|
||
</div>
|
||
`))}
|
||
<div class="map-wrapper">
|
||
<pinch-zoom
|
||
min-scale="0.5"
|
||
id="map-zoomer"
|
||
@change="${this._calculateScale}"
|
||
two-finger-pan="${v.two_finger_pan}"
|
||
locked="${this.mapLocked}"
|
||
no-default-pan="${this.mapLocked||v.two_finger_pan}"
|
||
style="touch-action: none;">
|
||
${z}
|
||
</pinch-zoom>
|
||
<div id="map-zoomer-overlay">
|
||
<div style="right: 0; top: 0; position: absolute;">
|
||
<ha-icon
|
||
icon="${this.mapLocked?"mdi:lock":"mdi:lock-open"}"
|
||
class="standalone-icon-on-map clickable ripple"
|
||
@click="${this._toggleLock}"></ha-icon>
|
||
</div>
|
||
<div class="map-zoom-icons" style="visibility: ${this.mapLocked?"hidden":"visible"}">
|
||
<ha-icon
|
||
icon="mdi:image-filter-center-focus"
|
||
class="icon-on-map clickable ripple"
|
||
@click="${this._restoreMap}"></ha-icon>
|
||
<div class="map-zoom-icons-main">
|
||
<ha-icon
|
||
icon="mdi:magnify-minus"
|
||
class="icon-on-map clickable ripple"
|
||
@click="${this._zoomOut}"></ha-icon>
|
||
<ha-icon
|
||
icon="mdi:magnify-plus"
|
||
class="icon-on-map clickable ripple"
|
||
@click="${this._zoomIn}"></ha-icon>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
${xo(!E,(()=>this._showInvalidCalibrationWarning()))}
|
||
<div class="controls-wrapper">
|
||
${xo(E&&(A.length>1||w.length>0),(()=>N`
|
||
<div class="map-controls-wrapper">
|
||
<div class="map-controls">
|
||
${xo(A.length>1,(()=>_r.render(A,this.selectedMode,(e=>this._setCurrentMode(e)))))}
|
||
${xo(w.length>0,(()=>N` <div class="map-actions-list">${w}</div> `))}
|
||
</div>
|
||
</div>
|
||
`))}
|
||
${xo(0!==(null!==(u=null==k?void 0:k.length)&&void 0!==u?u:0),(()=>N`
|
||
<div class="vacuum-controls">
|
||
<div class="vacuum-actions-list">
|
||
${null==k?void 0:k.map((e=>pr.render(e,this)))}
|
||
</div>
|
||
</div>
|
||
`))}
|
||
${xo(0!==(null!==(p=null==y?void 0:y.length)&&void 0!==p?p:0),(()=>N`
|
||
<div class="tiles-wrapper">
|
||
${null==y?void 0:y.map((e=>ur.render(e,this.internalVariables,this)))}
|
||
</div>
|
||
`))}
|
||
</div>
|
||
${Co.render("map-card")}
|
||
</ha-card>
|
||
`}updated(e){this._updateElements()}_getCurrentPreset(){return this.currentPreset}_getCalibration(e){var t,a,i,n,o,r,s;return e.calibration_source.identity?[{map:{x:0,y:0},vacuum:{x:0,y:0}},{map:{x:1,y:0},vacuum:{x:1,y:0}},{map:{x:0,y:1},vacuum:{x:0,y:1}}]:e.calibration_source.calibration_points&&[3,4].includes(e.calibration_source.calibration_points.length)?e.calibration_source.calibration_points:this.hass?e.calibration_source.entity&&!(null===(t=e.calibration_source)||void 0===t?void 0:t.attribute)?JSON.parse(null===(a=this.hass.states[e.calibration_source.entity])||void 0===a?void 0:a.state):e.calibration_source.entity&&(null===(i=e.calibration_source)||void 0===i?void 0:i.attribute)?null===(n=this.hass.states[e.calibration_source.entity])||void 0===n?void 0:n.attributes[e.calibration_source.attribute]:e.calibration_source.camera?null===(s=this.hass.states[null!==(r=null===(o=e.map_source)||void 0===o?void 0:o.camera)&&void 0!==r?r:""])||void 0===s?void 0:s.attributes.calibration_points:void 0:void 0}_firstHass(){if(0===this.configErrors.length&&!this.oldConfig){const e=this._getAllPresets(),t=this._getAllAvailablePresets(),a=e.indexOf(t[0]);this._setPresetIndex(a,!1,!0)}}_getAllPresets(){var e;return[this.config,...null!==(e=this.config.additional_presets)&&void 0!==e?e:[]]}_getAllAvailablePresets(){const e=this._getAllPresets(),t=e.filter((e=>{var t,a;return 0===(null!==(a=null===(t=e.conditions)||void 0===t?void 0:t.length)&&void 0!==a?a:0)||Ao(e,this.internalVariables,this.hass)}));return 0===t.length?[e[0]]:t}_getPreviousPresetIndex(){const e=this._getAllPresets(),t=e.filter(((e,t)=>{var a,i;return t<this.presetIndex&&(0===(null!==(i=null===(a=e.conditions)||void 0===a?void 0:a.length)&&void 0!==i?i:0)||Ao(e,this.internalVariables,this.hass))}));return 0==t.length?-1:e.indexOf(t[t.length-1])}_getNextPresetIndex(){const e=this._getAllPresets(),t=e.filter(((e,t)=>{var a,i;return t>this.presetIndex&&(0===(null!==(i=null===(a=e.conditions)||void 0===a?void 0:a.length)&&void 0!==i?i:0)||Ao(e,this.internalVariables,this.hass))}));return 0==t.length?-1:e.indexOf(t[0])}_openPreviousPreset(){const e=this._getPreviousPresetIndex();e>=0&&this._setPresetIndex(e,!0)}_openNextPreset(){const e=this._getNextPresetIndex();e>=0&&this._setPresetIndex(e,!0)}_setPresetIndex(e,t=!1,a=!1){var i,n,o,r,s,l,c,d,m,u,p,_,g,v,h,f;if((e=Math.min(Math.max(e,0),null!==(n=null===(i=this.config.additional_presets)||void 0===i?void 0:i.length)&&void 0!==n?n:0))===this.presetIndex&&!a)return;const b=0===e?this.config:(null!==(o=this.config.additional_presets)&&void 0!==o?o:[])[e-1];this.mapLocked||null===(r=this._getPinchZoom())||void 0===r||r.setTransform({scale:1,x:0,y:0,allowChangeEvent:!0}),t&&de("selection"),this.mapLocked=null!==(s=null==b?void 0:b.map_locked)&&void 0!==s&&s,this.selectedMode=0,this.realScale=1,this.mapScale=1,this.mapX=0,this.mapY=0,this.hass&&this._updateCalibration(b);const y=null!==(l=b.vacuum_platform)&&void 0!==l?l:"default";this.modes=(0===(null!==(d=null===(c=b.map_modes)||void 0===c?void 0:c.length)&&void 0!==d?d:0)?so.generateDefaultModes(y):null!==(m=b.map_modes)&&void 0!==m?m:[]).map((e=>new ho(y,e,this.config.language))),this.presetIndex=e,this.currentPreset=b;const k=-1===(null!==(p=null===(u=b.icons)||void 0===u?void 0:u.length)&&void 0!==p?p:-1)?mr.generate(this.hass,b.entity,this.config.language):b.append_icons?[...mr.generate(this.hass,b.entity,this.config.language),...null!==(_=b.icons)&&void 0!==_?_:[]]:b.icons,A=(null!==(g=b.tiles)&&void 0!==g?g:[]).filter((e=>void 0!==e.tile_id)),x=-1===(null!==(h=null===(v=b.tiles)||void 0===v?void 0:v.length)&&void 0!==h?h:-1)?dr.generate(this.hass,b.entity,y,this.config.language,A,this.internalVariables):b.append_tiles?dr.generate(this.hass,b.entity,y,this.config.language,A,this.internalVariables).then((e=>{var t;const a=e.map((e=>{var t;return null!==(t=e.tile_id)&&void 0!==t?t:""}));return[...e,...(null!==(t=b.tiles)&&void 0!==t?t:[]).filter((e=>void 0===e.tile_id||!a.includes(e.tile_id)))]})):new Promise((e=>{var t;return e(null!==(t=b.tiles)&&void 0!==t?t:[])}));x.then((e=>this._setPreset(Object.assign(Object.assign({},b),{tiles:e,icons:k})))).then((()=>setTimeout((()=>this.requestUpdate()),100))).then((()=>this._setCurrentMode(0,!1))),this.internalVariables=Object.assign({},null!==(f=b.internal_variables)&&void 0!==f?f:{}),t&&this.currentPreset.activate_on_switch&&this._executePresetsActivation(),this._selectionChanged()}_executePresetsActivation(){if(this.currentPreset.activate){const e=new vo(this.currentPreset.activate).apply(this.currentPreset.entity,[],0,{});this.hass.callService(e.domain,e.service,e.serviceData,e.target).then((()=>de("success")))}}_setPreset(e){this.currentPreset=e}_updateCalibration(e){this.coordinatesConverter=void 0;const t=this._getCalibration(e);this.coordinatesConverter=new Er(t)}_getMapSrc(e){if(e.map_source.camera){if(this.connected&&this.lastHassUpdate&&this.lastHassUpdate.getTime()+36e4>=(new Date).getTime()){return`${this.hass.hassUrl(this.hass.states[e.map_source.camera].attributes.entity_picture)}&v=${+new Date}`}return lo}return e.map_source.image?`${e.map_source.image}`:lo}_createMapControls(){const e=[],t=this._getCurrentMode();return t?(t.selectionType===ro.MANUAL_RECTANGLE&&e.push(N`
|
||
<paper-button class="map-actions-item clickable ripple" @click="${()=>this._addRectangle()}">
|
||
<ha-icon icon="mdi:plus"></ha-icon>
|
||
</paper-button>
|
||
`),t.selectionType===ro.MANUAL_PATH&&e.push(N`
|
||
<paper-button
|
||
class="map-actions-item clickable ripple"
|
||
@click="${()=>{this.selectedManualPath.removeLast(),de("selection"),this._selectionChanged(),this.requestUpdate()}}">
|
||
<ha-icon icon="mdi:undo-variant"></ha-icon>
|
||
</paper-button>
|
||
<paper-button
|
||
class="map-actions-item clickable ripple"
|
||
@click="${()=>{this.selectedManualPath.clear(),de("selection"),this._selectionChanged(),this.requestUpdate()}}">
|
||
<ha-icon icon="mdi:delete-empty"></ha-icon>
|
||
</paper-button>
|
||
`),t.repeatsType!==co.NONE&&e.push(N`
|
||
<paper-button
|
||
class="map-actions-item clickable ripple"
|
||
@click="${()=>{this.repeats=this.repeats%t.maxRepeats+1,this._selectionChanged(),de("selection")}}">
|
||
<div>×${this.repeats}</div>
|
||
</paper-button>
|
||
`),t.runImmediately||e.push(N`
|
||
<paper-button
|
||
class="map-actions-item main clickable ripple"
|
||
@action="${this._handleRunAction()}"
|
||
.actionHandler="${$o({hasHold:!0,hasDoubleClick:!0})}">
|
||
<ha-icon icon="mdi:play"></ha-icon>
|
||
<ha-icon
|
||
icon="${t.icon}"
|
||
style="position: absolute; transform: scale(0.5) translate(15px, -20px)"></ha-icon>
|
||
</paper-button>
|
||
`),e):[]}_getContext(){return new Wo((()=>this.mapScale),(()=>this.realScale),(e=>this._getMousePosition(e)),(()=>this.requestUpdate()),(()=>this._selectionChanged()),(()=>this.coordinatesConverter),(()=>this.selectedManualRectangles),(()=>this.selectedPredefinedRectangles),(()=>this.selectedRooms),(()=>this.selectedPredefinedPoint),(()=>this._getCurrentMode().coordinatesRounding),(()=>this._getCurrentMode().maxSelections),(e=>this._getCssProperty(e)),(()=>this._runImmediately()),(e=>this._localize(e)))}_getMousePosition(e){return wo(e,this._getSvgWrapper(),this.mapScale)}_setCurrentMode(e,t=!0){const a=this.modes[e];switch(this.selectedManualRectangles=[],this.selectedManualPoint=void 0,this.selectedManualPath.clear(),this.selectedPredefinedRectangles=[],this.selectedRooms=[],this.selectedPredefinedPoint=[],this.selectablePredefinedRectangles=[],this.selectableRooms=[],this.selectablePredefinedPoints=[],null==a?void 0:a.selectionType){case ro.PREDEFINED_RECTANGLE:const e=nr.getFromEntities(a,this.hass,(()=>this._getContext())),t=a.predefinedSelections.map((e=>e)).filter((e=>"string"!=typeof e.zones)).map((e=>new nr(e,this._getContext())));this.selectablePredefinedRectangles=e.concat(t);break;case ro.ROOM:this.selectableRooms=a.predefinedSelections.map((e=>new or(e,this._getContext())));break;case ro.PREDEFINED_POINT:const i=ir.getFromEntities(a,this.hass,(()=>this._getContext())),n=a.predefinedSelections.map((e=>e)).filter((e=>"string"!=typeof e.position)).map((e=>new ir(e,this._getContext())));this.selectablePredefinedPoints=i.concat(n)}this.selectedMode!=e&&t&&de("selection"),this.selectedMode=e,this._selectionChanged()}_getCurrentMode(){return this.modes[this.selectedMode]}_getSelection(e){var t,a,i,n,o,r,s;if(!e)return{selection:[],variables:{}};const l=e.repeatsType===co.INTERNAL?this.repeats:null;let c=[],d={};const m=e=>{var t,a;return Object.assign(Object.assign({},null!==(a=null===(t=e[0])||void 0===t?void 0:t.variables)&&void 0!==a?a:{}),{variables:e.map((e=>{var t;return null!==(t=null==e?void 0:e.variables)&&void 0!==t?t:{}}))})};switch(e.selectionType){case ro.MANUAL_RECTANGLE:c=this.selectedManualRectangles.map((e=>e.toVacuum(l))),d=m(this.selectedManualRectangles);break;case ro.PREDEFINED_RECTANGLE:c=this.selectedPredefinedRectangles.map((e=>e.toVacuum(l))).reduce(((e,t)=>e.concat(t)),[]),d=null!==(a=null===(t=this.selectedPredefinedRectangles[0])||void 0===t?void 0:t.variables)&&void 0!==a?a:{},d=m(this.selectedPredefinedRectangles);break;case ro.ROOM:const e=this.selectedRooms.map((e=>e.toVacuum()));c=[...e,...l&&e.length>0?[l]:[]],d=null!==(n=null===(i=this.selectedRooms[0])||void 0===i?void 0:i.variables)&&void 0!==n?n:{},d=m(this.selectedRooms);break;case ro.MANUAL_PATH:c=this.selectedManualPath.toVacuum(l),d=null!==(o=this.selectedManualPath.variables)&&void 0!==o?o:{},d=m([this.selectedManualPath]);break;case ro.MANUAL_POINT:c=null!==(s=null===(r=this.selectedManualPoint)||void 0===r?void 0:r.toVacuum(l))&&void 0!==s?s:[],d=m([this.selectedManualPoint]);break;case ro.PREDEFINED_POINT:c=this.selectedPredefinedPoint.map((e=>e.toVacuum(l))).reduce(((e,t)=>e.concat(t)),[]),d=m(this.selectedPredefinedPoint)}return e.repeatsType===co.REPEAT&&(c=Array(this.repeats).fill(0).flatMap((()=>c))),{selection:c,variables:d}}async _runImmediately(){return!!this._getCurrentMode().runImmediately&&(await this._run(!1),!0)}_selectionChanged(){const e=this._getCurrentMode(),{selection:t}=this._getSelection(e);if(this._isInEditor()){const e=new Event("map-card-selection-changed");e.selection=null!=t?t:"[]",window.dispatchEvent(e)}}_isInEditor(){var e,t;return"hui-card-preview"===(null===(t=null===(e=this.parentElement)||void 0===e?void 0:e.tagName)||void 0===t?void 0:t.toLowerCase())}_handleAutogeneratedConfigGet(){var e;const t=new Event("map-card-autogenerated-config");t.presetConfig=Object.assign(Object.assign({},null!==(e=this.currentPreset)&&void 0!==e?e:{}),{map_modes:this.modes.map((e=>e.toMapModeConfig()))}),this._getRoomsConfig(),window.dispatchEvent(t)}_handleRoomsConfigGet(){const e=new Event("map-card-room-config");e.roomConfig=this._getRoomsConfig(),window.dispatchEvent(e)}async _handleServiceCallGet(){const e=this._getCurrentPreset(),t=this._getCurrentMode(),{selection:a,variables:i}=this._getSelection(t);if(0==a.length)this._showToast("popups.no_selection","mdi:close",!1),de("failure");else{const n=await t.getServiceCall(this.hass,e.entity,a,this.repeats,Object.assign(Object.assign({},this.internalVariables),i)),o=new Event("map-card-service-call");o.serviceCall=JSON.stringify(n,null,2),window.dispatchEvent(o)}}_handleLovelaceDomEvent(e){const t=e;if("xiaomi_vacuum_map_card"in t.detail&&"action_handler_id"in t.detail.xiaomi_vacuum_map_card&&t.detail.xiaomi_vacuum_map_card.action_handler_id===this.config.action_handler_id){const e=t.detail.xiaomi_vacuum_map_card;"set_internal_variable"===e.action&&this._setInternalVariable(e.variable,e.value)}}_setInternalVariable(e,t){const a=Object.assign({},this.internalVariables);a[e]=t,this.internalVariables=a,this.requestUpdate()}_getRoomsConfig(){var e,t,a,i;const n=this._getCurrentPreset(),o=null===(a=this.hass.states[null!==(t=null===(e=n.map_source)||void 0===e?void 0:e.camera)&&void 0!==t?t:""])||void 0===a?void 0:a.attributes.rooms,r=new Array;if(o){const e=this.modes.filter((e=>e.selectionType===ro.ROOM)).reverse()[0],t=e?this.modes.indexOf(e):-1;for(const e in o){if(!o.hasOwnProperty(e))continue;const t=o[e],a=t.x0.toString().includes("."),n=(e,t=1)=>a?e/t:Math.round(e/t),s={id:e,icon:{name:"mdi:broom",x:n(t.x0+t.x1,2),y:n(t.y0+t.y1,2)},label:{text:null!==(i=t.name)&&void 0!==i?i:`Room ${e}`,x:n(t.x0+t.x1,2),y:n(t.y0+t.y1,2),offset_y:35},outline:[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]]};r.push(s)}return{modeIndex:t,rooms:r}}}async _run(e){var t,a;const i=this._getCurrentPreset(),n=this._getCurrentMode(),{selection:o,variables:r}=this._getSelection(n);if(0==o.length)this._showToast("popups.no_selection","mdi:close",!1),de("failure");else{const a=this.repeats,s=await n.getServiceCall(this.hass,i.entity,o,a,Object.assign(Object.assign({},this.internalVariables),r));if(e||null!==(t=this.config.debug)&&void 0!==t&&t){const e=JSON.stringify(s,null,2);this._showToast("popups.success","mdi:check",!0),console.log(e),window.alert(e),de("success")}else this.hass.callService(s.domain,s.service,s.serviceData,s.target).then((()=>{this._showToast("popups.success","mdi:check",!0),de("success")}),(e=>{this._showToast("popups.failed","mdi:close",!1,e.message),de("failure")}))}(null===(a=i.clean_selection_on_start)||void 0===a||a)&&this._setCurrentMode(this.selectedMode),this._selectionChanged()}_updateElements(){var e,t,a;const i=null===(a=null===(t=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(".modes-dropdown-menu"))||void 0===t?void 0:t.shadowRoot)||void 0===a?void 0:a.querySelector(".dropdown-content");i&&(i.style.borderRadius=this._getCssProperty("--map-card-internal-big-radius")),zo(100).then((()=>this._calculateBasicScale()))}_drawSelection(){var e,t,a;switch(null===(e=this._getCurrentMode())||void 0===e?void 0:e.selectionType){case ro.MANUAL_RECTANGLE:return R`${this.selectedManualRectangles.map((e=>e.render()))}`;case ro.PREDEFINED_RECTANGLE:return R`${this.selectablePredefinedRectangles.map((e=>e.render()))}`;case ro.ROOM:return R`${this.selectableRooms.map((e=>e.render()))}`;case ro.MANUAL_PATH:return R`${null===(t=this.selectedManualPath)||void 0===t?void 0:t.render()}`;case ro.MANUAL_POINT:return R`${null===(a=this.selectedManualPoint)||void 0===a?void 0:a.render()}`;case ro.PREDEFINED_POINT:return R`${this.selectablePredefinedPoints.map((e=>e.render()))}`;default:return null}}_toggleLock(){this.mapLocked=!this.mapLocked,de("selection"),zo(500).then((()=>this.requestUpdate()))}_addRectangle(){var e,t,a,i,n,o,r,s;const l=this._getCurrentPreset(),c=null!==(t=null===(e=l.map_source.crop)||void 0===e?void 0:e.top)&&void 0!==t?t:0,d=null!==(i=null===(a=l.map_source.crop)||void 0===a?void 0:a.bottom)&&void 0!==i?i:0,m=null!==(o=null===(n=l.map_source.crop)||void 0===n?void 0:n.left)&&void 0!==o?o:0,u=null!==(s=null===(r=l.map_source.crop)||void 0===r?void 0:r.right)&&void 0!==s?s:0;if(this._calculateBasicScale(),this.selectedManualRectangles.length>=this._getCurrentMode().maxSelections)return void de("failure");const p=this.realImageHeight*this.realScale-c-d,_=this.realImageWidth*this.realScale-m-u,g=(this.selectedManualRectangles.length+1).toString(),v=(_/3+m-this.mapX)/this.mapScale,h=(p/3+c-this.mapY)/this.mapScale,f=_/3/this.mapScale,b=p/3/this.mapScale;this.selectedManualRectangles.push(new Jo(v,h,f,b,g,this._getContext())),this._selectionChanged(),de("selection"),this.requestUpdate()}_mouseDown(e){e instanceof MouseEvent&&0!=e.button||(this.shouldHandleMouseUp=!0)}_mouseMove(e){e.target.classList.contains("draggable")||(this.selectedManualRectangles.filter((e=>e.isSelected())).forEach((t=>t.externalDrag(e))),this.shouldHandleMouseUp=!1)}_mouseUp(e){if(!(e instanceof MouseEvent&&0!=e.button)&&this.shouldHandleMouseUp){const{x:t,y:a}=wo(e,this._getSvgWrapper(),1);switch(this._getCurrentMode().selectionType){case ro.MANUAL_PATH:de("selection"),this.selectedManualPath.addPoint(t,a),this._selectionChanged();break;case ro.MANUAL_POINT:de("selection"),this.selectedManualPoint=new er(t,a,this._getContext()),this._selectionChanged();break;default:return}bo(e),this.requestUpdate()}this.shouldHandleMouseUp=!1}_handleRunAction(){return async e=>{if(this.hass&&e.detail.action)switch(e.detail.action){case"tap":await this._run(!1);break;case"hold":await this._run(!0);break;case"double_tap":console.log(JSON.stringify(Object.assign(Object.assign({},this._getCurrentPreset()),{additional_presets:void 0,title:void 0,type:void 0}),null,2)),window.alert("Configuration available in browser's console"),de("success")}}}_restoreMap(){const e=this._getMapZoomerContent();e.style.transitionDuration=this._getCssProperty("--map-card-internal-transitions-duration"),this._getPinchZoom().setTransform({scale:1,x:0,y:0,allowChangeEvent:!0}),this.mapScale=1,de("selection"),zo(300).then((()=>e.style.transitionDuration="0s"))}_getCssProperty(e){return getComputedStyle(this._getMapImage()).getPropertyValue(e)}_zoomIn(){de("selection"),this._updateScale(1.5)}_zoomOut(){de("selection"),this._updateScale(1/1.5)}_updateScale(e){const t=this._getMapZoomerContent(),a=this._getPinchZoom(),i=this._getPinchZoom().getBoundingClientRect();this.mapScale=Math.max(this.mapScale*e,.5),t.style.transitionDuration="200ms",a.scaleTo(this.mapScale,{originX:i.left+i.width/2,originY:i.top+i.height/2,relativeTo:"container",allowChangeEvent:!0}),zo(300).then((()=>t.style.transitionDuration="0s"))}_calculateBasicScale(){const e=this._getMapImage();e&&e.naturalWidth>0&&(this.realImageWidth=e.naturalWidth,this.realImageHeight=e.naturalHeight,this.realScale=e.width/e.naturalWidth)}_calculateScale(){const e=this._getPinchZoom();this.mapScale=e.scale,this.mapX=e.x,this.mapY=e.y}_getPinchZoom(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById("map-zoomer")}_getMapImage(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById("map-image")}_getMapZoomerContent(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById("map-zoomer-content")}_getSvgWrapper(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector("#svg-wrapper")}_showConfigErrors(e){e.forEach((e=>console.error(e)));const t=document.createElement("hui-error-card");return t.setConfig({type:"error",error:e[0],origConfig:this.config}),N` ${t} `}_showOldConfig(){return N`
|
||
<hui-warning>
|
||
<h1>Xiaomi Vacuum Map Card ${"v2.1.2"}</h1>
|
||
<p>${this._localize("common.old_configuration")}</p>
|
||
<p>
|
||
<a
|
||
href="https://github.com/PiotrMachowski/lovelace-xiaomi-vacuum-map-card#migrating-from-v1xx"
|
||
target="_blank"
|
||
>${this._localize("common.old_configuration_migration_link")}</a
|
||
>
|
||
</p>
|
||
</hui-warning>
|
||
`}_showInvalidEntities(e){return N`
|
||
<hui-warning>
|
||
<h1>${this._localize("validation.invalid_entities")}</h1>
|
||
<ul>
|
||
${e.map((e=>N` <li>
|
||
<pre>${e}</pre>
|
||
</li>`))}
|
||
</ul>
|
||
</hui-warning>
|
||
`}_showInvalidCalibrationWarning(){return N` <hui-warning>${this._localize("validation.invalid_calibration")}</hui-warning> `}_localize(e){return tn(e,this.hass,this.config)}_showToast(e,t,a,i=""){Co.showToast(this.shadowRoot,(e=>this._localize(e)),"map-card",e,t,a,i)}static get styles(){return o`
|
||
ha-card {
|
||
overflow: hidden;
|
||
display: flow-root;
|
||
--map-card-internal-primary-color: var(--map-card-primary-color, var(--slider-color));
|
||
--map-card-internal-primary-text-color: var(--map-card-primary-text-color, var(--primary-text-color));
|
||
--map-card-internal-secondary-color: var(--map-card-secondary-color, var(--slider-secondary-color));
|
||
--map-card-internal-secondary-text-color: var(
|
||
--map-card-secondary-text-color,
|
||
var(--text-light-primary-color)
|
||
);
|
||
--map-card-internal-tertiary-color: var(--map-card-tertiary-color, var(--secondary-background-color));
|
||
--map-card-internal-tertiary-text-color: var(--map-card-tertiary-text-color, var(--primary-text-color));
|
||
--map-card-internal-disabled-text-color: var(
|
||
--map-card-disabled-text-color,
|
||
var(--disabled-text-color)
|
||
);
|
||
--map-card-internal-zoomer-background: var(
|
||
--map-card-zoomer-background,
|
||
var(--map-card-internal-tertiary-color)
|
||
);
|
||
--map-card-internal-ripple-color: var(--map-card-ripple-color, #7a7f87);
|
||
--map-card-internal-big-radius: var(--map-card-big-radius, 25px);
|
||
--map-card-internal-small-radius: var(--map-card-small-radius, 18px);
|
||
--map-card-internal-predefined-point-icon-wrapper-size: var(
|
||
--map-card-predefined-point-icon-wrapper-size,
|
||
36px
|
||
);
|
||
--map-card-internal-predefined-point-icon-size: var(--map-card-predefined-point-icon-size, 24px);
|
||
--map-card-internal-predefined-point-icon-color: var(
|
||
--map-card-predefined-point-icon-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-predefined-point-icon-color-selected: var(
|
||
--map-card-predefined-point-icon-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-predefined-point-icon-background-color: var(
|
||
--map-card-predefined-point-icon-background-color,
|
||
var(--map-card-internal-secondary-color)
|
||
);
|
||
--map-card-internal-predefined-point-icon-background-color-selected: var(
|
||
--map-card-predefined-point-icon-background-color-selected,
|
||
var(--map-card-internal-primary-color)
|
||
);
|
||
--map-card-internal-predefined-point-label-color: var(
|
||
--map-card-predefined-point-label-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-predefined-point-label-color-selected: var(
|
||
--map-card-predefined-point-label-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-predefined-point-label-font-size: var(
|
||
--map-card-predefined-point-label-font-size,
|
||
12px
|
||
);
|
||
--map-card-internal-manual-point-radius: var(--map-card-manual-point-radius, 5px);
|
||
--map-card-internal-manual-point-line-color: var(--map-card-manual-point-line-color, yellow);
|
||
--map-card-internal-manual-point-fill-color: var(--map-card-manual-point-fill-color, transparent);
|
||
--map-card-internal-manual-point-line-width: var(--map-card-manual-point-line-width, 1px);
|
||
--map-card-internal-manual-path-point-radius: var(--map-card-manual-path-point-radius, 5px);
|
||
--map-card-internal-manual-path-point-line-color: var(--map-card-manual-path-point-line-color, yellow);
|
||
--map-card-internal-manual-path-point-fill-color: var(
|
||
--map-card-manual-path-point-fill-color,
|
||
transparent
|
||
);
|
||
--map-card-internal-manual-path-point-line-width: var(--map-card-manual-path-point-line-width, 1px);
|
||
--map-card-internal-manual-path-line-color: var(--map-card-manual-path-line-color, yellow);
|
||
--map-card-internal-manual-path-line-width: var(--map-card-manual-path-line-width, 1px);
|
||
--map-card-internal-predefined-rectangle-line-width: var(
|
||
--map-card-predefined-rectangle-line-width,
|
||
1px
|
||
);
|
||
--map-card-internal-predefined-rectangle-line-color: var(
|
||
--map-card-predefined-rectangle-line-color,
|
||
white
|
||
);
|
||
--map-card-internal-predefined-rectangle-fill-color: var(
|
||
--map-card-predefined-rectangle-fill-color,
|
||
transparent
|
||
);
|
||
--map-card-internal-predefined-rectangle-line-color-selected: var(
|
||
--map-card-predefined-rectangle-line-color-selected,
|
||
white
|
||
);
|
||
--map-card-internal-predefined-rectangle-fill-color-selected: var(
|
||
--map-card-predefined-rectangle-fill-color-selected,
|
||
rgba(255, 255, 255, 0.2)
|
||
);
|
||
--map-card-internal-predefined-rectangle-line-segment-line: var(
|
||
--map-card-predefined-rectangle-line-segment-line,
|
||
10px
|
||
);
|
||
--map-card-internal-predefined-rectangle-line-segment-gap: var(
|
||
--map-card-predefined-rectangle-line-segment-gap,
|
||
5px
|
||
);
|
||
--map-card-internal-predefined-rectangle-icon-wrapper-size: var(
|
||
--map-card-predefined-rectangle-icon-wrapper-size,
|
||
36px
|
||
);
|
||
--map-card-internal-predefined-rectangle-icon-size: var(
|
||
--map-card-predefined-rectangle-icon-size,
|
||
24px
|
||
);
|
||
--map-card-internal-predefined-rectangle-icon-color: var(
|
||
--map-card-predefined-rectangle-icon-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-predefined-rectangle-icon-color-selected: var(
|
||
--map-card-predefined-rectangle-icon-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-predefined-rectangle-icon-background-color: var(
|
||
--map-card-predefined-rectangle-icon-background-color,
|
||
var(--map-card-internal-secondary-color)
|
||
);
|
||
--map-card-internal-predefined-rectangle-icon-background-color-selected: var(
|
||
--map-card-predefined-rectangle-icon-background-color-selected,
|
||
var(--map-card-internal-primary-color)
|
||
);
|
||
--map-card-internal-predefined-rectangle-label-color: var(
|
||
--map-card-predefined-rectangle-label-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-predefined-rectangle-label-color-selected: var(
|
||
--map-card-predefined-rectangle-label-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-predefined-rectangle-label-font-size: var(
|
||
--map-card-predefined-rectangle-label-font-size,
|
||
12px
|
||
);
|
||
--map-card-internal-manual-rectangle-line-width: var(--map-card-manual-rectangle-line-width, 1px);
|
||
--map-card-internal-manual-rectangle-line-color: var(--map-card-manual-rectangle-line-color, white);
|
||
--map-card-internal-manual-rectangle-fill-color: var(
|
||
--map-card-manual-rectangle-fill-color,
|
||
rgba(255, 255, 255, 0.2)
|
||
);
|
||
--map-card-internal-manual-rectangle-line-color-selected: var(
|
||
--map-card-manual-rectangle-line-color-selected,
|
||
white
|
||
);
|
||
--map-card-internal-manual-rectangle-fill-color-selected: var(
|
||
--map-card-manual-rectangle-fill-color-selected,
|
||
transparent
|
||
);
|
||
--map-card-internal-manual-rectangle-line-segment-line: var(
|
||
--map-card-manual-rectangle-line-segment-line,
|
||
10px
|
||
);
|
||
--map-card-internal-manual-rectangle-line-segment-gap: var(
|
||
--map-card-manual-rectangle-line-segment-gap,
|
||
5px
|
||
);
|
||
--map-card-internal-manual-rectangle-description-color: var(
|
||
--map-card-manual-rectangle-description-color,
|
||
white
|
||
);
|
||
--map-card-internal-manual-rectangle-description-font-size: var(
|
||
--map-card-manual-rectangle-description-font-size,
|
||
12px
|
||
);
|
||
--map-card-internal-manual-rectangle-description-offset-x: var(
|
||
--map-card-manual-rectangle-description-offset-x,
|
||
2px
|
||
);
|
||
--map-card-internal-manual-rectangle-description-offset-y: var(
|
||
--map-card-manual-rectangle-description-offset-y,
|
||
-8px
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-circle-radius: var(
|
||
--map-card-manual-rectangle-delete-circle-radius,
|
||
13px
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-circle-line-color: var(
|
||
--map-card-manual-rectangle-delete-circle-line-color,
|
||
white
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-circle-fill-color: var(
|
||
--map-card-manual-rectangle-delete-circle-fill-color,
|
||
var(--map-card-internal-secondary-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-circle-line-color-selected: var(
|
||
--map-card-manual-rectangle-delete-circle-line-color-selected,
|
||
white
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-circle-fill-color-selected: var(
|
||
--map-card-manual-rectangle-delete-circle-fill-color-selected,
|
||
var(--map-card-internal-primary-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-circle-line-width: var(
|
||
--map-card-manual-rectangle-delete-circle-line-width,
|
||
1px
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-icon-color: var(
|
||
--map-card-manual-rectangle-delete-icon-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-delete-icon-color-selected: var(
|
||
--map-card-manual-rectangle-delete-icon-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-circle-radius: var(
|
||
--map-card-manual-rectangle-resize-circle-radius,
|
||
13px
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-circle-line-color: var(
|
||
--map-card-manual-rectangle-resize-circle-line-color,
|
||
white
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-circle-fill-color: var(
|
||
--map-card-manual-rectangle-resize-circle-fill-color,
|
||
var(--map-card-internal-secondary-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-circle-line-color-selected: var(
|
||
--map-card-manual-rectangle-resize-circle-line-color-selected,
|
||
white
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-circle-fill-color-selected: var(
|
||
--map-card-manual-rectangle-resize-circle-fill-color-selected,
|
||
var(--map-card-internal-primary-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-circle-line-width: var(
|
||
--map-card-manual-rectangle-resize-circle-line-width,
|
||
1px
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-icon-color: var(
|
||
--map-card-manual-rectangle-resize-icon-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-manual-rectangle-resize-icon-color-selected: var(
|
||
--map-card-manual-rectangle-resize-icon-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-room-outline-line-color: var(--map-card-room-outline-line-color, white);
|
||
--map-card-internal-room-outline-line-width: var(--map-card-room-outline-line-width, 1px);
|
||
--map-card-internal-room-outline-line-segment-line: var(
|
||
--map-card-room-outline-line-segment-line,
|
||
10px
|
||
);
|
||
--map-card-internal-room-outline-line-segment-gap: var(--map-card-room-outline-line-segment-gap, 5px);
|
||
--map-card-internal-room-outline-fill-color: var(--map-card-room-outline-fill-color, transparent);
|
||
--map-card-internal-room-outline-line-color-selected: var(
|
||
--map-card-room-outline-line-color-selected,
|
||
white
|
||
);
|
||
--map-card-internal-room-outline-fill-color-selected: var(
|
||
--map-card-room-outline-fill-color-selected,
|
||
rgba(255, 255, 255, 0.3)
|
||
);
|
||
--map-card-internal-room-icon-wrapper-size: var(--map-card-room-icon-wrapper-size, 36px);
|
||
--map-card-internal-room-icon-size: var(--map-card-room-icon-size, 24px);
|
||
--map-card-internal-room-icon-color: var(
|
||
--map-card-room-icon-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-room-icon-color-selected: var(
|
||
--map-card-room-icon-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-room-icon-background-color: var(
|
||
--map-card-room-icon-background-color,
|
||
var(--map-card-internal-secondary-color)
|
||
);
|
||
--map-card-internal-room-icon-background-color-selected: var(
|
||
--map-card-room-icon-background-color-selected,
|
||
var(--map-card-internal-primary-color)
|
||
);
|
||
--map-card-internal-room-label-color: var(
|
||
--map-card-room-label-color,
|
||
var(--map-card-internal-secondary-text-color)
|
||
);
|
||
--map-card-internal-room-label-color-selected: var(
|
||
--map-card-room-label-color-selected,
|
||
var(--map-card-internal-primary-text-color)
|
||
);
|
||
--map-card-internal-room-label-font-size: var(--map-card-room-label-font-size, 12px);
|
||
--map-card-internal-toast-successful-icon-color: var(
|
||
--map-card-toast-successful-icon-color,
|
||
rgb(0, 255, 0)
|
||
);
|
||
--map-card-internal-toast-unsuccessful-icon-color: var(
|
||
--map-card-toast-unsuccessful-icon-color,
|
||
rgb(255, 0, 0)
|
||
);
|
||
--map-card-internal-transitions-duration: var(--map-card-transitions-duration, 200ms);
|
||
}
|
||
|
||
.clickable {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.preset-selector-wrapper {
|
||
width: 100%;
|
||
display: inline-flex;
|
||
align-content: center;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.preset-selector-icon-wrapper {
|
||
height: 44px;
|
||
width: 44px;
|
||
display: grid;
|
||
place-items: center;
|
||
}
|
||
|
||
.preset-selector-icon {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.preset-selector-icon.disabled {
|
||
color: var(--map-card-internal-disabled-text-color);
|
||
cursor: default;
|
||
}
|
||
|
||
.preset-label-wrapper {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
.preset-indicator {
|
||
line-height: 50%;
|
||
}
|
||
|
||
.map-wrapper {
|
||
position: relative;
|
||
height: max-content;
|
||
}
|
||
|
||
#map-zoomer {
|
||
overflow: hidden;
|
||
display: block;
|
||
--scale: 1;
|
||
--x: 0;
|
||
--y: 0;
|
||
background: var(--map-card-internal-zoomer-background);
|
||
}
|
||
|
||
#map-zoomer-content {
|
||
transform: translate(var(--x), var(--y)) scale(var(--scale));
|
||
transform-origin: 0 0;
|
||
position: relative;
|
||
}
|
||
|
||
#map-image {
|
||
width: 100%;
|
||
margin-bottom: -6px;
|
||
}
|
||
|
||
#map-image.zoomed {
|
||
image-rendering: pixelated;
|
||
}
|
||
|
||
#map-image-overlay {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.standalone-icon-on-map {
|
||
background-color: var(--map-card-internal-secondary-color);
|
||
color: var(--map-card-internal-secondary-text-color);
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
margin: 5px;
|
||
width: 36px;
|
||
height: 36px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
|
||
.map-zoom-icons {
|
||
right: 0;
|
||
bottom: 0;
|
||
position: absolute;
|
||
display: inline-flex;
|
||
background-color: var(--map-card-internal-secondary-color);
|
||
color: var(--map-card-internal-secondary-text-color);
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
margin: 5px;
|
||
direction: ltr;
|
||
}
|
||
|
||
.map-zoom-icons-main {
|
||
display: inline-flex;
|
||
border-radius: var(--map-card-internal-small-radius);
|
||
background-color: var(--map-card-internal-primary-color);
|
||
color: var(--map-card-internal-primary-text-color);
|
||
}
|
||
|
||
.icon-on-map {
|
||
touch-action: auto;
|
||
pointer-events: auto;
|
||
height: 36px;
|
||
width: 36px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
|
||
.controls-wrapper {
|
||
margin: 15px;
|
||
}
|
||
|
||
.controls-wrapper > * {
|
||
margin-top: 10px;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.map-controls {
|
||
width: 100%;
|
||
display: inline-flex;
|
||
gap: 10px;
|
||
place-content: space-between;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.map-actions-list {
|
||
border-radius: var(--map-card-internal-big-radius);
|
||
overflow: hidden;
|
||
background-color: var(--map-card-internal-secondary-color);
|
||
color: var(--map-card-internal-secondary-text-color);
|
||
margin-inline-start: auto;
|
||
display: inline-flex;
|
||
height: min-content;
|
||
}
|
||
|
||
.map-actions-item.main {
|
||
border-radius: var(--map-card-internal-big-radius);
|
||
background-color: var(--map-card-internal-primary-color);
|
||
color: var(--map-card-internal-primary-text-color);
|
||
}
|
||
|
||
.map-actions-item {
|
||
width: 50px;
|
||
height: 50px;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
background-color: transparent;
|
||
}
|
||
|
||
.vacuum-controls {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
|
||
.vacuum-actions-list {
|
||
float: right;
|
||
border-radius: var(--map-card-internal-big-radius);
|
||
overflow: hidden;
|
||
background-color: var(--map-card-internal-secondary-color);
|
||
color: var(--map-card-internal-secondary-text-color);
|
||
}
|
||
|
||
.tiles-wrapper {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
justify-content: space-evenly;
|
||
align-items: stretch;
|
||
gap: 5px;
|
||
}
|
||
|
||
.ripple {
|
||
position: relative;
|
||
overflow: hidden;
|
||
transform: translate3d(0, 0, 0);
|
||
}
|
||
|
||
.ripple:after {
|
||
content: "";
|
||
display: block;
|
||
position: absolute;
|
||
border-radius: 50%;
|
||
width: 100%;
|
||
height: 100%;
|
||
top: 0;
|
||
left: 0;
|
||
pointer-events: none;
|
||
background-image: radial-gradient(circle, var(--map-card-internal-ripple-color) 2%, transparent 10.01%);
|
||
background-repeat: no-repeat;
|
||
background-position: 50%;
|
||
transform: scale(10, 10);
|
||
opacity: 0;
|
||
transition: transform 0.5s, opacity 1s;
|
||
}
|
||
|
||
.ripple:active:after {
|
||
transform: scale(0, 0);
|
||
opacity: 0.7;
|
||
transition: 0s;
|
||
}
|
||
|
||
${Bo.styles}
|
||
${Jo.styles}
|
||
${nr.styles}
|
||
${ar.styles}
|
||
${er.styles}
|
||
${ir.styles}
|
||
${or.styles}
|
||
${_r.styles}
|
||
${pr.styles}
|
||
${ur.styles}
|
||
${Co.styles}
|
||
`}};e([ne()],Tr.prototype,"oldConfig",void 0),e([ne()],Tr.prototype,"config",void 0),e([ne()],Tr.prototype,"presetIndex",void 0),e([ne()],Tr.prototype,"realScale",void 0),e([ne()],Tr.prototype,"realImageWidth",void 0),e([ne()],Tr.prototype,"realImageHeight",void 0),e([ne()],Tr.prototype,"mapScale",void 0),e([ne()],Tr.prototype,"mapX",void 0),e([ne()],Tr.prototype,"mapY",void 0),e([ne()],Tr.prototype,"repeats",void 0),e([ne()],Tr.prototype,"selectedMode",void 0),e([ne()],Tr.prototype,"mapLocked",void 0),e([ne()],Tr.prototype,"configErrors",void 0),e([ne()],Tr.prototype,"connected",void 0),e([ne()],Tr.prototype,"internalVariables",void 0),e([ie({attribute:!1})],Tr.prototype,"_hass",void 0),Tr=e([te("xiaomi-vacuum-map-card")],Tr);export{Tr as XiaomiVacuumMapCard};
|