Home-AssistantConfig/config/www/community/lovelace-xiaomi-vacuum-map-.../xiaomi-vacuum-map-card.js

1699 lines
398 KiB
JavaScript
Raw Normal View History

function e(e,t,i,a){var n,o=arguments.length,r=o<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,a);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(r=(o<3?n(r):o>3?n(t,i,r):n(t,i))||r);return o>3&&r&&Object.defineProperty(t,i,r),r}"function"==typeof SuppressedError&&SuppressedError;
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
const t=window,i=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,a=Symbol(),n=new WeakMap;class o{constructor(e,t,i){if(this._$cssResult$=!0,i!==a)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(i&&void 0===e){const i=void 0!==t&&1===t.length;i&&(e=n.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&n.set(t,e))}return e}toString(){return this.cssText}}const r=(e,...t)=>{const i=1===e.length?e[0]:t.reduce(((t,i,a)=>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.")})(i)+e[a+1]),e[0]);return new o(i,e,a)},s=i?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new o("string"==typeof e?e:e+"",void 0,a))(t)})(e):e
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/;var l;const c=window,d=c.trustedTypes,u=d?d.emptyScript:"",m=c.reactiveElementPolyfillSupport,p={toAttribute(e,t){switch(t){case Boolean:e=e?u:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},_=(e,t)=>t!==e&&(t==t||e==e),v={attribute:!0,type:String,converter:p,reflect:!1,hasChanged:_},g="finalized";class h extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,i)=>{const a=this._$Ep(i,t);void 0!==a&&(this._$Ev.set(a,i),e.push(a))})),e}static createProperty(e,t=v){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const i="symbol"==typeof e?Symbol():"__"+e,a=this.getPropertyDescriptor(e,i,t);void 0!==a&&Object.defineProperty(this.prototype,e,a)}}static getPropertyDescriptor(e,t,i){return{get(){return this[t]},set(a){const n=this[e];this[t]=a,this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||v}static finalize(){if(this.hasOwnProperty(g))return!1;this[g]=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const i of t)this.createProperty(i,e[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Ep(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}_$Eu(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,i;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(i=e.hostConnected)||void 0===i||i.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.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)=>{i?e.adoptedStyleSheets=a.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):a.forEach((i=>{const a=document.createElement("style"),n=t.litNonce;void 0!==n&&a.setAttribute("nonce",n),a.textContent=i.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._$ES)||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._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t,i=v){var a;const n=this.constructor._$Ep(e,i);if(void 0!==n&&!0===i.reflect){const o=(void 0!==(null===(a=i.converter)||void 0===a?void 0:a.toAttribute)?i.converter:p).toAttribute(t,i.type);this._$El=e,null==o?this.removeAttribute(n):this.setAttribute(n,o),this._$El=null}}_$AK(e,t){var i;const a=this.constructor,n=a._$Ev.get(e);if(void 0!==n&&this._$El!==n){const e=a.getPropertyOptions(n),o="function"==typeof e.converter?{fromAttribute:e.converter
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
var f;h[g]=!0,h.elementProperties=new Map,h.elementStyles=[],h.shadowRootOptions={mode:"open"},null==m||m({ReactiveElement:h}),(null!==(l=c.reactiveElementVersions)&&void 0!==l?l:c.reactiveElementVersions=[]).push("1.6.3");const b=window,y=b.trustedTypes,k=y?y.createPolicy("lit-html",{createHTML:e=>e}):void 0,A="$lit$",x=`lit$${(Math.random()+"").slice(9)}$`,E="?"+x,w=`<${E}>`,z=document,P=()=>z.createComment(""),M=e=>null===e||"object"!=typeof e&&"function"!=typeof e,T=Array.isArray,S="[ \t\n\f\r]",C=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,O=/-->/g,N=/>/g,R=RegExp(`>|${S}(?:([^\\s"'>=/]+)(${S}*=${S}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),$=/'/g,j=/"/g,L=/^(?:script|style|textarea|title)$/i,I=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),D=I(1),V=I(2),F=Symbol.for("lit-noChange"),U=Symbol.for("lit-nothing"),q=new WeakMap,H=z.createTreeWalker(z,129,null,!1);function K(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==k?k.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,a=[];let n,o=2===t?"<svg>":"",r=C;for(let t=0;t<i;t++){const i=e[t];let s,l,c=-1,d=0;for(;d<i.length&&(r.lastIndex=d,l=r.exec(i),null!==l);)d=r.lastIndex,r===C?"!--"===l[1]?r=O:void 0!==l[1]?r=N:void 0!==l[2]?(L.test(l[2])&&(n=RegExp("</"+l[2],"g")),r=R):void 0!==l[3]&&(r=R):r===R?">"===l[0]?(r=null!=n?n:C,c=-1):void 0===l[1]?c=-2:(c=r.lastIndex-l[2].length,s=l[1],r=void 0===l[3]?R:'"'===l[3]?j:$):r===j||r===$?r=R:r===O||r===N?r=C:(r=R,n=void 0);const u=r===R&&e[t+1].startsWith("/>")?" ":"";o+=r===C?i+w:c>=0?(a.push(s),i.slice(0,c)+A+i.slice(c)+x+u):i+x+(-2===c?(a.push(void 0),t):u)}return[K(e,o+(e[i]||"<?>")+(2===t?"</svg>":"")),a]};class G{constructor({strings:e,_$litType$:t},i){let a;this.parts=[];let n=0,o=0;const r=e.length-1,s=this.parts,[l,c]=X(e,t);if(this.el=G.createElement(l,i),H.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(a=H.nextNode())&&s.length<r;){if(1===a.nodeType){if(a.hasAttributes()){const e=[];for(const t of a.getAttributeNames())if(t.endsWith(A)||t.startsWith(x)){const i=c[o++];if(e.push(t),void 0!==i){const e=a.getAttribute(i.toLowerCase()+A).split(x),t=/([.?@])?(.*)/.exec(i);s.push({type:1,index:n,name:t[2],strings:e,ctor:"."===t[1]?W:"?"===t[1]?ee:"@"===t[1]?te:J})}else s.push({type:6,index:n})}for(const t of e)a.removeAttribute(t)}if(L.test(a.tagName)){const e=a.textContent.split(x),t=e.length-1;if(t>0){a.textContent=y?y.emptyScript:"";for(let i=0;i<t;i++)a.append(e[i],P()),H.nextNode(),s.push({type:2,index:++n});a.append(e[t],P())}}}else if(8===a.nodeType)if(a.data===E)s.push({type:2,index:n});else{let e=-1;for(;-1!==(e=a.data.indexOf(x,e+1));)s.push({type:7,index:n}),e+=x.length-1}n++}}static createElement(e,t){const i=z.createElement("template");return i.innerHTML=e,i}}function B(e,t,i=e,a){var n,o,r,s;if(t===F)return t;let l=void 0!==a?null===(n=i._$Co)||void 0===n?void 0:n[a]:i._$Cl;const c=M(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,i,a)),void 0!==a?(null!==(r=(s=i)._$Co)&&void 0!==r?r:s._$Co=[])[a]=l:i._$Cl=l),void 0!==l&&(t=B(e,l._$AS(e,t.values),l,a)),t}class Z{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){var t;const{el:{content:i},parts:a}=this._$AD,n=(null!==(t=null==e?void 0:e.creationScope)&&void 0!==t?t:z).importNode(i,!0);H.currentNode=n;let o=H.nextNode(),r=0,s=0,l=a[0];for(;void 0!==l;){if(r===l.index){let t;2===l.type?t=new Y(o,o.nextSibling,this,e):1===l.type?t=new l.ctor(o,l.name,l.strings,this,e):6===l.type&&(t=new ie(o,this,e)),this._$AV.push(t),l=a[++s]}r!==(null==l?void 0:l.index)&&(o=H.nextNode(),r++)}return H.currentNode=z,n}v(e){let t=0;for(const i of this._$AV)void 0!==i&&(void 0!==i.strings?(i._$AI(e,i,t),t+=i.strings.length-2):i._$AI(e[t])),t++}}class Y{constructor(e,t,i,a){var n;this.type=2,this._$AH=U,thi
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
var ne,oe;class re extends h{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,t;const i=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=i.firstChild),i}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,i)=>{var a,n;const o=null!==(a=null==i?void 0:i.renderBefore)&&void 0!==a?a:t;let r=o._$litPart$;if(void 0===r){const e=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:null;o._$litPart$=r=new Y(t.insertBefore(P(),e),e,void 0,null!=i?i:{})}return r._$AI(e),r})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return F}}re.finalized=!0,re._$litElement$=!0,null===(ne=globalThis.litElementHydrateSupport)||void 0===ne||ne.call(globalThis,{LitElement:re});const se=globalThis.litElementPolyfillSupport;null==se||se({LitElement:re}),(null!==(oe=globalThis.litElementVersions)&&void 0!==oe?oe:globalThis.litElementVersions=[]).push("3.3.3");
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
const le=e=>t=>"function"==typeof t?((e,t)=>(customElements.define(e,t),t))(e,t):((e,t)=>{const{kind:i,elements:a}=t;return{kind:i,elements:a,finisher(t){customElements.define(e,t)}}})(e,t)
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/,ce=(e,t)=>"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?{...t,finisher(i){i.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(i){i.createProperty(t.key,e)}},de=(e,t,i)=>{t.constructor.createProperty(i,e)};function ue(e){return(t,i)=>void 0!==i?de(e,t,i):ce(e,t)
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/}function me(e){return ue({...e,state:!0})}
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/const pe=({finisher:e,descriptor:t})=>(i,a)=>{var n;if(void 0===a){const a=null!==(n=i.originalKey)&&void 0!==n?n:i.key,o=null!=t?{kind:"method",placement:"prototype",key:a,descriptor:t(i.key)}:{...i,key:a};return null!=e&&(o.finisher=function(t){e(t,a)}),o}{const n=i.constructor;void 0!==t&&Object.defineProperty(i,a,t(a)),null==e||e(n,a)}}
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/;function _e(e,t){return pe({descriptor:i=>{const a={get(){var t,i;return null!==(i=null===(t=this.renderRoot)||void 0===t?void 0:t.querySelector(e))&&void 0!==i?i:null},enumerable:!0,configurable:!0};if(t){const t="symbol"==typeof i?Symbol():"__"+i;a.get=function(){var i,a;return void 0===this[t]&&(this[t]=null!==(a=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(e))&&void 0!==a?a:null),this[t]}}return a}})}
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* @license
* Copyright 2021 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
var ve,ge,he;function fe(e){return e.substr(0,e.indexOf("."))}null===(ve=window.HTMLSlotElement)||void 0===ve||ve.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"}(ge||(ge={})),function(e){e.language="language",e.system="system",e.am_pm="12",e.twenty_four="24"}(he||(he={}));var be=["closed","locked","off"],ye=function(e,t,i,a){a=a||{},i=null==i?{}:i;var n=new Event(t,{bubbles:void 0===a.bubbles||a.bubbles,cancelable:Boolean(a.cancelable),composed:void 0===a.composed||a.composed});return n.detail=i,e.dispatchEvent(n),n},ke=function(e){ye(window,"haptic",e)},Ae=function(e,t){return function(e,t,i){void 0===i&&(i=!0);var a,n=fe(t),o="group"===n?"homeassistant":n;switch(n){case"lock":a=i?"unlock":"lock";break;case"cover":a=i?"open_cover":"close_cover";break;default:a=i?"turn_on":"turn_off"}return e.callService(o,a,{entity_id:t})}(e,t,be.includes(e.states[t].state))},xe=function(e,t,i,a){if(a||(a={action:"more-info"}),!a.confirmation||a.confirmation.exemptions&&a.confirmation.exemptions.some((function(e){return e.user===t.user.id}))||(ke("warning"),confirm(a.confirmation.text||"Are you sure you want to "+a.action+"?")))switch(a.action){case"more-info":(i.entity||i.camera_image)&&ye(e,"hass-more-info",{entityId:i.entity?i.entity:i.camera_image});break;case"navigate":a.navigation_path&&function(e,t,i){void 0===i&&(i=!1),i?history.replaceState(null,"",t):history.pushState(null,"",t),ye(window,"location-changed",{replace:i})}(0,a.navigation_path);break;case"url":a.url_path&&window.open(a.url_path);break;case"toggle":i.entity&&(Ae(t,i.entity),ke("success"));break;case"call-service":if(!a.service)return void ke("failure");var n=a.service.split(".",2);t.callService(n[0],n[1],a.service_data,a.target),ke("success");break;case"fire-dom-event":ye(e,"ll-custom",a)}},Ee=function(e,t,i,a){var n;"double_tap"===a&&i.double_tap_action?n=i.double_tap_action:"hold"===a&&i.hold_action?n=i.hold_action:"tap"===a&&i.tap_action&&(n=i.tap_action),xe(e,t,i,n)};function we(e){return void 0!==e&&"none"!==e.action}var ze={version:"Versió",invalid_configuration:"Configuració no vàlida {0}",description:"Una targeta que et permet controlar l'aspiradora",old_configuration:"S'ha detectat una configuració antiga. Ajusta la teva configuració a l'últim esquema o crea una nova targeta des de zero.",old_configuration_migration_link:"Guia de migrat"},Pe={invalid:"Plantilla no vàlida!",vacuum_goto:"Marcar i anar",vacuum_goto_predefined:"Punts",vacuum_clean_segment:"Habitacions",vacuum_clean_point:"Netejar punt",vacuum_clean_point_predefined:"Punts",vacuum_clean_zone:"Netejar zona",vacuum_clean_zone_predefined:"Llista de zones",vacuum_follow_path:"Camí"},Me={preset:{entity:{missing:"Propietat no trobada: entity"},preset_name:{missing:"Propietat no trobada: preset_name"},platform:{invalid:"Plataforma d'aspiradora no vàlida: {0}"},map_source:{missing:"Propietat no trobada: map_source",none_provided:"Cap càmera ni imatge proporcionada",ambiguous:"Només es permet una font de mapa"},calibration_source:{missing:"Propietat no trobada: calibration_source",ambiguous:"Només es permet una font de calibratge",none_provided:"No s'ha proporcionat cap font de calibratge",calibration_points:{invalid_number:"Es requereixen exactament 3 o 4 punts de calibratge",missing_map:"Cada punt de calibratge ha de contenir coordenades del mapa",missing_vacuum:"Cada punt de calibratge ha de contenir les coordenades de l'aspiradora",missing_coordinate:"Els punts de calibratge de l'aspiradora i del mapa han de contenir les coordenades x i y"}},icons:{invalid:"Error a la configuració: icons",icon:{missing:"Cada entrada de la llista d'icones ha de contenir la propietat de la icona"}},tiles:{invalid:"Error a la configuració: tiles",entity:{missing:"Cada entrada de la llista de mosaics ha de contenir l'entitat o la variable interna"},label:{missing:"Cada entrada de la llista de mosaics ha de contenir una etiqueta"}},map_modes:{invalid:"Error a la configu
<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,i,a,n,o,r="",s=2e3){const l=null==e?void 0:e.getElementById(`${i}-toast`),c=null==e?void 0:e.getElementById(`${i}-toast-text`),d=null==e?void 0:e.getElementById(`${i}-toast-icon`);l&&c&&d&&(l.className+=" show",c.innerText=t(a)+(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)",ol(s).then((()=>l.className=l.className.replace(" show",""))))}static get styles(){return r`
.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 ul=Hs=class extends re{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(js))}_setStaticConfig(){window.confirm(this._localize("editor.alerts.set_static_config"))&&window.dispatchEvent(new Event(Os))}static _generateRoomsConfig(){window.dispatchEvent(new Event(Rs))}setConfig(e){this._config=e,this.loadCardHelpers()}connectedCallback(){super.connectedCallback(),window.addEventListener(Cs,this._handleNewSelection),window.addEventListener(Ns,this._handleAutogeneratedConfig),window.addEventListener($s,this._handleRoomConfig),window.addEventListener(Ls,this._handleServiceCall)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Cs,this._handleNewSelection),window.removeEventListener(Ns,this._handleAutogeneratedConfig),window.removeEventListener($s,this._handleRoomConfig),window.removeEventListener(Ls,this._handleServiceCall)}shouldUpdate(){return this._initialized||this._initialize(),!0}render(){var e,t,i,a,n;if(!this.hass||!this._helpers)return D``;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=ws.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===ws.getRoomsTemplate(this._vacuum_platform);return D`
<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._valueChanged}"></ha-textfield>
</div>
<div class="values">
<ha-select
naturalMenuWidth
fixedMenuPosition
label="${this._localize("editor.label.entity")}"
@selected="${this._valueChanged}"
@closed="${e=>e.stopPropagation()}"
.configValue="${"entity"}"
.value="${this._entity}">
${s.map((e=>D` <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._platformChanged}"
@closed="${e=>e.stopPropagation()}"
.configValue="${"vacuum_platform"}"
.value="${this._vacuum_platform}">
${l.map((e=>D` <mwc-list-item .value="${e}">${e}</mwc-list-item> `))}
</ha-select>
<p>
<a
href="${ws.getPlatformsDocumentationUrl(this._vacuum_platform)}"
target="_blank">
${this._localize(["editor.label.platforms_documentation","{0}",null!==(a=null===(i=this._config)||void 0===i?void 0:i.vacuum_platform)&&void 0!==a?a:ws.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=>D` <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="${()=>this._setStaticConfig()}">
${this._localize("editor.label.set_static_config")}
</mwc-button>
<mwc-button
@click="${()=>Hs._generateRoomsConfig()}"
.disabled=${c}>
${this._localize("editor.label.generate_rooms_config")}
</mwc-button>
<mwc-button @click="${()=>Hs._copyServiceCall()}">
${this._localize("editor.label.copy_service_call")}
</mwc-button>
</div>
<div class="version">${this._localize("common.version")} ${zs}</div>
${dl.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,i,a,n,o;const r=ws.getRoomsTemplate(this._vacuum_platform),s=e.roomConfig;if(!s)return void this._showToast("editor.label.config_set_failed","mdi:close",!1);const l=null!==(i=null===(t=this._config)||void 0===t?void 0:t.map_modes)&&void 0!==i?i:[];0!==l.length&&(null!==(a=s.modeIndex)&&void 0!==a?a:-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(...ws.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;rl(null!=t?t:""),this._showToast("editor.label.copied","mdi:content-copy",!0)}_copySelection(){var e;rl(null!==(e=this._lastSelection)&&void 0!==e?e:[]),this._showToast("editor.label.copied","mdi:content-copy",!0)}_showToast(e,t,i,a=""){dl.showToast(this.shadowRoot,(e=>this._localize(e)),"editor",e,t,i,a)}_platformChanged(e){if(!this._config||!this.hass)return;const t=e.target.value;if(this._vacuum_platform===t)return;const i=Object.assign({},this._config);i.vacuum_platform=t,ws.getCalibration(i.vacuum_platform)?i.calibration_source&&i.calibration_source.camera&&delete i.calibration_source:!i.calibration_source&&i.map_source&&i.map_source.camera&&(i.calibration_source={camera:!0}),this._config=i,ye(this,"config-changed",{config:this._config})}_cameraChanged(e){if(!this._config||!this.hass)return;const t=e.target.value;if(this._camera===t)return;const i=Object.assign({},this._config);i.map_source={camera:t},ws.getCalibration(this._config.vacuum_platform)||i.calibration_source||!("calibration_points"in this.hass.states[t].attributes)||(i.calibration_source={camera:!0}),this._config=i,ye(this,"config-changed",{config:this._config})}_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}ye(this,"config-changed",{config:this._config})}}_setConfig(e){this._config=Object.assign({},e),ye(this,"config-changed",{config:this._config})}_localize(e){return Qo(e,this.hass)}static get styles(){return r`
.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));
padding-bottom: 15px;
}
.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);
}
.version {
position: absolute;
bottom: 0;
right: 0;
opacity: 30%;
}
${dl.styles}
`}};var ml;e([ue({attribute:!1})],ul.prototype,"hass",void 0),e([me()],ul.prototype,"_config",void 0),e([me()],ul.prototype,"_helpers",void 0),e([me()],ul.prototype,"_lastSelection",void 0),ul=Hs=e([le(Ms)],ul),function(e){e.CLEANING_START="cleaning.start",e.INTERNAL_VARIABLE_SET="internal_variable.set",e.MAP_MODE_NEXT="map_mode.next",e.MAP_MODE_PREVIOUS="map_mode.previous",e.MAP_MODE_SET="map_mode.set",e.REPEATS_DECREMENT="repeats.decrement",e.REPEATS_INCREMENT="repeats.increment",e.REPEATS_SET="repeats.set",e.SELECTION_CLEAR="selection.clear"}(ml||(ml={}));class pl{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}const _l="ontouchstart"in window||navigator.maxTouchPoints>0;class vl extends HTMLElement{constructor(){super(),this.holdTime=500,this.held=!1,this.ripple=document.createElement("mwc-ripple")}connectedCallback(){Object.assign(this.style,{position:"absolute",width:_l?"100px":"50px",height:_l?"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 i=e=>{let t,i;this.held=!1,e.touches?(t=e.touches[0].pageX,i=e.touches[0].pageY):(t=e.pageX,i=e.pageY),this.timer=window.setTimeout((()=>{this.startAnimation(t,i),this.held=!0}),this.holdTime)},a=i=>{i.preventDefault(),["touchend","touchcancel"].includes(i.type)&&void 0===this.timer||(clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0,this.held?ye(e,"action",{action:"hold"}):t.hasDoubleClick?"click"===i.type&&i.detail<2||!this.dblClickTimeout?this.dblClickTimeout=window.setTimeout((()=>{this.dblClickTimeout=void 0,ye(e,"action",{action:"tap"})}),250):(clearTimeout(this.dblClickTimeout),this.dblClickTimeout=void 0,ye(e,"action",{action:"double_tap"})):ye(e,"action",{action:"tap"}))};e.addEventListener("touchstart",i,{passive:!0}),e.addEventListener("touchend",a),e.addEventListener("touchcancel",a),e.addEventListener("mousedown",i,{passive:!0}),e.addEventListener("click",a),e.addEventListener("keyup",(e=>{13===e.keyCode&&a(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(Ts,vl);const gl=(e,t)=>{const i=(()=>{const e=document.body;if(e.querySelector(Ts))return e.querySelector(Ts);const t=document.createElement(Ts);return e.appendChild(t),t})();i&&i.bind(e,t)},hl=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends pl{update(e,[t]){return gl(e.element,t),F}render(e){}});class fl{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:bl(e)&&(this.id=e.pointerId)}getCoalesced(){if("getCoalescedEvents"in this.nativePointer){const e=this.nativePointer.getCoalescedEvents().map((e=>new fl(e)));if(e.length>0)return e}return[this]}}const bl=e=>"pointerId"in e,yl=e=>"changedTouches"in e,kl=()=>{};class Al{constructor(e,{start:t=()=>!0,move:i=kl,end:a=kl,rawUpdates:n=!1,avoidPointerEvents:o=!1}={}){this._element=e,this.startPointers=[],this.currentPointers=[],this._excludeFromButtonsCheck=new Set,this._pointerStart=e=>{if(bl(e)&&0===e.buttons)this._excludeFromButtonsCheck.add(e.pointerId);else if(!(1&e.buttons))return;const t=new fl(e);if(!this.currentPointers.some((e=>e.id===t.id))&&this._triggerPointerStart(t,e))if(bl(e)){(e.target&&"setPointerCapture"in e.targ
<foreignObject class="icon-foreign-object"
style="--x-icon: ${a[0]}px; --y-icon: ${a[1]}px;"
x="${a[0]}px" y="${a[1]}px" width="36px" height="36px">
<body xmlns="http://www.w3.org/1999/xhtml">
<div class="map-icon-wrapper ${i} clickable" @click="${t}" >
<ha-icon icon="${null==e?void 0:e.name}" style="background: transparent;"></ha-icon>
</div>
</body>
</foreignObject>
`))}`}renderLabel(e,t){const i=e?this.vacuumToScaledMap(e.x,e.y):[];return V`${el(null!=e&&i.length>0,(()=>{var a,n;return V`
<text class="label-text ${t}"
x="${i[0]+this.scaled(null!==(a=null==e?void 0:e.offset_x)&&void 0!==a?a:0)}px"
y="${i[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,i,a]){const n=[e,t],o=[i,t],r=[i,a],s=[e,a],l=this.vacuumToScaledMap(e,t),c=this.vacuumToScaledMap(i,t),d=this.vacuumToScaledMap(i,a),u=this.vacuumToScaledMap(e,a),m=[n,o,r,s,n,o,r,s],p=[l,c,d,u,l,c,d,u],_=[l,c,d,u],v=p.indexOf(Ll.findTopLeft(_)),g=p.slice(v,v+4),h=this._isCounterClockwise(g),f=m.slice(v,v+4);return h?[Ll._reverse(g),Ll._reverse(f)]:[g,f]}_isCounterClockwise(e){let t=0;return e.forEach(((i,a)=>t+=(e[(a+1)%4][0]-i[0])*(e[(a+1)%4][1]+i[1]))),t<0}static get styles(){return r`
.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 Il;!function(e){e[e.NONE=0]="NONE",e[e.RESIZE=1]="RESIZE",e[e.MOVE=2]="MOVE"}(Il||(Il={}));class Dl extends Ll{constructor(e,t,i,a,n,o){super(o),this._id=n,this._dragMode=Il.NONE,this._vacRect=this._toVacuumFromDimensions(e,t,i,a),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],i=t[0],a=t[2],n=t[3],o=Dl.calcAngle(t[0],t[3]);return V`
<g class="manual-rectangle-wrapper ${this.isSelected()?"selected":""}"
style="--x-resize:${a[0]}px;
--y-resize:${a[1]}px;
--x-delete:${n[0]}px;
--y-delete:${n[1]}px;
--x-description:${i[0]}px;
--y-description:${i[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="${Dl._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,i,a,n]=this._vacRect,o=[Math.min(t,a),Math.min(i,n),Math.max(t,a),Math.max(i,n)];return null!=e?[...o,e]:o}_getDimensions(){const[e,t,i,a]=this.toVacuum(),n=Math.abs(i-e),o=Math.abs(a-t),r=this._context.coordinatesToMetersDivider();if(-1===r)return"";const 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;Zs(e),this._selectedTarget=e.target;const i=e.target;i.classList.contains("movable")?this._dragMode=Il.MOVE:i.classList.contains("resizer")?this._dragMode=Il.RESIZE:this._dragMode=Il.NONE,this._selectedElement=e.target.parentElement,this._vacRectSnapshot=[...this._vacRect];const a=this.getMousePosition(e);this._startPointSnapshot=this.scaledMapToVacuum(a.x,a.y),this.update()}_drag(e){if(!(window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1)&&this._selectedElement){Zs(e);const t=this.getMousePosition(e);if(t){const e=this.scaledMapToVacuum(t.x,t.y),i=e[0]-this._startPointSnapshot[0],a=e[1]-this._startPointSnapshot[1];switch(this._dragMode){case Il.MOVE:this._vacRect=[this._vacRectSnapshot[0]+i,this._vacRectSnapshot[1]+a,this._vacRectSnapshot[2]+i,this._vacRectSnapshot[3]+a],this._setup(this.vacuumToMapRect(this._vacRect)[0]);break;case Il.RESIZE:const e=this.vacuumToMapRect(this._vacRectSnapshot)[1][0],t=[...this._vacRect];e[0]===this._vacRectSnapshot[0]?this._vacRect[2]=this._vacRectSnapshot[2]+i:this._vacRect[0]=this._vacRectSnapshot[0]+i,e[1]===this._vacRectSnapshot[1]?this._vacRect[3]=this._vacRectSnapshot[3]+a:this._vacRect[1]=this._vacRectSnapshot[1]+a,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 Il.NONE:}}}}_setup(e){var t,i,a,n,o,r,s,l,c,d,u,m,p,_,v,g,h;null===(a=null===(i=null===(t=this._selectedElement)||void 0===t?void 0:t.children)||void 0===i?void 0:i.item(0))||void 0===a||a.setAttribute("points",Dl._toPoints(e));const f=e[0],b=e[2],y=e[3],k=Dl.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===(u=null===(d=this._selectedElement)||void 0===d?void 0:d.style)||void 0===u||u.setProperty("--y-delete",y[1]+"px"),null===(p=null===(m=this._selectedElement)||void 0===m?void 0:m.style)||void 0===p||p.setProperty("--x-description",f[0]+"px"),null===(v=null===(_=this._selectedElement)||void 0===_?void 0:_.style)||void 0===v||v.setProperty("--y-description",f[1]+"px"),null===(h=null===(g=this._selectedElement)||void 0===g?void 0:g.style)||void 0===h||h.setProperty("--angle-description",k+"rad")}_endDrag(e){Zs(e),this._selectedElement=null,this._selectedTarget=null,this.update()}_delete(e){Zs(e);const t=Ys(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();ke("selection"),this.update()}}_toVacuumFromDimensions(e,t,i,a){const n=this.realScaled(e),o=this.realScaled(t),r=this.realScaled(i),s=this.realScaled(a),l=this.realMapToVacuum(n,o),c=this.realMapToVacuum(n+r,o+s),d=[l[0],c[0]].sort(),u=[l[1],c[1]].sort();return[d[0],u[0],d[1],u[1]]}static get styles(){return r`
.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 Vl{constructor(e,t,i,a,n,o,r,s,l,c,d,u,m,p,_,v){this.scale=e,this.realScale=t,this.mousePositionCalculator=i,this.update=a,this.selectionChanged=n,this.coordinatesConverter=o,this.selectedManualRectangles=r,this.selectedPredefinedRectangles=s,this.selectedRooms=l,this.selectedPredefinedPoint=c,this.roundingEnabled=d,this.coordinatesToMetersDivider=u,this.maxSelections=m,this.cssEvaluator=p,this.runImmediately=_,this.localize=v}roundMap([e,t]){return this.roundingEnabled()?[Math.round(e),Math.round(t)]:[e,t]}}class Fl extends Ll{constructor(e,t,i){super(i),this._x=e,this._y=t}}class Ul extends Fl{constructor(e,t,i){super(e,t,i)}render(){return V`
<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,i]=this.realMapToVacuum(this.imageX(),this.imageY());return null===e?[t,i]:[t,i,e]}static get styles(){return r`
.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 ql extends Ll{constructor(e,t,i){super(i),this.x=e,this.y=t}imageX(){return this.realScaled(this.x)}imageY(){return this.realScaled(this.y)}renderMask(){return V`
<circle style="r: var(--radius)"
cx="${this.x}"
cy="${this.y}"
fill="black">
</circle>`}render(){return V`
<circle class="manual-path-point"
cx="${this.x}"
cy="${this.y}">
</circle>`}}class Hl extends Ll{constructor(e,t){super(t),this.points=e}render(){if(0===this.points.length)return V``;const e=this.points.map((e=>e.x)),t=this.points.map((e=>e.y)),i=Math.max(...e),a=Math.min(...e),n=Math.max(...t),o=Math.min(...t);return V`
<g class="manual-path-wrapper">
<defs>
<mask id="manual-path-circles-filter">
<rect x="${a}" y="${o}" width="${i-a}" 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[i,a]=this.realMapToVacuum(t.imageX(),t.imageY());return null===e?[i,a]:[i,a,e]}))}addPoint(e,t){this.points.push(new ql(e,t,this._context))}clear(){this.points=[]}removeLast(){this.points.pop()}static get styles(){return r`
.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 Kl extends Ll{constructor(e,t){var i;super(t),this._config=e,this._selected=!1,this._iconConfig=null!==(i=this._config.icon)&&void 0!==i?i:{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,i){return e.predefinedSelections.map((e=>e)).filter((e=>"string"==typeof e.position)).map((e=>e.position.split(".attributes."))).flatMap((e=>{const i=t.states[e[0]],a=2===e.length?i.attributes[e[1]]:i.state;let n;try{n=JSON.parse(a)}catch(e){n=a}return n})).map((e=>new Kl({position:e,label:void 0,icon:{x:e[0],y:e[1],name:"mdi:map-marker"}},i())))}render(){return V`
<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,ke("selection"),this._selected){const e=this._context.selectedPredefinedPoint().pop();void 0!==e&&(e._selected=!1),this._context.selectedPredefinedPoint().push(this)}else Ys(this._context.selectedPredefinedPoint(),this);if(await this._context.runImmediately())return this._selected=!1,void Ys(this._context.selectedPredefinedPoint(),this);this.update()}static get styles(){return r`
.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 Xl extends Ll{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,i){return e.predefinedSelections.map((e=>e)).filter((e=>"string"==typeof e.zones)).map((e=>e.zones.split(".attributes."))).flatMap((e=>{const i=t.states[e[0]],a=2===e.length?i.attributes[e[1]]:i.state;let n;try{n=JSON.parse(a)}catch(e){n=a}return n})).map((e=>new Xl({zones:[e],label:void 0,icon:{x:(e[0]+e[2])/2,y:(e[1]+e[3])/2,name:"mdi:broom"}},i())))}render(){let e=[];"string"!=typeof this._config.zones&&(e=this._config.zones);const t=e.map((e=>this.vacuumToMapRect(e)[0]));return V`
<g class="predefined-rectangle-wrapper ${this._selected?"selected":""}">
${t.map((e=>V`
<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())ke("failure");else{if(this._selected=!this._selected,this._selected?this._context.selectedPredefinedRectangles().push(this):Ys(this._context.selectedPredefinedRectangles(),this),await this._context.runImmediately())return this._selected=!1,void Ys(this._context.selectedPredefinedRectangles(),this);ke("selection"),this.update()}}static get styles(){return r`
.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 Gl extends Ll{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 i=(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 V`
<g class="room-wrapper ${this._selected?"selected":""}
room-${`${this._config.id}`.replace(" ","_")}-wrapper">
<polygon class="room-outline clickable"
points="${i.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())ke("failure");else{if(this._selected=!this._selected,this._selected?this._context.selectedRooms().push(this):Ys(this._context.selectedRooms(),this),this._context.selectionChanged(),await this._context.runImmediately())return this._selected=!1,Ys(this._context.selectedRooms(),this),void this._context.selectionChanged();ke("selection"),this.update()}}static get styles(){return r`
.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 Bl(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 Zl(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 Yl(e,t,i){var a,n;if(!t)return["validation.preset.map_modes.invalid"];if(t.template&&!ws.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 Gs(e,t,i);switch(r.selectionType){case tr.PREDEFINED_RECTANGLE:r.predefinedSelections.flatMap((e=>function(e){const t=e,i=[];return t.zones||i.push("validation.preset.map_modes.predefined_selections.zones.missing"),"string"!=typeof t.zones&&t.zones.filter((e=>4!=e.length)).length>0&&i.push("validation.preset.map_modes.predefined_selections.zones.invalid_parameters_number"),t.icon&&Bl(t.icon).forEach((e=>i.push(e))),t.label&&Zl(t.label).forEach((e=>i.push(e))),i}(e))).forEach((e=>o.push(e)));break;case tr.ROOM:r.predefinedSelections.flatMap((e=>function(e){var t;const i=e,a=[];return void 0===i.id&&a.push("validation.preset.map_modes.predefined_selections.rooms.id.missing"),i.id.toString().match(/^[A-Za-z0-9 _]+$/i)||a.push(["validation.preset.map_modes.predefined_selections.rooms.id.invalid_format","{0}",i.id.toString()]),(null!==(t=i.outline)&&void 0!==t?t:[]).filter((e=>2!=e.length)).length>0&&a.push("validation.preset.map_modes.predefined_selections.rooms.outline.invalid_parameters_number"),i.icon&&Bl(i.icon).forEach((e=>a.push(e))),i.label&&Zl(i.label).forEach((e=>a.push(e))),a}(e))).forEach((e=>o.push(e)));break;case tr.PREDEFINED_POINT:r.predefinedSelections.flatMap((e=>function(e){var t;const i=e,a=[];return i.position||a.push("validation.preset.map_modes.predefined_selections.points.position.missing"),"string"!=typeof i.position&&2!=(null===(t=i.position)||void 0===t?void 0:t.length)&&a.push("validation.preset.map_modes.predefined_selections.points.position.invalid_parameters_number"),i.icon&&Bl(i.icon).forEach((e=>a.push(e))),i.label&&Zl(i.label).forEach((e=>a.push(e))),a}(e))).forEach((e=>o.push(e)));break;case tr.MANUAL_RECTANGLE:case tr.MANUAL_PATH:case tr.MANUAL_POINT:null!==(n=null===(a=r.predefinedSelections)||void 0===a?void 0:a.length)&&void 0!==n&&n&&o.push(["validation.preset.map_modes.predefined_selections.not_applicable","{0}",tr[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 Jl(e,t,i){var a,n,o;const r=[],s=ws.getPlatformsWithDefaultCalibration(),l=new Map([["entity","validation.preset.entity.missing"],["map_source","validation.preset.map_source.missing"]]),c=ws.getPlatformName(e.vacuum_platform);s.includes(c)||l.set("calibration_source","validation.preset.calibration_source.missing");const d=Object.keys(e);var u,m;return l.forEach(((e,t)=>{d.includes(t)||r.push(e)})),e.map_source&&(u=e.map_source,u.camera||u.image?u.camera&&u.image?["validation.preset.map_source.ambiguous"]:[]:["validation.preset.map_source.none_provided"]).forEach((e=>r.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?vo
/**
* 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[i,a]of e)t[i]=a;return t});class gc extends re{createRenderRoot(){return this}}let hc=class extends gc{constructor(){super(...arguments),this.additionalClasses=[]}render(){const e=this.values[this.currentIndex];return D`
<ha-button-menu class="dropdown-menu ${this.additionalClasses.join(" ")}" fixed="true" activatable
@closed="${e=>e.stopPropagation()}"
@click="${()=>this.updateStyles(this.values.length)}">
<div class="dropdown-menu-button clickable" slot="trigger" alt="bottom align">
<paper-button class="dropdown-menu-button-button">
<ha-icon icon="${e.icon}" class="dropdown-icon"></ha-icon>
</paper-button>
${el(this.renderNameCollapsed,(()=>D`
<div class="dropdown-menu-button-text">${e.name}</div>`))}
</div>
${this.values.map(((e,t)=>D`
<mwc-list-item class="dropdown-list-item"
?activated="${this.currentIndex===t}"
@click="${()=>this.setValue(t)}">
<div
class="dropdown-menu-entry clickable ${this.currentIndex===t?"selected":""}">
<div
class="dropdown-menu-entry-button-wrapper ${0===t?"first":""} ${t===this.values.length-1?"last":""} ${this.currentIndex===t?"selected":""}">
<paper-button
class="dropdown-menu-entry-button ${this.currentIndex===t?"selected":""}">
<ha-icon icon="${e.icon}"></ha-icon>
</paper-button>
</div>
<div class="dropdown-menu-entry-text">${e.name}</div>
</div>
</mwc-list-item>`))}
</ha-button-menu>
`}updateStyles(e){var t,i,a;const n=null===(i=null===(t=this.menu)||void 0===t?void 0:t.shadowRoot)||void 0===i?void 0:i.querySelector("div");if(this.menu&&n){const t=50,i=(e-1)*t+32;window.innerHeight-n.getBoundingClientRect().bottom>=i?(n.style.marginTop="0px",this.menu.style.marginTop="0px",n.style.marginBottom=`-${t}px`,this.menu.style.marginBottom=`${t}px`):(n.style.marginTop=`-${t}px`,this.menu.style.marginTop=`${t}px`,n.style.marginBottom="0px",this.menu.style.marginBottom="0px");const o=null===(a=this.menu.shadowRoot)||void 0===a?void 0:a.querySelector("mwc-menu");o&&(o.style.zIndex="1",o.style.position="fixed"),this.menu.querySelectorAll("mwc-list-item").forEach((e=>{e.shadowRoot.querySelector("span").style.flexGrow="1"}))}}static get styles(){return r`
.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;
}
.dropdown-menu-button {
display: inline-flex;
}
.dropdown-list-item:host:host {
flex-grow: 1;
}
.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;
}
.dropdown-menu-button-text {
display: inline-flex;
line-height: 50px;
background-color: transparent;
padding-left: 10px;
padding-right: 15px;
}
.dropdown-menu-entry {
display: inline-flex;
width: 100%;
}
.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);
}
.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);
}
.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);
}
.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);
}
.dropdown-menu-entry-button-wrapper {
background-color: var(--map-card-internal-secondary-color);
color: var(--map-card-internal-secondary-text-color);
overflow: hidden;
}
.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);
}
.dropdown-menu-entry-text {
display: inline-flex;
line-height: 50px;
background-color: transparent;
padding-left: 10px;
padding-right: 15px;
}
.dropdown-menu-listbox {
padding: 0;
background-color: transparent;
}
`}};e([ue({attribute:!1})],hc.prototype,"values",void 0),e([ue({attribute:!1})],hc.prototype,"currentIndex",void 0),e([ue({attribute:!1})],hc.prototype,"setValue",void 0),e([ue({attribute:!1})],hc.prototype,"renderNameCollapsed",void 0),e([ue({attribute:!1})],hc.prototype,"additionalClasses",void 0),e([_e(".dropdown-menu")],hc.prototype,"menu",void 0),hc=e([le("xvmc-dropdown-menu")],hc);let fc=class extends gc{render(){var e,t,i;if(!(this.config&&this.hass&&this.onAction&&this.internalVariables))return;this.className="tile-wrapper clickable ripple "+(this.config.tile_id?`tile-${this.config.tile_id}-wrapper`:"");const a=this.config.entity?this.hass.states[this.config.entity]:void 0;if(!a)return;const n=this.getTileLabel(a),o=this.getTileValue(a),r=this.getIcon(a),s=a?function(e){return fe(e.entity_id)}(a):void 0;return D`
<div
.title="${this.isInEditor?`tile_id: ${this.config.tile_id}`:null!==(e=this.config.tooltip)&&void 0!==e?e:""}"
@action="${this.onAction(this.config)}"
.actionHandler="${hl({hasHold:we(null===(t=this.config)||void 0===t?void 0:t.hold_action),hasDoubleClick:we(null===(i=this.config)||void 0===i?void 0:i.double_tap_action)})}">
<div class="tile-title">${n}</div>
<div class="tile-value-wrapper">
${el(""!==r,(()=>D`
<div class="tile-icon">
<ha-state-icon
.icon=${r}
.state=${a}
data-domain=${(e=>null!=e?e:U)(s)}
data-state=${null==a?void 0:a.state}>
</ha-state-icon>
</div>`))}
<div class="tile-value">${o}</div>
</div>
</div>
`}getTileLabel(e){var t,i,a;return void 0!==this.config.label?this.config.label:void 0!==e?void 0!==this.config.attribute?Vo(this.hass.localize,e,this.hass.entities,this.config.attribute):null!==(i=null===(t=e.attributes)||void 0===t?void 0:t.friendly_name)&&void 0!==i?i:this.config.entity:null!==(a=this.config.tile_id)&&void 0!==a?a:"tile"}getTileValue(e){var t,i;let a="";const n=this.getUnit(),o=void 0!==this.config.multiplier||void 0!==this.config.precision;if(this.config.entity&&e)if(o)a=this.config.attribute?e.attributes[this.config.attribute]:e.state;else{a=er(this.hass,this.config,e);const t=e.attributes.unit_of_measurement;""!==n&&t&&a.endsWith(t)&&(a=a.substring(0,a.length-t.length).trimEnd())}else this.config.internal_variable&&this.config.internal_variable in this.internalVariables&&(a=this.internalVariables[this.config.internal_variable]);!o||null===a||"number"!=typeof a&&isNaN(+a)||(a=parseFloat(a.toString())*(null!==(t=this.config.multiplier)&&void 0!==t?t:1),void 0!==this.config.precision&&(a=a.toFixed(this.config.precision)));const r=null!==(i=this.config.translations)&&void 0!==i?i:{};return`${a}`.toLowerCase()in r&&(a=r[`${a}`.toLowerCase()]),`${a}${n}`}getIcon(e){var t;if(this.config.icon_source){const e=this.config.icon_source.split(".attributes."),t=this.hass.states[e[0]];let i=t.state;return 2===e.length&&(i=t.attributes[e[1]]),i}return void 0===this.config.icon&&e?null!==(t=e.attributes.icon)&&void 0!==t?t:null:this.config.icon}getUnit(){return this.config.unit?"%"===this.config.unit?Xo(this.hass.locale)+"%":` ${this.config.unit}`:""}static get styles(){return r`
.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 {
}
`}};e([ue({attribute:!1})],fc.prototype,"config",void 0),e([ue({attribute:!1})],fc.prototype,"hass",void 0),e([ue({attribute:!1})],fc.prototype,"isInEditor",void 0),e([ue({attribute:!1})],fc.prototype,"onAction",void 0),e([ue({attribute:!1})],fc.prototype,"internalVariables",void 0),fc=e([le("xvmc-tile")],fc);let bc=class extends gc{render(){var e,t,i;if(0!==(null!==(t=null===(e=this.tiles)||void 0===e?void 0:e.length)&&void 0!==t?t:0))return D`
<div class="tiles-wrapper">
${null===(i=this.tiles)||void 0===i?void 0:i.map((e=>D`
<xvmc-tile
.hass=${this.hass}
.config=${e}
.isInEditor=${this.isInEditor}
.onAction=${this.onAction}
.internalVariables=${this.internalVariables}
></xvmc-tile>
`))}
`}static get styles(){return r`
.tiles-wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
align-items: stretch;
gap: 5px;
}
${fc.styles}
`}};e([ue({attribute:!1})],bc.prototype,"tiles",void 0),e([ue({attribute:!1})],bc.prototype,"hass",void 0),e([ue({attribute:!1})],bc.prototype,"isInEditor",void 0),e([ue({attribute:!1})],bc.prototype,"onAction",void 0),e([ue({attribute:!1})],bc.prototype,"internalVariables",void 0),bc=e([le("xvmc-tiles-wrapper")],bc);let yc=class extends gc{render(){var e;const t=this.config.map((e=>{var t;return{icon:e.icon,name:null!==(t=e.label)&&void 0!==t?t:""}})),i=this.config.findIndex((e=>e.isSelected)),a=`icon-menu-${this.config[0].menu_id}`;return D`
<xvmc-dropdown-menu
.title="${this.isInEditor?`menu_id: ${this.config[0].menu_id}`:null!==(e=this.config[i].tooltip)&&void 0!==e?e:""}"
.values=${t}
.currentIndex=${i}
.setValue=${e=>this.onAction(this.config[e])()}
.renderNameCollapsed=${!1}
.additionalClasses=${[a,"dropdown-icon"]}>
</xvmc-dropdown-menu>
`}static get styles(){return r`
.dropdown-icon * .dropdown-menu-button-button {
background-color: transparent;
}
`}};e([ue({attribute:!1})],yc.prototype,"config",void 0),e([ue({attribute:!1})],yc.prototype,"isInEditor",void 0),e([ue({attribute:!1})],yc.prototype,"onAction",void 0),yc=e([le("xvmc-dropdown-icon")],yc);let kc=class extends gc{render(){var e,t,i;return D`
<paper-button
class="single-icon clickable ripple"
.title=${this.isInEditor?`tile_id: ${this.config.icon_id}`:null!==(e=this.config.tooltip)&&void 0!==e?e:""}
@action=${this.onAction(this.config)}
.actionHandler=${hl({hasHold:we(null===(t=this.config)||void 0===t?void 0:t.hold_action),hasDoubleClick:we(null===(i=this.config)||void 0===i?void 0:i.double_tap_action)})}>
<ha-icon icon="${this.config.icon}"></ha-icon>
</paper-button>
`}static get styles(){return r`
.single-icon {
float: left;
width: 50px;
height: 50px;
display: flex;
justify-content: center;
align-items: center;
background-color: transparent;
border-radius: var(--map-card-internal-big-radius);
}
`}};e([ue({attribute:!1})],kc.prototype,"config",void 0),e([ue({attribute:!1})],kc.prototype,"isInEditor",void 0),e([ue({attribute:!1})],kc.prototype,"onAction",void 0),kc=e([le("xvmc-single-icon")],kc);let Ac=class extends gc{render(){return Array.isArray(this.config)?D`
<xvmc-dropdown-icon
.config=${this.config}
.isInEditor=${this.isInEditor}
.onAction=${this.onAction}>
</xvmc-dropdown-icon>
`:D`
<xvmc-single-icon
.config=${this.config}
.isInEditor=${this.isInEditor}
.onAction=${this.onAction}>
</xvmc-single-icon>
`}static get styles(){return r`
${kc.styles}
${yc.styles}
`}};var xc;e([ue({attribute:!1})],Ac.prototype,"config",void 0),e([ue({attribute:!1})],Ac.prototype,"isInEditor",void 0),e([ue({attribute:!1})],Ac.prototype,"onAction",void 0),Ac=e([le("xvmc-icon")],Ac);let Ec=xc=class extends gc{render(){var e,t,i;if(0!==(null!==(t=null===(e=this.icons)||void 0===e?void 0:e.length)&&void 0!==t?t:0))return D`
<div class="icons-wrapper">
<div class="icons-list">
${null===(i=this.icons)||void 0===i?void 0:i.map((e=>D`
<xvmc-icon
.config=${e}
.isInEditor=${this.isInEditor}
.onAction=${this.onAction}
></xvmc-icon>
`))}
</div>
</div>
`}static get styles(){return r`
.icons-wrapper {
display: flex;
justify-content: center;
align-items: center;
}
.icons-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);
display: flex;
flex-wrap: wrap;
justify-content: center;
}
${Ac.styles}
`}static preprocessIcons(e,t,i){if(void 0===e)return[];const a=[],n=new Map;xc.expandMenus(e,t,i).forEach((e=>{const o=Qs(e,t,i);if(void 0===e.menu_id)o&&a.push(e);else{const t=Object.assign(Object.assign({},e),{isSelected:o});n.has(e.menu_id)&&Array.isArray(a[n.get(e.menu_id)])?a[n.get(e.menu_id)].push(t):(n.set(e.menu_id,a.length),a.push([t]))}}));for(let e=a.length-1;e>=0;e--)Array.isArray(a[e])&&!a[e].some((e=>e.isSelected))&&a.splice(e,1);return a}static expandMenus(e,t,i){return e.flatMap((e=>"menu"===e.type?xc.expandMenu(e,t,i):[e]))}static expandMenu(e,t,i){var a;const n=i.states[e.entity];return(null!==(a=n.attributes[e.available_values_attribute])&&void 0!==a?a:[]).map((t=>{var a,o,r,s,l,c;return Object.assign(Object.assign({},e),{label:null!==(o=null===(a=e.value_translation_keys)||void 0===a?void 0:a[t])&&void 0!==o?o:xc.getLabel(i,n,t,e.current_value_attribute),icon:null!==(s=null===(r=e.icon_mapping)||void 0===r?void 0:r[t])&&void 0!==s?s:e.icon,icon_id:`${e.icon_id}_${t.replace(" ","_").toLowerCase()}`,conditions:[...null!==(l=e.conditions)&&void 0!==l?l:[],{entity:e.entity,attribute:e.current_value_attribute,value:`${t}`}],variables:Object.assign(Object.assign({},null!==(c=null==e?void 0:e.variables)&&void 0!==c?c:{}),{value:t})})}))}static getLabel(e,t,i,a){return a?function(e,t,i,a){return Do(e.localize,t,e.locale,e.entities,i,a)}(e,t,a,i):function(e,t,i){return Go(e.localize,t,e.locale,e.entities,i)}(e,t,i)}};e([ue({attribute:!1})],Ec.prototype,"icons",void 0),e([ue({attribute:!1})],Ec.prototype,"isInEditor",void 0),e([ue({attribute:!1})],Ec.prototype,"onAction",void 0),Ec=xc=e([le("xvmc-icons-wrapper")],Ec);let wc=class extends gc{render(){var e;if(this.availablePresets.length<2)return;const t="rtl"===(null===(e=getComputedStyle(this))||void 0===e?void 0:e.getPropertyValue("direction"));return D`
<div class="preset-selector-wrapper">
<div class="preset-selector-icon-wrapper" @click="${this.openPreviousPreset}">
<ha-icon
icon="mdi:chevron-${t?"right":"left"}"
class="preset-selector-icon ${-1===this.previousPresetIndex?"disabled":""}">
</ha-icon>
</div>
<div
class="preset-label-wrapper ${this.presetActivable?"clickable":""}"
@click="${()=>this.executePresetsActivation()}">
<div class="preset-label">${this.presetName}</div>
<div class="preset-indicator">
${new Array(this.availablePresets.length).fill(0).map(((e,t)=>t===this.availablePresetIndex?"●":"○"))}
</div>
</div>
<div class="preset-selector-icon-wrapper" @click="${this.openNextPreset}">
<ha-icon
icon="mdi:chevron-${t?"left":"right"}"
class="preset-selector-icon ${-1===this.nextPresetIndex?"disabled":""}">
</ha-icon>
</div>
</div>
`}static get styles(){return r`
.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%;
}
`}};var zc;e([ue({attribute:!1})],wc.prototype,"availablePresets",void 0),e([ue({attribute:!1})],wc.prototype,"availablePresetIndex",void 0),e([ue({attribute:!1})],wc.prototype,"openPreviousPreset",void 0),e([ue({attribute:!1})],wc.prototype,"previousPresetIndex",void 0),e([ue({attribute:!1})],wc.prototype,"presetActivable",void 0),e([ue({attribute:!1})],wc.prototype,"presetName",void 0),e([ue({attribute:!1})],wc.prototype,"executePresetsActivation",void 0),e([ue({attribute:!1})],wc.prototype,"openNextPreset",void 0),e([ue({attribute:!1})],wc.prototype,"nextPresetIndex",void 0),wc=e([le("xvmc-preset-selector")],wc);const Pc=" XIAOMI-VACUUM-MAP-CARD",Mc=` ${Wo("common.version")} ${zs}`,Tc=Math.max(25,Mc.length)+3,Sc=(e,t)=>e+" ".repeat(t-e.length);console.info(`%c${Sc(Pc,Tc)}\n%c${Sc(Mc,Tc)}`,"color: orange; font-weight: bold; background: black","color: white; font-weight: bold; background: dimgray");const Cc=window;Cc.customCards=Cc.customCards||[],Cc.customCards.push({type:Ps,name:"Vacuum Map Card",description:Wo("common.description")});let Oc=zc=class extends re{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 Hl([],this._getContext()),this.selectedPredefinedRectangles=[],this.selectedRooms=[],this.selectedPredefinedPoint=[],this.selectablePredefinedRectangles=[],this.selectableRooms=[],this.selectablePredefinedPoints=[],this.modes=[],this.isInEditor=!1,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(Ms)}static getStubConfig(e){const t=Object.keys(e.states),i=t.filter((e=>"camera"===e.substr(0,e.indexOf(".")))).filter((t=>null==e?void 0:e.states[t].attributes.calibration_points)),a=t.filter((e=>"vacuum"===e.substr(0,e.indexOf("."))));if(0!==i.length&&0!==a.length)return{type:"custom:"+Ps,map_source:{camera:i[0]},calibration_source:{camera:!0},entity:a[0],vacuum_platform:ws.XIAOMI_MIIO_PLATFORM}}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,i,a;const n=[],o=(null!==(i=null===(t=e.additional_presets)||void 0===t?void 0:t.length)&&void 0!==i?i:0)>0;return Jl(e,o,e.language).forEach((e=>n.push(e))),null===(a=e.additional_presets)||void 0===a||a.flatMap((t=>Jl(t,o,e.language))).forEach((e=>n.push(e))),n.map((t=>Wo(t,e.language)))}(this.config),this.configErrors.length>0||(this.watchedEntities=Ws(this.config),this._setPresetIndex(0,!1,!0),this.requestUpdate("config")))}getCardSize(){return 12}connectedCallback(){super.connectedCallback(),this._isInEditor()&&(window.addEventListener(Os,this._handleAutogeneratedConfigGet),window.addEventListener(Rs,this._handleRoomsConfigGet),window.addEventListener(js,this._handleServiceCallGet),this.isInEditor=!0),document.addEventListener(Is,this._handleLovelaceDomEvent),this.connected=!0,this._updateElements(),ol(100).then((()=>this.requestUpdate()))}disconnectedCallback(){super.disconnectedCallback(),this._isInEditor()&&(window.removeEventListener(Os,this._handleAutogeneratedConfigGet),window.removeEventListener(Rs,this._handleRoomsConfigGet),window.removeEventListener(js,this._handleServiceCallGet)),document.removeEventListener(Is,this._handleLovelaceDomEvent),this.connected=!1}shouldUpdate(e){return!!this.config&&function(e,t,i,a){if(t.has("config")||i)return!0;const n=t.get("hass");return!n||e.some((e=>n.states[e]!==(null==a?void 0:a.states[e])))}(this.watchedEntities,e,!1,this.hass)}render(){var e,t,i,a,n,o,r,s,l,c,d
<div
id="map-zoomer-content"
style="
margin-top: ${-1*(null!==(i=null===(t=p.map_source.crop)||void 0===t?void 0:t.top)&&void 0!==i?i:0)}px;
margin-bottom: ${-1*(null!==(n=null===(a=p.map_source.crop)||void 0===a?void 0:a.bottom)&&void 0!==n?n:0)}px;
margin-left: ${-1*(null!==(r=null===(o=p.map_source.crop)||void 0===o?void 0:o.left)&&void 0!==r?r:0)}px;
margin-right: ${-1*(null!==(l=null===(s=p.map_source.crop)||void 0===s?void 0:s.right)&&void 0!==l?l:0)}px;">
<img
id="map-image"
alt="camera_image"
class="${this.mapScale*this.realScale>1?"zoomed":""}"
src="${y}"
@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)}">
${k?this._drawSelection():null}
</svg>
</div>
</div>
`;return D`
<ha-card style="--map-scale: ${this.mapScale}; --real-scale: ${this.realScale};">
${el((null!==(c=this.config.title)&&void 0!==c?c:"").length>0,(()=>D`<h1 class="card-header">${this.config.title}</h1>`))}
<xvmc-preset-selector
.availablePresets=${v}
.availablePresetIndex=${g}
.openPreviousPreset=${()=>this._openPreviousPreset()}
.previousPresetIndex=${this._getPreviousPresetIndex()}
.presetActivable=${void 0!==p.activate}
.presetName=${p.preset_name}
.executePresetsActivation=${()=>this._executePresetsActivation()}
.openNextPreset=${()=>this._openNextPreset()}
.nextPresetIndex=${this._getNextPresetIndex()}>
</xvmc-preset-selector>
<div class="map-wrapper">
<pinch-zoom
min-scale="0.5"
id="map-zoomer"
@change="${this._calculateScale}"
two-finger-pan="${p.two_finger_pan}"
locked="${this.mapLocked}"
no-default-pan="${this.mapLocked||p.two_finger_pan}"
style="touch-action: none;">
${x}
</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>
${el(!k,(()=>this._showInvalidCalibrationWarning()))}
${el(b.length>1||A.length>0||0!==(null!==(d=null==f?void 0:f.length)&&void 0!==d?d:0)||0!==(null!==(u=null==h?void 0:h.length)&&void 0!==u?u:0),(()=>D`
<div class="controls-wrapper">
${el(k&&(b.length>1||A.length>0),(()=>D`
<div class="map-controls-wrapper">
<div class="map-controls">
${el(b.length>1,(()=>D`
<xvmc-dropdown-menu
.values=${b}
.currentIndex=${this.selectedMode}
.setValue=${e=>this._setCurrentMode(e)}
.renderNameCollapsed=${!0}>
</xvmc-dropdown-menu>
`))}
${el(A.length>0,(()=>D` <div class="map-actions-list">${A}</div> `))}
</div>
</div>
`))}
<xvmc-icons-wrapper
.icons=${f}
.isInEditor=${this.isInEditor}
.onAction=${(e,t)=>tl(this,e,t)}>
</xvmc-icons-wrapper>
<xvmc-tiles-wrapper
.hass=${this.hass}
.tiles=${h}
.isInEditor=${this.isInEditor}
.onAction=${(e,t)=>tl(this,e,t)}
.internalVariables=${this.internalVariables}>
</xvmc-tiles-wrapper>
</div>`))}
${dl.render("map-card")}
</ha-card>
`}updated(e){this._updateElements()}_getCurrentPreset(){return this.currentPreset}_getCalibration(e){var t,i,a,n,o,r,s,l,c,d,u,m,p;if(null===(t=e.calibration_source)||void 0===t?void 0:t.identity)return[{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}}];if((null===(i=e.calibration_source)||void 0===i?void 0:i.calibration_points)&&[3,4].includes(e.calibration_source.calibration_points.length))return e.calibration_source.calibration_points;if(!this.hass)return;if((null===(a=e.calibration_source)||void 0===a?void 0:a.entity)&&!(null===(n=e.calibration_source)||void 0===n?void 0:n.attribute))return JSON.parse(null===(o=this.hass.states[e.calibration_source.entity])||void 0===o?void 0:o.state);if((null===(r=e.calibration_source)||void 0===r?void 0:r.entity)&&(null===(s=e.calibration_source)||void 0===s?void 0:s.attribute))return null===(l=this.hass.states[e.calibration_source.entity])||void 0===l?void 0:l.attributes[e.calibration_source.attribute];if(null===(c=e.calibration_source)||void 0===c?void 0:c.camera)return null===(m=this.hass.states[null!==(u=null===(d=e.map_source)||void 0===d?void 0:d.camera)&&void 0!==u?u:""])||void 0===m?void 0:m.attributes.calibration_points;if(null===(p=e.calibration_source)||void 0===p?void 0:p.platform)return ws.getCalibration(e.calibration_source.platform);const _=ws.getCalibration(e.vacuum_platform);return _||void 0}_firstHass(){if(0===this.configErrors.length&&!this.oldConfig){const e=this._getAllPresets(),t=this._getAllAvailablePresets(),i=e.indexOf(t[0]);this._setPresetIndex(i,!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,i;return 0===(null!==(i=null===(t=e.conditions)||void 0===t?void 0:t.length)&&void 0!==i?i:0)||Qs(e,this.internalVariables,this.hass)}));return 0===t.length?[e[0]]:t}_getPreviousPresetIndex(){const e=this._getAllPresets(),t=e.filter(((e,t)=>{var i,a;return t<this.presetIndex&&(0===(null!==(a=null===(i=e.conditions)||void 0===i?void 0:i.length)&&void 0!==a?a:0)||Qs(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 i,a;return t>this.presetIndex&&(0===(null!==(a=null===(i=e.conditions)||void 0===i?void 0:i.length)&&void 0!==a?a:0)||Qs(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,i=!1){var a,n,o,r,s;if((e=Math.min(Math.max(e,0),null!==(n=null===(a=this.config.additional_presets)||void 0===a?void 0:a.length)&&void 0!==n?n:0))===this.presetIndex&&!i)return;const l=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&&ke("selection"),this.mapLocked=null!==(s=null==l?void 0:l.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(l),this.modes=this._getModes(l),this.presetIndex=e,this.currentPreset=l,this.internalVariables=this._getInternalVariables(l),this._getIconsAndTiles(l,this.internalVariables).then((([e,t])=>this._setPreset(Object.assign(Object.assign({},l),{tiles:t,icons:e})))).then((()=>setTimeout((()=>this.requestUpdate()),100))).then((()=>this._setCurrentMode(0,!1))),t&&this.currentPreset.activate_on_switch&&this._executePresetsActivation(),this._selectionChanged()}_getInternalVariables(e){var t,i;return Object.assign(Object.assign({},null!==(t=ws.getVariables(e.vacuum_platform))&&void 0!==t?t:{}),null!==(i=e.internal_variables)&&void 0!==i?i:{})}_getIconsAndTiles(e,t){var i,a;const n=ws.getPlatformName(e.vacuum_platform),o=Wl.generate(this.hass,e.icons,e.entity,n,t,this.config.language,null!==(i=
<paper-button class="map-actions-item clickable ripple" @click="${()=>this._addRectangle()}">
<ha-icon icon="mdi:plus"></ha-icon>
</paper-button>
`),t.selectionType===tr.MANUAL_PATH&&e.push(D`
<paper-button
class="map-actions-item clickable ripple"
@click="${()=>{this.selectedManualPath.removeLast(),ke("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(),ke("selection"),this._selectionChanged(),this.requestUpdate()}}">
<ha-icon icon="mdi:delete-empty"></ha-icon>
</paper-button>
`),t.repeatsType!==ir.NONE&&e.push(D`
<paper-button
class="map-actions-item clickable ripple"
@click="${()=>{this.repeats=this.repeats%t.maxRepeats+1,this._selectionChanged(),ke("selection")}}">
<div>×${this.repeats}</div>
</paper-button>
`),t.runImmediately||e.push(D`
<paper-button
class="map-actions-item main clickable ripple"
@action="${this._handleRunAction()}"
.actionHandler="${hl({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 Vl((()=>this.mapScale),(()=>this.realScale),(e=>this._getMousePosition(e)),(()=>this.requestUpdate()),(()=>this._selectionChanged()),(()=>this.coordinatesConverter),(()=>this.selectedManualRectangles),(()=>this.selectedPredefinedRectangles),(()=>this.selectedRooms),(()=>this.selectedPredefinedPoint),(()=>{var e,t;return null!==(t=null===(e=this._getCurrentMode())||void 0===e?void 0:e.coordinatesRounding)&&void 0!==t&&t}),(()=>{var e,t;return null!==(t=null===(e=this._getCurrentMode())||void 0===e?void 0:e.coordinatesToMetersDivider)&&void 0!==t?t:1}),(()=>{var e,t;return null!==(t=null===(e=this._getCurrentMode())||void 0===e?void 0:e.maxSelections)&&void 0!==t?t:0}),(e=>this._getCssProperty(e)),(()=>this._runImmediately()),(e=>this._localize(e)))}_getMousePosition(e){return al(e,this._getSvgWrapper(),this.mapScale)}_setCurrentMode(e,t=!0){const i=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==i?void 0:i.selectionType){case tr.PREDEFINED_RECTANGLE:const e=Xl.getFromEntities(i,this.hass,(()=>this._getContext())),t=i.predefinedSelections.map((e=>e)).filter((e=>"string"!=typeof e.zones)).map((e=>new Xl(e,this._getContext())));this.selectablePredefinedRectangles=e.concat(t);break;case tr.ROOM:this.selectableRooms=i.predefinedSelections.map((e=>new Gl(e,this._getContext())));break;case tr.PREDEFINED_POINT:const a=Kl.getFromEntities(i,this.hass,(()=>this._getContext())),n=i.predefinedSelections.map((e=>e)).filter((e=>"string"!=typeof e.position)).map((e=>new Kl(e,this._getContext())));this.selectablePredefinedPoints=a.concat(n)}this.selectedMode!=e&&t&&ke("selection"),this.selectedMode=e,this._selectionChanged()}_getCurrentMode(){return this.modes[this.selectedMode]}_getSelection(e){var t,i,a,n,o,r,s;if(!e)return{selection:[],variables:{}};const l=e.repeatsType===ir.INTERNAL?this.repeats:null;let c=[],d={};const u=e=>{var t,i;return Object.assign(Object.assign({},null!==(i=null===(t=e[0])||void 0===t?void 0:t.variables)&&void 0!==i?i:{}),{variables:e.map((e=>{var t;return null!==(t=null==e?void 0:e.variables)&&void 0!==t?t:{}}))})};switch(e.selectionType){case tr.MANUAL_RECTANGLE:c=this.selectedManualRectangles.map((e=>e.toVacuum(l))),d=u(this.selectedManualRectangles);break;case tr.PREDEFINED_RECTANGLE:c=this.selectedPredefinedRectangles.map((e=>e.toVacuum(l))).reduce(((e,t)=>e.concat(t)),[]),d=null!==(i=null===(t=this.selectedPredefinedRectangles[0])||void 0===t?void 0:t.variables)&&void 0!==i?i:{},d=u(this.selectedPredefinedRectangles);break;case tr.ROOM:const m=this.selectedRooms.map((e=>e.toVacuum())).map((t=>zc.adjustRoomId(t,e)));c=[...m,...l&&m.length>0?[l]:[]],d=null!==(n=null===(a=this.selectedRooms[0])||void 0===a?void 0:a.variables)&&void 0!==n?n:{},d=u(this.selectedRooms);break;case tr.MANUAL_PATH:c=this.selectedManualPath.toVacuum(l),d=null!==(o=this.selectedManualPath.variables)&&void 0!==o?o:{},d=u([this.selectedManualPath]);break;case tr.MANUAL_POINT:c=null!==(s=null===(r=this.selectedManualPoint)||void 0===r?void 0:r.toVacuum(l))&&void 0!==s?s:[],d=u([this.selectedManualPoint]);break;case tr.PREDEFINED_POINT:c=this.selectedPredefinedPoint.map((e=>e.toVacuum(l))).reduce(((e,t)=>e.concat(t)),[]),d=u(this.selectedPredefinedPoint)}return e.repeatsType===ir.REPEAT&&(c=Array(this.repeats).fill(0).flatMap((()=>c))),{selection:c,variables:d}}async _runImmediately(){var e,t;return!(null===(t=null===(e=this._getCurrentMode())||void 0===e?void 0:e.runImmediately)||void 0===t||!t)&&(await this._run(!1),!0)}_selectionChanged(){const e=this._getCurrentMode(),{selection:t}=this._getSelection(e);if(this.isInEditor){const e=new Event(Cs);e.selection=null!=t?t:"[]",window.dispatchEvent(e)}}_isInEditor(){return function e(t){var i,a,n,o,r,s,l,c,d,u,m;return"hui-card"===(null===(a=null===(i=t.parentElement)||void 0===i?vo
<hui-warning>
<h1>Xiaomi Vacuum Map Card ${zs}</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 D`
<hui-warning>
<h1>${this._localize("validation.invalid_entities")}</h1>
<ul>
${e.map((e=>D` <li>
<pre>${e}</pre>
</li>`))}
</ul>
</hui-warning>
`}_showInvalidCalibrationWarning(){return D` <hui-warning>${this._localize("validation.invalid_calibration")}</hui-warning> `}_localize(e){return Qo(e,this.hass,this.config)}_showToast(e,t,i,a=""){dl.showToast(this.shadowRoot,(e=>this._localize(e)),"map-card",e,t,i,a)}static get styles(){return r`
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;
}
.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;
display: flex;
flex-direction: column;
gap: 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;
}
.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;
}
${wc.styles}
${Ll.styles}
${Dl.styles}
${Xl.styles}
${Hl.styles}
${Ul.styles}
${Kl.styles}
${Gl.styles}
${Ec.styles}
${bc.styles}
${hc.styles}
${dl.styles}
`}};e([me()],Oc.prototype,"oldConfig",void 0),e([me()],Oc.prototype,"config",void 0),e([me()],Oc.prototype,"presetIndex",void 0),e([me()],Oc.prototype,"realScale",void 0),e([me()],Oc.prototype,"realImageWidth",void 0),e([me()],Oc.prototype,"realImageHeight",void 0),e([me()],Oc.prototype,"mapScale",void 0),e([me()],Oc.prototype,"mapX",void 0),e([me()],Oc.prototype,"mapY",void 0),e([me()],Oc.prototype,"repeats",void 0),e([me()],Oc.prototype,"selectedMode",void 0),e([me()],Oc.prototype,"mapLocked",void 0),e([me()],Oc.prototype,"configErrors",void 0),e([me()],Oc.prototype,"connected",void 0),e([me()],Oc.prototype,"internalVariables",void 0),e([_e(".modes-dropdown-menu")],Oc.prototype,"_modesDropdownMenu",void 0),e([function(e){return pe({descriptor:t=>({get(){var t,i;return null!==(i=null===(t=this.renderRoot)||void 0===t?void 0:t.querySelectorAll(e))&&void 0!==i?i:[]},enumerable:!0,configurable:!0})})}(".icon-dropdown-menu")],Oc.prototype,"_iconDropdownMenus",void 0),e([ue({attribute:!1})],Oc.prototype,"_hass",void 0),Oc=zc=e([le(Ps)],Oc);export{Oc as XiaomiVacuumMapCard};