Files
hassos_config/www/community/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js
2023-02-26 11:43:30 +01:00

1585 lines
324 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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};