From 120d41317ca64f6eea70559dc822b922707ad08a Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Thu, 20 Aug 2026 08:42:34 +0300 Subject: [PATCH] fix: polish device icons and pointer feedback Issue: #212 User-Visible: yes --- .../houseplan/frontend/houseplan-card.js | 271 ++++++++++-------- demo/smoke_device_icon_design.mjs | 54 +++- demo/smoke_device_preview_parity.mjs | 6 + demo/smoke_feedback_v2.mjs | 22 +- demo/smoke_help_affordance.mjs | 12 +- demo/smoke_touch_tips.mjs | 57 +++- demo/srv/assets/houseplan-card.js | 271 ++++++++++-------- dist/houseplan-card.js | 271 ++++++++++-------- docs/CHANGELOG.md | 7 + docs/CHANGELOG.ru.md | 8 + docs/TESTING.md | 27 +- docs/TOUCH-SUPPORT.md | 11 + docs/USER-GUIDE.ru.md | 17 ++ docs/UX-MODES.md | 8 + docs/images/01-view-desktop.png | Bin 198993 -> 196597 bytes docs/images/02-view-touch.png | Bin 64309 -> 63560 bytes docs/images/06-device-display-preview.png | Bin 298985 -> 296642 bytes docs/images/06-device-editor.png | Bin 300246 -> 298309 bytes docs/images/08-room-card.png | Bin 33131 -> 32783 bytes docs/images/09-device-info.png | Bin 138425 -> 136817 bytes docs/images/screenshots.json | 34 +-- docs/specs/212-device-icons-polish.md | 3 + scripts/mutation-gate.mjs | 48 ++++ src/houseplan-card.ts | 230 ++++++++++++--- src/hp-color-opacity.ts | 2 +- src/hp-device-preview.ts | 2 +- src/hp-dialog.ts | 2 +- src/hp-help.ts | 27 +- src/pointer-modality.ts | 101 +++++++ src/space-card.ts | 16 +- src/styles.ts | 76 +++-- test/device-marker-polish-contract.test.mjs | 54 ++++ test/pointer-modality.test.mjs | 77 +++++ tsconfig.test.json | 2 +- 34 files changed, 1210 insertions(+), 506 deletions(-) create mode 100644 src/pointer-modality.ts create mode 100644 test/device-marker-polish-contract.test.mjs create mode 100644 test/pointer-modality.test.mjs diff --git a/custom_components/houseplan/frontend/houseplan-card.js b/custom_components/houseplan/frontend/houseplan-card.js index 630ddc71..5994bc03 100755 --- a/custom_components/houseplan/frontend/houseplan-card.js +++ b/custom_components/houseplan/frontend/houseplan-card.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let n=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=s.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&s.set(i,t))}return t}toString(){return this.cssText}};const o=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new n(s,t,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new n("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:r,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,g=_?_.emptyScript:"",m=p.reactiveElementPolyfillSupport,f=(t,e)=>t,v={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},y=(t,e)=>!r(t,e),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=b){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const t=this.properties,e=[...h(t),...d(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(e)i.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of s){const s=document.createElement("style"),n=t.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=e.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:v;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??y)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,m?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=t=>t,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,M="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,D="?"+C,T=`<${D}>`,P=document,R=()=>P.createComment(""),A=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,F="[ \t\n\f\r]",E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=P.createTreeWalker(P,129);function Y(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(e):e}const X=(t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"":3===e?"":"",a=E;for(let e=0;e"===l[0]?(a=n??E,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?N:'"'===l[3]?L:H):a===L||a===H?a=N:a===z||a===O?a=E:(a=N,n=void 0);const d=a===N&&t[e+1].startsWith("/>")?" ":"";o+=a===E?i+T:c>=0?(s.push(r),i.slice(0,c)+M+i.slice(c)+C+d):i+C+(-2===c?e:d)}return[Y(t,o+(t[i]||"")+(2===e?"":3===e?"":"")),s]};class J{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=t.length-1,r=this.parts,[l,c]=X(t,e);if(this.el=J.createElement(l,i),K.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=K.nextNode())&&r.length0){s.textContent=$?$.emptyScript:"";for(let i=0;iI(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&A(this._$AH)?this._$AA.nextSibling.data=t:this.T(P.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=J.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new J(t)),e}k(t){I(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(R()),this.O(R()),this,this.options)):i=e[s],i._$AI(n),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!A(t)||t!==this._$AH&&t!==U,o&&(this._$AH=t);else{const s=t;let a,r;for(t=n[0],a=0;a{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(R(),t),t,void 0,i??{})}return n._$AI(t),n},ct=globalThis;let ht=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=lt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};ht._$litElement$=!0,ht.finalized=!0,ct.litElementHydrateSupport?.({LitElement:ht});const dt=ct.litElementPolyfillSupport;dt?.({LitElement:ht}),(ct.litElementVersions??=[]).push("4.2.2");const ut=2,pt=t=>(...e)=>({_$litDirective$:t,values:e});let _t=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};const gt={},mt=pt(class extends _t{constructor(){super(...arguments),this.ot=gt}render(t,e){return e()}update(t,[e,i]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((t,e)=>t===this.ot[e]))return U}else if(this.ot===e)return U;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,i)}}),{I:ft}=at,vt=t=>t,yt=()=>document.createComment(""),bt=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(yt(),n),o=s.insertBefore(yt(),n);i=new ft(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,a=o!==t;if(a){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||a){let t=i._$AA;for(;t!==e;){const e=vt(t).nextSibling;vt(s).insertBefore(t,n),t=e}}}return i},wt=(t,e,i=t)=>(t._$AI(e,i),t),kt={},xt=(t,e=kt)=>t._$AH=e,$t=t=>{t._$AR(),t._$AA.remove()},St=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},Mt=pt(class extends _t{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let a=0;for(const e of t)n[a]=s?s(e,a):a,o[a]=i(e,a),a++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:a}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=a,o;const r=this.ut??=[],l=[];let c,h,d=0,u=n.length-1,p=0,_=o.length-1;for(;d<=u&&p<=_;)if(null===n[d])d++;else if(null===n[u])u--;else if(r[d]===a[p])l[p]=wt(n[d],o[p]),d++,p++;else if(r[u]===a[_])l[_]=wt(n[u],o[_]),u--,_--;else if(r[d]===a[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(r[u]===a[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(a,p,_),h=St(r,d,u)),c.has(r[d]))if(c.has(r[u])){const e=h.get(a[p]),i=void 0!==e?n[e]:null;if(null===i){const e=bt(t,n[d]);wt(e,o[p]),l[p]=e}else l[p]=wt(i,o[p]),bt(t,n[d],i),n[e]=null;p++}else $t(n[u]),u--;else $t(n[d]),d++;for(;p<=_;){const e=bt(t,l[_+1]);wt(e,o[p]),l[p++]=e}for(;d<=u;){const t=n[d++];null!==t&&$t(t)}return this.ut=a,xt(t,l),U}}),Ct=new WeakMap;let Dt=0;class Tt extends ht{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=!1,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Dt,this._focusInitial=()=>{const t=this._focusableElements(),e=t.find(t=>t.hasAttribute("autofocus"))||t[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");e?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=t=>{if("Escape"===t.key){t.preventDefault(),t.stopImmediatePropagation(),this._pruneOverlays();const e=this._overlays[this._overlays.length-1];return e?void this._closeOverlay(e,"escape"):void this._requestClose()}if("Tab"!==t.key||this._useHaDialog)return;const e=this.renderRoot.querySelector(".close"),i=e?[e,...this._focusableElements()]:this._focusableElements();if(!i.length)return t.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const s=this._deepActiveElement(),n=i[0],o=i[i.length-1];!t.shiftKey||s!==n&&i.includes(s)?t.shiftKey||s!==o||(t.preventDefault(),n.focus()):(t.preventDefault(),o.focus())},this._onFallbackCancel=t=>{t.preventDefault(),this._requestClose()},this._onFallbackClick=t=>{this.dismissOnScrim&&t.target===t.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const t=this.getRootNode();this._focusRoot=t;const e=Ct.get(t)||{dialogs:new Set,opener:this._opener};e.dialogs.add(this),Ct.set(t,e),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const t=[...this._overlays];this._overlays=[];for(const e of t.reverse())e.close("disconnect");const e=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const s=e?Ct.get(e):void 0;s?.dialogs.delete(this),super.disconnectedCallback(),e&&s&&requestAnimationFrame(()=>{const t=Ct.get(e);if(!t)return;if(!t.dialogs.size)return t.opener?.isConnected&&t.opener.focus({preventScroll:!0}),void Ct.delete(e);const s=i?.closest("hp-dialog");i?.isConnected&&s&&t.dialogs.has(s)&&i.focus({preventScroll:!0})})}firstUpdated(t){if(super.firstUpdated(t),!this._useHaDialog){const t=this.renderRoot.querySelector("dialog");t&&!t.open&&t.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t&&t!==document.body?t:null}_focusableElements(){const t=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),e=[],i=new Set,s=n=>{if(!i.has(n)){if(i.add(n),n instanceof HTMLElement){if(n.matches(t)&&e.push(n),n instanceof HTMLSlotElement){for(const t of n.assignedNodes({flatten:!0}))s(t);return}if(n.shadowRoot){for(const t of n.shadowRoot.childNodes)s(t);return}}for(const t of n.childNodes)s(t)}};for(const t of this.childNodes)s(t);const n=this.overlayPortal();return n&&s(n),e.filter(t=>{let e=t;for(;e;){const t=getComputedStyle(e);if(e.hidden||e.inert||"true"===e.getAttribute("aria-hidden")||"none"===t.display||"hidden"===t.visibility)return!1;if(e=e.assignedSlot||e.parentElement||(e.getRootNode()instanceof ShadowRoot?e.getRootNode().host:null),e===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(t=>t.owner.isConnected)}_closeOverlay(t,e){const i=this._overlays.findIndex(e=>e.token===t.token);i>=0&&this._overlays.splice(i,1),t.close(e)}registerOverlay(t){this._pruneOverlays();const e=this._overlays.find(e=>e.owner===t.owner);e&&this._overlays.splice(this._overlays.indexOf(e),1);const i=t.group||"transient";for(const t of[...this._overlays].reverse())t.group===i&&this._closeOverlay(t,"exclusive");const s={...t,group:i,token:Symbol("hp-overlay")};this._overlays.push(s);let n=!1;return()=>{if(n)return;n=!0;const t=this._overlays.findIndex(t=>t.token===s.token);t>=0&&this._overlays.splice(t,1)}}closeTransientOverlays(t="outside"){this._pruneOverlays();const e=[...this._overlays].filter(t=>"transient"===(t.group||"transient"));for(const i of e.reverse())this._closeOverlay(i,t);return e.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const t=j` +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let n=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=s.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&s.set(i,t))}return t}toString(){return this.cssText}};const o=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new n(s,t,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new n("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:r,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,g=_?_.emptyScript:"",m=p.reactiveElementPolyfillSupport,f=(t,e)=>t,v={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},y=(t,e)=>!r(t,e),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=b){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const t=this.properties,e=[...h(t),...d(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(e)i.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of s){const s=document.createElement("style"),n=t.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=e.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:v;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??y)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,m?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=t=>t,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,M="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,D="?"+C,T=`<${D}>`,P=document,R=()=>P.createComment(""),A=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,F="[ \t\n\f\r]",E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,H=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=P.createTreeWalker(P,129);function Y(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(e):e}const X=(t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"":3===e?"":"",a=E;for(let e=0;e"===l[0]?(a=n??E,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?H:'"'===l[3]?L:N):a===L||a===N?a=H:a===z||a===O?a=E:(a=H,n=void 0);const d=a===H&&t[e+1].startsWith("/>")?" ":"";o+=a===E?i+T:c>=0?(s.push(r),i.slice(0,c)+M+i.slice(c)+C+d):i+C+(-2===c?e:d)}return[Y(t,o+(t[i]||"")+(2===e?"":3===e?"":"")),s]};class J{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=t.length-1,r=this.parts,[l,c]=X(t,e);if(this.el=J.createElement(l,i),K.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=K.nextNode())&&r.length0){s.textContent=$?$.emptyScript:"";for(let i=0;iI(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&A(this._$AH)?this._$AA.nextSibling.data=t:this.T(P.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=J.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new J(t)),e}k(t){I(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(R()),this.O(R()),this,this.options)):i=e[s],i._$AI(n),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!A(t)||t!==this._$AH&&t!==U,o&&(this._$AH=t);else{const s=t;let a,r;for(t=n[0],a=0;a{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(R(),t),t,void 0,i??{})}return n._$AI(t),n},ct=globalThis;let ht=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=lt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};ht._$litElement$=!0,ht.finalized=!0,ct.litElementHydrateSupport?.({LitElement:ht});const dt=ct.litElementPolyfillSupport;dt?.({LitElement:ht}),(ct.litElementVersions??=[]).push("4.2.2");const ut=2,pt=t=>(...e)=>({_$litDirective$:t,values:e});let _t=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};const gt={},mt=pt(class extends _t{constructor(){super(...arguments),this.ot=gt}render(t,e){return e()}update(t,[e,i]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((t,e)=>t===this.ot[e]))return U}else if(this.ot===e)return U;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,i)}}),{I:ft}=at,vt=t=>t,yt=()=>document.createComment(""),bt=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(yt(),n),o=s.insertBefore(yt(),n);i=new ft(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,a=o!==t;if(a){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||a){let t=i._$AA;for(;t!==e;){const e=vt(t).nextSibling;vt(s).insertBefore(t,n),t=e}}}return i},wt=(t,e,i=t)=>(t._$AI(e,i),t),kt={},xt=(t,e=kt)=>t._$AH=e,$t=t=>{t._$AR(),t._$AA.remove()},St=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},Mt=pt(class extends _t{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let a=0;for(const e of t)n[a]=s?s(e,a):a,o[a]=i(e,a),a++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:a}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=a,o;const r=this.ut??=[],l=[];let c,h,d=0,u=n.length-1,p=0,_=o.length-1;for(;d<=u&&p<=_;)if(null===n[d])d++;else if(null===n[u])u--;else if(r[d]===a[p])l[p]=wt(n[d],o[p]),d++,p++;else if(r[u]===a[_])l[_]=wt(n[u],o[_]),u--,_--;else if(r[d]===a[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(r[u]===a[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(a,p,_),h=St(r,d,u)),c.has(r[d]))if(c.has(r[u])){const e=h.get(a[p]),i=void 0!==e?n[e]:null;if(null===i){const e=bt(t,n[d]);wt(e,o[p]),l[p]=e}else l[p]=wt(i,o[p]),bt(t,n[d],i),n[e]=null;p++}else $t(n[u]),u--;else $t(n[d]),d++;for(;p<=_;){const e=bt(t,l[_+1]);wt(e,o[p]),l[p++]=e}for(;d<=u;){const t=n[d++];null!==t&&$t(t)}return this.ut=a,xt(t,l),U}}),Ct=new WeakMap;let Dt=0;class Tt extends ht{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=!1,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Dt,this._focusInitial=()=>{const t=this._focusableElements(),e=t.find(t=>t.hasAttribute("autofocus"))||t[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");e?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=t=>{if("Escape"===t.key){t.preventDefault(),t.stopImmediatePropagation(),this._pruneOverlays();const e=this._overlays[this._overlays.length-1];return e?void this._closeOverlay(e,"escape"):void this._requestClose()}if("Tab"!==t.key||this._useHaDialog)return;const e=this.renderRoot.querySelector(".close"),i=e?[e,...this._focusableElements()]:this._focusableElements();if(!i.length)return t.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const s=this._deepActiveElement(),n=i[0],o=i[i.length-1];!t.shiftKey||s!==n&&i.includes(s)?t.shiftKey||s!==o||(t.preventDefault(),n.focus()):(t.preventDefault(),o.focus())},this._onFallbackCancel=t=>{t.preventDefault(),this._requestClose()},this._onFallbackClick=t=>{this.dismissOnScrim&&t.target===t.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const t=this.getRootNode();this._focusRoot=t;const e=Ct.get(t)||{dialogs:new Set,opener:this._opener};e.dialogs.add(this),Ct.set(t,e),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const t=[...this._overlays];this._overlays=[];for(const e of t.reverse())e.close("disconnect");const e=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const s=e?Ct.get(e):void 0;s?.dialogs.delete(this),super.disconnectedCallback(),e&&s&&requestAnimationFrame(()=>{const t=Ct.get(e);if(!t)return;if(!t.dialogs.size)return t.opener?.isConnected&&t.opener.focus({preventScroll:!0}),void Ct.delete(e);const s=i?.closest("hp-dialog");i?.isConnected&&s&&t.dialogs.has(s)&&i.focus({preventScroll:!0})})}firstUpdated(t){if(super.firstUpdated(t),!this._useHaDialog){const t=this.renderRoot.querySelector("dialog");t&&!t.open&&t.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t&&t!==document.body?t:null}_focusableElements(){const t=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),e=[],i=new Set,s=n=>{if(!i.has(n)){if(i.add(n),n instanceof HTMLElement){if(n.matches(t)&&e.push(n),n instanceof HTMLSlotElement){for(const t of n.assignedNodes({flatten:!0}))s(t);return}if(n.shadowRoot){for(const t of n.shadowRoot.childNodes)s(t);return}}for(const t of n.childNodes)s(t)}};for(const t of this.childNodes)s(t);const n=this.overlayPortal();return n&&s(n),e.filter(t=>{let e=t;for(;e;){const t=getComputedStyle(e);if(e.hidden||e.inert||"true"===e.getAttribute("aria-hidden")||"none"===t.display||"hidden"===t.visibility)return!1;if(e=e.assignedSlot||e.parentElement||(e.getRootNode()instanceof ShadowRoot?e.getRootNode().host:null),e===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(t=>t.owner.isConnected)}_closeOverlay(t,e){const i=this._overlays.findIndex(e=>e.token===t.token);i>=0&&this._overlays.splice(i,1),t.close(e)}registerOverlay(t){this._pruneOverlays();const e=this._overlays.find(e=>e.owner===t.owner);e&&this._overlays.splice(this._overlays.indexOf(e),1);const i=t.group||"transient";for(const t of[...this._overlays].reverse())t.group===i&&this._closeOverlay(t,"exclusive");const s={...t,group:i,token:Symbol("hp-overlay")};this._overlays.push(s);let n=!1;return()=>{if(n)return;n=!0;const t=this._overlays.findIndex(t=>t.token===s.token);t>=0&&this._overlays.splice(t,1)}}closeTransientOverlays(t="outside"){this._pruneOverlays();const e=[...this._overlays].filter(t=>"transient"===(t.group||"transient"));for(const i of e.reverse())this._closeOverlay(i,t);return e.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const t=j` ${this.icon?j``:G} ${this.title} `;return this._useHaDialog?j` * { pointer-events: auto; } - `,customElements.get("hp-dialog")||customElements.define("hp-dialog",Tt);const Pt=/^#[0-9a-fA-F]{6}$/;function Rt(t,e){return"string"==typeof t&&Pt.test(t)?t:e}const At="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",It=new RegExp(`^rgb\\(${At}, ${At}, ${At}\\)$`);function Ft(t){if(!Array.isArray(t)||t.length<3)return null;const e=t.slice(0,3);if(!e.every(t=>"number"==typeof t&&Number.isFinite(t)))return null;const[i,s,n]=e.map(t=>Math.round(Math.min(255,Math.max(0,t))));return`rgb(${i}, ${s}, ${n})`}const Et=(t,e,i)=>Math.min(i,Math.max(e,Number.isFinite(t)?t:e));function zt(t){return Number.isFinite(t)?(t%360+360)%360:0}function Ot(t){if("string"!=typeof t)return null;const e=t.trim().replace(/^#/,""),i=/^[0-9a-fA-F]{3}$/.test(e)?e.split("").map(t=>`${t}${t}`).join(""):e;return/^[0-9a-fA-F]{6}$/.test(i)?`#${i.toLowerCase()}`:null}function Nt(t){const e=Ot(t);return e?{r:Number.parseInt(e.slice(1,3),16),g:Number.parseInt(e.slice(3,5),16),b:Number.parseInt(e.slice(5,7),16)}:null}function Ht(t){const e=Et(t.r,0,255)/255,i=Et(t.g,0,255)/255,s=Et(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let a=0;return o>0&&(a=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(a),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Et(t,0,255)).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}(function(t){const e=zt(t.h),i=Et(t.s,0,100)/100,s=Et(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),a=s-n;let r;return r=e<60?[n,o,0]:e<120?[o,n,0]:e<180?[0,n,o]:e<240?[0,o,n]:e<300?[o,0,n]:[n,0,o],{r:Math.round(255*(r[0]+a)),g:Math.round(255*(r[1]+a)),b:Math.round(255*(r[2]+a))}}(t))}function Bt(t){const e=t.visualViewport;return e&&Number.isFinite(e.width)&&Number.isFinite(e.height)?{left:Number(e.offsetLeft)||0,top:Number(e.offsetTop)||0,width:Math.max(0,Number(e.width)||0),height:Math.max(0,Number(e.height)||0)}:{left:0,top:0,width:t.innerWidth,height:t.innerHeight}}function qt(t,e,i,s=7,n=8){const o=i.left+n,a=i.top+n,r=Math.max(o,i.left+i.width-n),l=Math.max(a,i.top+i.height-n),c=Math.max(0,r-o),h=Math.max(0,l-a),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>r&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,r-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=a?(m="top",f=Math.min(Math.max(a,g),Math.max(a,l-u))):f=Math.min(Math.max(a,_),Math.max(a,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(c),maxHeight:Math.round(h)}}class jt{constructor(t,e,i){this.owner=t,this.name=e,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(t=!1){const e=this.window();return!t&&!!e&&function(t){const e=t.HTMLElement?.prototype;return"function"==typeof e?.showPopover&&"function"==typeof e?.hidePopover}(e)}get hasFallback(){return!!this.host}containsPath(t){return t.includes(this.owner)||!!this.host&&t.includes(this.host)}ownsActiveElement(){let t=this.owner.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return!(!t||t!==this.owner&&!this.owner.shadowRoot?.contains(t)&&!this.root?.contains(t))}renderFallback(t,e){const i=this.ensureFallback();return i?(lt(j`${t}`,i),i):null}surface(t,e){return e?this.owner.shadowRoot?.querySelector(t)||null:this.root?.querySelector(t)||null}destroy(){this.root&<(G,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const t=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!t)return null;const e=this.owner.ownerDocument.createElement("div");return e.dataset.hpOverlay=this.name,e.style.display="contents",this.keydown&&e.addEventListener("keydown",this.keydown,!0),t.append(e),this.host=e,this.root=e.attachShadow({mode:"open"}),this.root}}const Wt={title:"Color picker",hue:"Hue",saturation:"Saturation",value:"Brightness",hex:"Hex color",invalidHex:"Enter a 3- or 6-digit hex color"};class Ut extends ht{constructor(){super(...arguments),this.label="",this.opacityLabel="Opacity",this.color="#607d8b",this.opacity=1,this.disabled=!1,this.showOpacity=!0,this.pickerLabels=Wt,this._open=!1,this._pickerRaf=0,this._emitRaf=0,this._forceFallback=!1,this._overlayDispose=null,this._hue=0,this._saturation=0,this._value=0,this._hexDraft="#607d8b",this._hexInvalid=!1,this._lastValidColor="#607d8b",this._activePointerId=null,this._outsidePointerDown=t=>{if(!this._open)return;const e=t.composedPath();this._floating.containsPath(e)||this._closePicker(!1,"outside")},this._keyDown=t=>{this._open&&"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation(),this._closePicker(this._floating.ownsActiveElement(),"escape"))},this._floating=new jt(this,"color-opacity",this._keyDown),this._queuePickerPosition=()=>{if(!this._open)return;this._pickerRaf&&cancelAnimationFrame(this._pickerRaf);const t=this._window();t&&(this._pickerRaf=t.requestAnimationFrame(()=>{this._pickerRaf=0,this._positionPicker()||this._closePicker()}))}}connectedCallback(){super.connectedCallback(),this._syncFromColor(this.color,!1),this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.addEventListener("resize",this._queuePickerPosition),t?.addEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.addEventListener("resize",this._queuePickerPosition),t?.visualViewport?.addEventListener("scroll",this._queuePickerPosition),this.addEventListener("keydown",this._keyDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.removeEventListener("resize",this._queuePickerPosition),t?.removeEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.removeEventListener("resize",this._queuePickerPosition),t?.visualViewport?.removeEventListener("scroll",this._queuePickerPosition),this.removeEventListener("keydown",this._keyDown,!0),this._pickerRaf&&cancelAnimationFrame(this._pickerRaf),this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._pickerRaf=0,this._emitRaf=0,this._closePicker(!1,"disconnect"),super.disconnectedCallback()}updated(t){if(t.has("color")){const t=Ot(this.color);t&&t!==this._lastValidColor&&this._syncFromColor(t,this._open)}this.disabled&&this._open?this._closePicker():this._open&&(this._supportsPopover()||this._renderFallback(),(t.has("color")||t.has("opacity")||t.has("showOpacity")||t.has("label")||t.has("opacityLabel")||t.has("pickerLabels"))&&this._queuePickerPosition())}_window(){return this._floating.window()}_supportsPopover(){return this._floating.usesPopover(this._forceFallback)}_dialog(){return this._floating.dialog()}async _toggle(){this.disabled||(this._open?this._closePicker():(this._forceFallback=!1,this._syncFromColor(this.color,!1),this._hexInvalid=!1,this._activePointerId=null,this._open=!0,await this.updateComplete,this._open&&(this._supportsPopover()||this._renderFallback(),this._positionPicker()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:t=>this._closePicker("escape"===t&&this._floating.ownsActiveElement(),t)})||null:this._closePicker())))}_closePicker(t=!1,e="exclusive"){if(!this._open&&!this._floating.hasFallback)return;const i=this._overlayDispose;this._overlayDispose=null,i?.();const s=this.renderRoot.querySelector(".picker");if(s?.hidePopover)try{s.matches(":popover-open")&&s.hidePopover()}catch{}this._open=!1,this._cancelQueuedEmit(),this._activePointerId=null,this._floating.destroy(),t&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_surface(){return this._floating.surface(".picker",this._supportsPopover())}_renderFallback(){const t=Ut.styles.cssText;this._floating.renderFallback(this._pickerTemplate(!1),t)}_positionPicker(){if(!this._open)return!1;const t=this._window(),e=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!t||!e?.isConnected||!i?.isConnected)return!1;const s=Bt(t);if(i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden",this._supportsPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden"}const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(!(n.width&&n.height&&o.width&&o.height))return!1;const a=qt(n,o,s);return i.style.left=`${a.left}px`,i.style.top=`${a.top}px`,i.dataset.side=a.side,i.style.visibility="",!0}_labels(){const t=this.pickerLabels||Wt;return{title:t.title||Wt.title,hue:t.hue||Wt.hue,saturation:t.saturation||Wt.saturation,value:t.value||Wt.value,hex:t.hex||Wt.hex,invalidHex:t.invalidHex||Wt.invalidHex}}_syncFromColor(t,e){const i=Ot(Rt(t,"#607d8b"))||"#607d8b",s=Nt(i);if(!s)return;const n=Ht(s);(!e||n.s>1e-4)&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._hexDraft=i,this._hexInvalid=!1,this._lastValidColor=i}_cancelQueuedEmit(t=!1){this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._emitRaf=0,t&&this._syncFromColor(this._lastValidColor,!0)}_queueHsvEmit(){if(this._emitRaf)return;const t=this._window();t?this._emitRaf=t.requestAnimationFrame(()=>{this._emitRaf=0,this._emitHsv()}):this._emitHsv()}_emitHsv(){this._emit(Lt({h:this._hue,s:this._saturation,v:this._value}),this.opacity)}_setHue(t){this._hue=Math.min(359,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setSaturation(t){this._saturation=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setValue(t){this._value=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setOpacity(t){this._emit(this._lastValidColor,t)}_shiftRangeKey(t,e,i,s,n){if(!t.shiftKey)return;const o="ArrowRight"===t.key||"ArrowUp"===t.key?10:"ArrowLeft"===t.key||"ArrowDown"===t.key?-10:0;o&&(t.preventDefault(),t.stopPropagation(),n(Math.min(s,Math.max(i,e+o))))}_setSvFromPointer(t,e){const i=t.currentTarget.getBoundingClientRect();i.width&&i.height&&(this._saturation=Math.min(100,Math.max(0,(t.clientX-i.left)/i.width*100)),this._value=Math.min(100,Math.max(0,100*(1-(t.clientY-i.top)/i.height))),e?(this._cancelQueuedEmit(),this._emitHsv()):this._queueHsvEmit())}_svPointerDown(t){if(t.preventDefault(),t.stopPropagation(),null===this._activePointerId){this._activePointerId=t.pointerId;try{t.currentTarget.setPointerCapture(t.pointerId)}catch{}this._setSvFromPointer(t,!0)}}_svPointerMove(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!1))}_svPointerUp(t){if(t.pointerId===this._activePointerId){t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!0),this._activePointerId=null;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}}}_svPointerCancel(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._activePointerId=null,this._cancelQueuedEmit(!0))}_svLostPointerCapture(t){t.pointerId===this._activePointerId&&(this._activePointerId=null,this._cancelQueuedEmit(!0))}_hexInput(t){const e=t.target.value;this._hexDraft=e,this._hexInvalid=!1;const i=Ot(e),s=i?Nt(i):null;if(!i||!s)return;const n=Ht(s);n.s>1e-4&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._emit(i,this.opacity,!0)}_commitHex(){const t=Ot(this._hexDraft);if(!t)return this._hexDraft=this._lastValidColor,void(this._hexInvalid=!0);this._hexDraft=t,this._hexInvalid=!1,t!==this._lastValidColor&&this._emit(t,this.opacity)}_hexKeyDown(t){"Enter"===t.key&&(t.preventDefault(),t.stopPropagation(),this._commitHex())}_emit(t,e,i=!1){const s=Ot(t)||this._lastValidColor,n=Number.isFinite(e)?e:Number(this.opacity)||0,o=Math.min(1,Math.max(0,n));this.color=s,this.opacity=o,this._lastValidColor=s,i||(this._hexDraft=s),this._hexInvalid=!1,this.dispatchEvent(new CustomEvent("hp-color-opacity-change",{detail:{color:s,opacity:o},bubbles:!0,composed:!0}))}_pickerTemplate(t){const e=Math.round(100*Math.min(1,Math.max(0,Number(this.opacity)||0))),i=Lt({h:this._hue,s:this._saturation,v:this._value}),s=Lt({h:this._hue,s:100,v:100}),n=this._labels(),o=Math.round(this._hue),a=Math.round(this._saturation),r=Math.round(this._value);return j` + `,customElements.get("hp-dialog")||customElements.define("hp-dialog",Tt);const Pt=/^#[0-9a-fA-F]{6}$/;function Rt(t,e){return"string"==typeof t&&Pt.test(t)?t:e}const At="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",It=new RegExp(`^rgb\\(${At}, ${At}, ${At}\\)$`);function Ft(t){if(!Array.isArray(t)||t.length<3)return null;const e=t.slice(0,3);if(!e.every(t=>"number"==typeof t&&Number.isFinite(t)))return null;const[i,s,n]=e.map(t=>Math.round(Math.min(255,Math.max(0,t))));return`rgb(${i}, ${s}, ${n})`}const Et=(t,e,i)=>Math.min(i,Math.max(e,Number.isFinite(t)?t:e));function zt(t){return Number.isFinite(t)?(t%360+360)%360:0}function Ot(t){if("string"!=typeof t)return null;const e=t.trim().replace(/^#/,""),i=/^[0-9a-fA-F]{3}$/.test(e)?e.split("").map(t=>`${t}${t}`).join(""):e;return/^[0-9a-fA-F]{6}$/.test(i)?`#${i.toLowerCase()}`:null}function Ht(t){const e=Ot(t);return e?{r:Number.parseInt(e.slice(1,3),16),g:Number.parseInt(e.slice(3,5),16),b:Number.parseInt(e.slice(5,7),16)}:null}function Nt(t){const e=Et(t.r,0,255)/255,i=Et(t.g,0,255)/255,s=Et(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let a=0;return o>0&&(a=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(a),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Et(t,0,255)).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}(function(t){const e=zt(t.h),i=Et(t.s,0,100)/100,s=Et(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),a=s-n;let r;return r=e<60?[n,o,0]:e<120?[o,n,0]:e<180?[0,n,o]:e<240?[0,o,n]:e<300?[o,0,n]:[n,0,o],{r:Math.round(255*(r[0]+a)),g:Math.round(255*(r[1]+a)),b:Math.round(255*(r[2]+a))}}(t))}function Bt(t){const e=t.visualViewport;return e&&Number.isFinite(e.width)&&Number.isFinite(e.height)?{left:Number(e.offsetLeft)||0,top:Number(e.offsetTop)||0,width:Math.max(0,Number(e.width)||0),height:Math.max(0,Number(e.height)||0)}:{left:0,top:0,width:t.innerWidth,height:t.innerHeight}}function qt(t,e,i,s=7,n=8){const o=i.left+n,a=i.top+n,r=Math.max(o,i.left+i.width-n),l=Math.max(a,i.top+i.height-n),c=Math.max(0,r-o),h=Math.max(0,l-a),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>r&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,r-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=a?(m="top",f=Math.min(Math.max(a,g),Math.max(a,l-u))):f=Math.min(Math.max(a,_),Math.max(a,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(c),maxHeight:Math.round(h)}}class jt{constructor(t,e,i){this.owner=t,this.name=e,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(t=!1){const e=this.window();return!t&&!!e&&function(t){const e=t.HTMLElement?.prototype;return"function"==typeof e?.showPopover&&"function"==typeof e?.hidePopover}(e)}get hasFallback(){return!!this.host}containsPath(t){return t.includes(this.owner)||!!this.host&&t.includes(this.host)}ownsActiveElement(){let t=this.owner.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return!(!t||t!==this.owner&&!this.owner.shadowRoot?.contains(t)&&!this.root?.contains(t))}renderFallback(t,e){const i=this.ensureFallback();return i?(lt(j`${t}`,i),i):null}surface(t,e){return e?this.owner.shadowRoot?.querySelector(t)||null:this.root?.querySelector(t)||null}destroy(){this.root&<(G,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const t=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!t)return null;const e=this.owner.ownerDocument.createElement("div");return e.dataset.hpOverlay=this.name,e.style.display="contents",this.keydown&&e.addEventListener("keydown",this.keydown,!0),t.append(e),this.host=e,this.root=e.attachShadow({mode:"open"}),this.root}}const Wt={title:"Color picker",hue:"Hue",saturation:"Saturation",value:"Brightness",hex:"Hex color",invalidHex:"Enter a 3- or 6-digit hex color"};class Ut extends ht{constructor(){super(...arguments),this.label="",this.opacityLabel="Opacity",this.color="#607d8b",this.opacity=1,this.disabled=!1,this.showOpacity=!0,this.pickerLabels=Wt,this._open=!1,this._pickerRaf=0,this._emitRaf=0,this._forceFallback=!1,this._overlayDispose=null,this._hue=0,this._saturation=0,this._value=0,this._hexDraft="#607d8b",this._hexInvalid=!1,this._lastValidColor="#607d8b",this._activePointerId=null,this._outsidePointerDown=t=>{if(!this._open)return;const e=t.composedPath();this._floating.containsPath(e)||this._closePicker(!1,"outside")},this._keyDown=t=>{this._open&&"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation(),this._closePicker(this._floating.ownsActiveElement(),"escape"))},this._floating=new jt(this,"color-opacity",this._keyDown),this._queuePickerPosition=()=>{if(!this._open)return;this._pickerRaf&&cancelAnimationFrame(this._pickerRaf);const t=this._window();t&&(this._pickerRaf=t.requestAnimationFrame(()=>{this._pickerRaf=0,this._positionPicker()||this._closePicker()}))}}connectedCallback(){super.connectedCallback(),this._syncFromColor(this.color,!1),this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.addEventListener("resize",this._queuePickerPosition),t?.addEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.addEventListener("resize",this._queuePickerPosition),t?.visualViewport?.addEventListener("scroll",this._queuePickerPosition),this.addEventListener("keydown",this._keyDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.removeEventListener("resize",this._queuePickerPosition),t?.removeEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.removeEventListener("resize",this._queuePickerPosition),t?.visualViewport?.removeEventListener("scroll",this._queuePickerPosition),this.removeEventListener("keydown",this._keyDown,!0),this._pickerRaf&&cancelAnimationFrame(this._pickerRaf),this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._pickerRaf=0,this._emitRaf=0,this._closePicker(!1,"disconnect"),super.disconnectedCallback()}updated(t){if(t.has("color")){const t=Ot(this.color);t&&t!==this._lastValidColor&&this._syncFromColor(t,this._open)}this.disabled&&this._open?this._closePicker():this._open&&(this._supportsPopover()||this._renderFallback(),(t.has("color")||t.has("opacity")||t.has("showOpacity")||t.has("label")||t.has("opacityLabel")||t.has("pickerLabels"))&&this._queuePickerPosition())}_window(){return this._floating.window()}_supportsPopover(){return this._floating.usesPopover(this._forceFallback)}_dialog(){return this._floating.dialog()}async _toggle(){this.disabled||(this._open?this._closePicker():(this._forceFallback=!1,this._syncFromColor(this.color,!1),this._hexInvalid=!1,this._activePointerId=null,this._open=!0,await this.updateComplete,this._open&&(this._supportsPopover()||this._renderFallback(),this._positionPicker()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:t=>this._closePicker("escape"===t&&this._floating.ownsActiveElement(),t)})||null:this._closePicker())))}_closePicker(t=!1,e="exclusive"){if(!this._open&&!this._floating.hasFallback)return;const i=this._overlayDispose;this._overlayDispose=null,i?.();const s=this.renderRoot.querySelector(".picker");if(s?.hidePopover)try{s.matches(":popover-open")&&s.hidePopover()}catch{}this._open=!1,this._cancelQueuedEmit(),this._activePointerId=null,this._floating.destroy(),t&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_surface(){return this._floating.surface(".picker",this._supportsPopover())}_renderFallback(){const t=Ut.styles.cssText;this._floating.renderFallback(this._pickerTemplate(!1),t)}_positionPicker(){if(!this._open)return!1;const t=this._window(),e=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!t||!e?.isConnected||!i?.isConnected)return!1;const s=Bt(t);if(i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden",this._supportsPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden"}const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(!(n.width&&n.height&&o.width&&o.height))return!1;const a=qt(n,o,s);return i.style.left=`${a.left}px`,i.style.top=`${a.top}px`,i.dataset.side=a.side,i.style.visibility="",!0}_labels(){const t=this.pickerLabels||Wt;return{title:t.title||Wt.title,hue:t.hue||Wt.hue,saturation:t.saturation||Wt.saturation,value:t.value||Wt.value,hex:t.hex||Wt.hex,invalidHex:t.invalidHex||Wt.invalidHex}}_syncFromColor(t,e){const i=Ot(Rt(t,"#607d8b"))||"#607d8b",s=Ht(i);if(!s)return;const n=Nt(s);(!e||n.s>1e-4)&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._hexDraft=i,this._hexInvalid=!1,this._lastValidColor=i}_cancelQueuedEmit(t=!1){this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._emitRaf=0,t&&this._syncFromColor(this._lastValidColor,!0)}_queueHsvEmit(){if(this._emitRaf)return;const t=this._window();t?this._emitRaf=t.requestAnimationFrame(()=>{this._emitRaf=0,this._emitHsv()}):this._emitHsv()}_emitHsv(){this._emit(Lt({h:this._hue,s:this._saturation,v:this._value}),this.opacity)}_setHue(t){this._hue=Math.min(359,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setSaturation(t){this._saturation=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setValue(t){this._value=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setOpacity(t){this._emit(this._lastValidColor,t)}_shiftRangeKey(t,e,i,s,n){if(!t.shiftKey)return;const o="ArrowRight"===t.key||"ArrowUp"===t.key?10:"ArrowLeft"===t.key||"ArrowDown"===t.key?-10:0;o&&(t.preventDefault(),t.stopPropagation(),n(Math.min(s,Math.max(i,e+o))))}_setSvFromPointer(t,e){const i=t.currentTarget.getBoundingClientRect();i.width&&i.height&&(this._saturation=Math.min(100,Math.max(0,(t.clientX-i.left)/i.width*100)),this._value=Math.min(100,Math.max(0,100*(1-(t.clientY-i.top)/i.height))),e?(this._cancelQueuedEmit(),this._emitHsv()):this._queueHsvEmit())}_svPointerDown(t){if(t.preventDefault(),t.stopPropagation(),null===this._activePointerId){this._activePointerId=t.pointerId;try{t.currentTarget.setPointerCapture(t.pointerId)}catch{}this._setSvFromPointer(t,!0)}}_svPointerMove(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!1))}_svPointerUp(t){if(t.pointerId===this._activePointerId){t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!0),this._activePointerId=null;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}}}_svPointerCancel(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._activePointerId=null,this._cancelQueuedEmit(!0))}_svLostPointerCapture(t){t.pointerId===this._activePointerId&&(this._activePointerId=null,this._cancelQueuedEmit(!0))}_hexInput(t){const e=t.target.value;this._hexDraft=e,this._hexInvalid=!1;const i=Ot(e),s=i?Ht(i):null;if(!i||!s)return;const n=Nt(s);n.s>1e-4&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._emit(i,this.opacity,!0)}_commitHex(){const t=Ot(this._hexDraft);if(!t)return this._hexDraft=this._lastValidColor,void(this._hexInvalid=!0);this._hexDraft=t,this._hexInvalid=!1,t!==this._lastValidColor&&this._emit(t,this.opacity)}_hexKeyDown(t){"Enter"===t.key&&(t.preventDefault(),t.stopPropagation(),this._commitHex())}_emit(t,e,i=!1){const s=Ot(t)||this._lastValidColor,n=Number.isFinite(e)?e:Number(this.opacity)||0,o=Math.min(1,Math.max(0,n));this.color=s,this.opacity=o,this._lastValidColor=s,i||(this._hexDraft=s),this._hexInvalid=!1,this.dispatchEvent(new CustomEvent("hp-color-opacity-change",{detail:{color:s,opacity:o},bubbles:!0,composed:!0}))}_pickerTemplate(t){const e=Math.round(100*Math.min(1,Math.max(0,Number(this.opacity)||0))),i=Lt({h:this._hue,s:this._saturation,v:this._value}),s=Lt({h:this._hue,s:100,v:100}),n=this._labels(),o=Math.round(this._hue),a=Math.round(this._saturation),r=Math.round(this._value);return j` `:G}
${s} @@ -4440,7 +4457,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`:G} - `}}Bu.properties={hass:{attribute:!1},_config:{state:!0},_snap:{state:!0},_continuityEpoch:{state:!0}},Bu.styles=[Kt,o` + `}}qu.properties={hass:{attribute:!1},_config:{state:!0},_snap:{state:!0},_continuityEpoch:{state:!0}},qu.styles=[Kt,o` .hp-static-title { font-weight: 700; padding: 10px 14px 6px; @@ -4512,7 +4529,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 font-weight: 600; cursor: pointer; } - .hp-static-btn:hover { + :host([data-pointer-hover]) .hp-static-btn:hover { filter: brightness(1.08); } .hp-static-error { @@ -4520,7 +4537,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 text-align: center; color: var(--secondary-text-color, #9aa4ad); } - `],customElements.get("houseplan-space-card")||customElements.define("houseplan-space-card",Bu),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-space-card"===t.type)||window.customCards.push({type:"houseplan-space-card",name:"House Plan — Space (static)",description:"Read-only live schematic of a single houseplan space, with a deep-link button.",preview:!1,documentation:"https://github.com/Matysh/houseplan-card"});const qu=o` + `],customElements.get("houseplan-space-card")||customElements.define("houseplan-space-card",qu),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-space-card"===t.type)||window.customCards.push({type:"houseplan-space-card",name:"House Plan — Space (static)",description:"Read-only live schematic of a single houseplan space, with a deep-link button.",preview:!1,documentation:"https://github.com/Matysh/houseplan-card"});const ju=o` :host { --hp-editor-tray-bg-fallback: color-mix(in srgb, var(--card-background-color, var(--hp-bg)) 94%, var(--hp-line)); --hp-editor-tray-bg: color-mix(in srgb, var(--card-background-color, var(--hp-bg)) 86%, transparent); @@ -4691,7 +4708,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 .editor-secondary { transition: none; } .editor-group-launcher .group-chevron { transition: none; } } -`,ju=(t,e)=>(t.composedPath?.()||[t.target]).some(t=>(t=>!!t&&"function"==typeof t.matches)(t)&&e(t));class Wu{constructor(t){this.host=t,this._openGroupId=null,this._groupGeneration=0,this._renderedContext="",this._focusOwned=!1,this._currentModel=null,this._blocked=!1,this._dismissPointerTarget=null,this._globalDismissListening=!1,this._globalDismissGuard=t=>{this.handleOutsideDismiss(t)}}get hasOpenGroup(){return null!==this._openGroupId}get groupGeneration(){return this._groupGeneration}activeGroup(t){return this._openGroupId&&t.find(t=>t.id===this._openGroupId)||null}reset(){this._openGroupId=null,this._contentAnimation?.cancel(),this._contentAnimation=void 0,this._renderedContext="",this._focusOwned=!1,this._currentModel=null,this._blocked=!1,this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}closeForNavigation(){const t="palette"===this._currentModel?.kind?this._currentModel.dismiss:void 0,e=!!this._openGroupId||!!t;this._openGroupId=null,t?.(),t&&(this._currentModel=null),this._clearDismissClick(),e&&this.host.requestUpdate(),this._syncGlobalDismissListener()}openPalette(){this._openGroupId&&this.closeGroup(!1)}toggleGroup(t,e){this._openGroupId!==e?t.some(t=>t.id===e)&&("palette"===this._currentModel?.kind&&this._currentModel.dismiss?.(),this._groupGeneration+=1,this._openGroupId=e,this.host.clearTip(),this.host.requestUpdate(),this._syncGlobalDismissListener()):this.closeGroup(!1)}closeGroup(t){const e=this._openGroupId;this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener(),t&&e&&this.host.updateComplete().then(()=>{const t=this.host.root(),i=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===e&&null!==t.offsetParent);(i||t.querySelector(".editbar-tools"))?.focus?.()})}renderGroupLauncher(t,e,i){const s=this._openGroupId===t.id,n=t.items.find(e=>e.id===t.activeItemId&&!e.disabled);return j``:G} - `}houseplanContinuityTrace(){return[...this._continuityHistory,...this._continuity.trace].slice(-80).map(t=>({...t,...t.stage?{stage:[...t.stage]}:{}}))}getCardSize(){return 12}get _norm(){return!(!this._serverCfg||!this._serverCfg.spaces.length)}_cfgFingerprint(){const t=this._serverCfg?.spaces||[];let e=t.length+":";for(const i of t){e+=(i.id||"")+","+(i.plan_aspect||"")+","+(i.plan_url||"").length+","+(i.plan_x??"")+","+(i.plan_y??"")+","+(i.plan_scale??"")+","+(i.plan_scale_x??"")+","+(i.plan_scale_y??"")+","+(i.plan_angle??"")+","+(i.rooms?.length||0)+","+(i.openings?.length||0)+","+(i.decor?.length||0)+";";for(const t of i.rooms||[]){const i=t.poly?.[0],s=t.poly?.[t.poly.length-1];e+=(t.poly?.length||0)+"."+(t.id||"")+"."+(t.open_to||[]).join("+")+"."+(t.area||"")+"."+JSON.stringify(t.settings||0)+"."+(t.x??"")+","+(t.y??"")+","+(t.w??"")+","+(t.h??"")+","+(i?i[0]+"/"+i[1]:"")+","+(s?s[0]+"/"+s[1]:"")+";"}}return e}get _model(){if(!this._serverCfg)return[];const t=this._cfgEpoch+"|"+this._cfgFingerprint();if(this._modelCache&&this._modelCache.key===t)return this._modelCache.model;const e=this._buildModel();return this._modelCache={key:t,model:e},e}_buildModel(){if(!this._serverCfg)return[];const t=this._renderCfg;return Kl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return this._hasFixedFloor?rh(this._model,this._space):(t=this._model,e=this._space,t.find(t=>t.id===e)??t[0]);var t,e}_spaceModelById(t){return rh(this._model,t)}_syncEmptySpaceState(){if(!!this._serverCfg&&0===this._serverCfg.spaces.length){if(!this._emptySpaceStateActive){this._emptySpaceStateActive=!0;for(const t of this._pointers.keys())for(const e of this.renderRoot.querySelectorAll("*"))try{e.hasPointerCapture?.(t)&&e.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null,this._drag=null,this._rlResize=null,this._vacFit=null,this._compassDrag=!1,this._cancelModeTransition(!1),this._mode="view",this._clearGeometryGesture(),this._geometryHistory.clear(),this._resumeDraftBySpace={},this._tip=null,this._hoverRoom=null,this._openingInfo=null,this._closeInfoCard(),this._markerDialog=null,this._physicalDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._roomDialog=!1,"edit"===this._spaceDialog?.mode&&(this._spaceDialog=null),this._editorSecondary.closeForNavigation(),this._saveConfigDebounced.cancel(),this._frame=null,this._planSnapGeometryCache=null,this._decorSnapCache=null,this._commitSpace("",!0)}}else this._emptySpaceStateActive=!1}get _areaToSpace(){const t={};for(const e of this._model)for(const i of e.rooms)i.area&&(t[i.area]={space:e.id,room:i});return t}get _settings(){return this._serverCfg?.settings||{}}get _showAll(){return this._settings.filter_seeded?this._showHidden:!!this._settings.show_all}_toggleShowAll(){if(this._serverCfg){if(this._settings.filter_seeded)return this._showHidden=!this._showHidden,void this.requestUpdate();this._serverCfg={...this._serverCfg,settings:{...this._serverCfg.settings,show_all:!this._settings.show_all}},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}}_seedHiddenDevices(){if(!this._serverCfg||!this._norm||!this._canEdit)return;const t=this._serverCfg,e=function(t){const e=t.hass,i=t.registry||An(e),s=zn(e,i),{areaToSpace:n,markers:o,settings:a,excluded:r,iconRules:l}=t,c=!1!==a.group_lights,h=vo(o),d=mo(s,c).filter(t=>!yo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=Bn(s),_=new Set(o.map(t=>t.binding)),g=[];for(const t of Object.values(s.devices)){const o=t.area_id;if(!o||!n[o])continue;if("service"===t.entry_type)continue;if(_.has("device:"+t.id))continue;if("active"!==Ln(e,"device:"+t.id,i).kind)continue;const a=p[t.id]||[],h=qn(s,t,a);let d=r.has(h)||"Group"===t.model||/scene/i.test(t.model||"")||/bridge/i.test((t.model||"")+(t.name||""))||"myheat"===h&&!!t.via_device_id;if(!d&&c&&u.has(o)){const e=(t.name_by_user||t.name||"").trim();"mdi:lightbulb"===fo(s,e,t.model,a,l)&&(d=!0)}d&&g.push("device:"+t.id)}return g}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,firstSpaceId:this._model[0]?.id||"",iconRules:this._iconRules});if(!e.length&&t.settings?.filter_seeded)return;t.markers=t.markers||[];const i=[];for(const s of e){const e="h"+s.slice(s.indexOf(":")+1);t.markers.push({id:e,binding:s,hidden:!0}),i.push(s.slice(s.indexOf(":")+1))}const s={...t.settings||{},filter_seeded:!0};delete s.show_all,i.length&&Array.isArray(s.new_device_ids)&&(s.new_device_ids=s.new_device_ids.filter(t=>!i.includes(t))),t.settings=s,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}get _iconRules(){const t=this._settings.icon_rules;if(!t||!Array.isArray(t)||!t.length)return;const e=JSON.stringify(t);return e!==this._rulesCompiledSrc&&(this._rulesCompiledSrc=e,this._rulesCompiled=Jt(t)),this._rulesCompiled}get _fillColors(){return ds(this._settings)}get _excluded(){const t=this._settings.exclude_integrations;return t?new Set(t):Yt}willUpdate(t){t.has("_serverCfg")&&this._cfgEpoch++,this._syncEmptySpaceState(),t.has("hass")&&this.hass&&(this._hassSequence++,this._renderSnapshotAt=Date.now(),this._continuity.note("hass-snapshot"),this._ensureHaRegistryAuthority(),this._planHassMemo=null,this._hookConnection(),!this._loadOk&&!this._loading&&this._loadTries<8&&this._loadFromServer(),this._maybeRebuildDevices(),this._vacTick(),this._activityTick()),this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._continuity.refreshCompleteFrame(this._visualFrameFingerprint()),this._captureRenderDeviceSnapshot()}updated(){this._syncDayCycleClock(),this._warmSnapshot(),this._dtMeasure();const t=this._stageEl;t&&!this._roViewport&&(this._roViewport=new ResizeObserver(()=>this._refitView()),this._roViewport.observe(t)),t&&this._booting&&!this._bootTimer&&this._bootWatch();const e=this.renderRoot.querySelector(".hdr");if(e&&t&&!this._roHdr){const i=()=>{const e=this.renderRoot.querySelector("ha-card");if(!e)return;const i=t.getBoundingClientRect().top-e.getBoundingClientRect().top,s=Math.min(Math.max(e.getBoundingClientRect().top,0),120),n=Math.round(i+s);n>=0&&n!==this._hdrH&&(this._hdrH=n),n>=0&&!this._booting&&!this._config?.kiosk&&t.clientHeight>0&&this._warmPatch({hdrH:n,stageH:t.clientHeight})};this._roHdr=new ResizeObserver(()=>requestAnimationFrame(i)),this._roHdr.observe(e),this._onWinResize=()=>requestAnimationFrame(i),window.addEventListener("resize",this._onWinResize),i()}if(t&&!this._view&&this._refitView(),this._editorSecondary.afterRender(),this._settleContinuityFrame(),this._serverStorage&&this._loadOk&&0===this._model.length&&!this._spaceDialog&&!this._importDialog&&!this._onboardingShown){this._onboardingShown=!0;const t=function(t){const e=t?.floors;if(!e||"object"!=typeof e)return[];const i=[];for(const t of Object.values(e))t&&t.floor_id&&i.push({id:t.floor_id,name:t.name||t.floor_id,level:t.level??null});return i.sort((t,e)=>{const i=t.level??1e9,s=e.level??1e9;return i!==s?i-s:t.name.localeCompare(e.name)}),i}(this.hass);t.length?this._importDialog={floors:t.map(t=>({...t,checked:!0}))}:this._openSpaceDialog("create")}}_adoptStructuralResponses(t,e,i){const s=t?.config,n=s&&Array.isArray(s.spaces)?s:null,o=sh(n),a=o!==(this._cfgContentFingerprint||sh(this._serverCfg));if(a&&(this._geometryHistory.clear(),this._serverCfg&&this._clearGeometryGesture(),this._serverCfg=n,this._cfgContentFingerprint=o),this._cfgRev=t?.rev??this._cfgRev,t&&("virtual_lights"in t||"config"in t)){const e=gn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);fn(e)!==fn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let r=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=sh(t);r=s!==(this._layoutContentFingerprint||sh(this._layout)),r&&(this._layout=t,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev}return this._canOptimizeUndo=!(!t?.can_optimize_undo&&!e?.can_optimize_undo),this._undoKind=t?.undo_kind||e?.undo_kind||null,"boolean"==typeof t?.can_write&&(this._serverCanWrite=t.can_write),a&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),r&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:a,layoutChanged:r}}_resumePendingNavMode(){if(!this._pendingNavMode||!this._canEdit||this._config?.kiosk)return!1;const t=this._pendingNavMode;return this._pendingNavMode=null,this._setMode(t,!1),!0}async _loadFromServer(){this._loading=!0,this._loadTries++;const t=this._space,e=!!this._view;try{const[i,s]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]),n=i?.config&&Array.isArray(i.config.spaces)?i.config:null,o=sh(n)!==(this._cfgContentFingerprint||sh(this._serverCfg))||sh(s?.layout??{})!==(this._layoutContentFingerprint||sh(this._layout));if(o){if(!await this._signer.prepareImage(this.hass,this._candidateBackdrop(n)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0)}o&&this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._beginContinuityCandidate("structural-response",!0),this._connectionWasLost=!1,this._serverStorage=!0,"boolean"==typeof i?.can_write&&(this._serverCanWrite=i.can_write),this._canOptimizeUndo=!(!i?.can_optimize_undo&&!s?.can_optimize_undo),this._adoptStructuralResponses(i,s),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._warmVpArmed&&this._space===this._warmVp?.space?this._warmVpArmed=!1:e&&this._space===t||this._restoreZoom(),this._loadOk=!0,this.hass.callWS({type:"houseplan/trail/get"}).then(t=>{this._vacSrvTrails=t?.trails||{},this.requestUpdate()}).catch(()=>{}),this._ensureLiveSyncSubscriptions()}catch(t){if(this._serverCfg)this._scheduleLoadRetry(!0);else if(this._loadTries>=8){this._serverStorage=!1;try{this._layout=JSON.parse(localStorage.getItem(x_)||"{}")||{}}catch{this._layout={}}}}finally{this._loading=!1,this._continuityDataReady=!0,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}}_ensureLiveSyncSubscriptions(){const t=this.hass?.connection;if(!t)return;if(t!==this._liveSyncConnection&&(this._unsubCfg?.(),this._unsubCfg=null,this._unsubLayout?.(),this._unsubLayout=null,this._unsubTrail?.(),this._unsubTrail=void 0,this._unsubVirtual?.(),this._unsubVirtual=null,this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=t),this._liveSyncAttempt)return;const e=this._liveSyncGeneration,i=[],s=(s,n,o,a)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(a,o);e===this._liveSyncGeneration&&this.isConnected&&this.hass?.connection===t&&!s()?n(i):i?.()})};if(s(()=>this._unsubCfg,t=>{this._unsubCfg=t},"houseplan_config_updated",t=>{const e=Number(t?.data?.rev??-1);e!==this._cfgRev&&this._reloadConfigOnly(!1,e)}),s(()=>this._unsubTrail,t=>{this._unsubTrail=t},"houseplan_trail_updated",async()=>{try{const t=await this.hass.callWS({type:"houseplan/trail/get"});this._vacSrvTrails=t?.trails||{},this.requestUpdate()}catch{}}),s(()=>this._unsubLayout,t=>{this._unsubLayout=t},"houseplan_layout_updated",t=>this._onLayoutEvent(Number(t?.data?.rev??-1))),s(()=>this._unsubVirtual,t=>{this._unsubVirtual=t},"houseplan_virtual_light_updated",t=>{const e=bn(this._virtualLights,t?.data);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}),!i.length)return;const n=function(t){return Promise.allSettled(t.map(t=>Promise.resolve().then(t)))}(i).then(()=>{});this._liveSyncAttempt=n,n.finally(()=>{this._liveSyncAttempt===n&&(this._liveSyncAttempt=null)})}async _reloadConfigOnly(t=!1,e){if(!t){if(void 0!==e&&e<=this._cfgRev)return;if(this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(()=>this._reloadConfigOnly(!1,e),400))}this._beginContinuityCandidate("config-reload",!1);try{const t=await this.hass.callWS({type:"houseplan/config/get"}),e=t?.config&&Array.isArray(t.config.spaces)?t.config:null;if(sh(e)!==(this._cfgContentFingerprint||sh(this._serverCfg))&&!await this._signer.prepareImage(this.hass,this._candidateBackdrop(e)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0);const i=this._space;this._adoptStructuralResponses(t),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._space!==i&&this._restoreZoom(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}catch(t){this._showToast(this._t("toast.cfg_reload_failed",{err:this._errText(t)}))}finally{this._continuityDataReady=!0,this.requestUpdate()}}_scheduleLoadRetry(t=!1){if(void 0!==this._loadRetryTimer)return;const e=Math.min(8e3,500*2**Math.min(4,Math.max(1,this._loadTries-7)));this._loadRetryTimer=window.setTimeout(()=>{this._loadRetryTimer=void 0,!t&&this._loadOk||this._loading||!this.hass||this._loadFromServer()},e)}_ensureHaRegistryAuthority(){const t=this.hass?.connection||null;t&&t!==this._haRegistryConnection&&(this._haRegistryRelease?.(),this._haRegistryConnection=t,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._haRegistryRelease=Rn(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return An(this.hass)}get _planHass(){const t=this._haRegistry,e=Fn(this.hass,t),i=this._planHassMemo;if(i&&i.hass===this.hass&&i.sig===e)return i.active;const s=zn(this.hass,t),n=On(this.hass,t);return this._planHassMemo={hass:this.hass,sig:e,active:s,full:n},s}_captureRenderDeviceSnapshot(){if(!this.hass)return;const t=Date.now(),e=[...this._activityRt.entries()].map(([e,i])=>`${e}:${i.gen}:${i.flashTs}:`+(i.flashKind&&(i.expiresAt||i.flashTs+Fu)>t?1:0)).join("|"),i=fn(this._virtualLights);if(this._capturedSnapshotSequence===this._hassSequence&&this._capturedSnapshotDevices===this._devices&&this._capturedSnapshotLayout===this._layout&&this._capturedSnapshotConfigEpoch===this._cfgEpoch&&this._capturedSnapshotVirtual===i&&this._capturedSnapshotActivity===e)return;const s=this._planHass,n=new Map,o=new Map,a=new Set(["sun.sun"]);this._vacFit?.source&&a.add(this._vacFit.source);const r=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void a.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?r.add(s):"entity"===i&&a.add(s)};for(const t of this._model)for(const e of t.rooms)e.area&&l.add(e.area),c(e.settings?.temp_source),c(e.settings?.hum_source);for(const t of this._serverCfg?.spaces||[])for(const e of t.openings||[])for(const t of gi(e))a.add(t);for(const t of this._serverCfg?.spaces||[])for(const e of t.decor||[])if("text"===e.kind){for(const t of String(e.text||"").matchAll(/\{([^{}\r\n]+)\}/g)){const e=Ki(t[1]);e?.entity&&a.add(e.entity)}e.entity&&a.add(e.entity),o.set(`decor:${t.id}:${e.id}`,Qi(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!yo(s,t,vo(this._markers))))}const h=ro(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(vu(t.id,e),_u(s,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._devices,lightSources:h,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}));if(this._isVacDev(t)){const e=this._vacSource(t,s),i=e?bh(s?.states?.[e]?.attributes):null,n=this._vacRt.get(t.id);o.set(`vacuum:${t.id}`,{source:e,telemetry:i,mapId:i?this._vacMapId(t,i,s):null,runtime:n?{trail:n.trail,lastTs:n.lastTs,moving:n.moving,jump:n.jump}:null,server:this._vacSrvTrails[t.id]||null})}}const d=fu({sourceSequence:this._hassSequence,hass:s,devices:this._devices,presentations:n,positions:(u=this._model.length>0,p=this._devices,_=t=>this._livePos(t),u?new Map(p.map(t=>[t.id,_(t)])):new Map),facts:o,entityIds:a,deviceIds:r,areaIds:l});var u,p,_;this._capturedSnapshotSequence=this._hassSequence,this._capturedSnapshotDevices=this._devices,this._capturedSnapshotLayout=this._layout,this._capturedSnapshotActivity=e,this._capturedSnapshotConfigEpoch=this._cfgEpoch,this._capturedSnapshotVirtual=i,this._visibleDeviceSnapshot&&"steady"!==this._continuity.state?this._candidateDeviceSnapshot=d:(this._visibleDeviceSnapshot=d,this._candidateDeviceSnapshot=null)}get _renderDeviceSnapshot(){return this._stagedDeviceSnapshotToken===this._continuity.token?this._candidateDeviceSnapshot||this._visibleDeviceSnapshot:this._visibleDeviceSnapshot||this._candidateDeviceSnapshot}get _renderPlanHass(){return this._renderDeviceSnapshot?.hass||this._planHass}get _renderDevices(){return this._renderDeviceSnapshot?.devices||this._devices}get _fullRegistryHass(){return this._planHass,this._planHassMemo?.full||this.hass}_bindingStatus(t){return Ln(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=An(t);return{access:e.access,authoritative:e.authoritative,revision:e.revision,lastSuccess:e.lastSuccess,error:e.error}}(this.hass),e={active:0,ha_disabled:0,orphaned:0,unverified:0};for(const t of this._markers)t.removed||"virtual"===t.binding||e[this._bindingStatus(t.binding).kind]++;return{registry:{...t,lastSuccessAgeMs:t.lastSuccess?Math.max(0,Date.now()-t.lastSuccess):null},bindings:e}}_openBindingInHa(t){const[e,i]=t.split(":");if(i)if("device"!==e){if("entity"===e){const t=this._fullRegistryHass.entities?.[i];t?.device_id&&E_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else E_("/config/devices/device/"+encodeURIComponent(i))}_bindingHasHaPage(t){const[e,i]=t.split(":");return!!i&&("device"===e||"entity"===e&&!!this._fullRegistryHass.entities?.[i]?.device_id)}_toggleMarkerDialogVisibility(){const t=this._markerDialog;if(!t)return;const e="ha"===t.bindingMode?this._bindingStatus(t.binding):null,i=t.hideFromPlan||"ha_disabled"===e?.kind;i&&"ha_disabled"===e?.kind?this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device")):i&&"unverified"===e?.kind?this._showToast(this._t("toast.ha_binding_unverified")):this._markerDialog={...t,hideFromPlan:!i}}_hookConnection(){const t=this.hass?.connection;t&&t!==this._connHooked&&(this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),t.addEventListener?.("ready",this._onConnReady),t.addEventListener?.("disconnected",this._onConnLost),t.addEventListener?.("reconnect-error",this._onConnLost),this._connHooked=t)}_display(t){return this._signer.display(this.hass,t)}_resign(){this._signer.resign(this.hass,Rs(this._serverCfg))}_onLayoutEvent(t){t<=this._layoutRev||(clearTimeout(this._layoutSyncTimer),this._layoutSyncTimer=window.setTimeout(()=>{t<=this._layoutRev||this._reloadLayoutOnly()},200))}_noteLayoutRev(t){const e=t?.rev;"number"==typeof e&&e>this._layoutRev&&(this._layoutRev=e)}async _reloadLayoutOnly(){if(!this._serverStorage||!this.hass?.callWS)return;this._beginContinuityCandidate("layout-reload",!1);const t=new Map;for(const e of this._dirtyPos)this._layout[e]&&t.set(e,this._layout[e]);this._persistLayout.pending()&&this._persistLayout.flush();for(const[e,i]of this._sentPos)t.set(e,i);try{const e=await this.hass.callWS({type:"houseplan/layout/get"}),i={...e?.layout||{}};for(const[e,s]of t)i[e]=s;const s=sh(i);s!==(this._layoutContentFingerprint||sh(this._layout))&&(this._layout=i,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev,this._canOptimizeUndo=!!e?.can_optimize_undo,this._undoKind=e?.undo_kind||null,this._cacheSnapshot(),this.requestUpdate()}catch{}finally{this._continuityDataReady=!0,this.requestUpdate()}}_maybeRebuildDevices(){const t=this.hass;if(!t?.devices||!t?.entities||!t?.areas)return;const e=this._haRegistry,i=Fn(t,e)+":"+Object.keys(t.areas).length+":"+(this._norm?"n":"l")+":"+na(t,this._config?.language);if(i===this._regSignature&&this._devices.length)return;this._regSignature=i;const s=new Map(this._devices.map(t=>[t.id,t.bindingStatus?.kind||"active"]));this._devices=ko({hass:t,registry:e,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||"",loc:t=>this._t(t),iconRules:this._iconRules});const n=this._markers.filter(t=>!t.removed&&"virtual"!==t.binding).map(t=>t.binding).sort(),o=e.revision+":"+n.join("|");if(e.authoritative&&o!==this._haBindingCacheKey){const i=new Map;for(const s of n)i.set(s,Ln(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Hn(),i=Date.now();for(const[s,n]of t)"active"===n.kind?e[s]={kind:"active",ts:i}:"ha_disabled"===n.kind&&(e[s]={kind:"ha_disabled",reason:n.reason,ts:i});const s=Object.fromEntries(Object.entries(e).sort((t,e)=>e[1].ts-t[1].ts).slice(0,1500));Sn=s;try{localStorage.setItem($n,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const a=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())a.has(t)||this._vacRt.delete(t);if(this._infoCard){const t=this._devices.find(t=>t.id===this._infoCard.id);this._infoCard=t&&"ha_disabled"!==t.bindingStatus?.kind?t:null}const r=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));r&&("ha_disabled"!==this._infoCard?.bindingStatus?.kind&&"ha_disabled"!==this._devices.find(t=>t.id===this._infoCard?.id)?.bindingStatus?.kind||this._closeInfoCard(),this._drag&&"ha_disabled"===this._devices.find(t=>t.id===this._drag.id)?.bindingStatus?.kind&&(this._drag=null),clearTimeout(this._holdTimer),this._holdFired=!1,this._tip=null,this._tapConfirm=null),this._nativeMoreInfoEntity&&!this._planEntityAvailable(this._nativeMoreInfoEntity)&&(F_(this,"hass-more-info",{entityId:null}),this._nativeMoreInfoEntity=null)}_syncNewDevices(){if(!this._norm||!this._loadOk||!this._serverCfg)return;const t=this._devices.filter(t=>!t.marker&&!t.virtual).map(t=>t.id).sort(),e=t.join(",");if(e===this._newSyncKey)return;this._newSyncKey=e;const i=this._settings,{fresh:s,known:n}=function(t,e){if(!Array.isArray(e))return{fresh:[],known:[...t]};const i=new Set(e),s=t.filter(t=>!i.has(t));return{fresh:s,known:s.length?[...e,...s]:e}}(t,i.known_devices);if(!Array.isArray(i.known_devices)||s.length){const t=[...new Set([...i.new_device_ids||[],...s])];this._serverCfg={...this._serverCfg,settings:{...i,known_devices:n,new_device_ids:t}},this._saveConfig()}}get _newIds(){const t=this._settings.new_device_ids;return new Set(Array.isArray(t)?t:[])}_ackNewDevice(t){if(!this._newIds.has(t)||!this._serverCfg)return;const e=this._settings;this._serverCfg={...this._serverCfg,settings:{...e,new_device_ids:(e.new_device_ids||[]).filter(e=>e!==t)}},this._saveConfig(),this.requestUpdate()}get _markers(){return this._serverCfg?.markers||[]}_roomLqi(t){if(!t)return null;const e=[];for(const i of this._renderDevices){if(i.area!==t||i.virtual)continue;const s=ho(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return Ei(e)}_roomBounds(t){if(t.poly&&t.poly.length){const e=t.poly.map(t=>t[0]),i=t.poly.map(t=>t[1]),s=Math.min(...e),n=Math.min(...i);return{x:s,y:n,w:Math.max(...e)-s,h:Math.max(...i)-n}}return{x:t.x??0,y:t.y??0,w:t.w??0,h:t.h??0}}_defaultPositions(){const t={},e=this._config?.icon_size??2.5;for(const i of this._model){const s=e/100*gc(i)*1.3;for(const e of i.rooms){if(!e.area)continue;const n=this._devices.filter(t=>t.area===e.area&&t.space===i.id);if(!n.length)continue;const o=this._roomBounds(e),a=.1*Math.min(o.w,o.h),r=o.w-2*a,l=o.h-2*a,c=Math.max(1,Math.round(Math.sqrt(n.length*r/Math.max(l,1)))),h=Math.ceil(n.length/c),d=r/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+a+d*(e%c+.5),y:o.y+a+u*(Math.floor(e/c)+.5)}));Oi(p,o,s,.5*a),n.forEach((e,i)=>t[e.id]=ec(p[i]))}}return t}_pos(t){const e=this._renderDeviceSnapshot?.positions.get(t.id);return e?{x:e.x,y:e.y}:this._livePos(t)}_livePos(t){const e=this._spaceModelById(t.space),i=this._layout[t.id];if(i)if(this._norm){if(i.s===t.space)return{x:i.x*T_,y:i.y*T_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?ec(_c(e)):{x:500,y:500}}_savePos(t,e,i){if(this._spaceModelById(t.space)){if(this._norm){const s=this._gridPitch,n=Math.round(e/s)*s,o=Math.round(i/s)*s,a=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:sc(n/T_),y:sc(o/T_),...a?{k:a}:{}}}}else this._layout={...this._layout,[t.id]:{x:Math.round(e),y:Math.round(i)}};this._dirtyPos.add(t.id),this._persistLayout()}}_visualSamples(t){return cu(this._renderPlanHass,t,this._renderDevices,void 0,this._fullRegistryHass).samples}_devicePresentation(t,e=!1!==this._config?.show_signal,i=!1){const s=i?null:this._renderDeviceSnapshot?.presentations.get(vu(t.id,e));return s||_u(this._renderPlanHass,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,designPreview:i,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._renderDevices,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion})}_deviceVisual(t){return this._devicePresentation(t).visual}_stateClass(t,e=this._deviceVisual(t)){const i=this._devicePresentation(t);return i.effectiveHidden?"":("icon_ripple"!==i.display||!1===this._config?.live_states||"alarm"===e.status||e.activity,pu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=po(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:uo(this._renderPlanHass,t.entities)}_bindingEntities(t){if("virtual"===t||!t)return[];const e=this._bindingStatus(t);return"active"===e.kind?e.enabledEntityIds:e.allEntityIds}_bindingHasClimate(t){return this._bindingEntities(t).some(t=>t.startsWith("climate."))}_bindingHasAlarm(t){return this._bindingEntities(t).some(t=>{const e=this._planHass?.states?.[t]||this.hass?.states?.[t],i=this._fullRegistryHass.entities[t]||this.hass?.entities?.[t];return Ls(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&_o(this.hass,t.primary)?go(this.hass,t.entities):null}_deviceBindingActive(t,e=!0){if(t.virtual||"virtual"===t.bindingKind)return!0;if(!t.bindingKind||!t.bindingRef)return!1;const i=this._bindingStatus(`${t.bindingKind}:${t.bindingRef}`);return"active"===i.kind||(e&&this._showToast(this._t("ha_disabled"===i.kind?"toast.ha_disabled_action":"toast.ha_binding_unverified")),!1)}_openMoreInfo(t){t?this._planEntityAvailable(t)?(this._nativeMoreInfoEntity=t,F_(this,"hass-more-info",{entityId:t})):this._showToast(this._t("toast.ha_disabled_action")):this._showToast(this._t("toast.no_entity"))}_interruptViewGesture(t,e){if(clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),void 0!==t)for(const i of[e,this._stageEl])try{i?.hasPointerCapture?.(t)&&i.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null}_closeInfoCard(){this._interruptViewGesture(),this._holdFired=!1,this._infoCard=null}_ctxDevice(t,e){"view"===this._mode&&(t.preventDefault(),t.stopPropagation(),this._deviceBindingActive(e)&&(e.primary?this._openMoreInfo(e.primary):this._infoCard=e))}_clickDevice(t,e){if(t.stopPropagation(),this._drag?.moved||this._suppressClick||this._holdFired)return;if("plan"===this._mode)return;if("devices"===this._mode)return void this._openMarkerDialog(e);const i=this._devices.find(t=>t.id===e.id);if(!i)return;const s=Yh(i.tapAction,i.primary?.split(".")[0]),n=(t,e)=>{i.marker?.tap_confirm?this._tapConfirm={kind:"run",text:t,exec:e}:e()};if("toggle"===s){const t=this._toggleIntent(i);if(!t||!ed(t))return;const e=t=>{const e=ed(t);if(!e)return;if("virtual-light"===e.kind)return void this.hass.callWS({type:"houseplan/virtual_light/toggle",marker_id:e.markerId}).then(t=>{const e=bn(this._virtualLights,t);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}).catch(t=>this._showToast(this._t("toast.virtual_light_toggle_failed",{err:this._errText(t)})));const{command:i}=e;this.hass.callService(i.domain,i.service,i.data).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))},s=((o=t).targets.length?o.targets:o.skippedTargets).map(t=>t.name||t.entityId||t.ref).join(", ")||i.name;if(i.marker?.tap_confirm){const n=this._toggleConfirmationLines(t);if(!n.length)return;this._tapConfirm={kind:"toggle",text:this._t("confirm.tap_toggle",{name:s}),lines:n,initialIntent:t,deviceId:i.id,exec:()=>{const s=this._devices.find(t=>t.id===i.id),n=s?this._toggleIntent(s):null;n&&id(t,n)?e(n):this._showToast(this._t("toast.tap_target_changed"))}}}else e(t);return}var o;if("info"===s)return this._interruptViewGesture(),void(this._infoCard=i);if(this._deviceBindingActive(i)){if("run"===s){const t=i.marker?.tap_target||"",e=function(t){const e=String(t||"").split(".")[0];return"automation"===e?{domain:"automation",service:"trigger"}:"script"===e?{domain:"script",service:"turn_on"}:"scene"===e?{domain:"scene",service:"turn_on"}:null}(t),s=this.hass.states[t];if(!e||!s)return void this._showToast(this._t("toast.run_target_missing"));const o=s.attributes?.friendly_name||t;return void n(this._t("confirm.tap_run",{name:o}),()=>{this._deviceBindingActive(i)&&this._planEntityAvailable(t)&&this.hass.callService(e.domain,e.service,{entity_id:t}).then(()=>{this._stampActivity(i.id,"event",this._activitySourceKey(i)),this.requestUpdate(),this._showToast(this._t("toast.run_started",{name:o}))}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))})}"more-info"===s&&i.primary?this._openMoreInfo(i.primary):this._infoCard=i}}_keyDevice(t,e){"Enter"!==t.key&&" "!==t.key||"view"!==this._mode&&"devices"!==this._mode||(t.preventDefault(),this._clickDevice(t,e))}_t(t,e){return oa(na(this.hass,this._config?.language),t,e)}get _colorPickerLabels(){return{title:this._t("color_picker.title"),hue:this._t("color_picker.hue"),saturation:this._t("color_picker.saturation"),value:this._t("color_picker.value"),hex:this._t("color_picker.hex"),invalidHex:this._t("color_picker.invalid_hex")}}_help(t){const e=`${t}.aria`,i=na(this.hass,this._config?.language);return aa(i,t)&&aa(i,e)?j``:G}get _stageEl(){return this.renderRoot.querySelector(".stage")}_contentItems(t){const e=[];for(const i of this._devices){if(i.space!==t.id||i.hidden)continue;const s=this._pos(i);e.push({minX:s.x,minY:s.y,maxX:s.x,maxY:s.y})}if(t.id===this._space){for(const t of this._openingsR){const i=Number(t.angle)*Math.PI/180,s=Math.cos(i)*t.rlen/2,n=Math.sin(i)*t.rlen/2,o=ac([[t.rx-s,t.ry-n],[t.rx+s,t.ry+n]]);o&&e.push(o)}const i=this._decorH;for(const t of this._decorList){const s=ac("line"===t.kind?[[t.x1*T_,t.y1*i],[t.x2*T_,t.y2*i]]:"text"===t.kind?[[t.x*T_,t.y*i]]:hr({x:t.x*T_,y:t.y*i,w:t.w*T_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=ac(i);t&&e.push(t)}}return lc(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:T_,h:T_};return{rect:t,all:t,outliers:0}}const e=this._frame,i="view"!==this._mode;if(e&&e.id===t.id&&this._bdDrag)return e;if(e&&e.id===t.id&&e.model===t&&e.layout===this._layout&&e.devs===this._devices&&e.far===this._showFar&&e.grow===i)return e;const s=uc(this._contentItems(t));let n=s.all||pc(t),o=this._showFar?n:s.core||pc(t);return e&&e.id===t.id&&i&&e.grow&&(o=R_(e.rect,o),n=R_(e.all,n)),this._frame={id:t.id,model:t,layout:this._layout,devs:this._devices,far:this._showFar,grow:i,rect:o,all:n,outliers:s.outliers},this._frame}_isoSource(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._openPairs().flatMap(t=>t.segs),s=this._openingsR.map((t,e)=>({id:String(t.id||e),sourceIndex:e,type:t.type,x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen>0?t.rlen:900,flipH:!!t.flip_h,flipV:!!t.flip_v}));return{key:`${t.id}|${function(t){let e=2166136261;const i=t=>{if("number"!=typeof t)if("string"!=typeof t)if("boolean"!=typeof t)if(Array.isArray(t)){e=Jp(e,t.length);for(const e of t)i(e)}else{if(t&&"object"==typeof t){const e=t;for(const t of Object.keys(e).sort())i(t),i(e[t]);return}e=Jp(e,-1)}else e=Jp(e,t?1:0);else for(const i of t)e=Jp(e,i.codePointAt(0)||0);else e=Jp(e,t)};return i(t),e.toString(36)}({rooms:t.rooms,walls:e,openCuts:i,openings:s,partitions:t.partitions,roomDrafts:t.room_drafts,columns:t.wall_columns,cellCm:this._cellCm,gridPitch:this._gridPitch,wallKeyPitch:this._wallKeyPitch,camera:Np,wallHeight:Hp,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),a=e.length||n.length?ul(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,n):null;if((e.length||n.length)&&!a)throw new Error("wall boolean geometry failed");const r=a?.paperGeom??function(t,e,i,s,n,o,a=1){try{const r=hl(t,e,i,s,n,o,a);return r?r.shell?.length?si(r.centre,r.shell):r.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?hd(i.partitionHost,s):e.length||"gate"===t.type?bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length,flip_v:s}):{ox:0,oy:0,cm:0,side:-1};return function(t,e=64){if(!(Zp([t.x,t.y,t.angle,t.length,t.face.ox,t.face.oy,e])&&t.length>0&&e>0))throw new Error("invalid isometric opening input");const i=t.length/2;let s;if("passage"===t.type)s=[];else if("gate"===t.type){const n=t.flipV?-1:1,o=t.face.side*n*10;s=[t_(t,0,[-i,0],[i,0],o,0,.88*e),t_(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[t_(t,0,[-i,0],[i,0],-90,.27*e,.78*e),t_(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[t_(t,0,[-i,0],[t.length,0],-90,0,.92*e)];return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaves:Object.freeze(s.map(t=>Object.freeze(t)))}}({...t,face:n})});return{walls:a?.geom||[],floor:r,openings:Object.freeze(c)}}}}_isoSceneKey(){if(!this._labsIso||"view"!==this._mode)return null;try{return this._isoSource()?.key??null}catch{return`${this._space}|invalid`}}_isoScene(){const t=this._isoSource();if(!t)return null;const e=this._isoGeometryCache.get(t.key);if(e)return{key:t.key,...e};const i=this._frameOf().rect,s=t.build(),n=function(t){let e=1/0,i=1/0,s=-1/0,n=-1/0;for(const o of t)for(const t of o.leaves){const o=Math.hypot(t.closedVector[0],t.closedVector[1]);e=Math.min(e,t.hinge[0]-o),i=Math.min(i,t.hinge[1]-o),s=Math.max(s,t.hinge[0]+o),n=Math.max(n,t.hinge[1]+o)}return Zp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Wp({rect:n?R_(i,n):i,wallHeight:Hp,openingHeight:Hp,floorDepth:10}),a=function(t,e=Np,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let a=0;for(let r=0;r<(t||[]).length;r++){const l=t[r];for(let t=0;t<(l||[]).length;t++){const c=Vp(l[t],t>0);if(!(c.length<3||Math.abs(Gp(c))<1e-9)){s.push(Kp(c,e,i)),a+=c.length;for(let s=0;st.depth-e.depth||t.polygon-e.polygon||t.ring-e.ring||t.edge-e.edge),{topPath:s.join(" "),sides:n,contactPath:o.join(" "),edgeCount:a}}(s.walls),r={geometry:a,floor:Xp(s.floor,10),openings:s.openings,frame:o};return v_(this._isoGeometryCache,t.key,r,8),{key:t.key,...r}}_effectiveProjection(){if("iso"!==this._desiredProjection||!this._model.length)return"flat";const t=this._isoSceneKey()||`${this._space}|invalid`;if(this._isoFallback.has(t))return"flat";try{const t=this._isoScene();return t?(e="iso",i=t.key,s=this._isoFallback,"iso"===e&&i&&!s.has(i)?"iso":"flat"):"flat"}catch(e){if(!this._isoFallback.has(t)){this._isoFallback.add(t);const i=t.split("|");console.warn(`HOUSEPLAN ISO FALLBACK: #89, space ${this._space}, fingerprint ${i[i.length-1]}, ${e instanceof Error?e.message:"renderer error"}`)}return"flat"}var e,i,s}_scenePoint(t){return"iso"===this._renderProjection?Bp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=qp([t.x,t.y]),i=qp([t.x+t.w,t.y+t.h]);return{x:e[0],y:e[1],w:i[0]-e[0],h:i[1]-e[1]}}_baseVb(){if("iso"===this._effectiveProjection()){if(!this._spaceDisplayForRender().showBorders){const t=Wp({rect:this._frameOf().rect,wallHeight:Hp});return[t.x,t.y,t.w,t.h]}const t=this._isoScene()?.frame??this._frameOf().rect;return[t.x,t.y,t.w,t.h]}const t=this._frameOf().rect;return[t.x,t.y,t.w,t.h]}get _outliers(){return this._showFar?0:this._frameOf().outliers}_fitFar(){this._showFar=!0,this._frame=null,this._resetZoom()}_fitAll(){this._showFar=!0,this._frame=null,this._resetZoom()}_renderFarHint(){return this._kiosk||"view"!==this._mode||this._booting||!this._outliers?G:j`
+
`}houseplanContinuityTrace(){return[...this._continuityHistory,...this._continuity.trace].slice(-80).map(t=>({...t,...t.stage?{stage:[...t.stage]}:{}}))}getCardSize(){return 12}get _norm(){return!(!this._serverCfg||!this._serverCfg.spaces.length)}_cfgFingerprint(){const t=this._serverCfg?.spaces||[];let e=t.length+":";for(const i of t){e+=(i.id||"")+","+(i.plan_aspect||"")+","+(i.plan_url||"").length+","+(i.plan_x??"")+","+(i.plan_y??"")+","+(i.plan_scale??"")+","+(i.plan_scale_x??"")+","+(i.plan_scale_y??"")+","+(i.plan_angle??"")+","+(i.rooms?.length||0)+","+(i.openings?.length||0)+","+(i.decor?.length||0)+";";for(const t of i.rooms||[]){const i=t.poly?.[0],s=t.poly?.[t.poly.length-1];e+=(t.poly?.length||0)+"."+(t.id||"")+"."+(t.open_to||[]).join("+")+"."+(t.area||"")+"."+JSON.stringify(t.settings||0)+"."+(t.x??"")+","+(t.y??"")+","+(t.w??"")+","+(t.h??"")+","+(i?i[0]+"/"+i[1]:"")+","+(s?s[0]+"/"+s[1]:"")+";"}}return e}get _model(){if(!this._serverCfg)return[];const t=this._cfgEpoch+"|"+this._cfgFingerprint();if(this._modelCache&&this._modelCache.key===t)return this._modelCache.model;const e=this._buildModel();return this._modelCache={key:t,model:e},e}_buildModel(){if(!this._serverCfg)return[];const t=this._renderCfg;return Kl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return this._hasFixedFloor?rh(this._model,this._space):(t=this._model,e=this._space,t.find(t=>t.id===e)??t[0]);var t,e}_spaceModelById(t){return rh(this._model,t)}_syncEmptySpaceState(){if(!!this._serverCfg&&0===this._serverCfg.spaces.length){if(!this._emptySpaceStateActive){this._emptySpaceStateActive=!0;for(const t of this._pointers.keys())for(const e of this.renderRoot.querySelectorAll("*"))try{e.hasPointerCapture?.(t)&&e.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null,this._drag=null,this._rlResize=null,this._vacFit=null,this._compassDrag=!1,this._cancelModeTransition(!1),this._mode="view",this._clearGeometryGesture(),this._geometryHistory.clear(),this._resumeDraftBySpace={},this._tip=null,this._hoverRoom=null,this._openingInfo=null,this._closeInfoCard(),this._markerDialog=null,this._physicalDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._roomDialog=!1,"edit"===this._spaceDialog?.mode&&(this._spaceDialog=null),this._editorSecondary.closeForNavigation(),this._saveConfigDebounced.cancel(),this._frame=null,this._planSnapGeometryCache=null,this._decorSnapCache=null,this._commitSpace("",!0)}}else this._emptySpaceStateActive=!1}get _areaToSpace(){const t={};for(const e of this._model)for(const i of e.rooms)i.area&&(t[i.area]={space:e.id,room:i});return t}get _settings(){return this._serverCfg?.settings||{}}get _showAll(){return this._settings.filter_seeded?this._showHidden:!!this._settings.show_all}_toggleShowAll(){if(this._serverCfg){if(this._settings.filter_seeded)return this._showHidden=!this._showHidden,void this.requestUpdate();this._serverCfg={...this._serverCfg,settings:{...this._serverCfg.settings,show_all:!this._settings.show_all}},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}}_seedHiddenDevices(){if(!this._serverCfg||!this._norm||!this._canEdit)return;const t=this._serverCfg,e=function(t){const e=t.hass,i=t.registry||An(e),s=zn(e,i),{areaToSpace:n,markers:o,settings:a,excluded:r,iconRules:l}=t,c=!1!==a.group_lights,h=vo(o),d=mo(s,c).filter(t=>!yo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=Bn(s),_=new Set(o.map(t=>t.binding)),g=[];for(const t of Object.values(s.devices)){const o=t.area_id;if(!o||!n[o])continue;if("service"===t.entry_type)continue;if(_.has("device:"+t.id))continue;if("active"!==Ln(e,"device:"+t.id,i).kind)continue;const a=p[t.id]||[],h=qn(s,t,a);let d=r.has(h)||"Group"===t.model||/scene/i.test(t.model||"")||/bridge/i.test((t.model||"")+(t.name||""))||"myheat"===h&&!!t.via_device_id;if(!d&&c&&u.has(o)){const e=(t.name_by_user||t.name||"").trim();"mdi:lightbulb"===fo(s,e,t.model,a,l)&&(d=!0)}d&&g.push("device:"+t.id)}return g}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,firstSpaceId:this._model[0]?.id||"",iconRules:this._iconRules});if(!e.length&&t.settings?.filter_seeded)return;t.markers=t.markers||[];const i=[];for(const s of e){const e="h"+s.slice(s.indexOf(":")+1);t.markers.push({id:e,binding:s,hidden:!0}),i.push(s.slice(s.indexOf(":")+1))}const s={...t.settings||{},filter_seeded:!0};delete s.show_all,i.length&&Array.isArray(s.new_device_ids)&&(s.new_device_ids=s.new_device_ids.filter(t=>!i.includes(t))),t.settings=s,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}get _iconRules(){const t=this._settings.icon_rules;if(!t||!Array.isArray(t)||!t.length)return;const e=JSON.stringify(t);return e!==this._rulesCompiledSrc&&(this._rulesCompiledSrc=e,this._rulesCompiled=Jt(t)),this._rulesCompiled}get _fillColors(){return ds(this._settings)}get _excluded(){const t=this._settings.exclude_integrations;return t?new Set(t):Yt}willUpdate(t){t.has("_serverCfg")&&this._cfgEpoch++,this._syncEmptySpaceState(),t.has("hass")&&this.hass&&(this._hassSequence++,this._renderSnapshotAt=Date.now(),this._continuity.note("hass-snapshot"),this._ensureHaRegistryAuthority(),this._planHassMemo=null,this._hookConnection(),!this._loadOk&&!this._loading&&this._loadTries<8&&this._loadFromServer(),this._maybeRebuildDevices(),this._vacTick(),this._activityTick()),this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._continuity.refreshCompleteFrame(this._visualFrameFingerprint()),this._captureRenderDeviceSnapshot()}updated(){this._pruneDevicePressFeedback(),this._syncDayCycleClock(),this._warmSnapshot(),this._dtMeasure();const t=this._stageEl;t&&!this._roViewport&&(this._roViewport=new ResizeObserver(()=>this._refitView()),this._roViewport.observe(t)),t&&this._booting&&!this._bootTimer&&this._bootWatch();const e=this.renderRoot.querySelector(".hdr");if(e&&t&&!this._roHdr){const i=()=>{const e=this.renderRoot.querySelector("ha-card");if(!e)return;const i=t.getBoundingClientRect().top-e.getBoundingClientRect().top,s=Math.min(Math.max(e.getBoundingClientRect().top,0),120),n=Math.round(i+s);n>=0&&n!==this._hdrH&&(this._hdrH=n),n>=0&&!this._booting&&!this._config?.kiosk&&t.clientHeight>0&&this._warmPatch({hdrH:n,stageH:t.clientHeight})};this._roHdr=new ResizeObserver(()=>requestAnimationFrame(i)),this._roHdr.observe(e),this._onWinResize=()=>requestAnimationFrame(i),window.addEventListener("resize",this._onWinResize),i()}if(t&&!this._view&&this._refitView(),this._editorSecondary.afterRender(),this._settleContinuityFrame(),this._serverStorage&&this._loadOk&&0===this._model.length&&!this._spaceDialog&&!this._importDialog&&!this._onboardingShown){this._onboardingShown=!0;const t=function(t){const e=t?.floors;if(!e||"object"!=typeof e)return[];const i=[];for(const t of Object.values(e))t&&t.floor_id&&i.push({id:t.floor_id,name:t.name||t.floor_id,level:t.level??null});return i.sort((t,e)=>{const i=t.level??1e9,s=e.level??1e9;return i!==s?i-s:t.name.localeCompare(e.name)}),i}(this.hass);t.length?this._importDialog={floors:t.map(t=>({...t,checked:!0}))}:this._openSpaceDialog("create")}}_adoptStructuralResponses(t,e,i){const s=t?.config,n=s&&Array.isArray(s.spaces)?s:null,o=sh(n),a=o!==(this._cfgContentFingerprint||sh(this._serverCfg));if(a&&(this._geometryHistory.clear(),this._serverCfg&&this._clearGeometryGesture(),this._serverCfg=n,this._cfgContentFingerprint=o),this._cfgRev=t?.rev??this._cfgRev,t&&("virtual_lights"in t||"config"in t)){const e=gn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);fn(e)!==fn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let r=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=sh(t);r=s!==(this._layoutContentFingerprint||sh(this._layout)),r&&(this._layout=t,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev}return this._canOptimizeUndo=!(!t?.can_optimize_undo&&!e?.can_optimize_undo),this._undoKind=t?.undo_kind||e?.undo_kind||null,"boolean"==typeof t?.can_write&&(this._serverCanWrite=t.can_write),a&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),r&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:a,layoutChanged:r}}_resumePendingNavMode(){if(!this._pendingNavMode||!this._canEdit||this._config?.kiosk)return!1;const t=this._pendingNavMode;return this._pendingNavMode=null,this._setMode(t,!1),!0}async _loadFromServer(){this._loading=!0,this._loadTries++;const t=this._space,e=!!this._view;try{const[i,s]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]),n=i?.config&&Array.isArray(i.config.spaces)?i.config:null,o=sh(n)!==(this._cfgContentFingerprint||sh(this._serverCfg))||sh(s?.layout??{})!==(this._layoutContentFingerprint||sh(this._layout));if(o){if(!await this._signer.prepareImage(this.hass,this._candidateBackdrop(n)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0)}o&&this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._beginContinuityCandidate("structural-response",!0),this._connectionWasLost=!1,this._serverStorage=!0,"boolean"==typeof i?.can_write&&(this._serverCanWrite=i.can_write),this._canOptimizeUndo=!(!i?.can_optimize_undo&&!s?.can_optimize_undo),this._adoptStructuralResponses(i,s),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._warmVpArmed&&this._space===this._warmVp?.space?this._warmVpArmed=!1:e&&this._space===t||this._restoreZoom(),this._loadOk=!0,this.hass.callWS({type:"houseplan/trail/get"}).then(t=>{this._vacSrvTrails=t?.trails||{},this.requestUpdate()}).catch(()=>{}),this._ensureLiveSyncSubscriptions()}catch(t){if(this._serverCfg)this._scheduleLoadRetry(!0);else if(this._loadTries>=8){this._serverStorage=!1;try{this._layout=JSON.parse(localStorage.getItem($_)||"{}")||{}}catch{this._layout={}}}}finally{this._loading=!1,this._continuityDataReady=!0,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}}_ensureLiveSyncSubscriptions(){const t=this.hass?.connection;if(!t)return;if(t!==this._liveSyncConnection&&(this._unsubCfg?.(),this._unsubCfg=null,this._unsubLayout?.(),this._unsubLayout=null,this._unsubTrail?.(),this._unsubTrail=void 0,this._unsubVirtual?.(),this._unsubVirtual=null,this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=t),this._liveSyncAttempt)return;const e=this._liveSyncGeneration,i=[],s=(s,n,o,a)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(a,o);e===this._liveSyncGeneration&&this.isConnected&&this.hass?.connection===t&&!s()?n(i):i?.()})};if(s(()=>this._unsubCfg,t=>{this._unsubCfg=t},"houseplan_config_updated",t=>{const e=Number(t?.data?.rev??-1);e!==this._cfgRev&&this._reloadConfigOnly(!1,e)}),s(()=>this._unsubTrail,t=>{this._unsubTrail=t},"houseplan_trail_updated",async()=>{try{const t=await this.hass.callWS({type:"houseplan/trail/get"});this._vacSrvTrails=t?.trails||{},this.requestUpdate()}catch{}}),s(()=>this._unsubLayout,t=>{this._unsubLayout=t},"houseplan_layout_updated",t=>this._onLayoutEvent(Number(t?.data?.rev??-1))),s(()=>this._unsubVirtual,t=>{this._unsubVirtual=t},"houseplan_virtual_light_updated",t=>{const e=bn(this._virtualLights,t?.data);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}),!i.length)return;const n=function(t){return Promise.allSettled(t.map(t=>Promise.resolve().then(t)))}(i).then(()=>{});this._liveSyncAttempt=n,n.finally(()=>{this._liveSyncAttempt===n&&(this._liveSyncAttempt=null)})}async _reloadConfigOnly(t=!1,e){if(!t){if(void 0!==e&&e<=this._cfgRev)return;if(this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(()=>this._reloadConfigOnly(!1,e),400))}this._beginContinuityCandidate("config-reload",!1);try{const t=await this.hass.callWS({type:"houseplan/config/get"}),e=t?.config&&Array.isArray(t.config.spaces)?t.config:null;if(sh(e)!==(this._cfgContentFingerprint||sh(this._serverCfg))&&!await this._signer.prepareImage(this.hass,this._candidateBackdrop(e)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0);const i=this._space;this._adoptStructuralResponses(t),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._space!==i&&this._restoreZoom(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}catch(t){this._showToast(this._t("toast.cfg_reload_failed",{err:this._errText(t)}))}finally{this._continuityDataReady=!0,this.requestUpdate()}}_scheduleLoadRetry(t=!1){if(void 0!==this._loadRetryTimer)return;const e=Math.min(8e3,500*2**Math.min(4,Math.max(1,this._loadTries-7)));this._loadRetryTimer=window.setTimeout(()=>{this._loadRetryTimer=void 0,!t&&this._loadOk||this._loading||!this.hass||this._loadFromServer()},e)}_ensureHaRegistryAuthority(){const t=this.hass?.connection||null;t&&t!==this._haRegistryConnection&&(this._haRegistryRelease?.(),this._haRegistryConnection=t,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._haRegistryRelease=Rn(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return An(this.hass)}get _planHass(){const t=this._haRegistry,e=Fn(this.hass,t),i=this._planHassMemo;if(i&&i.hass===this.hass&&i.sig===e)return i.active;const s=zn(this.hass,t),n=On(this.hass,t);return this._planHassMemo={hass:this.hass,sig:e,active:s,full:n},s}_captureRenderDeviceSnapshot(){if(!this.hass)return;const t=Date.now(),e=[...this._activityRt.entries()].map(([e,i])=>`${e}:${i.gen}:${i.flashTs}:`+(i.flashKind&&(i.expiresAt||i.flashTs+Fu)>t?1:0)).join("|"),i=fn(this._virtualLights);if(this._capturedSnapshotSequence===this._hassSequence&&this._capturedSnapshotDevices===this._devices&&this._capturedSnapshotLayout===this._layout&&this._capturedSnapshotConfigEpoch===this._cfgEpoch&&this._capturedSnapshotVirtual===i&&this._capturedSnapshotActivity===e)return;const s=this._planHass,n=new Map,o=new Map,a=new Set(["sun.sun"]);this._vacFit?.source&&a.add(this._vacFit.source);const r=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void a.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?r.add(s):"entity"===i&&a.add(s)};for(const t of this._model)for(const e of t.rooms)e.area&&l.add(e.area),c(e.settings?.temp_source),c(e.settings?.hum_source);for(const t of this._serverCfg?.spaces||[])for(const e of t.openings||[])for(const t of gi(e))a.add(t);for(const t of this._serverCfg?.spaces||[])for(const e of t.decor||[])if("text"===e.kind){for(const t of String(e.text||"").matchAll(/\{([^{}\r\n]+)\}/g)){const e=Ki(t[1]);e?.entity&&a.add(e.entity)}e.entity&&a.add(e.entity),o.set(`decor:${t.id}:${e.id}`,Qi(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!yo(s,t,vo(this._markers))))}const h=ro(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(vu(t.id,e),_u(s,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._devices,lightSources:h,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}));if(this._isVacDev(t)){const e=this._vacSource(t,s),i=e?bh(s?.states?.[e]?.attributes):null,n=this._vacRt.get(t.id);o.set(`vacuum:${t.id}`,{source:e,telemetry:i,mapId:i?this._vacMapId(t,i,s):null,runtime:n?{trail:n.trail,lastTs:n.lastTs,moving:n.moving,jump:n.jump}:null,server:this._vacSrvTrails[t.id]||null})}}const d=fu({sourceSequence:this._hassSequence,hass:s,devices:this._devices,presentations:n,positions:(u=this._model.length>0,p=this._devices,_=t=>this._livePos(t),u?new Map(p.map(t=>[t.id,_(t)])):new Map),facts:o,entityIds:a,deviceIds:r,areaIds:l});var u,p,_;this._capturedSnapshotSequence=this._hassSequence,this._capturedSnapshotDevices=this._devices,this._capturedSnapshotLayout=this._layout,this._capturedSnapshotActivity=e,this._capturedSnapshotConfigEpoch=this._cfgEpoch,this._capturedSnapshotVirtual=i,this._visibleDeviceSnapshot&&"steady"!==this._continuity.state?this._candidateDeviceSnapshot=d:(this._visibleDeviceSnapshot=d,this._candidateDeviceSnapshot=null)}get _renderDeviceSnapshot(){return this._stagedDeviceSnapshotToken===this._continuity.token?this._candidateDeviceSnapshot||this._visibleDeviceSnapshot:this._visibleDeviceSnapshot||this._candidateDeviceSnapshot}get _renderPlanHass(){return this._renderDeviceSnapshot?.hass||this._planHass}get _renderDevices(){return this._renderDeviceSnapshot?.devices||this._devices}get _fullRegistryHass(){return this._planHass,this._planHassMemo?.full||this.hass}_bindingStatus(t){return Ln(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=An(t);return{access:e.access,authoritative:e.authoritative,revision:e.revision,lastSuccess:e.lastSuccess,error:e.error}}(this.hass),e={active:0,ha_disabled:0,orphaned:0,unverified:0};for(const t of this._markers)t.removed||"virtual"===t.binding||e[this._bindingStatus(t.binding).kind]++;return{registry:{...t,lastSuccessAgeMs:t.lastSuccess?Math.max(0,Date.now()-t.lastSuccess):null},bindings:e}}_openBindingInHa(t){const[e,i]=t.split(":");if(i)if("device"!==e){if("entity"===e){const t=this._fullRegistryHass.entities?.[i];t?.device_id&&z_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else z_("/config/devices/device/"+encodeURIComponent(i))}_bindingHasHaPage(t){const[e,i]=t.split(":");return!!i&&("device"===e||"entity"===e&&!!this._fullRegistryHass.entities?.[i]?.device_id)}_toggleMarkerDialogVisibility(){const t=this._markerDialog;if(!t)return;const e="ha"===t.bindingMode?this._bindingStatus(t.binding):null,i=t.hideFromPlan||"ha_disabled"===e?.kind;i&&"ha_disabled"===e?.kind?this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device")):i&&"unverified"===e?.kind?this._showToast(this._t("toast.ha_binding_unverified")):this._markerDialog={...t,hideFromPlan:!i}}_hookConnection(){const t=this.hass?.connection;t&&t!==this._connHooked&&(this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),t.addEventListener?.("ready",this._onConnReady),t.addEventListener?.("disconnected",this._onConnLost),t.addEventListener?.("reconnect-error",this._onConnLost),this._connHooked=t)}_display(t){return this._signer.display(this.hass,t)}_resign(){this._signer.resign(this.hass,Rs(this._serverCfg))}_onLayoutEvent(t){t<=this._layoutRev||(clearTimeout(this._layoutSyncTimer),this._layoutSyncTimer=window.setTimeout(()=>{t<=this._layoutRev||this._reloadLayoutOnly()},200))}_noteLayoutRev(t){const e=t?.rev;"number"==typeof e&&e>this._layoutRev&&(this._layoutRev=e)}async _reloadLayoutOnly(){if(!this._serverStorage||!this.hass?.callWS)return;this._beginContinuityCandidate("layout-reload",!1);const t=new Map;for(const e of this._dirtyPos)this._layout[e]&&t.set(e,this._layout[e]);this._persistLayout.pending()&&this._persistLayout.flush();for(const[e,i]of this._sentPos)t.set(e,i);try{const e=await this.hass.callWS({type:"houseplan/layout/get"}),i={...e?.layout||{}};for(const[e,s]of t)i[e]=s;const s=sh(i);s!==(this._layoutContentFingerprint||sh(this._layout))&&(this._layout=i,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev,this._canOptimizeUndo=!!e?.can_optimize_undo,this._undoKind=e?.undo_kind||null,this._cacheSnapshot(),this.requestUpdate()}catch{}finally{this._continuityDataReady=!0,this.requestUpdate()}}_maybeRebuildDevices(){const t=this.hass;if(!t?.devices||!t?.entities||!t?.areas)return;const e=this._haRegistry,i=Fn(t,e)+":"+Object.keys(t.areas).length+":"+(this._norm?"n":"l")+":"+na(t,this._config?.language);if(i===this._regSignature&&this._devices.length)return;this._regSignature=i;const s=new Map(this._devices.map(t=>[t.id,t.bindingStatus?.kind||"active"]));this._devices=ko({hass:t,registry:e,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||"",loc:t=>this._t(t),iconRules:this._iconRules});const n=this._markers.filter(t=>!t.removed&&"virtual"!==t.binding).map(t=>t.binding).sort(),o=e.revision+":"+n.join("|");if(e.authoritative&&o!==this._haBindingCacheKey){const i=new Map;for(const s of n)i.set(s,Ln(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Nn(),i=Date.now();for(const[s,n]of t)"active"===n.kind?e[s]={kind:"active",ts:i}:"ha_disabled"===n.kind&&(e[s]={kind:"ha_disabled",reason:n.reason,ts:i});const s=Object.fromEntries(Object.entries(e).sort((t,e)=>e[1].ts-t[1].ts).slice(0,1500));Sn=s;try{localStorage.setItem($n,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const a=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())a.has(t)||this._vacRt.delete(t);if(this._infoCard){const t=this._devices.find(t=>t.id===this._infoCard.id);this._infoCard=t&&"ha_disabled"!==t.bindingStatus?.kind?t:null}const r=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));r&&("ha_disabled"!==this._infoCard?.bindingStatus?.kind&&"ha_disabled"!==this._devices.find(t=>t.id===this._infoCard?.id)?.bindingStatus?.kind||this._closeInfoCard(),this._drag&&"ha_disabled"===this._devices.find(t=>t.id===this._drag.id)?.bindingStatus?.kind&&(this._drag=null),clearTimeout(this._holdTimer),this._holdFired=!1,this._tip=null,this._tapConfirm=null),this._nativeMoreInfoEntity&&!this._planEntityAvailable(this._nativeMoreInfoEntity)&&(E_(this,"hass-more-info",{entityId:null}),this._nativeMoreInfoEntity=null)}_syncNewDevices(){if(!this._norm||!this._loadOk||!this._serverCfg)return;const t=this._devices.filter(t=>!t.marker&&!t.virtual).map(t=>t.id).sort(),e=t.join(",");if(e===this._newSyncKey)return;this._newSyncKey=e;const i=this._settings,{fresh:s,known:n}=function(t,e){if(!Array.isArray(e))return{fresh:[],known:[...t]};const i=new Set(e),s=t.filter(t=>!i.has(t));return{fresh:s,known:s.length?[...e,...s]:e}}(t,i.known_devices);if(!Array.isArray(i.known_devices)||s.length){const t=[...new Set([...i.new_device_ids||[],...s])];this._serverCfg={...this._serverCfg,settings:{...i,known_devices:n,new_device_ids:t}},this._saveConfig()}}get _newIds(){const t=this._settings.new_device_ids;return new Set(Array.isArray(t)?t:[])}_ackNewDevice(t){if(!this._newIds.has(t)||!this._serverCfg)return;const e=this._settings;this._serverCfg={...this._serverCfg,settings:{...e,new_device_ids:(e.new_device_ids||[]).filter(e=>e!==t)}},this._saveConfig(),this.requestUpdate()}get _markers(){return this._serverCfg?.markers||[]}_roomLqi(t){if(!t)return null;const e=[];for(const i of this._renderDevices){if(i.area!==t||i.virtual)continue;const s=ho(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return Ei(e)}_roomBounds(t){if(t.poly&&t.poly.length){const e=t.poly.map(t=>t[0]),i=t.poly.map(t=>t[1]),s=Math.min(...e),n=Math.min(...i);return{x:s,y:n,w:Math.max(...e)-s,h:Math.max(...i)-n}}return{x:t.x??0,y:t.y??0,w:t.w??0,h:t.h??0}}_defaultPositions(){const t={},e=this._config?.icon_size??2.5;for(const i of this._model){const s=e/100*gc(i)*1.3;for(const e of i.rooms){if(!e.area)continue;const n=this._devices.filter(t=>t.area===e.area&&t.space===i.id);if(!n.length)continue;const o=this._roomBounds(e),a=.1*Math.min(o.w,o.h),r=o.w-2*a,l=o.h-2*a,c=Math.max(1,Math.round(Math.sqrt(n.length*r/Math.max(l,1)))),h=Math.ceil(n.length/c),d=r/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+a+d*(e%c+.5),y:o.y+a+u*(Math.floor(e/c)+.5)}));Oi(p,o,s,.5*a),n.forEach((e,i)=>t[e.id]=ec(p[i]))}}return t}_pos(t){const e=this._renderDeviceSnapshot?.positions.get(t.id);return e?{x:e.x,y:e.y}:this._livePos(t)}_livePos(t){const e=this._spaceModelById(t.space),i=this._layout[t.id];if(i)if(this._norm){if(i.s===t.space)return{x:i.x*P_,y:i.y*P_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?ec(_c(e)):{x:500,y:500}}_savePos(t,e,i){if(this._spaceModelById(t.space)){if(this._norm){const s=this._gridPitch,n=Math.round(e/s)*s,o=Math.round(i/s)*s,a=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:sc(n/P_),y:sc(o/P_),...a?{k:a}:{}}}}else this._layout={...this._layout,[t.id]:{x:Math.round(e),y:Math.round(i)}};this._dirtyPos.add(t.id),this._persistLayout()}}_visualSamples(t){return cu(this._renderPlanHass,t,this._renderDevices,void 0,this._fullRegistryHass).samples}_devicePresentation(t,e=!1!==this._config?.show_signal,i=!1){const s=i?null:this._renderDeviceSnapshot?.presentations.get(vu(t.id,e));return s||_u(this._renderPlanHass,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,designPreview:i,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._renderDevices,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion})}_deviceVisual(t){return this._devicePresentation(t).visual}_stateClass(t,e=this._deviceVisual(t)){const i=this._devicePresentation(t);return i.effectiveHidden?"":("icon_ripple"!==i.display||!1===this._config?.live_states||"alarm"===e.status||e.activity,pu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=po(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:uo(this._renderPlanHass,t.entities)}_bindingEntities(t){if("virtual"===t||!t)return[];const e=this._bindingStatus(t);return"active"===e.kind?e.enabledEntityIds:e.allEntityIds}_bindingHasClimate(t){return this._bindingEntities(t).some(t=>t.startsWith("climate."))}_bindingHasAlarm(t){return this._bindingEntities(t).some(t=>{const e=this._planHass?.states?.[t]||this.hass?.states?.[t],i=this._fullRegistryHass.entities[t]||this.hass?.entities?.[t];return Ls(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&_o(this.hass,t.primary)?go(this.hass,t.entities):null}_deviceBindingActive(t,e=!0){if(t.virtual||"virtual"===t.bindingKind)return!0;if(!t.bindingKind||!t.bindingRef)return!1;const i=this._bindingStatus(`${t.bindingKind}:${t.bindingRef}`);return"active"===i.kind||(e&&this._showToast(this._t("ha_disabled"===i.kind?"toast.ha_disabled_action":"toast.ha_binding_unverified")),!1)}_openMoreInfo(t){t?this._planEntityAvailable(t)?(this._nativeMoreInfoEntity=t,E_(this,"hass-more-info",{entityId:t})):this._showToast(this._t("toast.ha_disabled_action")):this._showToast(this._t("toast.no_entity"))}_interruptViewGesture(t,e){if(clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),void 0!==t)for(const i of[e,this._stageEl])try{i?.hasPointerCapture?.(t)&&i.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null}_closeInfoCard(){this._interruptViewGesture(),this._holdFired=!1,this._infoCard=null}_ctxDevice(t,e){"view"===this._mode&&(t.preventDefault(),t.stopPropagation(),this._deviceBindingActive(e)&&(e.primary?this._openMoreInfo(e.primary):this._infoCard=e))}_clickDevice(t,e){if(t.stopPropagation(),this._drag?.moved||this._suppressClick||this._holdFired)return;if("plan"===this._mode)return;if("devices"===this._mode)return void this._openMarkerDialog(e);const i=this._devices.find(t=>t.id===e.id);if(!i)return;const s=Yh(i.tapAction,i.primary?.split(".")[0]),n=(t,e)=>{i.marker?.tap_confirm?this._tapConfirm={kind:"run",text:t,exec:e}:e()};if("toggle"===s){const t=this._toggleIntent(i);if(!t||!ed(t))return;const e=t=>{const e=ed(t);if(!e)return;if("virtual-light"===e.kind)return this._startDevicePressFeedback(i.id),void this.hass.callWS({type:"houseplan/virtual_light/toggle",marker_id:e.markerId}).then(t=>{const e=bn(this._virtualLights,t);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}).catch(t=>this._showToast(this._t("toast.virtual_light_toggle_failed",{err:this._errText(t)})));const{command:s}=e;this._startDevicePressFeedback(i.id),this.hass.callService(s.domain,s.service,s.data).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))},s=((o=t).targets.length?o.targets:o.skippedTargets).map(t=>t.name||t.entityId||t.ref).join(", ")||i.name;if(i.marker?.tap_confirm){const n=this._toggleConfirmationLines(t);if(!n.length)return;this._tapConfirm={kind:"toggle",text:this._t("confirm.tap_toggle",{name:s}),lines:n,initialIntent:t,deviceId:i.id,exec:()=>{const s=this._devices.find(t=>t.id===i.id),n=s?this._toggleIntent(s):null;n&&id(t,n)?e(n):this._showToast(this._t("toast.tap_target_changed"))}}}else e(t);return}var o;if("info"===s)return this._interruptViewGesture(),void(this._infoCard=i);if(this._deviceBindingActive(i)){if("run"===s){const t=i.marker?.tap_target||"",e=function(t){const e=String(t||"").split(".")[0];return"automation"===e?{domain:"automation",service:"trigger"}:"script"===e?{domain:"script",service:"turn_on"}:"scene"===e?{domain:"scene",service:"turn_on"}:null}(t),s=this.hass.states[t];if(!e||!s)return void this._showToast(this._t("toast.run_target_missing"));const o=s.attributes?.friendly_name||t;return void n(this._t("confirm.tap_run",{name:o}),()=>{this._deviceBindingActive(i)&&this._planEntityAvailable(t)&&(this._startDevicePressFeedback(i.id),this.hass.callService(e.domain,e.service,{entity_id:t}).then(()=>{this._stampActivity(i.id,"event",this._activitySourceKey(i)),this.requestUpdate(),this._showToast(this._t("toast.run_started",{name:o}))}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)}))))})}"more-info"===s&&i.primary?this._openMoreInfo(i.primary):this._infoCard=i}}_keyDevice(t,e){"Enter"!==t.key&&" "!==t.key||"view"!==this._mode&&"devices"!==this._mode||(t.preventDefault(),this._clickDevice(t,e))}_startDevicePressFeedback(t){const e=[...this.renderRoot.querySelectorAll(".dev[data-id]")].find(e=>e.dataset.id===t),i=e?.querySelector(".device-shell");if(!i||"function"!=typeof i.animate)return;const s=Number.parseFloat(this.ownerDocument.defaultView?.getComputedStyle(i).scale||""),n=Number.isFinite(s)?Math.max(.95,Math.min(1,s)):1;this._devicePressAnimations.get(t)?.cancel();const o=this._reducedMotion?[{outlineColor:"transparent",outlineStyle:"solid",outlineWidth:"0px"},{outlineColor:"var(--hp-accent, #3ea6ff)",outlineStyle:"solid",outlineWidth:"2px",outlineOffset:"2px",offset:.5},{outlineColor:"transparent",outlineStyle:"solid",outlineWidth:"0px"}]:[{scale:String(n)},{scale:"0.95",offset:.5},{scale:"1"}],a=i.animate(o,{duration:200,easing:"cubic-bezier(.22,.61,.36,1)"});this._devicePressAnimations.set(t,a);const r=()=>{this._devicePressAnimations.get(t)===a&&this._devicePressAnimations.delete(t)};a.addEventListener("finish",r,{once:!0}),a.addEventListener("cancel",r,{once:!0})}_cancelDevicePressFeedback(){for(const t of this._devicePressAnimations.values())t.cancel();this._devicePressAnimations.clear()}_pruneDevicePressFeedback(){if(!this._devicePressAnimations.size)return;const t=new Set([...this.renderRoot.querySelectorAll(".dev[data-id]")].map(t=>t.dataset.id||""));for(const[e,i]of this._devicePressAnimations)t.has(e)||(i.cancel(),this._devicePressAnimations.delete(e))}_t(t,e){return oa(na(this.hass,this._config?.language),t,e)}get _colorPickerLabels(){return{title:this._t("color_picker.title"),hue:this._t("color_picker.hue"),saturation:this._t("color_picker.saturation"),value:this._t("color_picker.value"),hex:this._t("color_picker.hex"),invalidHex:this._t("color_picker.invalid_hex")}}_help(t){const e=`${t}.aria`,i=na(this.hass,this._config?.language);return aa(i,t)&&aa(i,e)?j``:G}get _stageEl(){return this.renderRoot.querySelector(".stage")}_contentItems(t){const e=[];for(const i of this._devices){if(i.space!==t.id||i.hidden)continue;const s=this._pos(i);e.push({minX:s.x,minY:s.y,maxX:s.x,maxY:s.y})}if(t.id===this._space){for(const t of this._openingsR){const i=Number(t.angle)*Math.PI/180,s=Math.cos(i)*t.rlen/2,n=Math.sin(i)*t.rlen/2,o=ac([[t.rx-s,t.ry-n],[t.rx+s,t.ry+n]]);o&&e.push(o)}const i=this._decorH;for(const t of this._decorList){const s=ac("line"===t.kind?[[t.x1*P_,t.y1*i],[t.x2*P_,t.y2*i]]:"text"===t.kind?[[t.x*P_,t.y*i]]:hr({x:t.x*P_,y:t.y*i,w:t.w*P_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=ac(i);t&&e.push(t)}}return lc(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:P_,h:P_};return{rect:t,all:t,outliers:0}}const e=this._frame,i="view"!==this._mode;if(e&&e.id===t.id&&this._bdDrag)return e;if(e&&e.id===t.id&&e.model===t&&e.layout===this._layout&&e.devs===this._devices&&e.far===this._showFar&&e.grow===i)return e;const s=uc(this._contentItems(t));let n=s.all||pc(t),o=this._showFar?n:s.core||pc(t);return e&&e.id===t.id&&i&&e.grow&&(o=A_(e.rect,o),n=A_(e.all,n)),this._frame={id:t.id,model:t,layout:this._layout,devs:this._devices,far:this._showFar,grow:i,rect:o,all:n,outliers:s.outliers},this._frame}_isoSource(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._openPairs().flatMap(t=>t.segs),s=this._openingsR.map((t,e)=>({id:String(t.id||e),sourceIndex:e,type:t.type,x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen>0?t.rlen:900,flipH:!!t.flip_h,flipV:!!t.flip_v}));return{key:`${t.id}|${function(t){let e=2166136261;const i=t=>{if("number"!=typeof t)if("string"!=typeof t)if("boolean"!=typeof t)if(Array.isArray(t)){e=Zp(e,t.length);for(const e of t)i(e)}else{if(t&&"object"==typeof t){const e=t;for(const t of Object.keys(e).sort())i(t),i(e[t]);return}e=Zp(e,-1)}else e=Zp(e,t?1:0);else for(const i of t)e=Zp(e,i.codePointAt(0)||0);else e=Zp(e,t)};return i(t),e.toString(36)}({rooms:t.rooms,walls:e,openCuts:i,openings:s,partitions:t.partitions,roomDrafts:t.room_drafts,columns:t.wall_columns,cellCm:this._cellCm,gridPitch:this._gridPitch,wallKeyPitch:this._wallKeyPitch,camera:Np,wallHeight:Lp,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),a=e.length||n.length?ul(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,n):null;if((e.length||n.length)&&!a)throw new Error("wall boolean geometry failed");const r=a?.paperGeom??function(t,e,i,s,n,o,a=1){try{const r=hl(t,e,i,s,n,o,a);return r?r.shell?.length?si(r.centre,r.shell):r.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?hd(i.partitionHost,s):e.length||"gate"===t.type?bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length,flip_v:s}):{ox:0,oy:0,cm:0,side:-1};return function(t,e=64){if(!(Qp([t.x,t.y,t.angle,t.length,t.face.ox,t.face.oy,e])&&t.length>0&&e>0))throw new Error("invalid isometric opening input");const i=t.length/2;let s;if("passage"===t.type)s=[];else if("gate"===t.type){const n=t.flipV?-1:1,o=t.face.side*n*10;s=[e_(t,0,[-i,0],[i,0],o,0,.88*e),e_(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[e_(t,0,[-i,0],[i,0],-90,.27*e,.78*e),e_(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[e_(t,0,[-i,0],[t.length,0],-90,0,.92*e)];return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaves:Object.freeze(s.map(t=>Object.freeze(t)))}}({...t,face:n})});return{walls:a?.geom||[],floor:r,openings:Object.freeze(c)}}}}_isoSceneKey(){if(!this._labsIso||"view"!==this._mode)return null;try{return this._isoSource()?.key??null}catch{return`${this._space}|invalid`}}_isoScene(){const t=this._isoSource();if(!t)return null;const e=this._isoGeometryCache.get(t.key);if(e)return{key:t.key,...e};const i=this._frameOf().rect,s=t.build(),n=function(t){let e=1/0,i=1/0,s=-1/0,n=-1/0;for(const o of t)for(const t of o.leaves){const o=Math.hypot(t.closedVector[0],t.closedVector[1]);e=Math.min(e,t.hinge[0]-o),i=Math.min(i,t.hinge[1]-o),s=Math.max(s,t.hinge[0]+o),n=Math.max(n,t.hinge[1]+o)}return Qp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Up({rect:n?A_(i,n):i,wallHeight:Lp,openingHeight:Lp,floorDepth:10}),a=function(t,e=Np,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let a=0;for(let r=0;r<(t||[]).length;r++){const l=t[r];for(let t=0;t<(l||[]).length;t++){const c=Kp(l[t],t>0);if(!(c.length<3||Math.abs(Vp(c))<1e-9)){s.push(Yp(c,e,i)),a+=c.length;for(let s=0;st.depth-e.depth||t.polygon-e.polygon||t.ring-e.ring||t.edge-e.edge),{topPath:s.join(" "),sides:n,contactPath:o.join(" "),edgeCount:a}}(s.walls),r={geometry:a,floor:Jp(s.floor,10),openings:s.openings,frame:o};return y_(this._isoGeometryCache,t.key,r,8),{key:t.key,...r}}_effectiveProjection(){if("iso"!==this._desiredProjection||!this._model.length)return"flat";const t=this._isoSceneKey()||`${this._space}|invalid`;if(this._isoFallback.has(t))return"flat";try{const t=this._isoScene();return t?(e="iso",i=t.key,s=this._isoFallback,"iso"===e&&i&&!s.has(i)?"iso":"flat"):"flat"}catch(e){if(!this._isoFallback.has(t)){this._isoFallback.add(t);const i=t.split("|");console.warn(`HOUSEPLAN ISO FALLBACK: #89, space ${this._space}, fingerprint ${i[i.length-1]}, ${e instanceof Error?e.message:"renderer error"}`)}return"flat"}var e,i,s}_scenePoint(t){return"iso"===this._renderProjection?qp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=jp([t.x,t.y]),i=jp([t.x+t.w,t.y+t.h]);return{x:e[0],y:e[1],w:i[0]-e[0],h:i[1]-e[1]}}_baseVb(){if("iso"===this._effectiveProjection()){if(!this._spaceDisplayForRender().showBorders){const t=Up({rect:this._frameOf().rect,wallHeight:Lp});return[t.x,t.y,t.w,t.h]}const t=this._isoScene()?.frame??this._frameOf().rect;return[t.x,t.y,t.w,t.h]}const t=this._frameOf().rect;return[t.x,t.y,t.w,t.h]}get _outliers(){return this._showFar?0:this._frameOf().outliers}_fitFar(){this._showFar=!0,this._frame=null,this._resetZoom()}_fitAll(){this._showFar=!0,this._frame=null,this._resetZoom()}_renderFarHint(){return this._kiosk||"view"!==this._mode||this._booting||!this._outliers?G:j`
${this._t("canvas.far_objects",{n:this._outliers})} @@ -4746,7 +4763,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 style="left:${r.toFixed(1)}%;top:${l.toFixed(1)}%" @click=${t=>{t.stopPropagation(),this._fitAll()}}> - `}_stageAspect(){const t=this._stageEl,e=this._baseVb();return t&&t.clientHeight?t.clientWidth/t.clientHeight:e[2]/e[3]}_viewOr(t){return this._view&&this._view.w?this._view:zi(t,this._stageAspect())}_roomLabelReferenceViewWidth(t){if(!this._markup)return t.w;const e=this._stageEl,i=this.renderRoot.querySelector(".editorchrome");if(!e||e.clientWidth<=0||e.clientHeight<=0)return t.w;const s=e.clientHeight+(i?.getBoundingClientRect().height||0);return s<=0?t.w:this._viewForModeTarget(this._zoom,void 0,void 0,e.clientWidth,s).w}_screenToVb(t,e){const i=this._stageEl,s=this._viewOr(this._baseVb()),n=i?.clientWidth||1,o=i?.clientHeight||1;return[s.x+t/n*s.w,s.y+e/o*s.h]}_clampView(t,e){const i=(t,e,i,s)=>{const n=1*Math.max(e,s),o=i-n,a=i+s-e+n;return Math.max(Math.min(o,a),Math.min(Math.max(o,a),t))};return{w:t.w,h:t.h,x:i(t.x,t.w,e.x,e.w),y:i(t.y,t.h,e.y,e.h)}}_applyView(t,e,i){const s=this._baseVb(),n=zi(s,this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),a=n.w/o,r=n.h/o,l=this._viewOr(s),c=e??l.x+l.w/2,h=i??l.y+l.h/2,d=this._clampView({x:c-a/2,y:h-r/2,w:a,h:r},n);return!(this._view&&Math.abs(this._zoom-o)<1e-9&&Math.abs(this._view.x-d.x)<1e-6&&Math.abs(this._view.y-d.y)<1e-6&&Math.abs(this._view.w-d.w)<1e-6&&Math.abs(this._view.h-d.h)<1e-6)&&("opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=o,this._view=d,!0)}_bootWatch(){clearTimeout(this._bootTimer),this._bootStart=Date.now(),this._bootLastH=-1,this._bootLastChange=this._bootStart;const t=()=>{if(!this._booting)return;const e=Date.now(),i=this._stageEl?this._stageEl.clientHeight:0;i!==this._bootLastH&&(this._bootLastH=i,this._bootLastChange=e);const s=e-this._bootStart;s>=1200||s>=700&&i>0&&e-this._bootLastChange>=250?this._bootSettled():this._bootTimer=window.setTimeout(t,100)};this._bootTimer=window.setTimeout(t,100)}_bootSettled(){this._booting&&!this._bootSettling&&(this._bootSettling=!0,this._refitView(),this._bootSettleRaf=requestAnimationFrame(()=>{this._bootSettleRaf=0,this._finishBootSettled()}))}_finishBootSettled(){if(!this._booting)return;this._refitView(),this._booting=!1,this._bootSettling=!1;const t=this._stageEl?.clientHeight??0;!this._config?.kiosk&&t>0&&this._warmPatch({hdrH:this._hdrH,stageH:t,vp:this._warmViewportState()},!0),this._bootFading=!0,this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220),this._bootSoft=!0,clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)}_bootSoftCancel(){this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoft=!1)}_beginResumeSettle(){this._booting||this._resumeSettling||(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0),this._viewportInvalidAt=0,this._beginContinuityCandidate("warm-resume",!1),this._loading?this.requestUpdate():this._loadFromServer())}_refitView(){if(this._modeTransitionBusy)return;const t=this._stageEl;if(!t||"visible"!==document.visibilityState||t.clientWidth<=0||t.clientHeight<=0)return void(this._viewportInvalidAt||(this._viewportInvalidAt=Date.now()));const e=[t.clientWidth,t.clientHeight],i=this._lastValidStageSize,s=!!i&&Math.abs(i[0]-e[0])<=.5&&Math.abs(i[1]-e[1])<=.5,n=this._viewportInvalidAt?Date.now()-this._viewportInvalidAt:0;if(this._viewportInvalidAt=0,!i)return this._lastValidStageSize=e,void(this._view||this._applyView(this._zoom));s?this._pendingRefitSize=null:(this._pendingRefitSize=e,this._refitRaf||(this._refitRaf=requestAnimationFrame(()=>{this._refitRaf=0;const t=this._pendingRefitSize;this._pendingRefitSize=null;const e=this._stageEl;if(!t||!e||e.clientWidth<=0||e.clientHeight<=0)return;if(Math.abs(e.clientWidth-t[0])>.5||Math.abs(e.clientHeight-t[1])>.5)return void this._refitView();const i=this._lastValidStageSize;if(i&&Math.abs(i[0]-t[0])<=.5&&Math.abs(i[1]-t[1])<=.5)return;this._lastValidStageSize=t;const s=this._view;n>=Jc?this._beginContinuityCandidate("stage-size-restored",!0,"stage-size"):this._continuity.hasCompleteFrame&&this._beginContinuityCandidate("stage-resize",!0,"stage-size"),this._applyView(this._zoom,s?s.x+s.w/2:void 0,s?s.y+s.h/2:void 0)})))}_zoomAt(t,e,i){const s=this._stageEl;if(!s)return;const n=zi(this._baseVb(),this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const a=s.clientWidth,r=s.clientHeight,l=this._screenToVb(t,e),c=n.w/o,h=n.h/o;this._zoom=o,this._view=this._clampView({x:l[0]-t/a*c,y:l[1]-e/r*h,w:c,h:h},n)}_onWheel(t){const e=this._stageEl;if(!e)return;t.preventDefault();const i=e.getBoundingClientRect(),s=t.deltaY<0?1.15:1/1.15;this._zoomAt(t.clientX-i.left,t.clientY-i.top,this._zoom*s),this._saveZoom()}_stepZoom(t){const e=this._stageEl;e&&(this._zoomAt(e.clientWidth/2,e.clientHeight/2,this._zoom*(t>0?1.4:1/1.4)),this._saveZoom())}_resetZoom(){const t=this._baseVb();"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=1,this._view=zi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(S_,JSON.stringify(this._zoomBySpace))}catch{}}}_restoreZoom(){const t=this._zoomBySpace[this._space]||1;this._zoom=t;const e=this._stageEl;if(e&&e.clientHeight){const e=this._baseVb();return this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),void this.requestUpdate()}this._view=null,requestAnimationFrame(()=>{if(!this._stageEl)return;const e=this._baseVb();this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),this.requestUpdate()})}_stagePointerDown(t){if(this._vacFit)return;if(this._kiosk&&(this._cyclePausedUntil=Date.now()+6e4,0===this._pointers.size?(this._swipeStart={x:t.clientX,y:t.clientY,id:t.pointerId},t.target.closest?.(".dev, .roomlabel, .oplock")||(clearTimeout(this._kioskHoldTimer),this._kioskHoldTimer=window.setTimeout(()=>{this._kioskDialog=!0,this._swipeStart=null},3e3))):(this._swipeStart=null,clearTimeout(this._kioskHoldTimer))),this._drag)return;if(this._markup&&t.target.closest?.(".roomlabel, .rlhandle, .rszhandle, .dev, .oplock, .op-hit, button"))return;if("devices"===this._mode&&t.target.closest(".dev"))return;if("decor"===this._mode&&this._decorPointerDown(t))return;this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});const e=this._viewOr(this._baseVb());if(1===this._pointers.size)this._panStart={sx:t.clientX,sy:t.clientY,vx:e.x,vy:e.y},this._panLock=null,this._suppressClick=!1;else if(2===this._pointers.size){this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);this._pinchStart={dist:e,zoom:this._zoom},this._panStart=null,this._panLock=null}}get _swipeZone(){return!this._hasFixedFloor&&this._kiosk&&this._zoom<=1.001&&this._model.length>1}_stagePointerMove(t){if(this._physicalRotate?.pid!==t.pointerId)if(this._physicalDrag?.pid!==t.pointerId)if(this._dtDrag?.pid!==t.pointerId)if(this._bdDrag?.pid!==t.pointerId){if(this._decorDraft?.pid===t.pointerId){const e=this._decorDraft;let i=this._decorSnap(this._svgPoint(t),t.pointerType);if(t.shiftKey&&("rect"===e.kind||"ellipse"===e.kind)){const t=i[0]-e.a[0],s=i[1]-e.a[1],n=Math.max(Math.abs(t),Math.abs(s));i=this._snap([e.a[0]+(t<0?-n:n),e.a[1]+(s<0?-n:n)])}return void(this._decorDraft={...e,b:i})}if(this._decorMove?.pid!==t.pointerId)if(this._pointers.has(t.pointerId)){if(this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),this._markup&&1===this._pointers.size&&this._markupMove(t),this._pinchStart&&this._pointers.size>=2){"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)/(this._pinchStart.dist||1),i=this._stageEl.getBoundingClientRect(),s=(t[0].x+t[1].x)/2-i.left,n=(t[0].y+t[1].y)/2-i.top;this._zoomAt(s,n,this._pinchStart.zoom*e),this._suppressClick=!0,this._saveZoom()}else if(this._panStart){const e=t.clientX-this._panStart.sx,i=t.clientY-this._panStart.sy;Math.abs(e)+Math.abs(i)>4&&(this._suppressClick=!0,clearTimeout(this._holdTimer),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover()),null===this._panLock&&Math.abs(e)+Math.abs(i)>8&&(this._panLock=this._swipeZone&&Math.abs(e)>1.5*Math.abs(i)?"swipe":"pan");const s=this._stageEl;if("pan"===this._panLock&&s){const t=this._baseVb(),n=this._viewOr(t),o=zi(t,this._stageAspect());this._view=this._clampView({x:this._panStart.vx-e/(s.clientWidth||1)*n.w,y:this._panStart.vy-i/(s.clientHeight||1)*n.h,w:n.w,h:n.h},o)}}}else this._markupMove(t);else this._decorMoveUpdate(t)}else this._bdMove(t);else this._dtMove(t);else this._physicalMove(t);else this._physicalRotateMove(t)}_stagePointerLeave(t){this._markup&&("opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover())}_stagePointerUp(t){if(this._kiosk){clearTimeout(this._kioskHoldTimer);const e=this._swipeStart;if(this._swipeStart=null,e&&e.id===t.pointerId){const i=t.clientX-e.x,s=t.clientY-e.y;if(Math.abs(i)+Math.abs(s)<8){const t=Date.now();t-this._lastTap<350&&this._resetZoom(),this._lastTap=t}const n="pan"===this._panLock?null:function(t,e,i,s,n,o=60){if(i>1.001||s.length<2)return null;if(Math.abs(t)t.id),this._space);n&&this._slideTo(n,i<0?"left":"right")&&(this._saveNav(),this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._showKioskDots())}}if(this._physicalDrag?.pid===t.pointerId)return void this._physicalUp(t);if(this._physicalRotate?.pid===t.pointerId)return void this._physicalRotateUp(t);if(this._dtDrag?.pid===t.pointerId)return void this._dtUp();if(this._bdDrag?.pid===t.pointerId)return void this._bdUp();if(this._decorDraft?.pid===t.pointerId)return void this._decorCommitDraft();if(this._decorMove?.pid===t.pointerId)return this._decorMove.moved&&(this._recordGeometry(this._t("history.decor_move"),this._decorMove.before),this._saveConfig()),void(this._decorMove=null);const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null,setTimeout(()=>this._suppressClick=!1,0)),e&&0===this._pointers.size&&this.requestUpdate()}_clickRoom(t){!this._suppressClick&&t.area&&E_("/config/areas/area/"+t.area)}_pointerDown(t,e){if("plan"===this._mode)return;if("view"===this._mode){this._holdFired=!1,clearTimeout(this._holdTimer);const i=t.pointerId,s=t.currentTarget;return void(this._holdTimer=window.setTimeout(()=>{this._holdFired=!0,this._interruptViewGesture(i,s),this._infoCard=e},600))}if("ha_disabled"===e.bindingStatus?.kind)return;t.preventDefault();const i=this._pos(e);this._drag={id:e.id,sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},O_(t),this._tip=null}_pointerMove(t,e){if(!this._drag||this._drag.id!==e.id)return;const i=this.renderRoot.querySelector(".stage");if(!i)return;const s=this._baseVb(),n=i.getBoundingClientRect(),o=this._viewOr(s),a=(t.clientX-this._drag.sx)/n.width*o.w,r=(t.clientY-this._drag.sy)/n.height*o.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0,clearTimeout(this._holdTimer));const l=ic(this._drag.ox+a),c=ic(this._drag.oy+r);this._savePos(e,l,c)}_pointerUp(t,e){if(clearTimeout(this._holdTimer),!this._drag||this._drag.id!==e.id)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&(this._selId=e.id,window.setTimeout(()=>this._drag=null,0))}_showToast(t){for(const t of this.renderRoot.querySelectorAll("hp-dialog"))t.closeTransientOverlays("toast");this._toast=t,clearTimeout(this._toastTimer),this._toastTimer=window.setTimeout(()=>{this._toast=""},3500)}get _noHover(){return N_._noHoverMq||N_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(N_._touchSeen=!0,this._tip&&(this._tip=null))}_guardTouchGesture(t){if(this._editorSecondary.handleOutsideDismiss(t))return;if("click"===t.type){if(!this._suppressClick&&!this._touchSequenceMultitouch&&Date.now()>this._touchClickBlockUntil)return;return t.preventDefault(),void t.stopImmediatePropagation()}const e=t;if("touch"===e.pointerType)if(this._notePointer(e),"pointerdown"!==t.type){if("pointermove"===t.type){const t=this._touchContacts.get(e.pointerId);if(!t)return;const i={...t,x:e.clientX,y:e.clientY};if(this._touchContacts.set(e.pointerId,i),this._touchSequenceMultitouch&&"view"===this._mode&&!this._vacFit&&this._pinchStart&&[...this._touchContacts.values()].every(t=>t.inStage)){this._pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=[...this._touchContacts.values()];if(t.length>=2&&this._stageEl){const[e,i]=t,s=Math.hypot(e.x-i.x,e.y-i.y)/(this._pinchStart.dist||1),n=this._stageEl.getBoundingClientRect();this._zoomAt((e.x+i.x)/2-n.left,(e.y+i.y)/2-n.top,this._pinchStart.zoom*s),this._saveZoom()}}return}if("pointerup"===t.type||"pointercancel"===t.type){if(this._touchContacts.delete(e.pointerId),this._touchSequenceMultitouch){if(this._touchClickBlockUntil=Date.now()+500,this._pointers.delete(e.pointerId),!this._vacFit&&this._pointers.size>=2){const[t,e]=[...this._pointers.values()];this._pinchStart={dist:Math.hypot(t.x-e.x,t.y-e.y),zoom:this._zoom}}else this._pinchStart=null;0===this._pointers.size&&(this._panStart=null,this._panLock=null)}0===this._touchContacts.size&&(this._touchSequenceMultitouch=!1)}}else if(this._touchContacts.set(e.pointerId,{x:e.clientX,y:e.clientY,inStage:!!e.target?.closest?.(".stage")}),this._touchContacts.size>=2){this._touchSequenceMultitouch=!0,this._touchClickBlockUntil=Number.POSITIVE_INFINITY,clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),this._swipeStart=null;const t=[...this._touchContacts.values()];if("view"===this._mode&&!this._vacFit&&t.every(t=>t.inStage)){this._pointers=new Map([...this._touchContacts].map(([t,e])=>[t,{x:e.x,y:e.y}]));const[e,i]=t;this._pinchStart={dist:Math.hypot(e.x-i.x,e.y-i.y),zoom:this._zoom},this._panStart=null,this._panLock=null}else this._vacFit&&(this._pointers.clear(),this._pinchStart=null,this._panStart=null,this._panLock=null)}}_showTip(t,e,i,s,n,o){this._noHover||this._drag||(this._tip={x:t.clientX,y:t.clientY,title:e,meta:i,lqi:s,temp:n,hum:o})}get _gridPitch(){return Zl}get _cellCm(){const t=Number(this._curSpaceCfg?.cell_cm);return Number.isFinite(t)&&t>0?t:5}_fmtLen(t,e){const i=function(t,e,i,s){return Math.hypot(e[0]-t[0],e[1]-t[1])/i*s}(t,e,this._gridPitch,this._cellCm);return ri(i,"mi"===this.hass?.config?.unit_system?.length)}get _curSpaceCfg(){const t=this._rszPreview;return t&&t.space===this._space?t.sp:this._serverCfg?.spaces.find(t=>t.id===this._space)}get _renderCfg(){const t=this._rszPreview;return t&&this._serverCfg?{...this._serverCfg,spaces:this._serverCfg.spaces.map(e=>e.id===t.space?t.sp:e)}:this._serverCfg}get _spaceH(){return this._curSpaceCfg,T_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*T_,t[1]*e,t[2]*T_,t[3]*e])}_savedNav(){if(this._hasFixedFloor)return null;try{return JSON.parse(localStorage.getItem(M_)||"null")}catch{return null}}_saveNav(){if(!this._hasFixedFloor)try{localStorage.setItem(M_,JSON.stringify({space:this._space}))}catch{}}_leaveCardRoute(){if(this._routeDepartureHandled)return;this._routeDepartureHandled=!0,"view"!==this._mode&&this._setMode("view",!1),this._pendingNavMode=null,this._geometryHistory.clear(),this._activeDraftId=null,this._resumeDraftBySpace={},this._draftSegmentCms=[],this._closingWallCm=null,this._drawWallField=null,this._showHidden=!1,this._tapConfirm=null,this._vacCalConfirm=null,this._decorEraseConfirm=null,this._openingInfo=null,this._closeInfoCard(),this._rulesDialog=null,this._alignDialog=null,this._backupImportDialog=null,this._backupExportDialog=null,this._settingsDialog=null,this._markerDialog=null,this._openingDialog=null,this._physicalDialog=null,this._wallDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._mergeDialog=null,this._roomDialog=!1,this._spaceDialog=null,this._importDialog=null;const t=this._warmSlot;t?.owner===this._warmGen&&(t.vp=this._warmViewportState(),t.dlg=null,t.frameFingerprint="",clearTimeout(t.evict),t.evict=0),this._saveNav()}_setMode(t,e=!0){this._pendingNavMode=null;const i=this._spaceModel();if(!i)return this._cancelModeTransition(!1),void(this._mode="view");if(this._kiosk&&"view"!==t)return;if(this._mode===t){if(!e&&"view"===t&&this._modeTransitionBusy){const e=this._currentModeVisual(t),i=this._modeTransitionTargetZoom,s=this._modeTransitionTargetCenterX,n=this._modeTransitionTargetCenterY;this._cancelModeTransition(!1),this._commitViewModeAtomic(e,i,s,n)}return}if(this._bootSoftCancel(),("plan"===t||"decor"===t)&&!this._norm)return void this._showToast(this._t("toast.markup_needs_server"));if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;const s=this._mode,n=this._effectiveProjection(),o=this._currentModeVisual(s),a=this._modeTransitionBusy,r=o&&"view"!==s&&"view"!==t?{...o,toolbarContentOpacity:this._reducedMotion?1:.35}:o;this._cancelModeTransition(!1),this._editorSecondary.closeForNavigation(),(this._decorMove||this._dtDrag||this._bdDrag)&&this._cancelDecorGesture();const l=!i.bg&&"view"===t!=("view"===s),c=a&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(a?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:a?this._modeTransitionTargetCenterX:r?.viewport.centerX,u=c?c.centerY:a?this._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===s&&"view"!==t&&!a){const e=this._view;if(this._viewModeSnap={space:this._space,zoom:this._zoom,cx:e?this._logicalViewCenter(n)?.x:void 0,cy:e?this._logicalViewCenter(n)?.y:void 0},"iso"===n){const e=this._logicalViewCenter("iso");d=e?.x,u=e?.y,this._view=null,this._mode=t,this._applyView(this._zoom,e?.x,e?.y)}l&&(h=1,d=void 0,u=void 0)}if("plan"===s&&this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._mode=t,this._editorChromeMode="view"===t?s:t,"view"===t){"view"===s||a||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this._viewModeSnap;if(t&&t.space===this._space){h=t.zoom;const e=this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat",i=null!=t.cx&&null!=t.cy&&"iso"===e?Bp([t.cx,t.cy],0):null;d=i?.[0]??t.cx,u=i?.[1]??t.cy}else t&&(h=this._zoomBySpace[this._space]||1,d=void 0,u=void 0)}else this._modeTransitionEditorCamera={zoom:h,centerX:d,centerY:u};this._modeTransitionTargetZoom=h,this._modeTransitionTargetCenterX=d,this._modeTransitionTargetCenterY=u,("iso"===n||"view"===t&&this._labsIso&&"iso"===this._viewPreference[this._space])&&(this._modeTransitionForceAtomic=!0);const p=++this._modeTransitionRequest;e?r?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=r,this._prepareModeTransition(p,r,t,h,d,u)):(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._zoom=h,this._view=null,requestAnimationFrame(()=>{this.isConnected&&p===this._modeTransitionRequest&&this._mode===t&&(this._applyView(h,d,u),"view"===t&&(this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate())})):"view"===t&&this._commitViewModeAtomic(r,h,d,u),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._tool="draw",this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._selId=null,this._physicalSel=null,this._physicalDialog=null,this._physicalDrag=null,this._rszSel=null,this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._tip=null,this._hoverRoom=null,this._decorDraft=null,this._decorSel=null,this._decorMove=null,this._backdropDialog=null,this._decorTool="select",this._bdDrag=null,this._dtDrag=null,this._dtBox=null,"plan"===t&&(this._primeDrawWallField(),this._resumeLastDraft()),this._saveNav()}_primeDrawWallField(){null===this._drawWallField&&(this._drawWallField=fr(_r,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?fr(_r,this._imperial):this._drawWallField}get _drawWallCm(){const t=m_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?$l:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?$l:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:fr(t,this._imperial),unit:this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_draftSegmentCount(t=this._curSpaceCfg){return(t?.room_drafts||[]).reduce((t,e)=>t+(Array.isArray(e.segments)?e.segments.length:0),0)}_finishWallChain(){if("draw"!==this._tool||this._wallFaceBatch||this._roomDialog)return!0;const t=this._curSpaceCfg;if(!t||this._path.length<2)return this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0;const e=Sd(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>I_)return this._showToast(this._t("toast.physical_limit")),!1;const s=this._geometrySnapshot();t.partitions||=[];const n=Date.now().toString(36);for(let s=0;st.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.wall_chain_finish"),s),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0}_activateMarkupTool(t){t!==this._tool&&(this._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this._tool||this._finishWallChain())&&(this._cancelPath(),this._tool=t,"draw"===t&&this._resumeLastDraft(),"resize"===t&&(this._rszSel=null),"boundary"!==t&&"wallthick"!==t||(this._wallDialog=null)))}_limitReached(t){const e=this._curSpaceCfg;if(!e)return!0;const i="draft"===t?(e.room_drafts||[]).length>=200:"partition"===t?(e.partitions||[]).length>=I_:(e.wall_columns||[]).length>=500;return i&&this._showToast(this._t("toast.physical_limit")),i}_svgPoint(t){const e=this.renderRoot.querySelector(".stage").getBoundingClientRect();return this._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this._gridPitch;return[ic(ai(t[0],e)),ic(ai(t[1],e))]}_snapDrawPoint(t,e=!1){const i=this._path[this._path.length-1],s=e&&i?function(t,e,i,s=1/0){if(!(i>0&&t?.every(Number.isFinite)&&e?.every(Number.isFinite)))return[e[0],e[1]];const n=e[0]-t[0],o=e[1]-t[1];if(Math.abs(n)+Math.abs(o)<=1e-12)return[t[0],t[1]];const a=Math.PI/4;let r=Math.atan2(o,n);r<0&&(r+=2*Math.PI);const l=Math.floor(r/a+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((n*c+o*h)/(i*d)));if(Number.isFinite(s)&&s>=0){const e=(t,e)=>{if(!e)return 1/0;const n=e>0?s-t:t+s;return Math.max(0,Math.floor((n+1e-9*i)/i))};u=Math.min(u,e(t[0],c),e(t[1],h))}return[t[0]+c*u*i,t[1]+h*u*i]}(i,t,this._gridPitch,Xl):t;return this._snap(s)}_planSnapOpeningCuts(t,e){if(!this._openingsR.length)return[];const i=this._openingWallIndexFor(t,e).value,s=[];for(const e of this._roomWallOpeningInputs(this._openingsR,t)){const t=yl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,a=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-a,e.x+o,e.y+a])}return s}_planSnapGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planSnapGeometryCache?.key===e)return this._planSnapGeometryCache;const i=this._openCuts(),s=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:[...i,...this._planSnapOpeningCuts(t,i)],partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this._gridPitch});return this._planSnapGeometryCache={key:e,value:s},this._planSnapGeometryCache}_planStructuralGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planStructuralGeometryCache?.key===e)return this._planStructuralGeometryCache;const i=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:this._openCuts(),epsilon:2e-4*this._gridPitch});return this._planStructuralGeometryCache={key:e,value:i},this._planStructuralGeometryCache}_planSnapContextKey(t){const e=this._path[0],i=this._path[this._path.length-1];return[t,this._tool,this._path.length,e?`${e[0]},${e[1]}`:"",i?`${i[0]},${i[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const i=this._planSnapGeometrySnapshot(),s=this._path[this._path.length-1],n="draw"===this._tool&&this._path.length>=3?[{point:this._path[0],key:"closure:first-point"}]:[],o=function(t,e,i){if(!(pd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const a=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>pd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(wd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!kd(a,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:a})}if(o)return o;let r=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],a=Ns([e[0],e[1]],t);if(a>i.tolerance)continue;const l=xd(o,e,i.gridStep);!wd(l,n,s)&&kd(a,o.key,r)&&(r={kind:"line",point:l,key:o.key,distance:a,segment:o})}return r}(i.value,t,{tolerance:this._cssPxToRender(12),gridStep:this._gridPitch,excludePoints:s?[s]:[],extraEndpoints:n,epsilon:2e-4*this._gridPitch});return{point:o?[...o.point]:this._snapDrawPoint(t,e),candidate:o,contextKey:this._planSnapContextKey(i.key)}}get _activePlanSnapCandidate(){if(!this._markup||"draw"!==this._tool)return null;const t=this._planSnapHover;if(!t)return null;const e=this._planSnapGeometrySnapshot();return t.contextKey===this._planSnapContextKey(e.key)?t.candidate:null}_clearPlanSnapHover(t=!0){this._planSnapHover=null,this._syncPlanSnapActiveMarker(null),t&&(this._cursorPt=null)}_samePt(t,e){return mi(t,e)}_dropLegacySegments(){for(const t of this._serverCfg?.markers||[])"ripple"===t.display&&(t.display="icon_ripple");for(const t of this._serverCfg?.spaces||[]){delete t.segments;const e=new Set,i=t=>"string"==typeof t&&t.length>=1&&t.length<=64&&!e.has(t),s=t=>(e.add(t),!0),n=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=Yl);if(Array.isArray(t.partitions)&&(t.partitions=t.partitions.filter(t=>t&&i(t.id)&&n(t.a)&&n(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&s(t.id)).map(t=>({...t,cm:Math.max(1,Math.min(100,Number(t.cm)||15))})),t.partitions.length||delete t.partitions),Array.isArray(t.wall_columns)&&(t.wall_columns=t.wall_columns.filter(t=>t&&i(t.id)&&n(t.center)&&s(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Sl(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Ml(t.angle)}})),t.wall_columns.length||delete t.wall_columns),Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t&&i(t.id)&&Array.isArray(t.points)&&t.points.length>=2&&t.points.every(n)&&s(t.id)).map(t=>{const e=[[Number(t.points[0][0]),Number(t.points[0][1])]],i=[];for(let s=1;st.points.length>=2),t.room_drafts.length||delete t.room_drafts),Array.isArray(t.walls)){const e=zc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Pr(t.walls,t.rooms||[],Ql,1,e),t.walls.length||delete t.walls}}}get _cfgWriting(){return this._writesPending>0}_writeConfig(){this._writesPending++,this._writeChain=this._writeChain.catch(()=>{}).then(async()=>{if(!this._serverCfg)return;this._dropLegacySegments();const t=await this.hass.callWS({type:"houseplan/config/set",config:this._serverCfg,expected_rev:this._cfgRev});this._cfgRev=t?.rev??this._cfgRev+1});return this._writeChain.finally(()=>{this._writesPending--})}_saveConfig(){this._cfgEpoch++,this._saveConfigDebounced()}_geometrySnapshot(t=this._space){const e=this._serverCfg?.spaces.find(e=>e.id===t);if(!e)return null;const i=t=>JSON.parse(JSON.stringify(t)),s={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==e[t]&&(s[t]=e[t]);return{spaceId:t,rooms:i(e.rooms||[]),...Array.isArray(e.openings)?{openings:i(e.openings)}:{},...Array.isArray(e.walls)?{walls:i(e.walls)}:{},...Array.isArray(e.open_spans)?{open_spans:i(e.open_spans)}:{},...Array.isArray(e.room_drafts)?{room_drafts:i(e.room_drafts)}:{},...Array.isArray(e.partitions)?{partitions:i(e.partitions)}:{},...Array.isArray(e.wall_columns)?{wall_columns:i(e.wall_columns)}:{},...Array.isArray(e.decor)?{decor:i(e.decor)}:{},plan_transform:s}}_recordGeometry(t,e){if(!e)return;const i=this._geometrySnapshot(e.spaceId);i&&JSON.stringify(e)!==JSON.stringify(i)&&(this._geometryHistory.push({name:t,before:e,after:i}),this.requestUpdate())}_clearGeometryGesture(){this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._wallDialog=null,this._physicalDialog=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._openingDialog=null,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._decorDraft=null,this._decorMove=null,this._dtDrag=null,this._bdDrag=null}_cancelBoundaryAnchor(){return!("boundary"!==this._tool||!this._openWallAnchor)&&(this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this.requestUpdate(),!0)}_stagePointerCancel(t){if(clearTimeout(this._kioskHoldTimer),this._swipeStart?.id===t.pointerId&&(this._swipeStart=null),this._physicalDrag?.pid===t.pointerId||this._physicalRotate?.pid===t.pointerId)return void this._cancelPhysicalGesture();if(this._decorDraft?.pid===t.pointerId)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove?.pid===t.pointerId||this._dtDrag?.pid===t.pointerId||this._bdDrag?.pid===t.pointerId)return void this._cancelDecorGesture();this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null),e&&0===this._pointers.size&&this.requestUpdate()}_applyGeometryState(t){if(!this._canCommitSpace(t.spaceId))return!1;const e=this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(!e)return!1;const i=t=>JSON.parse(JSON.stringify(t));e.rooms=i(t.rooms),void 0!==t.openings?e.openings=i(t.openings):delete e.openings,void 0!==t.walls?e.walls=i(t.walls):delete e.walls,void 0!==t.open_spans?e.open_spans=i(t.open_spans):delete e.open_spans,void 0!==t.room_drafts?e.room_drafts=i(t.room_drafts):delete e.room_drafts,void 0!==t.partitions?e.partitions=i(t.partitions):delete e.partitions,void 0!==t.wall_columns?e.wall_columns=i(t.wall_columns):delete e.wall_columns,void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];return Object.assign(e,i(t.plan_transform||{})),this._clearGeometryGesture(),this._space!==t.spaceId&&(this._commitSpace(t.spaceId),this._saveNav(),this._restoreZoom()),this._modelCache=null,this._frame=null,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_roomAt(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&bi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&Ci(t,i)})}_pointInRoom(t,e){return e.poly?fi(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!ya(t))return!0;const e=t.length,i=.001;for(let s=0;s=500)return this._showToast(this._t("toast.physical_limit")),!1;const t=this._curSpaceCfg;return!(!this._activeDraftId&&(t?.room_drafts||[]).length>=200||this._draftSegmentCount(t)>=2e3||(t?.partitions||[]).length+this._path.length>I_)||(this._showToast(this._t("toast.physical_limit")),!1)}_markupClick(t){if(this._vacFit)return;if(!this._markup)return;const e=this._spaceModel();if(!e)return void this._clearGeometryGesture();if(this._suppressClick)return;if(this._drag||this._rlResize)return;const i=t.composedPath?.()||[];if(i.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(i.some(t=>t?.classList?.contains?.("physical-hit")))return void("boundary"===this._tool&&this._showToast(this._t("toast.boundary_blocked")));const s=this._svgPoint(t);if("select"===this._tool)return void(this._physicalSel=null);if("resize"===this._tool){if(this._rszDrag||i.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(s,t));return void(this._rszSel=t?.id||null)}if("delroom"===this._tool)return void this._deleteRoomClick(s);if("opening"===this._tool)return void this._openingClick(s);if("merge"===this._tool)return void this._mergeClick(s);if("wallthick"===this._tool)return void this._wallThickClick(s);if("boundary"===this._tool)return void this._boundaryClick(s);if("split"===this._tool)return void this._splitClick(s);if("column"===this._tool)return void this._columnClick(s);let n=this._resolvePlanDrawPoint(s,t.shiftKey).point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this._path.length<3)return;n=[...this._path[0]]}if(!this._path.length){const t=this._draftEndAt(n);return t?(this._activeDraftId=t.draft.id,this._resumeDraftBySpace[this._space]=t.draft.id,this._path=t.reverse?[...t.draft.points].reverse().map(t=>[...t]):t.draft.points.map(t=>[...t]),void(this._draftSegmentCms=t.reverse?[...t.draft.segments].reverse().map(t=>t.cm):t.draft.segments.map(t=>t.cm))):(this._activeDraftId=null,this._draftSegmentCms=[],void(this._path=[n]))}const o=this._path[this._path.length-1];if(this._samePt(n,o))return;const a=this._draftEndAt(n,this._activeDraftId||void 0);if(a)return void this._mergeDraftEndpoint(a);if(!this._canAppendRoomDraftPoint())return;const r=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(r)}_draftEndAt(t,e){const i=this._spaceModel();if(!i)return null;const s=this._viewOr(this._baseVb()),n=Math.max(.15*this._gridPitch,this._stageEl?.clientWidth?s.w/this._stageEl.clientWidth*12:0);for(const s of i.room_drafts||[]){if(s.id===e)continue;if(s.points.length<2)continue;const i=s.points[0],o=s.points[s.points.length-1];if(Math.hypot(t[0]-o[0],t[1]-o[1])<=n)return{draft:s,reverse:!1};if(Math.hypot(t[0]-i[0],t[1]-i[1])<=n)return{draft:s,reverse:!0}}return null}_mergeDraftEndpoint(t){const e=this._curSpaceCfg;if(!e||!this._path.length)return;const i=this._path.map(t=>[...t]),s=this._wallGraphSources(i),n=Array.isArray(e.room_drafts)?e.room_drafts:[],o=this._activeDraftId?n.find(t=>t.id===this._activeDraftId):null,a=n.find(e=>e.id===t.draft.id);if(!a)return;const r=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(a.segments||[]).map(t=>({...t})):[...a.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,r[0]),d=h?null:this._drawWallCm;if(!h&&null==d)return void this._showPhysicalRange(100);const u=this._draftSegmentCms.map((t,e)=>({...o?.segments?.[e]||{},cm:t})),p=[...this._path.map(t=>[...t]),...h?r.slice(1):r],_=[...u,...null==d?[]:[{cm:d}],...l],g=p.length>=4&&this._samePt(p[0],p[p.length-1]),m=p,f=_;if(m.length>500)return void this._showToast(this._t("toast.physical_limit"));const v=(o?.segments?.length||0)+(a.segments?.length||0);if(this._draftSegmentCount(e)-v+f.length>2e3)return void this._showToast(this._t("toast.physical_limit"));if(g){const t=m.slice(0,-1);if(this._contourSelfIntersects(t)||Ti(t)<=1e-6)return void this._showToast(this._t("toast.contour_cannot_close"));const e=this._overlapRoom(t);if(e)return void this._showToast(this._t("toast.room_overlap",{name:e.name||""}))}const y=this._geometrySnapshot(),b=this._activeDraftId||t.draft.id,w={...o||a,id:b,points:m.map(t=>[t[0]/T_,t[1]/T_]),segments:f};e.room_drafts=n.filter(e=>e.id!==t.draft.id&&(!this._activeDraftId||e.id!==this._activeDraftId)),e.room_drafts.push(w),this._activeDraftId=b,this._resumeDraftBySpace[this._space]=b,this._draftSegmentCms=f.map(t=>Number(t.cm)),this._path=m,this._physicalSel=null,this._recordGeometry(this._t("history.draft_merge"),y),this._saveConfig(),null!=d&&this._offerWallFaces(i,i.length-1,s)}_persistActiveDraftSegment(){if(this._path.length<2||!this._curSpaceCfg)return;const t=this._drawWallCm;if(null==t)return;this._draftSegmentCms=[...this._draftSegmentCms,t];const e=this._geometrySnapshot(),i=this._curSpaceCfg;i.room_drafts||=[],this._activeDraftId||(this._activeDraftId="draft-"+Date.now().toString(36)),this._resumeDraftBySpace[this._space]=this._activeDraftId;const s=i.room_drafts.findIndex(t=>t.id===this._activeDraftId),n={...s>=0?i.room_drafts[s]:{},id:this._activeDraftId,points:this._path.map(t=>[t[0]/T_,t[1]/T_]),segments:this._draftSegmentCms.map((t,e)=>({...s>=0?i.room_drafts[s]?.segments?.[e]:{},cm:t}))};s>=0?i.room_drafts[s]=n:i.room_drafts.push(n),this._recordGeometry(this._t("history.draft_segment"),e),this._saveConfig()}_activeWallSourceKey(t){return`active:${this._activeDraftId||"session"}:${t}`}_wallGraphSources(t){const e=this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}));for(let i=0;i+1t.key===i);if(s>=0){const[t]=this._wallFaceGraphCache.splice(s,1);return this._wallFaceGraphCache.push(t),t.value}const n=function(t,e=.001){const i=Number.isFinite(e)&&e>0?e:$d,s=Gd(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Pd(t.a,i),s=Pd(t.b,i);n.set(e,t.a),n.set(s,t.b),o.has(e)||o.set(e,new Set),o.has(s)||o.set(s,new Set),o.get(e).add(s),o.get(s).add(e)}const r=new Map;for(const[t,e]of o){const i=n.get(t);r.set(t,[...e].sort((t,e)=>{const s=n.get(t),o=n.get(e);return Math.atan2(s[1]-i[1],s[0]-i[0])-Math.atan2(o[1]-i[1],o[0]-i[0])||t.localeCompare(e)}))}const l=new Set,c=new Map,h=(t,e)=>`${t}>${e}`;for(const t of s){const e=[Pd(t.a,i),Pd(t.b,i)];for(const[t,o]of[e,[e[1],e[0]]]){if(l.has(h(t,o)))continue;const e=[],d=[];let u=t,p=o,_=!1;for(let i=0;i<=2*s.length+2;i++){const i=h(u,p);if(l.has(i)){_=u===t&&p===o;break}l.add(i),e.push(u),d.push(Rd(u,p));const s=r.get(p)||[],n=s.indexOf(u);if(n<0||!s.length)break;if(u=p,p=s[(n-1+s.length)%s.length],u===t&&p===o){_=!0;break}}if(!_||new Set(e).size<3||new Set(e).size!==e.length)continue;const g=e.map(t=>n.get(t)),m=Dd(g);if(!(m>i*i))continue;const f=Ad(Id(e,n,i)),v=new Set;for(const t of d)for(const e of a.get(t)?.sourceKeys||[])v.add(e);const y={ring:g,key:f,area:m,atomKeys:[...d],sourceKeys:[...v].sort((t,e)=>t.localeCompare(e))};c.has(f)||c.set(f,y)}}return{atoms:s,faces:[...c.values()].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key))}}(t,e);return this._wallFaceGraphCache.push({key:i,value:n}),this._wallFaceGraphCache.length>4&&this._wallFaceGraphCache.shift(),n}_offerWallFaces(t,e=this._path.length-2,i){if(this._path.length<2||this._wallFaceBatch||this._roomDialog)return;const s=this._spaceModel();if(!s)return;const n=this._activeWallSourceKey(e),o=2e-4*this._gridPitch;let a;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);a=function(t,e,i){const s=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!s.has(t.key)&&t.sourceKeys.includes(i))}(this._wallFaceGraph(e,o),this._wallFaceGraph(s,o),n)}catch{return}if(!a.length)return;for(const t of s.rooms){const e=ci(t);if(!t.id||!e)continue;const i=Ii(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Ti(s)>=Ti(n)?s:n,r=o===s?n:s,l=[...a].sort((t,e)=>Math.abs(t.area-Ti(r))-Math.abs(e.area-Ti(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:r},consumeAllActive:!0}])}const r=a.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));r.length&&this._beginWallFaceBatch(r)}_beginWallFaceBatch(t){this._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this._path.map(t=>[...t]),activeCms:[...this._draftSegmentCms],activeDraftId:this._activeDraftId},this._clearPlanSnapHover(),this._nameSel="",this._areaSel="",this._resetRoomDialogFields(),this._roomDialog=!0}_columnClick(t){const e=this._snap(t),i=this._drawWallCm;if(null==i)return void this._showPhysicalRange($l);if(!this._curSpaceCfg||this._limitReached("column"))return;const s=this._spaceModel();if(!s)return;const n={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Sl(i),angle:0},o=(s.wall_columns||[]).find(t=>Bl(t,n,.02*this._gridPitch));if(o)return clearTimeout(this._duplicateColumnTimer),this._duplicateColumnId=o.id,this._duplicateColumnTimer=window.setTimeout(()=>{this._duplicateColumnId=null},900),void this._showToast(this._t("toast.column_duplicate"));const a=this._geometrySnapshot(),r=this._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...n,center:[e[0]/T_,e[1]/T_]}),this._recordGeometry(this._t("history.column_add"),a),this._saveConfig()}_openPhysicalDialog(t,e,i){const s=this._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),length:this._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Ml(i.angle):0)})}else{const n=s.room_drafts.find(t=>t.id===e),o=Math.max(0,Math.min(n?.segments.length?n.segments.length-1:0,i||0));n?.segments[o]&&(this._physicalDialog={kind:t,id:e,segment:o,cm:fr(n.segments[o].cm,this._imperial),length:this._fmtLen(n.points[o],n.points[o+1])})}}_physicalDown(t,e,i){const s=this._spaceModel();if(!s)return;t.stopPropagation(),O_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Hl(n,Pl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);e&&Hl(n,e)&&o.push({kind:"partition",id:t.id})}o.some(t=>t.kind===e&&t.id===i)||o.unshift({kind:e,id:i});const a=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===a&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%o.length:Math.max(0,o.findIndex(t=>t.kind===e&&t.id===i));this._physicalPickCycle={signature:a,index:c,x:t.clientX,y:t.clientY,at:r},e=o[c].kind,i=o[c].id;const h="partition"===e?s.partitions.find(t=>t.id===i):s.wall_columns.find(t=>t.id===i);h&&(this._physicalSel={kind:e,id:i},this._physicalDrag={pid:t.pointerId,kind:e,id:i,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(h)),delta:[0,0]})}_clampPhysicalDelta(t,e,i){const s="partition"===t?[e.a,e.b]:[e.center],n=s.map(t=>t[0]),o=s.map(t=>t[1]);return[Math.max(-Yl*T_-Math.min(...n),Math.min(Yl*T_-Math.max(...n),i[0])),Math.max(-Yl*T_-Math.min(...o),Math.min(Yl*T_-Math.max(...o),i[1]))]}_physicalMove(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t),s="partition"===e.kind?e.base.a:e.base.center,n=this._snap([s[0]+i[0]-e.start[0],s[1]+i[1]-e.start[1]]),o=this._clampPhysicalDelta(e.kind,e.base,[n[0]-s[0],n[1]-s[1]]);this._physicalDrag={...e,delta:o,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const i=this._spaceModel();if(!this._curSpaceCfg||!i)return;const s=this._curSpaceCfg;if("partition"===e.kind){const t=(s.partitions||[]).find(t=>t.id===e.id),i=e.base;if(t){const n={...i,a:[i.a[0]+e.delta[0],i.a[1]+e.delta[1]],b:[i.b[0]+e.delta[0],i.b[1]+e.delta[1]]};t.a=[n.a[0]/T_,n.a[1]/T_],t.b=[n.b[0]/T_,n.b[1]/T_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=ad(t,[n],T_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,ud(t,i,T_))}}}else{const t=(s.wall_columns||[]).find(t=>t.id===e.id),n=e.base,o={...n,center:[n.center[0]+e.delta[0],n.center[1]+e.delta[1]]};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/T_,(n.center[1]+e.delta[1])/T_])}this._recordGeometry(this._t("history.physical_move"),e.before),this._saveConfig()}_registerPhysicalTap(t,e,i){const s=performance.now(),n=this._physicalLastTap?.kind===t&&this._physicalLastTap.id===e&&this._physicalLastTap.segment===i&&s-this._physicalLastTap.at<=360;this._physicalLastTap={kind:t,id:e,segment:i,at:s},n&&(this._physicalLastTap=null,this._openPhysicalDialog(t,e,i))}_cancelPhysicalGesture(){this._physicalDrag=null,this._physicalRotate=null,this.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this._spaceModel())return;t.preventDefault(),t.stopPropagation(),O_(t);const i=this._svgPoint(t);this._physicalSel={kind:"column",id:e.id},this._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,baseAngle:Ml(e.angle),angle:Ml(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const i=this._svgPoint(t),s=180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,n=e.baseAngle+s-e.startAngle,o=Ml(t.shiftKey?n:5*Math.round(n/5));this._physicalRotate={...e,angle:o,moved:e.moved||Math.abs(n-e.baseAngle)>=.5}}_physicalRotateUp(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this._physicalRotate=null;const i=this._spaceModel();if(!e.moved||!this._curSpaceCfg||!i)return;const s=i.wall_columns.find(t=>t.id===e.id);if(!s||"square"!==s.shape)return;const n={...s,angle:e.angle};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,n,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));const o=this._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);o&&(o.angle=e.angle,this._recordGeometry(this._t("history.physical_edit"),e.before),this._saveConfig())}_rszRooms(){const t=[],e=this._spaceModel();if(!e)return t;for(const i of e.rooms){const e=i.id?ci(i):null;e&&t.push({id:i.id,poly:e})}return t}_rszOpenings(){return this._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen}))}_rszOpts(){return{minDim:this._cmToUnits(30),eps:.05*this._gridPitch}}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszApplyPreview(t,e){const i=this._rszDrag,s=this._serverCfg?.spaces.find(t=>t.id===this._space);if(!i||!s)return;const n=JSON.parse(i.snap),o={...s,rooms:n.rooms,openings:n.openings,walls:n.walls,open_spans:n.open_spans};Array.isArray(n.open_spans)&&n.open_spans.length||delete o.open_spans;const a=this._spaceH;for(const[e,i]of Object.entries(t)){const t=o.rooms.find(t=>t.id===e);t&&(t.poly=i.map(t=>[t[0]/T_,t[1]/a]),delete t.x,delete t.y,delete t.w,delete t.h)}for(const[t,i]of Object.entries(e)){const e=(o.openings||[]).find(e=>e.id===t);e&&(e.x=i[0]/T_,e.y=i[1]/a)}const r=[],l=[];for(const t of i.changed){const e=i.rooms.find(e=>e.id===t),s=o.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const n=s.poly.map(t=>[t[0]*T_,t[1]*a]);if(e.poly.length===n.length)for(let t=0;tt.id===e);if(!s||!s.poly||s.poly.length<3)return null;if(i<0||i>=s.poly.length)return null;const n=[...s.poly[i]],o=[...s.poly[(i+1)%s.poly.length]];return{roomId:e,edge:i,a:n,b:o,n:_a(s.poly,i)}}(s,e,i);n&&(this._rszDrag={kind:"edge",pid:t.pointerId,roomId:e,plan:n,rooms:s,openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszCornerDown(t,e,i,s){"resize"!==this._tool||this._rszDrag||(t.stopPropagation(),t.preventDefault(),O_(t),this._rszDrag={kind:"scale",pid:t.pointerId,roomId:e,fixed:s,span0:Math.hypot(i[0]-s[0],i[1]-s[1])||1,rooms:this._rszRooms(),openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszMove(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t);if("edge"===e.kind){const t=e.plan,s=(i[0]-t.a[0])*t.n[0]+(i[1]-t.a[1])*t.n[1],n=this._snap([t.a[0]+t.n[0]*s,t.a[1]+t.n[1]*s]);let o=(n[0]-t.a[0])*t.n[0]+(n[1]-t.a[1])*t.n[1];if(o=function(t,e,i,s,n,o){if(!Number.isFinite(s)||Math.abs(s)<1e-9)return 0;const a=Math.sign(s);let r=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&r>1e-9;s++,r-=l){const s=a*r;if(Sa(t,e,i,s,o))return s}return 0}(e.rooms,e.openings,t,o,this._gridPitch,this._rszOpts()),o===e.d&&e.moved)return;e.d=o,e.moved=!0;const a=ka(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(a.polys),this._rszApplyPreview(a.polys,a.openings),this._rszLive=this._rszEdgeLabels(a,t)}else{const t=e.fixed,s=this._snap(i);let n=Math.hypot(s[0]-t[0],s[1]-t[1])/(e.span0||1);if(n=Math.max(.05,Math.min(20,n)),n=function(t,e,i,s,n,o){if(!Number.isFinite(n)||n<=0)return 1;if(Ca(t,e,i,s,n,o))return n;let a=1,r=n;for(let n=0;n<28;n++){const n=(a+r)/2;Ca(t,e,i,s,n,o)?a=n:r=n}return a}(e.rooms,e.openings,e.roomId,t,n,this._rszOpts()),n===e.k&&e.moved)return;e.k=n,e.moved=!0;const o=e.rooms.find(t=>t.id===e.roomId),a=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),r=Ma(o,e.openings,a,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:r.poly},r.openings),this._rszLive=this._rszScaleLabels(r.poly)}this.requestUpdate()}_rszUp(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._rszPreview;this._rszDrag=null,this._rszLive=null,this._rszPreview=null;if(!(e.moved&&("edge"===e.kind?Math.abs(e.d)>1e-9:Math.abs(e.k-1)>1e-9))||!i)return this._cfgEpoch++,void this.requestUpdate();const s=JSON.parse(e.snap),n=this._curSpaceCfg;if(n){n.rooms=i.sp.rooms,n.openings=i.sp.openings,Array.isArray(i.sp.walls)&&(i.sp.walls.length?n.walls=i.sp.walls:delete n.walls),Array.isArray(i.sp.open_spans)&&i.sp.open_spans.length?n.open_spans=i.sp.open_spans:delete n.open_spans;for(const t of e.changed){const e=n.rooms.find(e=>e.id===t);e?.poly&&(e.poly=va(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Pr(n.walls,n.rooms||[],Ql,1,this._cfgOpenCuts()),n.walls.length||delete n.walls)}this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._recordGeometry(this._t("history.resize_room"),s),this._saveConfig(),this.requestUpdate()}_rszCancelDrag(){this._rszDrag&&(this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._cfgEpoch++,this.requestUpdate())}_rszPointerCancel(t){const e=this._rszDrag;e&&e.pid===t.pointerId&&(t.stopPropagation(),this._rszCancelDrag())}_rszEdgeLabels(t,e){const i=this._rszDrag,s=[],n=t.polys[e.roomId]||i.rooms.find(t=>t.id===e.roomId).poly,o=n.length,a=e.edge,r=(a+1)%o;for(const[t,e]of[[n[(a-1+o)%o],n[a]],[n[a],n[r]],[n[r],n[(r+1)%o]]])s.push({x:(t[0]+e[0])/2,y:(t[1]+e[1])/2,text:this._fmtLen(t,e)});const l="mi"===this.hass?.config?.unit_system?.length,c=Object.keys(t.polys).length?Object.keys(t.polys):[e.roomId],h=this._spaceWalls,d=this._openPairs().flatMap(t=>t.segs),u=this._physicalBodiesR();for(const e of c){const n=t.polys[e]||i.rooms.find(t=>t.id===e).poly,o=h.length&&ol(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||n,a=xi(o),r=u.length?Ol(zl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(o,this._gridPitch,this._cellCm);s.push({x:a[0],y:a[1],text:Ta(r,l),area:!0})}return s}_rszScaleLabels(t){const e="mi"===this.hass?.config?.unit_system?.length,i=t.map(t=>t[0]),s=t.map(t=>t[1]),n=Math.max(...i)-Math.min(...i),o=Math.max(...s)-Math.min(...s),a=this._spaceWalls,r=a.length&&this._rszSel&&ol([{id:this._rszSel,poly:t}],this._rszSel,a,[],this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||t,l=xi(r),c=this._physicalBodiesR(),h=c.length?Ol(zl(r,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(r,this._gridPitch,this._cellCm);return[{x:Math.min(...i),y:Math.min(...s),text:`${this._fmtLen([0,0],[n,0])} × ${this._fmtLen([0,0],[o,0])}`},{x:l[0],y:l[1],text:Ta(h,e),area:!0}]}_renderResizeLayer(t){const e=Math.max(.013*t.w,5),i=e/2,s=t=>t.toFixed(1),n=`M ${s(-.7*i)} 0 H ${s(.7*i)} M 0 ${s(-.22*i)} V ${s(-i)} M ${s(-.32*i)} ${s(-.6*i)} L 0 ${s(-i)} L ${s(.32*i)} ${s(-.6*i)} M 0 ${s(.22*i)} V ${s(i)} M ${s(-.32*i)} ${s(.6*i)} L 0 ${s(i)} L ${s(.32*i)} ${s(.6*i)}`,o=[],a=this._rszRooms();for(const t of a)for(let i=0;i`}_stageAspect(){const t=this._stageEl,e=this._baseVb();return t&&t.clientHeight?t.clientWidth/t.clientHeight:e[2]/e[3]}_viewOr(t){return this._view&&this._view.w?this._view:zi(t,this._stageAspect())}_roomLabelReferenceViewWidth(t){if(!this._markup)return t.w;const e=this._stageEl,i=this.renderRoot.querySelector(".editorchrome");if(!e||e.clientWidth<=0||e.clientHeight<=0)return t.w;const s=e.clientHeight+(i?.getBoundingClientRect().height||0);return s<=0?t.w:this._viewForModeTarget(this._zoom,void 0,void 0,e.clientWidth,s).w}_screenToVb(t,e){const i=this._stageEl,s=this._viewOr(this._baseVb()),n=i?.clientWidth||1,o=i?.clientHeight||1;return[s.x+t/n*s.w,s.y+e/o*s.h]}_clampView(t,e){const i=(t,e,i,s)=>{const n=1*Math.max(e,s),o=i-n,a=i+s-e+n;return Math.max(Math.min(o,a),Math.min(Math.max(o,a),t))};return{w:t.w,h:t.h,x:i(t.x,t.w,e.x,e.w),y:i(t.y,t.h,e.y,e.h)}}_applyView(t,e,i){const s=this._baseVb(),n=zi(s,this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),a=n.w/o,r=n.h/o,l=this._viewOr(s),c=e??l.x+l.w/2,h=i??l.y+l.h/2,d=this._clampView({x:c-a/2,y:h-r/2,w:a,h:r},n);return!(this._view&&Math.abs(this._zoom-o)<1e-9&&Math.abs(this._view.x-d.x)<1e-6&&Math.abs(this._view.y-d.y)<1e-6&&Math.abs(this._view.w-d.w)<1e-6&&Math.abs(this._view.h-d.h)<1e-6)&&("opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=o,this._view=d,!0)}_bootWatch(){clearTimeout(this._bootTimer),this._bootStart=Date.now(),this._bootLastH=-1,this._bootLastChange=this._bootStart;const t=()=>{if(!this._booting)return;const e=Date.now(),i=this._stageEl?this._stageEl.clientHeight:0;i!==this._bootLastH&&(this._bootLastH=i,this._bootLastChange=e);const s=e-this._bootStart;s>=1200||s>=700&&i>0&&e-this._bootLastChange>=250?this._bootSettled():this._bootTimer=window.setTimeout(t,100)};this._bootTimer=window.setTimeout(t,100)}_bootSettled(){this._booting&&!this._bootSettling&&(this._bootSettling=!0,this._refitView(),this._bootSettleRaf=requestAnimationFrame(()=>{this._bootSettleRaf=0,this._finishBootSettled()}))}_finishBootSettled(){if(!this._booting)return;this._refitView(),this._booting=!1,this._bootSettling=!1;const t=this._stageEl?.clientHeight??0;!this._config?.kiosk&&t>0&&this._warmPatch({hdrH:this._hdrH,stageH:t,vp:this._warmViewportState()},!0),this._bootFading=!0,this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220),this._bootSoft=!0,clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)}_bootSoftCancel(){this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoft=!1)}_beginResumeSettle(){this._booting||this._resumeSettling||(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0),this._viewportInvalidAt=0,this._beginContinuityCandidate("warm-resume",!1),this._loading?this.requestUpdate():this._loadFromServer())}_refitView(){if(this._modeTransitionBusy)return;const t=this._stageEl;if(!t||"visible"!==document.visibilityState||t.clientWidth<=0||t.clientHeight<=0)return void(this._viewportInvalidAt||(this._viewportInvalidAt=Date.now()));const e=[t.clientWidth,t.clientHeight],i=this._lastValidStageSize,s=!!i&&Math.abs(i[0]-e[0])<=.5&&Math.abs(i[1]-e[1])<=.5,n=this._viewportInvalidAt?Date.now()-this._viewportInvalidAt:0;if(this._viewportInvalidAt=0,!i)return this._lastValidStageSize=e,void(this._view||this._applyView(this._zoom));s?this._pendingRefitSize=null:(this._pendingRefitSize=e,this._refitRaf||(this._refitRaf=requestAnimationFrame(()=>{this._refitRaf=0;const t=this._pendingRefitSize;this._pendingRefitSize=null;const e=this._stageEl;if(!t||!e||e.clientWidth<=0||e.clientHeight<=0)return;if(Math.abs(e.clientWidth-t[0])>.5||Math.abs(e.clientHeight-t[1])>.5)return void this._refitView();const i=this._lastValidStageSize;if(i&&Math.abs(i[0]-t[0])<=.5&&Math.abs(i[1]-t[1])<=.5)return;this._lastValidStageSize=t;const s=this._view;n>=Jc?this._beginContinuityCandidate("stage-size-restored",!0,"stage-size"):this._continuity.hasCompleteFrame&&this._beginContinuityCandidate("stage-resize",!0,"stage-size"),this._applyView(this._zoom,s?s.x+s.w/2:void 0,s?s.y+s.h/2:void 0)})))}_zoomAt(t,e,i){const s=this._stageEl;if(!s)return;const n=zi(this._baseVb(),this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const a=s.clientWidth,r=s.clientHeight,l=this._screenToVb(t,e),c=n.w/o,h=n.h/o;this._zoom=o,this._view=this._clampView({x:l[0]-t/a*c,y:l[1]-e/r*h,w:c,h:h},n)}_onWheel(t){const e=this._stageEl;if(!e)return;t.preventDefault();const i=e.getBoundingClientRect(),s=t.deltaY<0?1.15:1/1.15;this._zoomAt(t.clientX-i.left,t.clientY-i.top,this._zoom*s),this._saveZoom()}_stepZoom(t){const e=this._stageEl;e&&(this._zoomAt(e.clientWidth/2,e.clientHeight/2,this._zoom*(t>0?1.4:1/1.4)),this._saveZoom())}_resetZoom(){const t=this._baseVb();"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=1,this._view=zi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(M_,JSON.stringify(this._zoomBySpace))}catch{}}}_restoreZoom(){const t=this._zoomBySpace[this._space]||1;this._zoom=t;const e=this._stageEl;if(e&&e.clientHeight){const e=this._baseVb();return this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),void this.requestUpdate()}this._view=null,requestAnimationFrame(()=>{if(!this._stageEl)return;const e=this._baseVb();this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),this.requestUpdate()})}_stagePointerDown(t){if(this._vacFit)return;if(this._kiosk&&(this._cyclePausedUntil=Date.now()+6e4,0===this._pointers.size?(this._swipeStart={x:t.clientX,y:t.clientY,id:t.pointerId},t.target.closest?.(".dev, .roomlabel, .oplock")||(clearTimeout(this._kioskHoldTimer),this._kioskHoldTimer=window.setTimeout(()=>{this._kioskDialog=!0,this._swipeStart=null},3e3))):(this._swipeStart=null,clearTimeout(this._kioskHoldTimer))),this._drag)return;if(this._markup&&t.target.closest?.(".roomlabel, .rlhandle, .rszhandle, .dev, .oplock, .op-hit, button"))return;if("devices"===this._mode&&t.target.closest(".dev"))return;if("decor"===this._mode&&this._decorPointerDown(t))return;this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});const e=this._viewOr(this._baseVb());if(1===this._pointers.size)this._panStart={sx:t.clientX,sy:t.clientY,vx:e.x,vy:e.y},this._panLock=null,this._suppressClick=!1;else if(2===this._pointers.size){this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);this._pinchStart={dist:e,zoom:this._zoom},this._panStart=null,this._panLock=null}}get _swipeZone(){return!this._hasFixedFloor&&this._kiosk&&this._zoom<=1.001&&this._model.length>1}_stagePointerMove(t){if(this._physicalRotate?.pid!==t.pointerId)if(this._physicalDrag?.pid!==t.pointerId)if(this._dtDrag?.pid!==t.pointerId)if(this._bdDrag?.pid!==t.pointerId){if(this._decorDraft?.pid===t.pointerId){const e=this._decorDraft;let i=this._decorSnap(this._svgPoint(t),t.pointerType);if(t.shiftKey&&("rect"===e.kind||"ellipse"===e.kind)){const t=i[0]-e.a[0],s=i[1]-e.a[1],n=Math.max(Math.abs(t),Math.abs(s));i=this._snap([e.a[0]+(t<0?-n:n),e.a[1]+(s<0?-n:n)])}return void(this._decorDraft={...e,b:i})}if(this._decorMove?.pid!==t.pointerId)if(this._pointers.has(t.pointerId)){if(this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),this._markup&&1===this._pointers.size&&this._markupMove(t),this._pinchStart&&this._pointers.size>=2){"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)/(this._pinchStart.dist||1),i=this._stageEl.getBoundingClientRect(),s=(t[0].x+t[1].x)/2-i.left,n=(t[0].y+t[1].y)/2-i.top;this._zoomAt(s,n,this._pinchStart.zoom*e),this._suppressClick=!0,this._saveZoom()}else if(this._panStart){const e=t.clientX-this._panStart.sx,i=t.clientY-this._panStart.sy;Math.abs(e)+Math.abs(i)>4&&(this._suppressClick=!0,clearTimeout(this._holdTimer),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover()),null===this._panLock&&Math.abs(e)+Math.abs(i)>8&&(this._panLock=this._swipeZone&&Math.abs(e)>1.5*Math.abs(i)?"swipe":"pan");const s=this._stageEl;if("pan"===this._panLock&&s){const t=this._baseVb(),n=this._viewOr(t),o=zi(t,this._stageAspect());this._view=this._clampView({x:this._panStart.vx-e/(s.clientWidth||1)*n.w,y:this._panStart.vy-i/(s.clientHeight||1)*n.h,w:n.w,h:n.h},o)}}}else this._markupMove(t);else this._decorMoveUpdate(t)}else this._bdMove(t);else this._dtMove(t);else this._physicalMove(t);else this._physicalRotateMove(t)}_stagePointerLeave(t){this._markup&&("opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover())}_stagePointerUp(t){if(this._kiosk){clearTimeout(this._kioskHoldTimer);const e=this._swipeStart;if(this._swipeStart=null,e&&e.id===t.pointerId){const i=t.clientX-e.x,s=t.clientY-e.y;if(Math.abs(i)+Math.abs(s)<8){const t=Date.now();t-this._lastTap<350&&this._resetZoom(),this._lastTap=t}const n="pan"===this._panLock?null:function(t,e,i,s,n,o=60){if(i>1.001||s.length<2)return null;if(Math.abs(t)t.id),this._space);n&&this._slideTo(n,i<0?"left":"right")&&(this._saveNav(),this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._showKioskDots())}}if(this._physicalDrag?.pid===t.pointerId)return void this._physicalUp(t);if(this._physicalRotate?.pid===t.pointerId)return void this._physicalRotateUp(t);if(this._dtDrag?.pid===t.pointerId)return void this._dtUp();if(this._bdDrag?.pid===t.pointerId)return void this._bdUp();if(this._decorDraft?.pid===t.pointerId)return void this._decorCommitDraft();if(this._decorMove?.pid===t.pointerId)return this._decorMove.moved&&(this._recordGeometry(this._t("history.decor_move"),this._decorMove.before),this._saveConfig()),void(this._decorMove=null);const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null,setTimeout(()=>this._suppressClick=!1,0)),e&&0===this._pointers.size&&this.requestUpdate()}_clickRoom(t){!this._suppressClick&&t.area&&z_("/config/areas/area/"+t.area)}_pointerDown(t,e){if("plan"===this._mode)return;if("view"===this._mode){this._holdFired=!1,clearTimeout(this._holdTimer);const i=t.pointerId,s=t.currentTarget;return void(this._holdTimer=window.setTimeout(()=>{this._holdFired=!0,this._interruptViewGesture(i,s),this._infoCard=e},600))}if("ha_disabled"===e.bindingStatus?.kind)return;t.preventDefault();const i=this._pos(e);this._drag={id:e.id,sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},H_(t),this._tip=null}_pointerMove(t,e){if(!this._drag||this._drag.id!==e.id)return;const i=this.renderRoot.querySelector(".stage");if(!i)return;const s=this._baseVb(),n=i.getBoundingClientRect(),o=this._viewOr(s),a=(t.clientX-this._drag.sx)/n.width*o.w,r=(t.clientY-this._drag.sy)/n.height*o.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0,clearTimeout(this._holdTimer));const l=ic(this._drag.ox+a),c=ic(this._drag.oy+r);this._savePos(e,l,c)}_pointerUp(t,e){if(clearTimeout(this._holdTimer),!this._drag||this._drag.id!==e.id)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&(this._selId=e.id,window.setTimeout(()=>this._drag=null,0))}_showToast(t){for(const t of this.renderRoot.querySelectorAll("hp-dialog"))t.closeTransientOverlays("toast");this._toast=t,clearTimeout(this._toastTimer),this._toastTimer=window.setTimeout(()=>{this._toast=""},3500)}_syncPointerHoverTargets(){const t=this._pointerModality.hoverEnabled;for(const e of this.renderRoot.querySelectorAll("hp-dialog, hp-help, hp-color-opacity"))e.toggleAttribute("data-pointer-hover",t)}_syncPointerHoverSubtree(t){if(t.nodeType!==Node.ELEMENT_NODE)return;const e=t,i=this._pointerModality.hoverEnabled;e.matches("hp-dialog, hp-help, hp-color-opacity")&&e.toggleAttribute("data-pointer-hover",i);for(const t of e.querySelectorAll("hp-dialog, hp-help, hp-color-opacity"))t.toggleAttribute("data-pointer-hover",i)}_clearTransientHover(t=!1){t&&this._pointerModality.suspend(),this._tip&&(this._tip=null),this._hoverRoom&&(this._hoverRoom=null)}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse";const e=this._pointerModality.modality,i=this._pointerModality.note(t);"touch"!==i&&"pen"!==i||e===i&&!this._tip&&!this._hoverRoom||this._clearTransientHover()}_guardTouchGesture(t){if(this._editorSecondary.handleOutsideDismiss(t))return;if("click"===t.type){if(!this._suppressClick&&!this._touchSequenceMultitouch&&Date.now()>this._touchClickBlockUntil)return;return t.preventDefault(),void t.stopImmediatePropagation()}const e=t;if(this._notePointer(e),"touch"===e.pointerType)if("pointerdown"!==t.type){if("pointermove"===t.type){const t=this._touchContacts.get(e.pointerId);if(!t)return;const i={...t,x:e.clientX,y:e.clientY};if(this._touchContacts.set(e.pointerId,i),this._touchSequenceMultitouch&&"view"===this._mode&&!this._vacFit&&this._pinchStart&&[...this._touchContacts.values()].every(t=>t.inStage)){this._pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=[...this._touchContacts.values()];if(t.length>=2&&this._stageEl){const[e,i]=t,s=Math.hypot(e.x-i.x,e.y-i.y)/(this._pinchStart.dist||1),n=this._stageEl.getBoundingClientRect();this._zoomAt((e.x+i.x)/2-n.left,(e.y+i.y)/2-n.top,this._pinchStart.zoom*s),this._saveZoom()}}return}if("pointerup"===t.type||"pointercancel"===t.type||"lostpointercapture"===t.type){if(this._clearTransientHover(),this._touchContacts.delete(e.pointerId),this._touchSequenceMultitouch){if(this._touchClickBlockUntil=Date.now()+500,this._pointers.delete(e.pointerId),!this._vacFit&&this._pointers.size>=2){const[t,e]=[...this._pointers.values()];this._pinchStart={dist:Math.hypot(t.x-e.x,t.y-e.y),zoom:this._zoom}}else this._pinchStart=null;0===this._pointers.size&&(this._panStart=null,this._panLock=null)}0===this._touchContacts.size&&(this._touchSequenceMultitouch=!1)}}else if(this._touchContacts.set(e.pointerId,{x:e.clientX,y:e.clientY,inStage:!!e.target?.closest?.(".stage")}),this._touchContacts.size>=2){this._clearTransientHover(),this._touchSequenceMultitouch=!0,this._touchClickBlockUntil=Number.POSITIVE_INFINITY,clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),this._swipeStart=null;const t=[...this._touchContacts.values()];if("view"===this._mode&&!this._vacFit&&t.every(t=>t.inStage)){this._pointers=new Map([...this._touchContacts].map(([t,e])=>[t,{x:e.x,y:e.y}]));const[e,i]=t;this._pinchStart={dist:Math.hypot(e.x-i.x,e.y-i.y),zoom:this._zoom},this._panStart=null,this._panLock=null}else this._vacFit&&(this._pointers.clear(),this._pinchStart=null,this._panStart=null,this._panLock=null)}}_showTip(t,e,i,s,n,o){this._notePointer(t),this._pointerModality.hoverEnabled&&(this._drag||(this._tip={x:t.clientX,y:t.clientY,title:e,meta:i,lqi:s,temp:n,hum:o}))}get _gridPitch(){return Zl}get _cellCm(){const t=Number(this._curSpaceCfg?.cell_cm);return Number.isFinite(t)&&t>0?t:5}_fmtLen(t,e){const i=function(t,e,i,s){return Math.hypot(e[0]-t[0],e[1]-t[1])/i*s}(t,e,this._gridPitch,this._cellCm);return ri(i,"mi"===this.hass?.config?.unit_system?.length)}get _curSpaceCfg(){const t=this._rszPreview;return t&&t.space===this._space?t.sp:this._serverCfg?.spaces.find(t=>t.id===this._space)}get _renderCfg(){const t=this._rszPreview;return t&&this._serverCfg?{...this._serverCfg,spaces:this._serverCfg.spaces.map(e=>e.id===t.space?t.sp:e)}:this._serverCfg}get _spaceH(){return this._curSpaceCfg,P_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*P_,t[1]*e,t[2]*P_,t[3]*e])}_savedNav(){if(this._hasFixedFloor)return null;try{return JSON.parse(localStorage.getItem(C_)||"null")}catch{return null}}_saveNav(){if(!this._hasFixedFloor)try{localStorage.setItem(C_,JSON.stringify({space:this._space}))}catch{}}_leaveCardRoute(){if(this._routeDepartureHandled)return;this._routeDepartureHandled=!0,"view"!==this._mode&&this._setMode("view",!1),this._pendingNavMode=null,this._geometryHistory.clear(),this._activeDraftId=null,this._resumeDraftBySpace={},this._draftSegmentCms=[],this._closingWallCm=null,this._drawWallField=null,this._showHidden=!1,this._tapConfirm=null,this._vacCalConfirm=null,this._decorEraseConfirm=null,this._openingInfo=null,this._closeInfoCard(),this._rulesDialog=null,this._alignDialog=null,this._backupImportDialog=null,this._backupExportDialog=null,this._settingsDialog=null,this._markerDialog=null,this._openingDialog=null,this._physicalDialog=null,this._wallDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._mergeDialog=null,this._roomDialog=!1,this._spaceDialog=null,this._importDialog=null;const t=this._warmSlot;t?.owner===this._warmGen&&(t.vp=this._warmViewportState(),t.dlg=null,t.frameFingerprint="",clearTimeout(t.evict),t.evict=0),this._saveNav()}_setMode(t,e=!0){this._pendingNavMode=null;const i=this._spaceModel();if(!i)return this._cancelModeTransition(!1),void(this._mode="view");if(this._kiosk&&"view"!==t)return;if(this._mode===t){if(!e&&"view"===t&&this._modeTransitionBusy){const e=this._currentModeVisual(t),i=this._modeTransitionTargetZoom,s=this._modeTransitionTargetCenterX,n=this._modeTransitionTargetCenterY;this._cancelModeTransition(!1),this._commitViewModeAtomic(e,i,s,n)}return}if(this._bootSoftCancel(),("plan"===t||"decor"===t)&&!this._norm)return void this._showToast(this._t("toast.markup_needs_server"));if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._clearTransientHover(!0),this._cancelDevicePressFeedback();const s=this._mode,n=this._effectiveProjection(),o=this._currentModeVisual(s),a=this._modeTransitionBusy,r=o&&"view"!==s&&"view"!==t?{...o,toolbarContentOpacity:this._reducedMotion?1:.35}:o;this._cancelModeTransition(!1),this._editorSecondary.closeForNavigation(),(this._decorMove||this._dtDrag||this._bdDrag)&&this._cancelDecorGesture();const l=!i.bg&&"view"===t!=("view"===s),c=a&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(a?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:a?this._modeTransitionTargetCenterX:r?.viewport.centerX,u=c?c.centerY:a?this._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===s&&"view"!==t&&!a){const e=this._view;if(this._viewModeSnap={space:this._space,zoom:this._zoom,cx:e?this._logicalViewCenter(n)?.x:void 0,cy:e?this._logicalViewCenter(n)?.y:void 0},"iso"===n){const e=this._logicalViewCenter("iso");d=e?.x,u=e?.y,this._view=null,this._mode=t,this._applyView(this._zoom,e?.x,e?.y)}l&&(h=1,d=void 0,u=void 0)}if("plan"===s&&this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._mode=t,this._editorChromeMode="view"===t?s:t,"view"===t){"view"===s||a||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this._viewModeSnap;if(t&&t.space===this._space){h=t.zoom;const e=this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat",i=null!=t.cx&&null!=t.cy&&"iso"===e?qp([t.cx,t.cy],0):null;d=i?.[0]??t.cx,u=i?.[1]??t.cy}else t&&(h=this._zoomBySpace[this._space]||1,d=void 0,u=void 0)}else this._modeTransitionEditorCamera={zoom:h,centerX:d,centerY:u};this._modeTransitionTargetZoom=h,this._modeTransitionTargetCenterX=d,this._modeTransitionTargetCenterY=u,("iso"===n||"view"===t&&this._labsIso&&"iso"===this._viewPreference[this._space])&&(this._modeTransitionForceAtomic=!0);const p=++this._modeTransitionRequest;e?r?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=r,this._prepareModeTransition(p,r,t,h,d,u)):(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._zoom=h,this._view=null,requestAnimationFrame(()=>{this.isConnected&&p===this._modeTransitionRequest&&this._mode===t&&(this._applyView(h,d,u),"view"===t&&(this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate())})):"view"===t&&this._commitViewModeAtomic(r,h,d,u),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._tool="draw",this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._selId=null,this._physicalSel=null,this._physicalDialog=null,this._physicalDrag=null,this._rszSel=null,this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._tip=null,this._hoverRoom=null,this._decorDraft=null,this._decorSel=null,this._decorMove=null,this._backdropDialog=null,this._decorTool="select",this._bdDrag=null,this._dtDrag=null,this._dtBox=null,"plan"===t&&(this._primeDrawWallField(),this._resumeLastDraft()),this._saveNav()}_primeDrawWallField(){null===this._drawWallField&&(this._drawWallField=fr(_r,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?fr(_r,this._imperial):this._drawWallField}get _drawWallCm(){const t=f_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?$l:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?$l:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:fr(t,this._imperial),unit:this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_draftSegmentCount(t=this._curSpaceCfg){return(t?.room_drafts||[]).reduce((t,e)=>t+(Array.isArray(e.segments)?e.segments.length:0),0)}_finishWallChain(){if("draw"!==this._tool||this._wallFaceBatch||this._roomDialog)return!0;const t=this._curSpaceCfg;if(!t||this._path.length<2)return this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0;const e=Sd(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>F_)return this._showToast(this._t("toast.physical_limit")),!1;const s=this._geometrySnapshot();t.partitions||=[];const n=Date.now().toString(36);for(let s=0;st.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.wall_chain_finish"),s),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0}_activateMarkupTool(t){t!==this._tool&&(this._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this._tool||this._finishWallChain())&&(this._cancelPath(),this._tool=t,"draw"===t&&this._resumeLastDraft(),"resize"===t&&(this._rszSel=null),"boundary"!==t&&"wallthick"!==t||(this._wallDialog=null)))}_limitReached(t){const e=this._curSpaceCfg;if(!e)return!0;const i="draft"===t?(e.room_drafts||[]).length>=200:"partition"===t?(e.partitions||[]).length>=F_:(e.wall_columns||[]).length>=500;return i&&this._showToast(this._t("toast.physical_limit")),i}_svgPoint(t){const e=this.renderRoot.querySelector(".stage").getBoundingClientRect();return this._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this._gridPitch;return[ic(ai(t[0],e)),ic(ai(t[1],e))]}_snapDrawPoint(t,e=!1){const i=this._path[this._path.length-1],s=e&&i?function(t,e,i,s=1/0){if(!(i>0&&t?.every(Number.isFinite)&&e?.every(Number.isFinite)))return[e[0],e[1]];const n=e[0]-t[0],o=e[1]-t[1];if(Math.abs(n)+Math.abs(o)<=1e-12)return[t[0],t[1]];const a=Math.PI/4;let r=Math.atan2(o,n);r<0&&(r+=2*Math.PI);const l=Math.floor(r/a+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((n*c+o*h)/(i*d)));if(Number.isFinite(s)&&s>=0){const e=(t,e)=>{if(!e)return 1/0;const n=e>0?s-t:t+s;return Math.max(0,Math.floor((n+1e-9*i)/i))};u=Math.min(u,e(t[0],c),e(t[1],h))}return[t[0]+c*u*i,t[1]+h*u*i]}(i,t,this._gridPitch,Xl):t;return this._snap(s)}_planSnapOpeningCuts(t,e){if(!this._openingsR.length)return[];const i=this._openingWallIndexFor(t,e).value,s=[];for(const e of this._roomWallOpeningInputs(this._openingsR,t)){const t=yl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,a=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-a,e.x+o,e.y+a])}return s}_planSnapGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planSnapGeometryCache?.key===e)return this._planSnapGeometryCache;const i=this._openCuts(),s=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:[...i,...this._planSnapOpeningCuts(t,i)],partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this._gridPitch});return this._planSnapGeometryCache={key:e,value:s},this._planSnapGeometryCache}_planStructuralGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planStructuralGeometryCache?.key===e)return this._planStructuralGeometryCache;const i=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:this._openCuts(),epsilon:2e-4*this._gridPitch});return this._planStructuralGeometryCache={key:e,value:i},this._planStructuralGeometryCache}_planSnapContextKey(t){const e=this._path[0],i=this._path[this._path.length-1];return[t,this._tool,this._path.length,e?`${e[0]},${e[1]}`:"",i?`${i[0]},${i[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const i=this._planSnapGeometrySnapshot(),s=this._path[this._path.length-1],n="draw"===this._tool&&this._path.length>=3?[{point:this._path[0],key:"closure:first-point"}]:[],o=function(t,e,i){if(!(pd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const a=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>pd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(wd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!kd(a,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:a})}if(o)return o;let r=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],a=Hs([e[0],e[1]],t);if(a>i.tolerance)continue;const l=xd(o,e,i.gridStep);!wd(l,n,s)&&kd(a,o.key,r)&&(r={kind:"line",point:l,key:o.key,distance:a,segment:o})}return r}(i.value,t,{tolerance:this._cssPxToRender(12),gridStep:this._gridPitch,excludePoints:s?[s]:[],extraEndpoints:n,epsilon:2e-4*this._gridPitch});return{point:o?[...o.point]:this._snapDrawPoint(t,e),candidate:o,contextKey:this._planSnapContextKey(i.key)}}get _activePlanSnapCandidate(){if(!this._markup||"draw"!==this._tool)return null;const t=this._planSnapHover;if(!t)return null;const e=this._planSnapGeometrySnapshot();return t.contextKey===this._planSnapContextKey(e.key)?t.candidate:null}_clearPlanSnapHover(t=!0){this._planSnapHover=null,this._syncPlanSnapActiveMarker(null),t&&(this._cursorPt=null)}_samePt(t,e){return mi(t,e)}_dropLegacySegments(){for(const t of this._serverCfg?.markers||[])"ripple"===t.display&&(t.display="icon_ripple");for(const t of this._serverCfg?.spaces||[]){delete t.segments;const e=new Set,i=t=>"string"==typeof t&&t.length>=1&&t.length<=64&&!e.has(t),s=t=>(e.add(t),!0),n=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=Yl);if(Array.isArray(t.partitions)&&(t.partitions=t.partitions.filter(t=>t&&i(t.id)&&n(t.a)&&n(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&s(t.id)).map(t=>({...t,cm:Math.max(1,Math.min(100,Number(t.cm)||15))})),t.partitions.length||delete t.partitions),Array.isArray(t.wall_columns)&&(t.wall_columns=t.wall_columns.filter(t=>t&&i(t.id)&&n(t.center)&&s(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Sl(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Ml(t.angle)}})),t.wall_columns.length||delete t.wall_columns),Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t&&i(t.id)&&Array.isArray(t.points)&&t.points.length>=2&&t.points.every(n)&&s(t.id)).map(t=>{const e=[[Number(t.points[0][0]),Number(t.points[0][1])]],i=[];for(let s=1;st.points.length>=2),t.room_drafts.length||delete t.room_drafts),Array.isArray(t.walls)){const e=zc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Pr(t.walls,t.rooms||[],Ql,1,e),t.walls.length||delete t.walls}}}get _cfgWriting(){return this._writesPending>0}_writeConfig(){this._writesPending++,this._writeChain=this._writeChain.catch(()=>{}).then(async()=>{if(!this._serverCfg)return;this._dropLegacySegments();const t=await this.hass.callWS({type:"houseplan/config/set",config:this._serverCfg,expected_rev:this._cfgRev});this._cfgRev=t?.rev??this._cfgRev+1});return this._writeChain.finally(()=>{this._writesPending--})}_saveConfig(){this._cfgEpoch++,this._saveConfigDebounced()}_geometrySnapshot(t=this._space){const e=this._serverCfg?.spaces.find(e=>e.id===t);if(!e)return null;const i=t=>JSON.parse(JSON.stringify(t)),s={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==e[t]&&(s[t]=e[t]);return{spaceId:t,rooms:i(e.rooms||[]),...Array.isArray(e.openings)?{openings:i(e.openings)}:{},...Array.isArray(e.walls)?{walls:i(e.walls)}:{},...Array.isArray(e.open_spans)?{open_spans:i(e.open_spans)}:{},...Array.isArray(e.room_drafts)?{room_drafts:i(e.room_drafts)}:{},...Array.isArray(e.partitions)?{partitions:i(e.partitions)}:{},...Array.isArray(e.wall_columns)?{wall_columns:i(e.wall_columns)}:{},...Array.isArray(e.decor)?{decor:i(e.decor)}:{},plan_transform:s}}_recordGeometry(t,e){if(!e)return;const i=this._geometrySnapshot(e.spaceId);i&&JSON.stringify(e)!==JSON.stringify(i)&&(this._geometryHistory.push({name:t,before:e,after:i}),this.requestUpdate())}_clearGeometryGesture(){this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._wallDialog=null,this._physicalDialog=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._openingDialog=null,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._decorDraft=null,this._decorMove=null,this._dtDrag=null,this._bdDrag=null}_cancelBoundaryAnchor(){return!("boundary"!==this._tool||!this._openWallAnchor)&&(this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this.requestUpdate(),!0)}_stagePointerCancel(t){if(clearTimeout(this._kioskHoldTimer),this._swipeStart?.id===t.pointerId&&(this._swipeStart=null),this._physicalDrag?.pid===t.pointerId||this._physicalRotate?.pid===t.pointerId)return void this._cancelPhysicalGesture();if(this._decorDraft?.pid===t.pointerId)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove?.pid===t.pointerId||this._dtDrag?.pid===t.pointerId||this._bdDrag?.pid===t.pointerId)return void this._cancelDecorGesture();this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null),e&&0===this._pointers.size&&this.requestUpdate()}_applyGeometryState(t){if(!this._canCommitSpace(t.spaceId))return!1;const e=this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(!e)return!1;const i=t=>JSON.parse(JSON.stringify(t));e.rooms=i(t.rooms),void 0!==t.openings?e.openings=i(t.openings):delete e.openings,void 0!==t.walls?e.walls=i(t.walls):delete e.walls,void 0!==t.open_spans?e.open_spans=i(t.open_spans):delete e.open_spans,void 0!==t.room_drafts?e.room_drafts=i(t.room_drafts):delete e.room_drafts,void 0!==t.partitions?e.partitions=i(t.partitions):delete e.partitions,void 0!==t.wall_columns?e.wall_columns=i(t.wall_columns):delete e.wall_columns,void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];return Object.assign(e,i(t.plan_transform||{})),this._clearGeometryGesture(),this._space!==t.spaceId&&(this._commitSpace(t.spaceId),this._saveNav(),this._restoreZoom()),this._modelCache=null,this._frame=null,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_roomAt(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&bi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&Ci(t,i)})}_pointInRoom(t,e){return e.poly?fi(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!ya(t))return!0;const e=t.length,i=.001;for(let s=0;s=500)return this._showToast(this._t("toast.physical_limit")),!1;const t=this._curSpaceCfg;return!(!this._activeDraftId&&(t?.room_drafts||[]).length>=200||this._draftSegmentCount(t)>=2e3||(t?.partitions||[]).length+this._path.length>F_)||(this._showToast(this._t("toast.physical_limit")),!1)}_markupClick(t){if(this._vacFit)return;if(!this._markup)return;const e=this._spaceModel();if(!e)return void this._clearGeometryGesture();if(this._suppressClick)return;if(this._drag||this._rlResize)return;const i=t.composedPath?.()||[];if(i.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(i.some(t=>t?.classList?.contains?.("physical-hit")))return void("boundary"===this._tool&&this._showToast(this._t("toast.boundary_blocked")));const s=this._svgPoint(t);if("select"===this._tool)return void(this._physicalSel=null);if("resize"===this._tool){if(this._rszDrag||i.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(s,t));return void(this._rszSel=t?.id||null)}if("delroom"===this._tool)return void this._deleteRoomClick(s);if("opening"===this._tool)return void this._openingClick(s);if("merge"===this._tool)return void this._mergeClick(s);if("wallthick"===this._tool)return void this._wallThickClick(s);if("boundary"===this._tool)return void this._boundaryClick(s);if("split"===this._tool)return void this._splitClick(s);if("column"===this._tool)return void this._columnClick(s);let n=this._resolvePlanDrawPoint(s,t.shiftKey).point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this._path.length<3)return;n=[...this._path[0]]}if(!this._path.length){const t=this._draftEndAt(n);return t?(this._activeDraftId=t.draft.id,this._resumeDraftBySpace[this._space]=t.draft.id,this._path=t.reverse?[...t.draft.points].reverse().map(t=>[...t]):t.draft.points.map(t=>[...t]),void(this._draftSegmentCms=t.reverse?[...t.draft.segments].reverse().map(t=>t.cm):t.draft.segments.map(t=>t.cm))):(this._activeDraftId=null,this._draftSegmentCms=[],void(this._path=[n]))}const o=this._path[this._path.length-1];if(this._samePt(n,o))return;const a=this._draftEndAt(n,this._activeDraftId||void 0);if(a)return void this._mergeDraftEndpoint(a);if(!this._canAppendRoomDraftPoint())return;const r=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(r)}_draftEndAt(t,e){const i=this._spaceModel();if(!i)return null;const s=this._viewOr(this._baseVb()),n=Math.max(.15*this._gridPitch,this._stageEl?.clientWidth?s.w/this._stageEl.clientWidth*12:0);for(const s of i.room_drafts||[]){if(s.id===e)continue;if(s.points.length<2)continue;const i=s.points[0],o=s.points[s.points.length-1];if(Math.hypot(t[0]-o[0],t[1]-o[1])<=n)return{draft:s,reverse:!1};if(Math.hypot(t[0]-i[0],t[1]-i[1])<=n)return{draft:s,reverse:!0}}return null}_mergeDraftEndpoint(t){const e=this._curSpaceCfg;if(!e||!this._path.length)return;const i=this._path.map(t=>[...t]),s=this._wallGraphSources(i),n=Array.isArray(e.room_drafts)?e.room_drafts:[],o=this._activeDraftId?n.find(t=>t.id===this._activeDraftId):null,a=n.find(e=>e.id===t.draft.id);if(!a)return;const r=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(a.segments||[]).map(t=>({...t})):[...a.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,r[0]),d=h?null:this._drawWallCm;if(!h&&null==d)return void this._showPhysicalRange(100);const u=this._draftSegmentCms.map((t,e)=>({...o?.segments?.[e]||{},cm:t})),p=[...this._path.map(t=>[...t]),...h?r.slice(1):r],_=[...u,...null==d?[]:[{cm:d}],...l],g=p.length>=4&&this._samePt(p[0],p[p.length-1]),m=p,f=_;if(m.length>500)return void this._showToast(this._t("toast.physical_limit"));const v=(o?.segments?.length||0)+(a.segments?.length||0);if(this._draftSegmentCount(e)-v+f.length>2e3)return void this._showToast(this._t("toast.physical_limit"));if(g){const t=m.slice(0,-1);if(this._contourSelfIntersects(t)||Ti(t)<=1e-6)return void this._showToast(this._t("toast.contour_cannot_close"));const e=this._overlapRoom(t);if(e)return void this._showToast(this._t("toast.room_overlap",{name:e.name||""}))}const y=this._geometrySnapshot(),b=this._activeDraftId||t.draft.id,w={...o||a,id:b,points:m.map(t=>[t[0]/P_,t[1]/P_]),segments:f};e.room_drafts=n.filter(e=>e.id!==t.draft.id&&(!this._activeDraftId||e.id!==this._activeDraftId)),e.room_drafts.push(w),this._activeDraftId=b,this._resumeDraftBySpace[this._space]=b,this._draftSegmentCms=f.map(t=>Number(t.cm)),this._path=m,this._physicalSel=null,this._recordGeometry(this._t("history.draft_merge"),y),this._saveConfig(),null!=d&&this._offerWallFaces(i,i.length-1,s)}_persistActiveDraftSegment(){if(this._path.length<2||!this._curSpaceCfg)return;const t=this._drawWallCm;if(null==t)return;this._draftSegmentCms=[...this._draftSegmentCms,t];const e=this._geometrySnapshot(),i=this._curSpaceCfg;i.room_drafts||=[],this._activeDraftId||(this._activeDraftId="draft-"+Date.now().toString(36)),this._resumeDraftBySpace[this._space]=this._activeDraftId;const s=i.room_drafts.findIndex(t=>t.id===this._activeDraftId),n={...s>=0?i.room_drafts[s]:{},id:this._activeDraftId,points:this._path.map(t=>[t[0]/P_,t[1]/P_]),segments:this._draftSegmentCms.map((t,e)=>({...s>=0?i.room_drafts[s]?.segments?.[e]:{},cm:t}))};s>=0?i.room_drafts[s]=n:i.room_drafts.push(n),this._recordGeometry(this._t("history.draft_segment"),e),this._saveConfig()}_activeWallSourceKey(t){return`active:${this._activeDraftId||"session"}:${t}`}_wallGraphSources(t){const e=this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}));for(let i=0;i+1t.key===i);if(s>=0){const[t]=this._wallFaceGraphCache.splice(s,1);return this._wallFaceGraphCache.push(t),t.value}const n=function(t,e=.001){const i=Number.isFinite(e)&&e>0?e:$d,s=Gd(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Pd(t.a,i),s=Pd(t.b,i);n.set(e,t.a),n.set(s,t.b),o.has(e)||o.set(e,new Set),o.has(s)||o.set(s,new Set),o.get(e).add(s),o.get(s).add(e)}const r=new Map;for(const[t,e]of o){const i=n.get(t);r.set(t,[...e].sort((t,e)=>{const s=n.get(t),o=n.get(e);return Math.atan2(s[1]-i[1],s[0]-i[0])-Math.atan2(o[1]-i[1],o[0]-i[0])||t.localeCompare(e)}))}const l=new Set,c=new Map,h=(t,e)=>`${t}>${e}`;for(const t of s){const e=[Pd(t.a,i),Pd(t.b,i)];for(const[t,o]of[e,[e[1],e[0]]]){if(l.has(h(t,o)))continue;const e=[],d=[];let u=t,p=o,_=!1;for(let i=0;i<=2*s.length+2;i++){const i=h(u,p);if(l.has(i)){_=u===t&&p===o;break}l.add(i),e.push(u),d.push(Rd(u,p));const s=r.get(p)||[],n=s.indexOf(u);if(n<0||!s.length)break;if(u=p,p=s[(n-1+s.length)%s.length],u===t&&p===o){_=!0;break}}if(!_||new Set(e).size<3||new Set(e).size!==e.length)continue;const g=e.map(t=>n.get(t)),m=Dd(g);if(!(m>i*i))continue;const f=Ad(Id(e,n,i)),v=new Set;for(const t of d)for(const e of a.get(t)?.sourceKeys||[])v.add(e);const y={ring:g,key:f,area:m,atomKeys:[...d],sourceKeys:[...v].sort((t,e)=>t.localeCompare(e))};c.has(f)||c.set(f,y)}}return{atoms:s,faces:[...c.values()].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key))}}(t,e);return this._wallFaceGraphCache.push({key:i,value:n}),this._wallFaceGraphCache.length>4&&this._wallFaceGraphCache.shift(),n}_offerWallFaces(t,e=this._path.length-2,i){if(this._path.length<2||this._wallFaceBatch||this._roomDialog)return;const s=this._spaceModel();if(!s)return;const n=this._activeWallSourceKey(e),o=2e-4*this._gridPitch;let a;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);a=function(t,e,i){const s=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!s.has(t.key)&&t.sourceKeys.includes(i))}(this._wallFaceGraph(e,o),this._wallFaceGraph(s,o),n)}catch{return}if(!a.length)return;for(const t of s.rooms){const e=ci(t);if(!t.id||!e)continue;const i=Ii(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Ti(s)>=Ti(n)?s:n,r=o===s?n:s,l=[...a].sort((t,e)=>Math.abs(t.area-Ti(r))-Math.abs(e.area-Ti(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:r},consumeAllActive:!0}])}const r=a.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));r.length&&this._beginWallFaceBatch(r)}_beginWallFaceBatch(t){this._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this._path.map(t=>[...t]),activeCms:[...this._draftSegmentCms],activeDraftId:this._activeDraftId},this._clearPlanSnapHover(),this._nameSel="",this._areaSel="",this._resetRoomDialogFields(),this._roomDialog=!0}_columnClick(t){const e=this._snap(t),i=this._drawWallCm;if(null==i)return void this._showPhysicalRange($l);if(!this._curSpaceCfg||this._limitReached("column"))return;const s=this._spaceModel();if(!s)return;const n={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Sl(i),angle:0},o=(s.wall_columns||[]).find(t=>Bl(t,n,.02*this._gridPitch));if(o)return clearTimeout(this._duplicateColumnTimer),this._duplicateColumnId=o.id,this._duplicateColumnTimer=window.setTimeout(()=>{this._duplicateColumnId=null},900),void this._showToast(this._t("toast.column_duplicate"));const a=this._geometrySnapshot(),r=this._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...n,center:[e[0]/P_,e[1]/P_]}),this._recordGeometry(this._t("history.column_add"),a),this._saveConfig()}_openPhysicalDialog(t,e,i){const s=this._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),length:this._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Ml(i.angle):0)})}else{const n=s.room_drafts.find(t=>t.id===e),o=Math.max(0,Math.min(n?.segments.length?n.segments.length-1:0,i||0));n?.segments[o]&&(this._physicalDialog={kind:t,id:e,segment:o,cm:fr(n.segments[o].cm,this._imperial),length:this._fmtLen(n.points[o],n.points[o+1])})}}_physicalDown(t,e,i){const s=this._spaceModel();if(!s)return;t.stopPropagation(),H_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Nl(n,Pl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);e&&Nl(n,e)&&o.push({kind:"partition",id:t.id})}o.some(t=>t.kind===e&&t.id===i)||o.unshift({kind:e,id:i});const a=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===a&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%o.length:Math.max(0,o.findIndex(t=>t.kind===e&&t.id===i));this._physicalPickCycle={signature:a,index:c,x:t.clientX,y:t.clientY,at:r},e=o[c].kind,i=o[c].id;const h="partition"===e?s.partitions.find(t=>t.id===i):s.wall_columns.find(t=>t.id===i);h&&(this._physicalSel={kind:e,id:i},this._physicalDrag={pid:t.pointerId,kind:e,id:i,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(h)),delta:[0,0]})}_clampPhysicalDelta(t,e,i){const s="partition"===t?[e.a,e.b]:[e.center],n=s.map(t=>t[0]),o=s.map(t=>t[1]);return[Math.max(-Yl*P_-Math.min(...n),Math.min(Yl*P_-Math.max(...n),i[0])),Math.max(-Yl*P_-Math.min(...o),Math.min(Yl*P_-Math.max(...o),i[1]))]}_physicalMove(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t),s="partition"===e.kind?e.base.a:e.base.center,n=this._snap([s[0]+i[0]-e.start[0],s[1]+i[1]-e.start[1]]),o=this._clampPhysicalDelta(e.kind,e.base,[n[0]-s[0],n[1]-s[1]]);this._physicalDrag={...e,delta:o,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const i=this._spaceModel();if(!this._curSpaceCfg||!i)return;const s=this._curSpaceCfg;if("partition"===e.kind){const t=(s.partitions||[]).find(t=>t.id===e.id),i=e.base;if(t){const n={...i,a:[i.a[0]+e.delta[0],i.a[1]+e.delta[1]],b:[i.b[0]+e.delta[0],i.b[1]+e.delta[1]]};t.a=[n.a[0]/P_,n.a[1]/P_],t.b=[n.b[0]/P_,n.b[1]/P_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=ad(t,[n],P_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,ud(t,i,P_))}}}else{const t=(s.wall_columns||[]).find(t=>t.id===e.id),n=e.base,o={...n,center:[n.center[0]+e.delta[0],n.center[1]+e.delta[1]]};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/P_,(n.center[1]+e.delta[1])/P_])}this._recordGeometry(this._t("history.physical_move"),e.before),this._saveConfig()}_registerPhysicalTap(t,e,i){const s=performance.now(),n=this._physicalLastTap?.kind===t&&this._physicalLastTap.id===e&&this._physicalLastTap.segment===i&&s-this._physicalLastTap.at<=360;this._physicalLastTap={kind:t,id:e,segment:i,at:s},n&&(this._physicalLastTap=null,this._openPhysicalDialog(t,e,i))}_cancelPhysicalGesture(){this._physicalDrag=null,this._physicalRotate=null,this.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this._spaceModel())return;t.preventDefault(),t.stopPropagation(),H_(t);const i=this._svgPoint(t);this._physicalSel={kind:"column",id:e.id},this._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,baseAngle:Ml(e.angle),angle:Ml(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const i=this._svgPoint(t),s=180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,n=e.baseAngle+s-e.startAngle,o=Ml(t.shiftKey?n:5*Math.round(n/5));this._physicalRotate={...e,angle:o,moved:e.moved||Math.abs(n-e.baseAngle)>=.5}}_physicalRotateUp(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this._physicalRotate=null;const i=this._spaceModel();if(!e.moved||!this._curSpaceCfg||!i)return;const s=i.wall_columns.find(t=>t.id===e.id);if(!s||"square"!==s.shape)return;const n={...s,angle:e.angle};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,n,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));const o=this._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);o&&(o.angle=e.angle,this._recordGeometry(this._t("history.physical_edit"),e.before),this._saveConfig())}_rszRooms(){const t=[],e=this._spaceModel();if(!e)return t;for(const i of e.rooms){const e=i.id?ci(i):null;e&&t.push({id:i.id,poly:e})}return t}_rszOpenings(){return this._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen}))}_rszOpts(){return{minDim:this._cmToUnits(30),eps:.05*this._gridPitch}}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszApplyPreview(t,e){const i=this._rszDrag,s=this._serverCfg?.spaces.find(t=>t.id===this._space);if(!i||!s)return;const n=JSON.parse(i.snap),o={...s,rooms:n.rooms,openings:n.openings,walls:n.walls,open_spans:n.open_spans};Array.isArray(n.open_spans)&&n.open_spans.length||delete o.open_spans;const a=this._spaceH;for(const[e,i]of Object.entries(t)){const t=o.rooms.find(t=>t.id===e);t&&(t.poly=i.map(t=>[t[0]/P_,t[1]/a]),delete t.x,delete t.y,delete t.w,delete t.h)}for(const[t,i]of Object.entries(e)){const e=(o.openings||[]).find(e=>e.id===t);e&&(e.x=i[0]/P_,e.y=i[1]/a)}const r=[],l=[];for(const t of i.changed){const e=i.rooms.find(e=>e.id===t),s=o.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const n=s.poly.map(t=>[t[0]*P_,t[1]*a]);if(e.poly.length===n.length)for(let t=0;tt.id===e);if(!s||!s.poly||s.poly.length<3)return null;if(i<0||i>=s.poly.length)return null;const n=[...s.poly[i]],o=[...s.poly[(i+1)%s.poly.length]];return{roomId:e,edge:i,a:n,b:o,n:_a(s.poly,i)}}(s,e,i);n&&(this._rszDrag={kind:"edge",pid:t.pointerId,roomId:e,plan:n,rooms:s,openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszCornerDown(t,e,i,s){"resize"!==this._tool||this._rszDrag||(t.stopPropagation(),t.preventDefault(),H_(t),this._rszDrag={kind:"scale",pid:t.pointerId,roomId:e,fixed:s,span0:Math.hypot(i[0]-s[0],i[1]-s[1])||1,rooms:this._rszRooms(),openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszMove(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t);if("edge"===e.kind){const t=e.plan,s=(i[0]-t.a[0])*t.n[0]+(i[1]-t.a[1])*t.n[1],n=this._snap([t.a[0]+t.n[0]*s,t.a[1]+t.n[1]*s]);let o=(n[0]-t.a[0])*t.n[0]+(n[1]-t.a[1])*t.n[1];if(o=function(t,e,i,s,n,o){if(!Number.isFinite(s)||Math.abs(s)<1e-9)return 0;const a=Math.sign(s);let r=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&r>1e-9;s++,r-=l){const s=a*r;if(Sa(t,e,i,s,o))return s}return 0}(e.rooms,e.openings,t,o,this._gridPitch,this._rszOpts()),o===e.d&&e.moved)return;e.d=o,e.moved=!0;const a=ka(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(a.polys),this._rszApplyPreview(a.polys,a.openings),this._rszLive=this._rszEdgeLabels(a,t)}else{const t=e.fixed,s=this._snap(i);let n=Math.hypot(s[0]-t[0],s[1]-t[1])/(e.span0||1);if(n=Math.max(.05,Math.min(20,n)),n=function(t,e,i,s,n,o){if(!Number.isFinite(n)||n<=0)return 1;if(Ca(t,e,i,s,n,o))return n;let a=1,r=n;for(let n=0;n<28;n++){const n=(a+r)/2;Ca(t,e,i,s,n,o)?a=n:r=n}return a}(e.rooms,e.openings,e.roomId,t,n,this._rszOpts()),n===e.k&&e.moved)return;e.k=n,e.moved=!0;const o=e.rooms.find(t=>t.id===e.roomId),a=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),r=Ma(o,e.openings,a,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:r.poly},r.openings),this._rszLive=this._rszScaleLabels(r.poly)}this.requestUpdate()}_rszUp(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._rszPreview;this._rszDrag=null,this._rszLive=null,this._rszPreview=null;if(!(e.moved&&("edge"===e.kind?Math.abs(e.d)>1e-9:Math.abs(e.k-1)>1e-9))||!i)return this._cfgEpoch++,void this.requestUpdate();const s=JSON.parse(e.snap),n=this._curSpaceCfg;if(n){n.rooms=i.sp.rooms,n.openings=i.sp.openings,Array.isArray(i.sp.walls)&&(i.sp.walls.length?n.walls=i.sp.walls:delete n.walls),Array.isArray(i.sp.open_spans)&&i.sp.open_spans.length?n.open_spans=i.sp.open_spans:delete n.open_spans;for(const t of e.changed){const e=n.rooms.find(e=>e.id===t);e?.poly&&(e.poly=va(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Pr(n.walls,n.rooms||[],Ql,1,this._cfgOpenCuts()),n.walls.length||delete n.walls)}this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._recordGeometry(this._t("history.resize_room"),s),this._saveConfig(),this.requestUpdate()}_rszCancelDrag(){this._rszDrag&&(this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._cfgEpoch++,this.requestUpdate())}_rszPointerCancel(t){const e=this._rszDrag;e&&e.pid===t.pointerId&&(t.stopPropagation(),this._rszCancelDrag())}_rszEdgeLabels(t,e){const i=this._rszDrag,s=[],n=t.polys[e.roomId]||i.rooms.find(t=>t.id===e.roomId).poly,o=n.length,a=e.edge,r=(a+1)%o;for(const[t,e]of[[n[(a-1+o)%o],n[a]],[n[a],n[r]],[n[r],n[(r+1)%o]]])s.push({x:(t[0]+e[0])/2,y:(t[1]+e[1])/2,text:this._fmtLen(t,e)});const l="mi"===this.hass?.config?.unit_system?.length,c=Object.keys(t.polys).length?Object.keys(t.polys):[e.roomId],h=this._spaceWalls,d=this._openPairs().flatMap(t=>t.segs),u=this._physicalBodiesR();for(const e of c){const n=t.polys[e]||i.rooms.find(t=>t.id===e).poly,o=h.length&&ol(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||n,a=xi(o),r=u.length?Ol(zl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(o,this._gridPitch,this._cellCm);s.push({x:a[0],y:a[1],text:Ta(r,l),area:!0})}return s}_rszScaleLabels(t){const e="mi"===this.hass?.config?.unit_system?.length,i=t.map(t=>t[0]),s=t.map(t=>t[1]),n=Math.max(...i)-Math.min(...i),o=Math.max(...s)-Math.min(...s),a=this._spaceWalls,r=a.length&&this._rszSel&&ol([{id:this._rszSel,poly:t}],this._rszSel,a,[],this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||t,l=xi(r),c=this._physicalBodiesR(),h=c.length?Ol(zl(r,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(r,this._gridPitch,this._cellCm);return[{x:Math.min(...i),y:Math.min(...s),text:`${this._fmtLen([0,0],[n,0])} × ${this._fmtLen([0,0],[o,0])}`},{x:l[0],y:l[1],text:Ta(h,e),area:!0}]}_renderResizeLayer(t){const e=Math.max(.013*t.w,5),i=e/2,s=t=>t.toFixed(1),n=`M ${s(-.7*i)} 0 H ${s(.7*i)} M 0 ${s(-.22*i)} V ${s(-i)} M ${s(-.32*i)} ${s(-.6*i)} L 0 ${s(-i)} L ${s(.32*i)} ${s(-.6*i)} M 0 ${s(.22*i)} V ${s(i)} M ${s(-.32*i)} ${s(.6*i)} L 0 ${s(i)} L ${s(.32*i)} ${s(.6*i)}`,o=[],a=this._rszRooms();for(const t of a)for(let i=0;ithis._rszEdgeDown(e,t.id,i)} @pointermove=${t=>this._rszMove(t)} @pointerup=${t=>this._rszUp(t)} @@ -4756,7 +4773,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 @pointermove=${t=>this._rszMove(t)} @pointerup=${t=>this._rszUp(t)} @pointercancel=${t=>this._rszPointerCancel(t)} - @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}return W`${o}`}get _openingsR(){const t=this._curSpaceCfg,e=this._spaceH,i=this._spaceModel();return i?(t?.openings||[]).flatMap(t=>{const s={...t,rx:t.x*T_,ry:t.y*e,rlen:t.length*T_};if(!t.host)return[s];const n=ad(t,i.partitions,T_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,a]=n.resolved.center;const r=this._physicalDrag;return r?.moved&&"partition"===r.kind&&r.id===t.host.id&&(o+=r.delta[0],a+=r.delta[1]),[{...t,rx:o,ry:a,rlen:n.resolved.length,angle:n.resolved.angle,partitionHost:n.resolved}]}):[]}_partitionOpeningCuts(t=this._spaceModel(),e=()=>!0){if(!t)return[];const i=this._curSpaceCfg?.id===t.id&&this._curSpaceCfg?.openings||[],s=[];for(const n of i){if(!n.host||!e(n))continue;const i=ad(n,t.partitions,T_,this._cellCm,this._gridPitch);i.resolved&&s.push(cd(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=tl(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);return t.flatMap(t=>{const e={x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen};return t.host?t.partitionHost&&dd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?hd(t.partitionHost,i):bl(e,{x:t.rx,y:t.ry,angle:t.angle,length:t.rlen,flip_v:i})}_cmToUnits(t){return t/this._cellCm*this._gridPitch}get _decorList(){const t=this._curSpaceCfg;return Array.isArray(t?.decor)?t.decor:[]}get _decorH(){return T_}_decorResolvedStyle(t){return function(t,e,i,s=ir){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,a=Rt(o?.color,s.color);return{color:a,opacity:sr(o?.opacity,s.opacity),widthCm:lr(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?a:s.fillColor),fillOpacity:n&&o?.fill?sr(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ir)}_decorWidthUnits(t){return((t,e,i,s=ir.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return ar(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:ar(s,e,i)})(t,this._cellCm,this._gridPitch,ir.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:rr(ts*es(t),this._cellCm,this._gridPitch)}return rr(ts,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return ts;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?ar(e,this._cellCm,this._gridPitch):ts*es(t)}_decorSmallField(t){return Math.round(100*(this._imperial?t/2.54:t))/100}_decorSmallCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(100,e)):.1}_decorTextCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(p_,e)):.1}_decorLargeField(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_decorLargeCm(t){const e=this._imperial?30.48*t:100*t;return Number.isFinite(e)?Math.max(.1,Math.min(Yl*this._cellCm,e)):.1}_angleField(t){const e=Number(t);return Number.isFinite(e)?String(Number(e.toFixed(3))):"0"}_decorBoxOf(t){return"rect"!==t.kind&&"ellipse"!==t.kind&&"furniture"!==t.kind?null:{x:t.x*T_,y:t.y*this._decorH,w:t.w*T_,h:t.h*this._decorH,angle:nr(t.angle)||void 0}}_decorSnapGeometry(t){const e=this._spaceModel();if(!e)return{points:[],segments:[]};const i=t||"",s=this._decorSnapCache;if(s&&s.epoch===this._cfgEpoch&&s.space===this._space&&s.height===this._decorH&&s.exclude===i)return s.geometry;const n=[];for(const e of this._decorList)if(e.id!==t)if("line"===e.kind){const t=[e.x1*T_,e.y1*this._decorH],i=[e.x2*T_,e.y2*this._decorH];n.push({points:[t,i,[(t[0]+i[0])/2,(t[1]+i[1])/2]],segments:[{a:t,b:i}]})}else if("text"===e.kind)n.push({points:[[e.x*T_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(dr(t))}for(const t of e.rooms){const e=ci(t);e?.length&&n.push({points:e.flatMap((t,i)=>{const s=e[(i+1)%e.length];return[t,[(t[0]+s[0])/2,(t[1]+s[1])/2]]}),segments:e.map((t,i)=>({a:t,b:e[(i+1)%e.length]}))})}const o=function(t){return{points:t.flatMap(t=>t.points),segments:t.flatMap(t=>t.segments)}}(n);return this._decorSnapCache={epoch:this._cfgEpoch,space:this._space,height:this._decorH,exclude:i,geometry:o},o}_decorSnap(t,e="mouse",i){const s=this._stageEl,n=this._viewOr(this._baseVb()),o="touch"===e||"pen"===e?14:8,a=s?n.w/Math.max(1,s.clientWidth)*o:this._gridPitch;return function(t,e,i,s){const n=s(t);let o=null;for(const n of e.points){const e=s(n),a=Math.hypot(e[0]-t[0],e[1]-t[1]);a<=i&&(!o||athis._snap(t)).point}_replaceDecor(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>i.id===t?{...i,...e}:i),this.requestUpdate())}_cancelDecorGesture(){const t=this._decorMove?.before||this._dtDrag?.before||this._bdDrag?.before,e=t&&this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(t&&e){const i=t=>JSON.parse(JSON.stringify(t));void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];Object.assign(e,i(t.plan_transform||{})),this._cfgEpoch++}this._decorMove=null,this._dtDrag=null,this._bdDrag=null,this.requestUpdate()}_decorPointerDown(t){const e=this._decorTool;if("select"===e||"erase"===e?t.target.closest?.(".dshape"):null)return!0;if("line"===e||"rect"===e||"ellipse"===e){t.preventDefault();const i=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorDraft={kind:e,a:i,b:i,pid:t.pointerId},O_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/T_),y:sc(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:rr(ts,this._cellCm,this._gridPitch)},this._decorTextSelection={start:0,end:0},!0}if("furniture"===e)return!!this._furnPalette&&(t.preventDefault(),this._furnPlace(this._svgPoint(t),t.shiftKey),!0);if("select"===e&&(this._decorSel=null),this._bdMovable){const e=this._bdRect,i=this._svgPoint(t),s=e.x+e.w/2,n=e.y+e.h/2,o=-nr(e.angle)*Math.PI/180,a=i[0]-s,r=i[1]-n,l=[s+a*Math.cos(o)-r*Math.sin(o),n+a*Math.sin(o)+r*Math.cos(o)];if(l[0]>=e.x&&l[0]<=e.x+e.w&&l[1]>=e.y&&l[1]<=e.y+e.h)return t.preventDefault(),this._bdStart(t)}return!1}_decorCommitDraft(){const t=this._decorDraft;if(this._decorDraft=null,!t)return;const e=.5*this._gridPitch;if(!function(t,e,i,s){const n=Math.abs(i[0]-e[0]),o=Math.abs(i[1]-e[1]);return"line"===t?Math.hypot(n,o)>=s:n>=s&&o>=s}(t.kind,t.a,t.b,e))return;const i=T_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),a="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),r=sc;let l;if("line"===t.kind)l={id:a,kind:"line",x1:r(t.a[0]/i),y1:r(t.a[1]/s),x2:r(t.b[0]/i),y2:r(t.b[1]/s),...cr(n,!1)};else{const e=r(Math.min(t.a[0],t.b[0])/i),o=r(Math.min(t.a[1],t.b[1])/s),c=Math.abs(t.b[0]-t.a[0])/i,h=Math.abs(t.b[1]-t.a[1])/s;l={id:a,kind:t.kind,x:e,y:o,w:c,h:h,...cr(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=a,this._recordGeometry(this._t("history.decor_add"),o),this._saveConfig(),this.requestUpdate()}_decorShapeDown(t,e){if("decor"!==this._mode)return;const i=this._decorTool;if("text"===i){if("text"!==e.kind)return;return t.stopPropagation(),t.preventDefault(),void this._decorOpenText(e)}"select"!==i&&"erase"!==i||(t.stopPropagation(),t.preventDefault(),"erase"!==i?(this._decorSel=e.id,this._decorMove={id:e.id,start:this._svgPoint(t),orig:JSON.parse(JSON.stringify(e)),pid:t.pointerId,moved:!1,before:this._geometrySnapshot()},O_(t)):this._decorEraseConfirm={id:e.id,kind:e.kind})}_decorMoveUpdate(t){const e=this._decorMove;if("furniture"===e.orig?.kind)return void this._furnMoveUpdate(t);const i=this._svgPoint(t),s=e.orig,n=("line"===s.kind?s.x1:s.x)*T_,o=("line"===s.kind?s.y1:s.y)*this._decorH,a=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let r=(a[0]-n)/T_,l=(a[1]-o)/this._decorH;const c=e.orig,h="line"===c.kind?Math.min(c.x1,c.x2):c.x,d="line"===c.kind?Math.min(c.y1,c.y2):c.y,u="line"===c.kind?Math.abs(c.x2-c.x1):c.w||0,p="line"===c.kind?Math.abs(c.y2-c.y1):c.h||0,_=Yl;r=Math.max(-_-h,Math.min(_-h-u,r)),l=Math.max(-_-d,Math.min(_-d-p,l)),(r||l)&&(e.moved=!0);this._curSpaceCfg.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i=e.orig;return"line"===t.kind?{...t,x1:i.x1+r,y1:i.y1+l,x2:i.x2+r,y2:i.y2+l}:{...t,x:i.x+r,y:i.y+l}}),this.requestUpdate()}_decorShapeDbl(t,e){"decor"===this._mode&&"select"===this._decorTool&&(t.preventDefault(),t.stopPropagation(),this._decorMove=null,this._decorSel=e.id,this._openDecorProperties(e))}_openDecorProperties(t){if("decor"!==this._mode||"select"!==this._decorTool)return;if("text"===t.kind)return void this._decorOpenText(t);if(!["line","rect","ellipse","furniture"].includes(t.kind))return;const e=this._decorResolvedStyle(t),i="line"===t.kind?t:null,s=this._decorBoxOf(t);this._decorShapeDialog={id:t.id,kind:t.kind,color:e.color,opacity:e.opacity,widthCm:e.widthCm,angle:this._angleField(nr(i?zs([i.x1*T_,i.y1*this._decorH],[i.x2*T_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*T_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:rr(s.w,this._cellCm,this._gridPitch),sizeHCm:rr(s.h,this._cellCm,this._gridPitch)}:{},..."furniture"===t.kind?{symbol:t.symbol}:{},..."rect"===t.kind||"ellipse"===t.kind?{fill:e.fill,fillColor:e.fillColor,fillOpacity:e.fillOpacity}:{}}}_decorOpenText(t){if("text"!==t.kind)return;let e=String(t.text??"");const i=[...e.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Yi(t.entity,n),a=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!a){const t=e.indexOf("{}");e=t>=0?e.slice(0,t)+o+e.slice(t+2):`${e}${e?" ":""}${o}`}this._decorTextDialog={id:t.id,x:t.x,y:t.y,text:e,color:Rt(t.color,this._decorStyle.color),opacity:sr(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:a||void 0},this._decorTextSelection={start:e.length,end:e.length}}_decorRememberTextSelection(t){this._decorTextSelection={start:t.selectionStart??t.value.length,end:t.selectionEnd??t.value.length}}_decorInsertLiveVariable(t){const e=this._decorTextDialog;if(!e)return;const i=Yi(e.pickerEntity,t);if(!i)return;const s=e.text,n=Math.max(0,Math.min(s.length,this._decorTextSelection.start)),o=Math.max(n,Math.min(s.length,this._decorTextSelection.end));if(s.length-(o-n)+i.length>200)return;const a=s.slice(0,n)+i+s.slice(o),r=n+i.length;this._decorTextSelection={start:r,end:r},this._decorTextDialog={...e,text:a,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(r,r))})}_decorSaveText(){const t=this._decorTextDialog,e=String(t?.text??"").replace(/\r\n?/g,"\n").trim();if(!t||!e)return void(this._decorTextDialog=null);const i=this._geometrySnapshot(),s=this._curSpaceCfg,n={color:t.color,opacity:sr(t.opacity),size_cm:Number(Math.max(.1,Math.min(p_,t.sizeCm)).toFixed(4)),...nr(t.angle)?{angle:nr(t.angle)}:{}};if(t.id)s.decor=this._decorList.map(i=>{if(i.id!==t.id)return i;if("text"!==i.kind)return i;if(t.preserveLegacy){const{angle:t,size:s,scale:o,...a}=i;return{...a,text:e,...n}}const{entity:s,attr:o,unit:a,...r}=i,{angle:l,size:c,scale:h,...d}=r;return{...d,text:e,...n}});else{const i="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5);s.decor=[...this._decorList,{id:i,kind:"text",x:t.x,y:t.y,text:e,...n}],this._decorSel=i}this._decorTextDialog=null,this._recordGeometry(this._t(t.id?"history.decor_edit":"history.decor_add"),i),this._saveConfig(),this.requestUpdate()}_decorSaveShape(){const t=this._decorShapeDialog;if(!t)return;const e=this._geometrySnapshot(),i={color:t.color,opacity:sr(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:sr(t.fillOpacity,.25)};this._curSpaceCfg.decor=this._decorList.map(e=>{if(e.id!==t.id)return e;const s="rect"===t.kind||"ellipse"===t.kind,n=cr(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*T_,s=(e.y1+e.y2)/2*this._decorH,o=ar(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),a=nr(t.angle)*Math.PI/180,r=Math.cos(a)*o/2,l=Math.sin(a)*o/2,c=this._snap([i-r,s-l]),h=this._snap([i+r,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:sc(c[0]/T_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/T_),y2:sc(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*T_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(ar(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),a=Math.max(this._gridPitch,ai(ar(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),r=e.x*T_+i/2,l=e.y*this._decorH+s/2,c=nr(t.angle),h=or({x:r-o/2,y:l-a/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:sc(h[0]/T_),y:sc(h[1]/this._decorH),w:o/T_,h:a/this._decorH,..."furniture"===e.kind&&t.symbol?{symbol:t.symbol}:{},...c?{angle:c}:{}}}return e}),this._decorStyle={...i,fill:"rect"===t.kind||"ellipse"===t.kind?i.fill:this._decorStyle.fill,fillColor:"rect"===t.kind||"ellipse"===t.kind?i.fillColor:this._decorStyle.fillColor,fillOpacity:"rect"===t.kind||"ellipse"===t.kind?i.fillOpacity:this._decorStyle.fillOpacity},this._decorShapeDialog=null,this._recordGeometry(this._t("history.decor_edit"),e),this._saveConfig(),this.requestUpdate()}get _dtSel(){return"decor"===this._mode&&"select"===this._decorTool&&this._decorSel&&this._decorList.find(t=>t.id===this._decorSel)||null}_dtPivot(t){return"line"===t.kind?[(t.x1+t.x2)/2*T_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*T_,(t.y+t.h/2)*this._decorH]:[t.x*T_,t.y*this._decorH]}_dtApply(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const s={...i};"text"===i.kind&&void 0!==e.textSizeCm&&(delete s.size,delete s.scale);const n={...s};return void 0!==e.textSizeCm&&(n.size_cm=Number(Math.max(.1,Math.min(p_,e.textSizeCm)).toFixed(4))),void 0!==e.angle&&(e.angle?n.angle=Number(e.angle.toFixed(2)):delete n.angle),n}),this._cfgEpoch++,this.requestUpdate())}_dtStart(t,e,i,s){const n=this._dtSel;if(!n)return;t.stopPropagation(),t.preventDefault();const[o,a]=this._dtPivot(n),r=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:a,r0:Math.hypot(r[0]-o,r[1]-a),a0:180*Math.atan2(r[1]-a,r[0]-o)/Math.PI,textSizeCm0:"text"===n.kind?this._decorTextSizeCm(n):1,angle0:"line"===n.kind?0:Number(n.angle)||0,sgx:i?.[0],sgy:i?.[1],orig:l||void 0,origShape:JSON.parse(JSON.stringify(n)),before:this._geometrySnapshot(),lineEnd:s,moved:!1},O_(t)}_dtMove(t){const e=this._dtDrag;if(!e)return;const i=this._svgPoint(t);if(void 0!==e.lineEnd&&"line"===e.origShape.kind){const s=this._decorSnap(i,t.pointerType,e.id),n=sc(s[0]/T_),o=sc(s[1]/this._decorH),a=e.origShape,r=0===e.lineEnd?a.x1:a.x2,l=0===e.lineEnd?a.y1:a.y2;return(Math.abs(n-r)>1e-9||Math.abs(o-l)>1e-9)&&(e.moved=!0),void this._replaceDecor(e.id,0===e.lineEnd?{x1:n,y1:o}:{x2:n,y2:o})}if("scale"===e.kind&&e.orig){const s=ur(e.orig,e.sgx??1,e.sgy??1,i[0],i[1],!t.shiftKey,this._gridPitch,this._gridPitch),n=Math.abs(s.x-e.orig.x)>1e-6||Math.abs(s.y-e.orig.y)>1e-6||Math.abs(s.w-e.orig.w)>1e-6||Math.abs(s.h-e.orig.h)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._decorApplyBox(e.id,s)}if("scale"===e.kind){const t=Math.hypot(i[0]-e.ax,i[1]-e.ay);if(e.r0<1e-6)return;const s=Math.max(.1,Math.min(p_,e.textSizeCm0*(t/e.r0))),n=Math.abs(s-e.textSizeCm0)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._dtApply(e.id,{textSizeCm:s})}const s=180*Math.atan2(i[1]-e.ay,i[0]-e.ax)/Math.PI;let n=e.angle0+(s-e.a0);t.shiftKey||(n=5*Math.round(n/5)),n=(n%360+360)%360,n>180&&(n-=360);const o=Math.abs(n-e.angle0)>1e-6;(o||e.moved)&&(e.moved||=o,this._dtApply(e.id,{angle:n}))}_dtUp(){const t=this._dtDrag;this._dtDrag=null,t?.moved&&(this._recordGeometry(this._t("history.decor_transform"),t.before),this._saveConfig()),this.requestUpdate()}_dtMeasure(){const t=this._dtSel;if(!t)return void(this._dtBox&&(this._dtBox=null,this.requestUpdate()));let e;if("line"===t.kind){const i=t.x1*T_,s=t.y1*this._decorH,n=t.x2*T_,o=t.y2*this._decorH;e={id:t.id,x:Math.min(i,n),y:Math.min(s,o),w:Math.abs(n-i),h:Math.abs(o-s)}}else if("furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind)e={id:t.id,x:t.x*T_,y:t.y*this._decorH,w:t.w*T_,h:t.h*this._decorH};else{const i=this.renderRoot.querySelector(`text.dtext[data-id="${t.id}"]`);if(!i||"function"!=typeof i.getBBox)return;let s;try{s=i.getBBox()}catch{return}if(!s||!s.width&&!s.height)return;e={id:t.id,x:s.x,y:s.y,w:s.width,h:s.height}}const i=this._dtBox;i&&i.id===e.id&&Math.abs(i.x-e.x)<.01&&Math.abs(i.y-e.y)<.01&&Math.abs(i.w-e.w)<.01&&Math.abs(i.h-e.h)<.01||(this._dtBox=e,this.requestUpdate())}_deleteDecor(t){if(!this._decorList.some(e=>e.id===t))return;const e=this._geometrySnapshot();this._curSpaceCfg.decor=this._decorList.filter(e=>e.id!==t),this._decorSel===t&&(this._decorSel=null),this._recordGeometry(this._t("history.decor_delete"),e),this._saveConfig(),this.requestUpdate()}_decorDeleteSel(){this._decorSel&&this._deleteDecor(this._decorSel)}_confirmDecorErase(){const t=this._decorEraseConfirm;this._decorEraseConfirm=null,t&&this._deleteDecor(t.id)}get _furnWalls(){const t=this._rawPhysicalBodiesR().flatMap(t=>t.map((e,i)=>{const s=t[(i+1)%t.length];return[e[0],e[1],s[0],s[1]]}));return[...this._segments,...t]}get _furnWallReach(){return 6*this._gridPitch}_furnFieldValue(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_furnFieldToCm(t){return e=this._imperial?30.48*t:100*t,Number.isFinite(e)?Math.max(1,Math.min(1e4,e)):1;var e}_furnPick(t){const e=function(t){const e=xc(t);return e?{w:e.w,h:e.h}:{w:60,h:60}}(t);this._furnPalette={symbol:t,w:e.w,h:e.h}}_furnPlace(t,e=!1){const i=this._furnPalette,s=this._curSpaceCfg;if(!i||!s)return;const n=T_,o=this._decorH,a=Dc(Sc(i.w,this._cellCm,this._gridPitch,n)),r=Dc(Sc(i.h,this._cellCm,this._gridPitch,n)),l=this._geometrySnapshot(),c=this._decorSnap(t);let h=c[0],d=c[1],u=0;const p=e?null:Ac(h,d,r*o,this._furnWalls,this._furnWallReach,this._gridPitch);p&&(h=p.cx,d=p.cy,u=p.angle);const _="df"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),g={id:_,kind:"furniture",symbol:i.symbol,x:sc(h/n-a/2),y:sc(d/o-r/2),w:a,h:r,...cr(this._decorStyle,!1)};u&&(g.angle=Number(u.toFixed(2))),s.decor=[...this._decorList,g],this._decorSel=_,this._decorTool="select",this._furnPalette=null,this._recordGeometry(this._t("history.decor_add"),l),this._saveConfig(),this.requestUpdate()}_furnMoveUpdate(t){const e=this._decorMove;if("furniture"!==e.orig.kind)return;const i=e.orig,s=this._curSpaceCfg;if(!s)return;const n=T_,o=this._decorH,a=this._svgPoint(t),r=(i.x+i.w/2)*n+(a[0]-e.start[0]),l=(i.y+i.h/2)*o+(a[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Ac(r,l,i.h*o,this._furnWalls,this._furnWallReach,this._gridPitch);if(u)c=u.cx/n-i.w/2,h=u.cy/o-i.h/2,d=u.angle;else{const s=this._decorSnap([r-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=sc(c),h=sc(h),(Math.abs(c-i.x)>1e-9||Math.abs(h-i.y)>1e-9||Math.abs(d-(Number(i.angle)||0))>1e-9)&&(e.moved=!0),s.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i={...t,x:c,y:h};return d?i.angle=Number(d.toFixed(2)):delete i.angle,i}),this.requestUpdate()}_decorApplyBox(t,e){const i=this._curSpaceCfg;if(!i)return;const s=T_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=or(e,i.angle,t=>this._snap(t));return{...i,x:sc(o[0]/s),y:sc(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Yl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Yl,e.h/n))}}),this._cfgEpoch++,this.requestUpdate()}get _furnLive(){const t=this._dtDrag;if(!t||"scale"!==t.kind||!t.orig)return null;const e=this._decorList.find(e=>e.id===t.id);if(!e||"furniture"!==e.kind)return null;const i=T_,s=this._decorH,n=e.w*i,o=e.h*s,a=function(t,e,i,s,n){const o=t+i/2,a=e+s/2,r=(Number(n)||0)*Math.PI/180,l=Math.cos(r),c=Math.sin(r),h=(t,e)=>{const i=t-o,s=e-a;return[o+i*l-s*c,a+i*c+s*l]};return[h(t,e),h(t+i,e),h(t+i,e+s),h(t,e+s)]}(e.x*i,e.y*s,n,o,Number(e.angle)||0),r=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=r(a[0],a[1]),c=r(a[0],a[3]);return[{x:l[0],y:l[1],text:this._fmtLen([0,0],[n,0])},{x:c[0],y:c[1],text:this._fmtLen([0,0],[0,o])}]}_renderFurnPalette(){const t=this._furnPalette,e=this._t(this._imperial?"gs.unit_ft":"gs.unit_m");return j`
t.stopPropagation()}> + @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}return W`${o}`}get _openingsR(){const t=this._curSpaceCfg,e=this._spaceH,i=this._spaceModel();return i?(t?.openings||[]).flatMap(t=>{const s={...t,rx:t.x*P_,ry:t.y*e,rlen:t.length*P_};if(!t.host)return[s];const n=ad(t,i.partitions,P_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,a]=n.resolved.center;const r=this._physicalDrag;return r?.moved&&"partition"===r.kind&&r.id===t.host.id&&(o+=r.delta[0],a+=r.delta[1]),[{...t,rx:o,ry:a,rlen:n.resolved.length,angle:n.resolved.angle,partitionHost:n.resolved}]}):[]}_partitionOpeningCuts(t=this._spaceModel(),e=()=>!0){if(!t)return[];const i=this._curSpaceCfg?.id===t.id&&this._curSpaceCfg?.openings||[],s=[];for(const n of i){if(!n.host||!e(n))continue;const i=ad(n,t.partitions,P_,this._cellCm,this._gridPitch);i.resolved&&s.push(cd(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=tl(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);return t.flatMap(t=>{const e={x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen};return t.host?t.partitionHost&&dd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?hd(t.partitionHost,i):bl(e,{x:t.rx,y:t.ry,angle:t.angle,length:t.rlen,flip_v:i})}_cmToUnits(t){return t/this._cellCm*this._gridPitch}get _decorList(){const t=this._curSpaceCfg;return Array.isArray(t?.decor)?t.decor:[]}get _decorH(){return P_}_decorResolvedStyle(t){return function(t,e,i,s=ir){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,a=Rt(o?.color,s.color);return{color:a,opacity:sr(o?.opacity,s.opacity),widthCm:lr(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?a:s.fillColor),fillOpacity:n&&o?.fill?sr(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ir)}_decorWidthUnits(t){return((t,e,i,s=ir.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return ar(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:ar(s,e,i)})(t,this._cellCm,this._gridPitch,ir.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:rr(ts*es(t),this._cellCm,this._gridPitch)}return rr(ts,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return ts;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?ar(e,this._cellCm,this._gridPitch):ts*es(t)}_decorSmallField(t){return Math.round(100*(this._imperial?t/2.54:t))/100}_decorSmallCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(100,e)):.1}_decorTextCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(__,e)):.1}_decorLargeField(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_decorLargeCm(t){const e=this._imperial?30.48*t:100*t;return Number.isFinite(e)?Math.max(.1,Math.min(Yl*this._cellCm,e)):.1}_angleField(t){const e=Number(t);return Number.isFinite(e)?String(Number(e.toFixed(3))):"0"}_decorBoxOf(t){return"rect"!==t.kind&&"ellipse"!==t.kind&&"furniture"!==t.kind?null:{x:t.x*P_,y:t.y*this._decorH,w:t.w*P_,h:t.h*this._decorH,angle:nr(t.angle)||void 0}}_decorSnapGeometry(t){const e=this._spaceModel();if(!e)return{points:[],segments:[]};const i=t||"",s=this._decorSnapCache;if(s&&s.epoch===this._cfgEpoch&&s.space===this._space&&s.height===this._decorH&&s.exclude===i)return s.geometry;const n=[];for(const e of this._decorList)if(e.id!==t)if("line"===e.kind){const t=[e.x1*P_,e.y1*this._decorH],i=[e.x2*P_,e.y2*this._decorH];n.push({points:[t,i,[(t[0]+i[0])/2,(t[1]+i[1])/2]],segments:[{a:t,b:i}]})}else if("text"===e.kind)n.push({points:[[e.x*P_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(dr(t))}for(const t of e.rooms){const e=ci(t);e?.length&&n.push({points:e.flatMap((t,i)=>{const s=e[(i+1)%e.length];return[t,[(t[0]+s[0])/2,(t[1]+s[1])/2]]}),segments:e.map((t,i)=>({a:t,b:e[(i+1)%e.length]}))})}const o=function(t){return{points:t.flatMap(t=>t.points),segments:t.flatMap(t=>t.segments)}}(n);return this._decorSnapCache={epoch:this._cfgEpoch,space:this._space,height:this._decorH,exclude:i,geometry:o},o}_decorSnap(t,e="mouse",i){const s=this._stageEl,n=this._viewOr(this._baseVb()),o="touch"===e||"pen"===e?14:8,a=s?n.w/Math.max(1,s.clientWidth)*o:this._gridPitch;return function(t,e,i,s){const n=s(t);let o=null;for(const n of e.points){const e=s(n),a=Math.hypot(e[0]-t[0],e[1]-t[1]);a<=i&&(!o||athis._snap(t)).point}_replaceDecor(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>i.id===t?{...i,...e}:i),this.requestUpdate())}_cancelDecorGesture(){const t=this._decorMove?.before||this._dtDrag?.before||this._bdDrag?.before,e=t&&this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(t&&e){const i=t=>JSON.parse(JSON.stringify(t));void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];Object.assign(e,i(t.plan_transform||{})),this._cfgEpoch++}this._decorMove=null,this._dtDrag=null,this._bdDrag=null,this.requestUpdate()}_decorPointerDown(t){const e=this._decorTool;if("select"===e||"erase"===e?t.target.closest?.(".dshape"):null)return!0;if("line"===e||"rect"===e||"ellipse"===e){t.preventDefault();const i=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorDraft={kind:e,a:i,b:i,pid:t.pointerId},H_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/P_),y:sc(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:rr(ts,this._cellCm,this._gridPitch)},this._decorTextSelection={start:0,end:0},!0}if("furniture"===e)return!!this._furnPalette&&(t.preventDefault(),this._furnPlace(this._svgPoint(t),t.shiftKey),!0);if("select"===e&&(this._decorSel=null),this._bdMovable){const e=this._bdRect,i=this._svgPoint(t),s=e.x+e.w/2,n=e.y+e.h/2,o=-nr(e.angle)*Math.PI/180,a=i[0]-s,r=i[1]-n,l=[s+a*Math.cos(o)-r*Math.sin(o),n+a*Math.sin(o)+r*Math.cos(o)];if(l[0]>=e.x&&l[0]<=e.x+e.w&&l[1]>=e.y&&l[1]<=e.y+e.h)return t.preventDefault(),this._bdStart(t)}return!1}_decorCommitDraft(){const t=this._decorDraft;if(this._decorDraft=null,!t)return;const e=.5*this._gridPitch;if(!function(t,e,i,s){const n=Math.abs(i[0]-e[0]),o=Math.abs(i[1]-e[1]);return"line"===t?Math.hypot(n,o)>=s:n>=s&&o>=s}(t.kind,t.a,t.b,e))return;const i=P_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),a="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),r=sc;let l;if("line"===t.kind)l={id:a,kind:"line",x1:r(t.a[0]/i),y1:r(t.a[1]/s),x2:r(t.b[0]/i),y2:r(t.b[1]/s),...cr(n,!1)};else{const e=r(Math.min(t.a[0],t.b[0])/i),o=r(Math.min(t.a[1],t.b[1])/s),c=Math.abs(t.b[0]-t.a[0])/i,h=Math.abs(t.b[1]-t.a[1])/s;l={id:a,kind:t.kind,x:e,y:o,w:c,h:h,...cr(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=a,this._recordGeometry(this._t("history.decor_add"),o),this._saveConfig(),this.requestUpdate()}_decorShapeDown(t,e){if("decor"!==this._mode)return;const i=this._decorTool;if("text"===i){if("text"!==e.kind)return;return t.stopPropagation(),t.preventDefault(),void this._decorOpenText(e)}"select"!==i&&"erase"!==i||(t.stopPropagation(),t.preventDefault(),"erase"!==i?(this._decorSel=e.id,this._decorMove={id:e.id,start:this._svgPoint(t),orig:JSON.parse(JSON.stringify(e)),pid:t.pointerId,moved:!1,before:this._geometrySnapshot()},H_(t)):this._decorEraseConfirm={id:e.id,kind:e.kind})}_decorMoveUpdate(t){const e=this._decorMove;if("furniture"===e.orig?.kind)return void this._furnMoveUpdate(t);const i=this._svgPoint(t),s=e.orig,n=("line"===s.kind?s.x1:s.x)*P_,o=("line"===s.kind?s.y1:s.y)*this._decorH,a=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let r=(a[0]-n)/P_,l=(a[1]-o)/this._decorH;const c=e.orig,h="line"===c.kind?Math.min(c.x1,c.x2):c.x,d="line"===c.kind?Math.min(c.y1,c.y2):c.y,u="line"===c.kind?Math.abs(c.x2-c.x1):c.w||0,p="line"===c.kind?Math.abs(c.y2-c.y1):c.h||0,_=Yl;r=Math.max(-_-h,Math.min(_-h-u,r)),l=Math.max(-_-d,Math.min(_-d-p,l)),(r||l)&&(e.moved=!0);this._curSpaceCfg.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i=e.orig;return"line"===t.kind?{...t,x1:i.x1+r,y1:i.y1+l,x2:i.x2+r,y2:i.y2+l}:{...t,x:i.x+r,y:i.y+l}}),this.requestUpdate()}_decorShapeDbl(t,e){"decor"===this._mode&&"select"===this._decorTool&&(t.preventDefault(),t.stopPropagation(),this._decorMove=null,this._decorSel=e.id,this._openDecorProperties(e))}_openDecorProperties(t){if("decor"!==this._mode||"select"!==this._decorTool)return;if("text"===t.kind)return void this._decorOpenText(t);if(!["line","rect","ellipse","furniture"].includes(t.kind))return;const e=this._decorResolvedStyle(t),i="line"===t.kind?t:null,s=this._decorBoxOf(t);this._decorShapeDialog={id:t.id,kind:t.kind,color:e.color,opacity:e.opacity,widthCm:e.widthCm,angle:this._angleField(nr(i?zs([i.x1*P_,i.y1*this._decorH],[i.x2*P_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*P_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:rr(s.w,this._cellCm,this._gridPitch),sizeHCm:rr(s.h,this._cellCm,this._gridPitch)}:{},..."furniture"===t.kind?{symbol:t.symbol}:{},..."rect"===t.kind||"ellipse"===t.kind?{fill:e.fill,fillColor:e.fillColor,fillOpacity:e.fillOpacity}:{}}}_decorOpenText(t){if("text"!==t.kind)return;let e=String(t.text??"");const i=[...e.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Yi(t.entity,n),a=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!a){const t=e.indexOf("{}");e=t>=0?e.slice(0,t)+o+e.slice(t+2):`${e}${e?" ":""}${o}`}this._decorTextDialog={id:t.id,x:t.x,y:t.y,text:e,color:Rt(t.color,this._decorStyle.color),opacity:sr(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:a||void 0},this._decorTextSelection={start:e.length,end:e.length}}_decorRememberTextSelection(t){this._decorTextSelection={start:t.selectionStart??t.value.length,end:t.selectionEnd??t.value.length}}_decorInsertLiveVariable(t){const e=this._decorTextDialog;if(!e)return;const i=Yi(e.pickerEntity,t);if(!i)return;const s=e.text,n=Math.max(0,Math.min(s.length,this._decorTextSelection.start)),o=Math.max(n,Math.min(s.length,this._decorTextSelection.end));if(s.length-(o-n)+i.length>200)return;const a=s.slice(0,n)+i+s.slice(o),r=n+i.length;this._decorTextSelection={start:r,end:r},this._decorTextDialog={...e,text:a,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(r,r))})}_decorSaveText(){const t=this._decorTextDialog,e=String(t?.text??"").replace(/\r\n?/g,"\n").trim();if(!t||!e)return void(this._decorTextDialog=null);const i=this._geometrySnapshot(),s=this._curSpaceCfg,n={color:t.color,opacity:sr(t.opacity),size_cm:Number(Math.max(.1,Math.min(__,t.sizeCm)).toFixed(4)),...nr(t.angle)?{angle:nr(t.angle)}:{}};if(t.id)s.decor=this._decorList.map(i=>{if(i.id!==t.id)return i;if("text"!==i.kind)return i;if(t.preserveLegacy){const{angle:t,size:s,scale:o,...a}=i;return{...a,text:e,...n}}const{entity:s,attr:o,unit:a,...r}=i,{angle:l,size:c,scale:h,...d}=r;return{...d,text:e,...n}});else{const i="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5);s.decor=[...this._decorList,{id:i,kind:"text",x:t.x,y:t.y,text:e,...n}],this._decorSel=i}this._decorTextDialog=null,this._recordGeometry(this._t(t.id?"history.decor_edit":"history.decor_add"),i),this._saveConfig(),this.requestUpdate()}_decorSaveShape(){const t=this._decorShapeDialog;if(!t)return;const e=this._geometrySnapshot(),i={color:t.color,opacity:sr(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:sr(t.fillOpacity,.25)};this._curSpaceCfg.decor=this._decorList.map(e=>{if(e.id!==t.id)return e;const s="rect"===t.kind||"ellipse"===t.kind,n=cr(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*P_,s=(e.y1+e.y2)/2*this._decorH,o=ar(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),a=nr(t.angle)*Math.PI/180,r=Math.cos(a)*o/2,l=Math.sin(a)*o/2,c=this._snap([i-r,s-l]),h=this._snap([i+r,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:sc(c[0]/P_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/P_),y2:sc(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*P_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(ar(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),a=Math.max(this._gridPitch,ai(ar(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),r=e.x*P_+i/2,l=e.y*this._decorH+s/2,c=nr(t.angle),h=or({x:r-o/2,y:l-a/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:sc(h[0]/P_),y:sc(h[1]/this._decorH),w:o/P_,h:a/this._decorH,..."furniture"===e.kind&&t.symbol?{symbol:t.symbol}:{},...c?{angle:c}:{}}}return e}),this._decorStyle={...i,fill:"rect"===t.kind||"ellipse"===t.kind?i.fill:this._decorStyle.fill,fillColor:"rect"===t.kind||"ellipse"===t.kind?i.fillColor:this._decorStyle.fillColor,fillOpacity:"rect"===t.kind||"ellipse"===t.kind?i.fillOpacity:this._decorStyle.fillOpacity},this._decorShapeDialog=null,this._recordGeometry(this._t("history.decor_edit"),e),this._saveConfig(),this.requestUpdate()}get _dtSel(){return"decor"===this._mode&&"select"===this._decorTool&&this._decorSel&&this._decorList.find(t=>t.id===this._decorSel)||null}_dtPivot(t){return"line"===t.kind?[(t.x1+t.x2)/2*P_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*P_,(t.y+t.h/2)*this._decorH]:[t.x*P_,t.y*this._decorH]}_dtApply(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const s={...i};"text"===i.kind&&void 0!==e.textSizeCm&&(delete s.size,delete s.scale);const n={...s};return void 0!==e.textSizeCm&&(n.size_cm=Number(Math.max(.1,Math.min(__,e.textSizeCm)).toFixed(4))),void 0!==e.angle&&(e.angle?n.angle=Number(e.angle.toFixed(2)):delete n.angle),n}),this._cfgEpoch++,this.requestUpdate())}_dtStart(t,e,i,s){const n=this._dtSel;if(!n)return;t.stopPropagation(),t.preventDefault();const[o,a]=this._dtPivot(n),r=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:a,r0:Math.hypot(r[0]-o,r[1]-a),a0:180*Math.atan2(r[1]-a,r[0]-o)/Math.PI,textSizeCm0:"text"===n.kind?this._decorTextSizeCm(n):1,angle0:"line"===n.kind?0:Number(n.angle)||0,sgx:i?.[0],sgy:i?.[1],orig:l||void 0,origShape:JSON.parse(JSON.stringify(n)),before:this._geometrySnapshot(),lineEnd:s,moved:!1},H_(t)}_dtMove(t){const e=this._dtDrag;if(!e)return;const i=this._svgPoint(t);if(void 0!==e.lineEnd&&"line"===e.origShape.kind){const s=this._decorSnap(i,t.pointerType,e.id),n=sc(s[0]/P_),o=sc(s[1]/this._decorH),a=e.origShape,r=0===e.lineEnd?a.x1:a.x2,l=0===e.lineEnd?a.y1:a.y2;return(Math.abs(n-r)>1e-9||Math.abs(o-l)>1e-9)&&(e.moved=!0),void this._replaceDecor(e.id,0===e.lineEnd?{x1:n,y1:o}:{x2:n,y2:o})}if("scale"===e.kind&&e.orig){const s=ur(e.orig,e.sgx??1,e.sgy??1,i[0],i[1],!t.shiftKey,this._gridPitch,this._gridPitch),n=Math.abs(s.x-e.orig.x)>1e-6||Math.abs(s.y-e.orig.y)>1e-6||Math.abs(s.w-e.orig.w)>1e-6||Math.abs(s.h-e.orig.h)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._decorApplyBox(e.id,s)}if("scale"===e.kind){const t=Math.hypot(i[0]-e.ax,i[1]-e.ay);if(e.r0<1e-6)return;const s=Math.max(.1,Math.min(__,e.textSizeCm0*(t/e.r0))),n=Math.abs(s-e.textSizeCm0)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._dtApply(e.id,{textSizeCm:s})}const s=180*Math.atan2(i[1]-e.ay,i[0]-e.ax)/Math.PI;let n=e.angle0+(s-e.a0);t.shiftKey||(n=5*Math.round(n/5)),n=(n%360+360)%360,n>180&&(n-=360);const o=Math.abs(n-e.angle0)>1e-6;(o||e.moved)&&(e.moved||=o,this._dtApply(e.id,{angle:n}))}_dtUp(){const t=this._dtDrag;this._dtDrag=null,t?.moved&&(this._recordGeometry(this._t("history.decor_transform"),t.before),this._saveConfig()),this.requestUpdate()}_dtMeasure(){const t=this._dtSel;if(!t)return void(this._dtBox&&(this._dtBox=null,this.requestUpdate()));let e;if("line"===t.kind){const i=t.x1*P_,s=t.y1*this._decorH,n=t.x2*P_,o=t.y2*this._decorH;e={id:t.id,x:Math.min(i,n),y:Math.min(s,o),w:Math.abs(n-i),h:Math.abs(o-s)}}else if("furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind)e={id:t.id,x:t.x*P_,y:t.y*this._decorH,w:t.w*P_,h:t.h*this._decorH};else{const i=this.renderRoot.querySelector(`text.dtext[data-id="${t.id}"]`);if(!i||"function"!=typeof i.getBBox)return;let s;try{s=i.getBBox()}catch{return}if(!s||!s.width&&!s.height)return;e={id:t.id,x:s.x,y:s.y,w:s.width,h:s.height}}const i=this._dtBox;i&&i.id===e.id&&Math.abs(i.x-e.x)<.01&&Math.abs(i.y-e.y)<.01&&Math.abs(i.w-e.w)<.01&&Math.abs(i.h-e.h)<.01||(this._dtBox=e,this.requestUpdate())}_deleteDecor(t){if(!this._decorList.some(e=>e.id===t))return;const e=this._geometrySnapshot();this._curSpaceCfg.decor=this._decorList.filter(e=>e.id!==t),this._decorSel===t&&(this._decorSel=null),this._recordGeometry(this._t("history.decor_delete"),e),this._saveConfig(),this.requestUpdate()}_decorDeleteSel(){this._decorSel&&this._deleteDecor(this._decorSel)}_confirmDecorErase(){const t=this._decorEraseConfirm;this._decorEraseConfirm=null,t&&this._deleteDecor(t.id)}get _furnWalls(){const t=this._rawPhysicalBodiesR().flatMap(t=>t.map((e,i)=>{const s=t[(i+1)%t.length];return[e[0],e[1],s[0],s[1]]}));return[...this._segments,...t]}get _furnWallReach(){return 6*this._gridPitch}_furnFieldValue(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_furnFieldToCm(t){return e=this._imperial?30.48*t:100*t,Number.isFinite(e)?Math.max(1,Math.min(1e4,e)):1;var e}_furnPick(t){const e=function(t){const e=xc(t);return e?{w:e.w,h:e.h}:{w:60,h:60}}(t);this._furnPalette={symbol:t,w:e.w,h:e.h}}_furnPlace(t,e=!1){const i=this._furnPalette,s=this._curSpaceCfg;if(!i||!s)return;const n=P_,o=this._decorH,a=Dc(Sc(i.w,this._cellCm,this._gridPitch,n)),r=Dc(Sc(i.h,this._cellCm,this._gridPitch,n)),l=this._geometrySnapshot(),c=this._decorSnap(t);let h=c[0],d=c[1],u=0;const p=e?null:Ac(h,d,r*o,this._furnWalls,this._furnWallReach,this._gridPitch);p&&(h=p.cx,d=p.cy,u=p.angle);const _="df"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),g={id:_,kind:"furniture",symbol:i.symbol,x:sc(h/n-a/2),y:sc(d/o-r/2),w:a,h:r,...cr(this._decorStyle,!1)};u&&(g.angle=Number(u.toFixed(2))),s.decor=[...this._decorList,g],this._decorSel=_,this._decorTool="select",this._furnPalette=null,this._recordGeometry(this._t("history.decor_add"),l),this._saveConfig(),this.requestUpdate()}_furnMoveUpdate(t){const e=this._decorMove;if("furniture"!==e.orig.kind)return;const i=e.orig,s=this._curSpaceCfg;if(!s)return;const n=P_,o=this._decorH,a=this._svgPoint(t),r=(i.x+i.w/2)*n+(a[0]-e.start[0]),l=(i.y+i.h/2)*o+(a[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Ac(r,l,i.h*o,this._furnWalls,this._furnWallReach,this._gridPitch);if(u)c=u.cx/n-i.w/2,h=u.cy/o-i.h/2,d=u.angle;else{const s=this._decorSnap([r-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=sc(c),h=sc(h),(Math.abs(c-i.x)>1e-9||Math.abs(h-i.y)>1e-9||Math.abs(d-(Number(i.angle)||0))>1e-9)&&(e.moved=!0),s.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i={...t,x:c,y:h};return d?i.angle=Number(d.toFixed(2)):delete i.angle,i}),this.requestUpdate()}_decorApplyBox(t,e){const i=this._curSpaceCfg;if(!i)return;const s=P_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=or(e,i.angle,t=>this._snap(t));return{...i,x:sc(o[0]/s),y:sc(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Yl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Yl,e.h/n))}}),this._cfgEpoch++,this.requestUpdate()}get _furnLive(){const t=this._dtDrag;if(!t||"scale"!==t.kind||!t.orig)return null;const e=this._decorList.find(e=>e.id===t.id);if(!e||"furniture"!==e.kind)return null;const i=P_,s=this._decorH,n=e.w*i,o=e.h*s,a=function(t,e,i,s,n){const o=t+i/2,a=e+s/2,r=(Number(n)||0)*Math.PI/180,l=Math.cos(r),c=Math.sin(r),h=(t,e)=>{const i=t-o,s=e-a;return[o+i*l-s*c,a+i*c+s*l]};return[h(t,e),h(t+i,e),h(t+i,e+s),h(t,e+s)]}(e.x*i,e.y*s,n,o,Number(e.angle)||0),r=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=r(a[0],a[1]),c=r(a[0],a[3]);return[{x:l[0],y:l[1],text:this._fmtLen([0,0],[n,0])},{x:c[0],y:c[1],text:this._fmtLen([0,0],[0,o])}]}_renderFurnPalette(){const t=this._furnPalette,e=this._t(this._imperial?"gs.unit_ft":"gs.unit_m");return j`
t.stopPropagation()}>
${this._t("furn.title")} @@ -4791,7 +4808,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 @input=${e=>this._furnPalette={...t,h:this._furnFieldToCm(Number(e.target.value))}} /> ${this._t("furn.place_hint")}
`:j`
${this._t("furn.pick_hint")}
`} -
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,T_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,T_):null}get _bdParams(){const t=this._curSpaceCfg,e=Number(t?.plan_x),i=Number(t?.plan_y),s=Number(t?.plan_scale),n=Number(t?.plan_scale_x),o=Number(t?.plan_scale_y),a=Number.isFinite(s)&&s>0?s:1;return{dx:Number.isFinite(e)?e:0,dy:Number.isFinite(i)?i:0,sx:Number.isFinite(n)&&n>0?n:a,sy:Number.isFinite(o)&&o>0?o:a,angle:nr(t?.plan_angle)}}_openBackdropDialog(t){if(!this._bdMovable||!this._bdRect)return;t?.preventDefault(),t?.stopPropagation(),this._bdDrag=null;const e=this._bdRect;this._backdropDialog={widthCm:rr(e.w,this._cellCm,this._gridPitch),heightCm:rr(e.h,this._cellCm,this._gridPitch),angle:this._angleField(e.angle)}}_saveBackdropDialog(){const t=this._backdropDialog,e=this._bdBase,i=this._bdRect;if(!t||!e||!i)return;const s=nr(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Ul,Math.max(e.w*Wl,ai(ar(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),a=Math.min(e.h*Ul,Math.max(e.h*Wl,ai(ar(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),r=or({x:i.x+i.w/2-o/2,y:i.y+i.h/2-a/2},s,t=>this._snap(t));this._bdApply((r[0]-e.x)/T_,(r[1]-e.y)/T_,o/e.w,a/e.h,s),this._backdropDialog=null,this._recordGeometry(this._t("history.backdrop_transform"),n),this._saveConfig()}get _bdActive(){return"decor"===this._mode&&!!this._bdRect&&"backdrop"===this._decorTool}get _bdMovable(){return"decor"===this._mode&&"backdrop"===this._decorTool&&!!this._bdRect}_bdApply(t,e,i,s,n){const o=this._curSpaceCfg;if(!o)return;o.plan_x=Number(sc(t).toFixed(6)),o.plan_y=Number(sc(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Ul,Math.max(Wl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Ul,Math.max(Wl,s)).toFixed(6));const a=nr(n);a?o.plan_angle=Number(a.toFixed(2)):delete o.plan_angle,this._cfgEpoch++,this.requestUpdate()}_bdStart(t,e,i=!1){const s=this._bdBase,n=this._bdRect;if(!s||!n)return!1;const o=this._svgPoint(t),a=e?e[0]:0,r=e?e[1]:0,l=a>0?n.x:n.x+n.w,c=r>0?n.y:n.y+n.h;return this._bdDrag={kind:i?"rotate":e?"scale":"move",pid:t.pointerId,sx:o[0],sy:o[1],base:s,p0:this._bdParams,fx:l,fy:c,sgx:a,sgy:r,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},O_(t),!0}_bdMove(t){const e=this._bdDrag;if(!e)return;const i=this._svgPoint(t),s=e.base;if("move"===e.kind){const t=e.rect0.x,n=e.rect0.y,o=this._snap([t+(i[0]-e.sx),n+(i[1]-e.sy)]),a=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply((o[0]-s.x)/T_,(o[1]-s.y)/T_,e.p0.sx,e.p0.sy,e.p0.angle)}if("rotate"===e.kind){const s=e.rect0.x+e.rect0.w/2,n=e.rect0.y+e.rect0.h/2,o=180*Math.atan2(e.sy-n,e.sx-s)/Math.PI;let a=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(a=5*Math.round(a/5)),a=nr(a);const r=Math.abs(a-e.p0.angle)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,a)}const n=ur(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*Wl),o=n.w/Math.max(1e-9,s.w),a=n.h/Math.max(1e-9,s.h),r=Math.abs(o-e.p0.sx)>1e-9||Math.abs(a-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!r&&!e.moved)return;e.moved||=r;const l=or(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/T_,(l[1]-s.y)/T_,o,a,e.p0.angle)}get _bdMoved(){if("decor"!==this._mode||!this._bdRect)return!1;const t=this._bdParams;return 0!==t.dx||0!==t.dy||1!==t.sx||1!==t.sy||0!==t.angle}_bdReset(){const t=this._curSpaceCfg;if(!t)return;const e=this._geometrySnapshot();delete t.plan_x,delete t.plan_y,delete t.plan_scale,delete t.plan_scale_x,delete t.plan_scale_y,delete t.plan_angle,this._bdDrag=null,this._recordGeometry(this._t("history.backdrop_transform"),e),this._saveConfig(),this._showToast(this._t("decor.backdrop_reset_done")),this.requestUpdate()}_bdUp(){const t=this._bdDrag;this._bdDrag=null,t?.moved&&(this._recordGeometry(this._t("history.backdrop_transform"),t.before),this._saveConfig()),this.requestUpdate()}get _bdLive(){if(!this._bdDrag)return null;const t=this._bdRect;return t?{x:t.x+t.w/2,y:t.y+t.h/2,text:`${this._fmtLen([0,0],[t.w,0])} × ${this._fmtLen([0,0],[0,t.h])}`}:null}_renderBackdropFrame(t){const e=this._bdRect;if(!this._bdActive||!e)return G;const i=.02*Math.max(t.w,t.h),s=i/4,n=e.x+e.w/2,o=e.y+e.h/2,a=nr(e.angle),r=2.2*i;return W` +
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,P_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,P_):null}get _bdParams(){const t=this._curSpaceCfg,e=Number(t?.plan_x),i=Number(t?.plan_y),s=Number(t?.plan_scale),n=Number(t?.plan_scale_x),o=Number(t?.plan_scale_y),a=Number.isFinite(s)&&s>0?s:1;return{dx:Number.isFinite(e)?e:0,dy:Number.isFinite(i)?i:0,sx:Number.isFinite(n)&&n>0?n:a,sy:Number.isFinite(o)&&o>0?o:a,angle:nr(t?.plan_angle)}}_openBackdropDialog(t){if(!this._bdMovable||!this._bdRect)return;t?.preventDefault(),t?.stopPropagation(),this._bdDrag=null;const e=this._bdRect;this._backdropDialog={widthCm:rr(e.w,this._cellCm,this._gridPitch),heightCm:rr(e.h,this._cellCm,this._gridPitch),angle:this._angleField(e.angle)}}_saveBackdropDialog(){const t=this._backdropDialog,e=this._bdBase,i=this._bdRect;if(!t||!e||!i)return;const s=nr(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Ul,Math.max(e.w*Wl,ai(ar(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),a=Math.min(e.h*Ul,Math.max(e.h*Wl,ai(ar(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),r=or({x:i.x+i.w/2-o/2,y:i.y+i.h/2-a/2},s,t=>this._snap(t));this._bdApply((r[0]-e.x)/P_,(r[1]-e.y)/P_,o/e.w,a/e.h,s),this._backdropDialog=null,this._recordGeometry(this._t("history.backdrop_transform"),n),this._saveConfig()}get _bdActive(){return"decor"===this._mode&&!!this._bdRect&&"backdrop"===this._decorTool}get _bdMovable(){return"decor"===this._mode&&"backdrop"===this._decorTool&&!!this._bdRect}_bdApply(t,e,i,s,n){const o=this._curSpaceCfg;if(!o)return;o.plan_x=Number(sc(t).toFixed(6)),o.plan_y=Number(sc(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Ul,Math.max(Wl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Ul,Math.max(Wl,s)).toFixed(6));const a=nr(n);a?o.plan_angle=Number(a.toFixed(2)):delete o.plan_angle,this._cfgEpoch++,this.requestUpdate()}_bdStart(t,e,i=!1){const s=this._bdBase,n=this._bdRect;if(!s||!n)return!1;const o=this._svgPoint(t),a=e?e[0]:0,r=e?e[1]:0,l=a>0?n.x:n.x+n.w,c=r>0?n.y:n.y+n.h;return this._bdDrag={kind:i?"rotate":e?"scale":"move",pid:t.pointerId,sx:o[0],sy:o[1],base:s,p0:this._bdParams,fx:l,fy:c,sgx:a,sgy:r,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},H_(t),!0}_bdMove(t){const e=this._bdDrag;if(!e)return;const i=this._svgPoint(t),s=e.base;if("move"===e.kind){const t=e.rect0.x,n=e.rect0.y,o=this._snap([t+(i[0]-e.sx),n+(i[1]-e.sy)]),a=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply((o[0]-s.x)/P_,(o[1]-s.y)/P_,e.p0.sx,e.p0.sy,e.p0.angle)}if("rotate"===e.kind){const s=e.rect0.x+e.rect0.w/2,n=e.rect0.y+e.rect0.h/2,o=180*Math.atan2(e.sy-n,e.sx-s)/Math.PI;let a=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(a=5*Math.round(a/5)),a=nr(a);const r=Math.abs(a-e.p0.angle)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,a)}const n=ur(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*Wl),o=n.w/Math.max(1e-9,s.w),a=n.h/Math.max(1e-9,s.h),r=Math.abs(o-e.p0.sx)>1e-9||Math.abs(a-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!r&&!e.moved)return;e.moved||=r;const l=or(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/P_,(l[1]-s.y)/P_,o,a,e.p0.angle)}get _bdMoved(){if("decor"!==this._mode||!this._bdRect)return!1;const t=this._bdParams;return 0!==t.dx||0!==t.dy||1!==t.sx||1!==t.sy||0!==t.angle}_bdReset(){const t=this._curSpaceCfg;if(!t)return;const e=this._geometrySnapshot();delete t.plan_x,delete t.plan_y,delete t.plan_scale,delete t.plan_scale_x,delete t.plan_scale_y,delete t.plan_angle,this._bdDrag=null,this._recordGeometry(this._t("history.backdrop_transform"),e),this._saveConfig(),this._showToast(this._t("decor.backdrop_reset_done")),this.requestUpdate()}_bdUp(){const t=this._bdDrag;this._bdDrag=null,t?.moved&&(this._recordGeometry(this._t("history.backdrop_transform"),t.before),this._saveConfig()),this.requestUpdate()}get _bdLive(){if(!this._bdDrag)return null;const t=this._bdRect;return t?{x:t.x+t.w/2,y:t.y+t.h/2,text:`${this._fmtLen([0,0],[t.w,0])} × ${this._fmtLen([0,0],[0,t.h])}`}:null}_renderBackdropFrame(t){const e=this._bdRect;if(!this._bdActive||!e)return G;const i=.02*Math.max(t.w,t.h),s=i/4,n=e.x+e.w/2,o=e.y+e.h/2,a=nr(e.angle),r=2.2*i;return W` {e.stopPropagation(),e.preventDefault(),this._bdStart(e,[t,n])}}>`})} - `}_renderTextFrame(t){const e=this._dtSel,i=this._dtBox;if(!e||!i||i.id!==e.id)return G;const s=.018*Math.max(t.w,t.h),n=s/4;if("line"===e.kind){const t=[e.x1*T_,e.y1*this._decorH],i=[e.x2*T_,e.y2*this._decorH];return W` + `}_renderTextFrame(t){const e=this._dtSel,i=this._dtBox;if(!e||!i||i.id!==e.id)return G;const s=.018*Math.max(t.w,t.h),n=s/4;if("line"===e.kind){const t=[e.x1*P_,e.y1*this._decorH],i=[e.x2*P_,e.y2*this._decorH];return W` ${[t,i].map((t,e)=>W`this._dtStart(t,"scale",void 0,e)}> @@ -4816,7 +4833,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 cx="${t<0?i.x:i.x+i.w}" cy="${e<0?i.y:i.y+i.h}" r="${s.toFixed(1)}" @pointerdown=${i=>this._dtStart(i,"scale",[t,e])}>`)} - `}_renderDecorLayer(){const t=T_,e=this._decorH,i="decor"===this._mode,s=i&&"erase"===this._decorTool,n=this._decorList.map(n=>{const o="dshape"+(i&&this._decorSel===n.id?" dsel":""),a=this._decorResolvedStyle(n),r=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W``}_renderDecorLayer(){const t=P_,e=this._decorH,i="decor"===this._mode,s=i&&"erase"===this._decorTool,n=this._decorList.map(n=>{const o="dshape"+(i&&this._decorSel===n.id?" dsel":""),a=this._decorResolvedStyle(n),r=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W`
this._decorTextDialog={...t,sizeCm:this._decorTextCm(Number(e.target.value))}} /> ${this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}
@@ -5071,7 +5088,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
- `}_cssPxToRender(t){const e=this._stageEl,i=this._viewOr(this._baseVb());return e?.clientWidth&&e.clientHeight?Math.max(i.w/e.clientWidth,i.h/e.clientHeight)*t:this._gridPitch/8*t}get _boundaryCoarse(){return"touch"===this._boundaryPointerType||"pen"===this._boundaryPointerType}_boundaryTolerances(){return{hit:this._cssPxToRender(this._boundaryCoarse?22:12),cap:this._cssPxToRender(this._boundaryCoarse?10:6),ambiguity:this._cssPxToRender(6)}}_boundaryBlocked(t,e){const i=this._spaceModel();if(!i)return!1;const s=i=>Hl(t,i)||i.some((s,n)=>{const o=i[(n+1)%i.length];return Ns(t,[s[0],s[1],o[0],o[1]])<=e});for(const t of i.wall_columns||[])if(s(Pl(t,this._cellCm,this._gridPitch)))return!0;for(const s of i.partitions||[]){const i=vr(s.cm,this._cellCm,this._gridPitch)/2;if(Ns(t,[s.a[0],s.a[1],s.b[0],s.b[1]])<=Math.max(e,i))return!0}for(const s of i.room_drafts||[])for(let i=0;i+10?vr(n,this._cellCm,this._gridPitch)/2:0)}_boundaryTargetAt(t){const e=this._viewOr(this._baseVb()),i=this._stageEl,s=[this._space,this._cfgEpoch,t[0],t[1],this._boundaryPointerType,e.x,e.y,e.w,e.h,i?.clientWidth||0,i?.clientHeight||0].join("|");if(this._boundaryTargetMemo?.key===s)return this._boundaryTargetMemo.value;const n=this._boundaryTolerances(),o=this._openCuts(),a=this._spaceModel();if(!a)return{kind:"none"};let r=function(t,e,i,s){const{openPull:n,openEndCap:o,solidPull:a,ambiguity:r,eps:l}=s,c=Lc(e,l),h=[];for(const e of i||[]){const i=Wc(t,e,n,o);if(null==i)continue;const s=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=c.find(t=>Ns(s,t.seg)<=4*l);h.push({value:e,seg:e,semantic:a?.pair||`open:${e.join(",")}`,distance:i})}const d=Gc(h,r,l);if("ambiguous"===d)return{kind:"ambiguous",group:"open"};if(d)return{kind:"open",seg:d.value,distance:d.distance};const u=[];for(const e of c){const i=Wc(t,e.seg,a(e.seg));null!=i&&u.push({value:e,seg:e.seg,semantic:e.pair,distance:i})}const p=Gc(u,r,l);if("ambiguous"===p)return{kind:"ambiguous",group:"shared"};if(p)return{kind:"shared",a:p.value.a,b:p.value.b,edge:p.value.seg,distance:p.distance};const _=[];for(const i of e||[]){if(!i?.id)continue;const e=ci(i);if(e)for(let s=0;sNs(d,t.seg)<=4*l)||_.push({value:{room:i,edge:r},seg:r,semantic:String(i.id),distance:h})}}const g=Gc(_,r,l);return"ambiguous"===g?{kind:"ambiguous",group:"outer"}:g?{kind:"outer",...g.value,distance:g.distance}:{kind:"none"}}(t,a.rooms,o,{openPull:n.hit,openEndCap:n.cap,ambiguity:n.ambiguity,eps:.02*this._gridPitch,solidPull:t=>this._solidBoundaryPull(t,o)});return"shared"!==r.kind&&"open"!==r.kind||!this._boundaryBlocked(t,n.hit)||(r={kind:"blocked"}),this._boundaryTargetMemo={key:s,value:r},r}get _boundaryTarget(){return this._markup&&"boundary"===this._tool&&this._cursorPt?this._boundaryTargetAt(this._cursorPt):null}get _boundaryPreview(){const t=this._viewOr(this._baseVb()),e=this._stageEl,i=this._cursorPt,s=this._openWallAnchor,n=[this._markup,this._tool,this._space,this._cfgEpoch,this._boundaryPointerType,i?.[0]??"none",i?.[1]??"none",s?.p?.[0]??"none",s?.p?.[1]??"none",s?.edge?.join(",")??"none",s?.aId??"none",s?.bId??"none",t.x,t.y,t.w,t.h,e?.clientWidth||0,e?.clientHeight||0].join("|");if(this._boundaryPreviewMemo?.key===n)return this._boundaryPreviewMemo.value;const o=t=>(this._boundaryPreviewMemo={key:n,value:t},t);if(!this._markup||"boundary"!==this._tool)return o(null);if(s&&!i)return o({kind:"anchor",point:[...s.p]});if(!i)return o(null);const a=this._openCuts(),r=.02*this._gridPitch;if(s){const{p:t,edge:e}=s,n=Nc(Hc(i,e,Kc(e,a,r),this._gridPitch,1.5*this._gridPitch),e),l=this._boundaryBlocked(i,this._boundaryTolerances().hit)||Ns(i,e)>this._solidBoundaryPull(e,a);return o({kind:"range",seg:[t[0],t[1],n[0],n[1]],invalid:l})}const l=this._boundaryTargetAt(i);if("shared"===l.kind){return o({kind:"anchor",point:Hc(i,l.edge,Kc(l.edge,a,r),this._gridPitch,1.5*this._gridPitch)})}if("open"===l.kind){const t=this._planClosedOpenSpan(l.seg),e=t?Tl([l.seg[0],l.seg[1]],[l.seg[2],l.seg[3]],t.cm,this._cellCm,this._gridPitch):null;return o({kind:"restore",seg:l.seg,body:e})}return"blocked"===l.kind||"ambiguous"===l.kind||"outer"===l.kind?o({kind:"invalid",point:i}):o(null)}get _boundaryHintKey(){if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?"markup.boundary_hint_retry":"markup.boundary_hint_second"}const t=this._boundaryTarget;return t&&"none"!==t.kind?"open"===t.kind?"markup.boundary_hint_restore":"shared"===t.kind?"markup.boundary_hint_open":"outer"===t.kind?"markup.boundary_hint_outer":"blocked"===t.kind?"markup.boundary_hint_blocked":"markup.boundary_hint_ambiguous":"markup.boundary_hint"}get _boundaryStageClass(){if(!this._markup||"boundary"!==this._tool)return"";if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?" boundary-invalid":" boundary-solid"}const t=this._boundaryTarget;return"open"===t?.kind?" boundary-open":"shared"===t?.kind?" boundary-solid":t&&"none"!==t.kind?" boundary-invalid":""}_renderOpenWalls(t){if(t&&!t.showBorders&&!this._editing)return W``;const e=this._openCuts(),i=this._boundaryPreview;if(!e.length&&!i)return W``;const s=(t,e=!1)=>e?W` + `}_cssPxToRender(t){const e=this._stageEl,i=this._viewOr(this._baseVb());return e?.clientWidth&&e.clientHeight?Math.max(i.w/e.clientWidth,i.h/e.clientHeight)*t:this._gridPitch/8*t}get _boundaryCoarse(){return"touch"===this._boundaryPointerType||"pen"===this._boundaryPointerType}_boundaryTolerances(){return{hit:this._cssPxToRender(this._boundaryCoarse?22:12),cap:this._cssPxToRender(this._boundaryCoarse?10:6),ambiguity:this._cssPxToRender(6)}}_boundaryBlocked(t,e){const i=this._spaceModel();if(!i)return!1;const s=i=>Nl(t,i)||i.some((s,n)=>{const o=i[(n+1)%i.length];return Hs(t,[s[0],s[1],o[0],o[1]])<=e});for(const t of i.wall_columns||[])if(s(Pl(t,this._cellCm,this._gridPitch)))return!0;for(const s of i.partitions||[]){const i=vr(s.cm,this._cellCm,this._gridPitch)/2;if(Hs(t,[s.a[0],s.a[1],s.b[0],s.b[1]])<=Math.max(e,i))return!0}for(const s of i.room_drafts||[])for(let i=0;i+10?vr(n,this._cellCm,this._gridPitch)/2:0)}_boundaryTargetAt(t){const e=this._viewOr(this._baseVb()),i=this._stageEl,s=[this._space,this._cfgEpoch,t[0],t[1],this._boundaryPointerType,e.x,e.y,e.w,e.h,i?.clientWidth||0,i?.clientHeight||0].join("|");if(this._boundaryTargetMemo?.key===s)return this._boundaryTargetMemo.value;const n=this._boundaryTolerances(),o=this._openCuts(),a=this._spaceModel();if(!a)return{kind:"none"};let r=function(t,e,i,s){const{openPull:n,openEndCap:o,solidPull:a,ambiguity:r,eps:l}=s,c=Lc(e,l),h=[];for(const e of i||[]){const i=Wc(t,e,n,o);if(null==i)continue;const s=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=c.find(t=>Hs(s,t.seg)<=4*l);h.push({value:e,seg:e,semantic:a?.pair||`open:${e.join(",")}`,distance:i})}const d=Gc(h,r,l);if("ambiguous"===d)return{kind:"ambiguous",group:"open"};if(d)return{kind:"open",seg:d.value,distance:d.distance};const u=[];for(const e of c){const i=Wc(t,e.seg,a(e.seg));null!=i&&u.push({value:e,seg:e.seg,semantic:e.pair,distance:i})}const p=Gc(u,r,l);if("ambiguous"===p)return{kind:"ambiguous",group:"shared"};if(p)return{kind:"shared",a:p.value.a,b:p.value.b,edge:p.value.seg,distance:p.distance};const _=[];for(const i of e||[]){if(!i?.id)continue;const e=ci(i);if(e)for(let s=0;sHs(d,t.seg)<=4*l)||_.push({value:{room:i,edge:r},seg:r,semantic:String(i.id),distance:h})}}const g=Gc(_,r,l);return"ambiguous"===g?{kind:"ambiguous",group:"outer"}:g?{kind:"outer",...g.value,distance:g.distance}:{kind:"none"}}(t,a.rooms,o,{openPull:n.hit,openEndCap:n.cap,ambiguity:n.ambiguity,eps:.02*this._gridPitch,solidPull:t=>this._solidBoundaryPull(t,o)});return"shared"!==r.kind&&"open"!==r.kind||!this._boundaryBlocked(t,n.hit)||(r={kind:"blocked"}),this._boundaryTargetMemo={key:s,value:r},r}get _boundaryTarget(){return this._markup&&"boundary"===this._tool&&this._cursorPt?this._boundaryTargetAt(this._cursorPt):null}get _boundaryPreview(){const t=this._viewOr(this._baseVb()),e=this._stageEl,i=this._cursorPt,s=this._openWallAnchor,n=[this._markup,this._tool,this._space,this._cfgEpoch,this._boundaryPointerType,i?.[0]??"none",i?.[1]??"none",s?.p?.[0]??"none",s?.p?.[1]??"none",s?.edge?.join(",")??"none",s?.aId??"none",s?.bId??"none",t.x,t.y,t.w,t.h,e?.clientWidth||0,e?.clientHeight||0].join("|");if(this._boundaryPreviewMemo?.key===n)return this._boundaryPreviewMemo.value;const o=t=>(this._boundaryPreviewMemo={key:n,value:t},t);if(!this._markup||"boundary"!==this._tool)return o(null);if(s&&!i)return o({kind:"anchor",point:[...s.p]});if(!i)return o(null);const a=this._openCuts(),r=.02*this._gridPitch;if(s){const{p:t,edge:e}=s,n=Hc(Nc(i,e,Kc(e,a,r),this._gridPitch,1.5*this._gridPitch),e),l=this._boundaryBlocked(i,this._boundaryTolerances().hit)||Hs(i,e)>this._solidBoundaryPull(e,a);return o({kind:"range",seg:[t[0],t[1],n[0],n[1]],invalid:l})}const l=this._boundaryTargetAt(i);if("shared"===l.kind){return o({kind:"anchor",point:Nc(i,l.edge,Kc(l.edge,a,r),this._gridPitch,1.5*this._gridPitch)})}if("open"===l.kind){const t=this._planClosedOpenSpan(l.seg),e=t?Tl([l.seg[0],l.seg[1]],[l.seg[2],l.seg[3]],t.cm,this._cellCm,this._gridPitch):null;return o({kind:"restore",seg:l.seg,body:e})}return"blocked"===l.kind||"ambiguous"===l.kind||"outer"===l.kind?o({kind:"invalid",point:i}):o(null)}get _boundaryHintKey(){if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?"markup.boundary_hint_retry":"markup.boundary_hint_second"}const t=this._boundaryTarget;return t&&"none"!==t.kind?"open"===t.kind?"markup.boundary_hint_restore":"shared"===t.kind?"markup.boundary_hint_open":"outer"===t.kind?"markup.boundary_hint_outer":"blocked"===t.kind?"markup.boundary_hint_blocked":"markup.boundary_hint_ambiguous":"markup.boundary_hint"}get _boundaryStageClass(){if(!this._markup||"boundary"!==this._tool)return"";if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?" boundary-invalid":" boundary-solid"}const t=this._boundaryTarget;return"open"===t?.kind?" boundary-open":"shared"===t?.kind?" boundary-solid":t&&"none"!==t.kind?" boundary-invalid":""}_renderOpenWalls(t){if(t&&!t.showBorders&&!this._editing)return W``;const e=this._openCuts(),i=this._boundaryPreview;if(!e.length&&!i)return W``;const s=(t,e=!1)=>e?W` `${t[0]} ${t[1]}`).join(" L ")} Z`}>`:G} ${"anchor"===i?.kind?s(i.point):"invalid"===i?.kind?s(i.point,!0):G} - `;var n}_openCuts(){const t=this._curSpaceCfg,e=this._spaceModel();return e?Bc(e.rooms,t?.open_spans,T_,.02*this._gridPitch):[]}_openPairs(){const t=this._openCuts();if(!t.length)return[];const e=(this._spaceModel()?.rooms||[]).filter(t=>t.id),i=.02*this._gridPitch,s=[];for(let n=0;n{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return l.some(t=>Ns(e,t)<4*i)});c.length&&s.push({a:e[n],b:e[o],segs:c})}return s}_commitOpenSpans(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch;this._cfgEpoch++;const n=i.rooms;let o=zc(e.open_spans);o.length&&t?.old.length?o=Xc(o,t.old,t.next,T_):o.length||(o=qc(Bc(n,null,T_,s),T_)),o=Yc(o,n,T_,s),this._persistOpenCuts(o.map(t=>Fc(t,T_)))}_persistOpenCuts(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch,n=Yc(qc(t,T_),i.rooms,T_,s),o=n.map(t=>Fc(t,T_));n.length?e.open_spans=n:delete e.open_spans,jc(e.rooms||[],i.rooms,o,s)}_planClosedOpenSpan(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return null;const s=.02*this._gridPitch,n=this._openCuts();let o=Array.isArray(e.walls)?e.walls.slice():[];for(const t of tl(i.rooms,o,n,this._wallKeyPitch,this._cellCm,this._gridPitch,T_))!t.open&&t.cm>0&&(o=Ir(o,t.a,t.b,t.cm,this._wallKeyPitch,T_));const a=function(t,e,i){const s=[(e[0]+e[2])/2,(e[1]+e[3])/2];return t.filter(t=>{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return Math.hypot(e[0]-s[0],e[1]-s[1])>4*i})}(n,t,s);let r=this._normalizeWalls(o,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);if(!(l>0)){const e=[];for(const t of tl(i.rooms,r,a,this._wallKeyPitch,this._cellCm,this._gridPitch,T_))t.open||e.push([t.a[0],t.a[1],t.b[0],t.b[1]]);r=Vc(r,t,e,this._wallKeyPitch,T_,_r),r=this._normalizeWalls(r,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)}return{cuts:a,walls:r,cm:l>0?l:_r}}_closeOpenSpan(t){const e=this._curSpaceCfg;if(!e)return;const i=this._geometrySnapshot(),s=this._planClosedOpenSpan(t);s&&(s.walls.length?e.walls=s.walls:delete e.walls,this._persistOpenCuts(s.cuts),this._showToast(this._t("toast.boundary_restored")),this._recordGeometry(this._t("history.close_boundary"),i),this._saveConfig(),this.requestUpdate())}_boundaryClick(t){const e=this._boundaryRestoreGuard;if(e&&Date.now()>e.until&&(this._boundaryRestoreGuard=null),e&&Date.now()<=e.until&&Math.hypot(t[0]-e.point[0],t[1]-e.point[1])<=this._boundaryTolerances().hit)return;const i=.02*this._gridPitch,s=this._openCuts();if(this._openWallAnchor){const{p:e,edge:l}=this._openWallAnchor;if(Ns(t,l)>this._solidBoundaryPull(l,s))return void this._showToast(this._t("toast.boundary_same_edge"));if(this._boundaryBlocked(t,this._boundaryTolerances().hit))return void this._showToast(this._t("toast.boundary_blocked"));const c=Nc(Hc(t,l,Kc(l,s,i),this._gridPitch,1.5*this._gridPitch),l),h=Math.hypot(c[0]-e[0],c[1]-e[1]);if(this._openWallAnchor=null,this._cursorPt=null,h<.5*this._gridPitch)return void this._showToast(this._t("toast.openwall_short"));const d=[e[0],e[1],c[0],c[1]],u=[...s,d],p=this._curSpaceCfg;if(!p)return;const _=this._geometrySnapshot(),g=this._normalizeWalls(p.walls,u);g.length?p.walls=g:delete p.walls;const m=(p.openings||[]).length;return p.openings=(n=p.openings,o=d,a=T_,r=6*this._gridPitch,n?.length?n.filter(t=>Ns([Number(t.x)*a,Number(t.y)*a],o)>r||!Rr([o[0],o[1]],[o[2],o[3]],Number(t.angle)||0)):n?n.slice():[]),(p.openings||[]).lengththis._pointInRoom(t,e));if(!i)return void this._showToast(this._t("toast.delete_room_pick"));if(!confirm(this._t("confirm.delete_room",{name:i.name})))return;const s=this._curSpaceCfg;if(!s)return;const n=this._geometrySnapshot();s.rooms=s.rooms.filter(t=>t.id!==i.id),this._commitOpenSpans(),this._recordGeometry(this._t("history.delete_room"),n),this._saveConfig(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}get _wallKeyPitch(){return Ql}get _spaceWalls(){const t=this._curSpaceCfg?.walls;return Array.isArray(t)?t:[]}_cfgOpenCuts(){return zc(this._curSpaceCfg?.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_intervalCm(t){const e=this._spaceModel();return e?sl(e.rooms,this._spaceWalls,this._openCuts(),t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_):0}_normalizeWalls(t,e){const i=this._spaceModel();if(!i)return[];return Pr(il(i.rooms,t,e,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),this._curSpaceCfg?.rooms||[],Ql,1,e.map(t=>[t[0]/T_,t[1]/T_,t[2]/T_,t[3]/T_]))}_paperShapes(t){if(!this._spaceWalls.length)return hi(t);const e=this._wallUnionGeometry();return e?.paperD?[{path:e.paperD}]:hi(t)}_wallUnionGeometry(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._physicalBodiesR();if(!e.length&&!i.length)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._roomWallOpeningInputs(),o=`${this._space}|${this._cfgEpoch}|${t.rooms.length}`;return this._wallUnionCache&&this._wallUnionCache.key===o||(this._wallUnionCache={key:o,value:pl(t.rooms,e,s,n,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,i)}),this._wallUnionCache.value}_thickWallCuts(){const t=this._spaceModel();if(!t)return[];const e=this._spaceWalls;if(!e.length)return[];const i=this._openPairs().flatMap(t=>t.segs);return _l(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_wallThickHit(t){const e=this._spaceModel();if(!e)return null;const i=6*this._gridPitch,s=this._openCuts();let n=null;for(const o of tl(e.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){const e=Ns(t,[o.a[0],o.a[1],o.b[0],o.b[1]]);e<=i&&(!n||e0?vr(e,this._cellCm,this._gridPitch):3*this._gridPitch,s=Math.max(i/2,1.25*this._gridPitch);let n="";for(const e of t.segs)n+=(n?" ":"")+Br([[e[0],e[1]],[e[2],e[3]]],s,!1);return{segs:t.segs,open:t.open,d:n}}_wallThickClick(t){const e=this._wallThickHit(t);if(!e)return void this._showToast(this._t("toast.wallthick_pick"));if(e.open)return void this._showToast(this._t("toast.wallthick_open"));const i=e.cm,s=this._viewOr(this._baseVb()),n=(e.a[0]+e.b[0])/2,o=(e.a[1]+e.b[1])/2;this._wallDialog={a:e.a,b:e.b,value:fr(i,this._imperial),roomId:e.roomId,sx:(n-s.x)/s.w*100,sy:(o-s.y)/s.h*100}}_wallThickApply(t){const e=this._wallDialog;if(!e)return;const i=this._curSpaceCfg,s=this._spaceModel();if(!i||!s)return;const n=e.value.trim(),o=n?m_(n):0;if(null==o)return void this._showPhysicalRange(100);const a=this._imperial?2.54*o:o;if(n&&(!Number.isFinite(a)||a<0||a>0&&a<1||a>100))return void this._showPhysicalRange(100);const r=this._geometrySnapshot(),l=n&&a>0?a:null,c=this._openCuts();let h;h=t&&e.roomId?Fr(i.walls,s.rooms,e.roomId,l,this._wallKeyPitch,c,T_):Ir(i.walls,e.a,e.b,l,this._wallKeyPitch,T_),h=this._normalizeWalls(h,c),h.length?i.walls=h:delete i.walls,this._wallDialog=null,this._showToast(this._t(null==l?"toast.wallthick_cleared":"toast.wallthick_set")),this._recordGeometry(this._t("history.wall_thickness"),r),this._saveConfig(),this.requestUpdate()}_wallHatchDefs(t){if(!this._spaceWalls.length&&!this._physicalBodiesR().length&&!this._markup)return W``;const e=Math.max(.4,1/Math.max(this._zoom,.4)),i=t||"#607d8b";return W` + `;var n}_openCuts(){const t=this._curSpaceCfg,e=this._spaceModel();return e?Bc(e.rooms,t?.open_spans,P_,.02*this._gridPitch):[]}_openPairs(){const t=this._openCuts();if(!t.length)return[];const e=(this._spaceModel()?.rooms||[]).filter(t=>t.id),i=.02*this._gridPitch,s=[];for(let n=0;n{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return l.some(t=>Hs(e,t)<4*i)});c.length&&s.push({a:e[n],b:e[o],segs:c})}return s}_commitOpenSpans(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch;this._cfgEpoch++;const n=i.rooms;let o=zc(e.open_spans);o.length&&t?.old.length?o=Xc(o,t.old,t.next,P_):o.length||(o=qc(Bc(n,null,P_,s),P_)),o=Yc(o,n,P_,s),this._persistOpenCuts(o.map(t=>Fc(t,P_)))}_persistOpenCuts(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch,n=Yc(qc(t,P_),i.rooms,P_,s),o=n.map(t=>Fc(t,P_));n.length?e.open_spans=n:delete e.open_spans,jc(e.rooms||[],i.rooms,o,s)}_planClosedOpenSpan(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return null;const s=.02*this._gridPitch,n=this._openCuts();let o=Array.isArray(e.walls)?e.walls.slice():[];for(const t of tl(i.rooms,o,n,this._wallKeyPitch,this._cellCm,this._gridPitch,P_))!t.open&&t.cm>0&&(o=Ir(o,t.a,t.b,t.cm,this._wallKeyPitch,P_));const a=function(t,e,i){const s=[(e[0]+e[2])/2,(e[1]+e[3])/2];return t.filter(t=>{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return Math.hypot(e[0]-s[0],e[1]-s[1])>4*i})}(n,t,s);let r=this._normalizeWalls(o,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);if(!(l>0)){const e=[];for(const t of tl(i.rooms,r,a,this._wallKeyPitch,this._cellCm,this._gridPitch,P_))t.open||e.push([t.a[0],t.a[1],t.b[0],t.b[1]]);r=Vc(r,t,e,this._wallKeyPitch,P_,_r),r=this._normalizeWalls(r,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)}return{cuts:a,walls:r,cm:l>0?l:_r}}_closeOpenSpan(t){const e=this._curSpaceCfg;if(!e)return;const i=this._geometrySnapshot(),s=this._planClosedOpenSpan(t);s&&(s.walls.length?e.walls=s.walls:delete e.walls,this._persistOpenCuts(s.cuts),this._showToast(this._t("toast.boundary_restored")),this._recordGeometry(this._t("history.close_boundary"),i),this._saveConfig(),this.requestUpdate())}_boundaryClick(t){const e=this._boundaryRestoreGuard;if(e&&Date.now()>e.until&&(this._boundaryRestoreGuard=null),e&&Date.now()<=e.until&&Math.hypot(t[0]-e.point[0],t[1]-e.point[1])<=this._boundaryTolerances().hit)return;const i=.02*this._gridPitch,s=this._openCuts();if(this._openWallAnchor){const{p:e,edge:l}=this._openWallAnchor;if(Hs(t,l)>this._solidBoundaryPull(l,s))return void this._showToast(this._t("toast.boundary_same_edge"));if(this._boundaryBlocked(t,this._boundaryTolerances().hit))return void this._showToast(this._t("toast.boundary_blocked"));const c=Hc(Nc(t,l,Kc(l,s,i),this._gridPitch,1.5*this._gridPitch),l),h=Math.hypot(c[0]-e[0],c[1]-e[1]);if(this._openWallAnchor=null,this._cursorPt=null,h<.5*this._gridPitch)return void this._showToast(this._t("toast.openwall_short"));const d=[e[0],e[1],c[0],c[1]],u=[...s,d],p=this._curSpaceCfg;if(!p)return;const _=this._geometrySnapshot(),g=this._normalizeWalls(p.walls,u);g.length?p.walls=g:delete p.walls;const m=(p.openings||[]).length;return p.openings=(n=p.openings,o=d,a=P_,r=6*this._gridPitch,n?.length?n.filter(t=>Hs([Number(t.x)*a,Number(t.y)*a],o)>r||!Rr([o[0],o[1]],[o[2],o[3]],Number(t.angle)||0)):n?n.slice():[]),(p.openings||[]).lengththis._pointInRoom(t,e));if(!i)return void this._showToast(this._t("toast.delete_room_pick"));if(!confirm(this._t("confirm.delete_room",{name:i.name})))return;const s=this._curSpaceCfg;if(!s)return;const n=this._geometrySnapshot();s.rooms=s.rooms.filter(t=>t.id!==i.id),this._commitOpenSpans(),this._recordGeometry(this._t("history.delete_room"),n),this._saveConfig(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}get _wallKeyPitch(){return Ql}get _spaceWalls(){const t=this._curSpaceCfg?.walls;return Array.isArray(t)?t:[]}_cfgOpenCuts(){return zc(this._curSpaceCfg?.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_intervalCm(t){const e=this._spaceModel();return e?sl(e.rooms,this._spaceWalls,this._openCuts(),t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_):0}_normalizeWalls(t,e){const i=this._spaceModel();if(!i)return[];return Pr(il(i.rooms,t,e,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),this._curSpaceCfg?.rooms||[],Ql,1,e.map(t=>[t[0]/P_,t[1]/P_,t[2]/P_,t[3]/P_]))}_paperShapes(t){if(!this._spaceWalls.length)return hi(t);const e=this._wallUnionGeometry();return e?.paperD?[{path:e.paperD}]:hi(t)}_wallUnionGeometry(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._physicalBodiesR();if(!e.length&&!i.length)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._roomWallOpeningInputs(),o=`${this._space}|${this._cfgEpoch}|${t.rooms.length}`;return this._wallUnionCache&&this._wallUnionCache.key===o||(this._wallUnionCache={key:o,value:pl(t.rooms,e,s,n,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,i)}),this._wallUnionCache.value}_thickWallCuts(){const t=this._spaceModel();if(!t)return[];const e=this._spaceWalls;if(!e.length)return[];const i=this._openPairs().flatMap(t=>t.segs);return _l(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_wallThickHit(t){const e=this._spaceModel();if(!e)return null;const i=6*this._gridPitch,s=this._openCuts();let n=null;for(const o of tl(e.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){const e=Hs(t,[o.a[0],o.a[1],o.b[0],o.b[1]]);e<=i&&(!n||e0?vr(e,this._cellCm,this._gridPitch):3*this._gridPitch,s=Math.max(i/2,1.25*this._gridPitch);let n="";for(const e of t.segs)n+=(n?" ":"")+Br([[e[0],e[1]],[e[2],e[3]]],s,!1);return{segs:t.segs,open:t.open,d:n}}_wallThickClick(t){const e=this._wallThickHit(t);if(!e)return void this._showToast(this._t("toast.wallthick_pick"));if(e.open)return void this._showToast(this._t("toast.wallthick_open"));const i=e.cm,s=this._viewOr(this._baseVb()),n=(e.a[0]+e.b[0])/2,o=(e.a[1]+e.b[1])/2;this._wallDialog={a:e.a,b:e.b,value:fr(i,this._imperial),roomId:e.roomId,sx:(n-s.x)/s.w*100,sy:(o-s.y)/s.h*100}}_wallThickApply(t){const e=this._wallDialog;if(!e)return;const i=this._curSpaceCfg,s=this._spaceModel();if(!i||!s)return;const n=e.value.trim(),o=n?f_(n):0;if(null==o)return void this._showPhysicalRange(100);const a=this._imperial?2.54*o:o;if(n&&(!Number.isFinite(a)||a<0||a>0&&a<1||a>100))return void this._showPhysicalRange(100);const r=this._geometrySnapshot(),l=n&&a>0?a:null,c=this._openCuts();let h;h=t&&e.roomId?Fr(i.walls,s.rooms,e.roomId,l,this._wallKeyPitch,c,P_):Ir(i.walls,e.a,e.b,l,this._wallKeyPitch,P_),h=this._normalizeWalls(h,c),h.length?i.walls=h:delete i.walls,this._wallDialog=null,this._showToast(this._t(null==l?"toast.wallthick_cleared":"toast.wallthick_set")),this._recordGeometry(this._t("history.wall_thickness"),r),this._saveConfig(),this.requestUpdate()}_wallHatchDefs(t){if(!this._spaceWalls.length&&!this._physicalBodiesR().length&&!this._markup)return W``;const e=Math.max(.4,1/Math.max(this._zoom,.4)),i=t||"#607d8b";return W` - `}_resolvedRoomFills(t,e){const i=new Map,s=new Map;for(const n of t.rooms){const t=this._roomDialog&&n.id===this._roomEditId?this._roomFill||e.fill:Is(e.fill,n),o=this._roomDialog&&n.id===this._roomEditId?this._roomCustomFill||e.customFill:rs(e.customFill,n),a=ps(t,"lqi"===t&&n.area?this._roomLqi(n.area):null,"light"===t?co(ro(this._renderPlanHass,this._renderDevices,n,this._virtualLights)):"none","temp"===t?this._roomTemp(n):null,e.tempMin,e.tempMax,this._fillColors,o);i.set(n,a),n.id&&s.set(n.id,a)}return{byRoom:i,byId:s}}_spaceDisplayForRender(){const t=ls(this._curSpaceCfg),e=this._spaceDialog;return e&&"edit"===e.mode&&e.spaceId===this._space?{...t,showBorders:e.showBorders,showNames:e.showNames,hideDecor:e.hideDecor,hideOpenings:e.hideOpenings,color:e.roomColor,opacity:e.roomOpacity,fill:e.fillMode,customFill:e.customFill?as(e.customFill):os,glow:e.glowEnabled,tempMin:e.tempMin,tempMax:e.tempMax,showLqi:e.showLqi,cardFontScale:e.cardFontScale,labelTemp:e.labelTemp,labelHum:e.labelHum,labelLqi:e.labelLqi,labelLight:e.labelLight}:t}_openingWallIndexFor(t,e){const i=t.rooms.map(t=>`${t.id}:${t.poly?.map(t=>t.join(",")).join("/")||`${t.x},${t.y},${t.w},${t.h}`}`).join(";"),s=this._spaceWalls.map(t=>`${t.key}:${t.a?.join(",")||""}:${t.b?.join(",")||""}:${t.cm}`).join(";"),n=e.map(t=>t.join(",")).join(";"),o=[t.id,this._cfgEpoch,this._wallKeyPitch,this._cellCm,this._gridPitch,i,s,n].join("|");let a=this._openingWallIndexCache.get(o);return a||(a=ml(t.rooms,this._spaceWalls,e,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)),v_(this._openingWallIndexCache,o,a,4),{key:o,value:a}}_renderOpeningTunnelFills(t,e,i="data"){if(this._markup||!this._spaceWalls.length||!this._openingsR.length)return W``;if("glow-base"===i&&![...e.byRoom.values()].some(Boolean))return W``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingsR.map(t=>({x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=n.map(t=>`${t.x},${t.y},${t.angle},${t.length}`).join(";"),a=this._openingWallIndexFor(t,s),r=`${a.key}|${o}`;return this._openingTunnelCache&&this._openingTunnelCache.key===r||(this._openingTunnelCache={key:r,value:xl(a.value,n)}),yu({openings:this._openingsR,geometries:this._openingTunnelCache.value,fillsByRoomId:e.byId,idPrefix:`${t.id}-${i}`,groupClass:"data"===i?"opening-tunnels":"opening-tunnels glow-base-tunnels",dataLayer:i})}_resolvedGlowBase(t,e,i){const s=new Map,n=new Map,o=this._fillColors.glow_base;for(const a of t.rooms){const t=i.byRoom.get(a),r=Fs(e.glow,a)&&(!t||t.opacity<=0)?{color:o.c,opacity:o.a,mode:"glow"}:null;s.set(a,r),a.id&&n.set(a.id,r)}return{byRoom:s,byId:n}}_renderGlowBaseRooms(t,e){if(this._markup||![...e.byRoom.values()].some(Boolean))return W``;const i=new Map(t.rooms.map(t=>[t,ci(t)])),s=this._openPairs().flatMap(t=>t.segs),n=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",o=t.rooms.map(o=>{const a=e.byRoom.get(o)||null,r=i.get(o)||null;if(!a||!r)return G;const l=this._spaceWalls.length&&o.id&&ol(t.rooms,o.id,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||r,c=Di(l,t.rooms.filter(t=>t!==o).map(t=>i.get(t)).filter(t=>!!t)),h=this._cleanFloor(o,l,t).path;return h||c.length?W``}_resolvedRoomFills(t,e){const i=new Map,s=new Map;for(const n of t.rooms){const t=this._roomDialog&&n.id===this._roomEditId?this._roomFill||e.fill:Is(e.fill,n),o=this._roomDialog&&n.id===this._roomEditId?this._roomCustomFill||e.customFill:rs(e.customFill,n),a=ps(t,"lqi"===t&&n.area?this._roomLqi(n.area):null,"light"===t?co(ro(this._renderPlanHass,this._renderDevices,n,this._virtualLights)):"none","temp"===t?this._roomTemp(n):null,e.tempMin,e.tempMax,this._fillColors,o);i.set(n,a),n.id&&s.set(n.id,a)}return{byRoom:i,byId:s}}_spaceDisplayForRender(){const t=ls(this._curSpaceCfg),e=this._spaceDialog;return e&&"edit"===e.mode&&e.spaceId===this._space?{...t,showBorders:e.showBorders,showNames:e.showNames,hideDecor:e.hideDecor,hideOpenings:e.hideOpenings,color:e.roomColor,opacity:e.roomOpacity,fill:e.fillMode,customFill:e.customFill?as(e.customFill):os,glow:e.glowEnabled,tempMin:e.tempMin,tempMax:e.tempMax,showLqi:e.showLqi,cardFontScale:e.cardFontScale,labelTemp:e.labelTemp,labelHum:e.labelHum,labelLqi:e.labelLqi,labelLight:e.labelLight}:t}_openingWallIndexFor(t,e){const i=t.rooms.map(t=>`${t.id}:${t.poly?.map(t=>t.join(",")).join("/")||`${t.x},${t.y},${t.w},${t.h}`}`).join(";"),s=this._spaceWalls.map(t=>`${t.key}:${t.a?.join(",")||""}:${t.b?.join(",")||""}:${t.cm}`).join(";"),n=e.map(t=>t.join(",")).join(";"),o=[t.id,this._cfgEpoch,this._wallKeyPitch,this._cellCm,this._gridPitch,i,s,n].join("|");let a=this._openingWallIndexCache.get(o);return a||(a=ml(t.rooms,this._spaceWalls,e,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)),y_(this._openingWallIndexCache,o,a,4),{key:o,value:a}}_renderOpeningTunnelFills(t,e,i="data"){if(this._markup||!this._spaceWalls.length||!this._openingsR.length)return W``;if("glow-base"===i&&![...e.byRoom.values()].some(Boolean))return W``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingsR.map(t=>({x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=n.map(t=>`${t.x},${t.y},${t.angle},${t.length}`).join(";"),a=this._openingWallIndexFor(t,s),r=`${a.key}|${o}`;return this._openingTunnelCache&&this._openingTunnelCache.key===r||(this._openingTunnelCache={key:r,value:xl(a.value,n)}),yu({openings:this._openingsR,geometries:this._openingTunnelCache.value,fillsByRoomId:e.byId,idPrefix:`${t.id}-${i}`,groupClass:"data"===i?"opening-tunnels":"opening-tunnels glow-base-tunnels",dataLayer:i})}_resolvedGlowBase(t,e,i){const s=new Map,n=new Map,o=this._fillColors.glow_base;for(const a of t.rooms){const t=i.byRoom.get(a),r=Fs(e.glow,a)&&(!t||t.opacity<=0)?{color:o.c,opacity:o.a,mode:"glow"}:null;s.set(a,r),a.id&&n.set(a.id,r)}return{byRoom:s,byId:n}}_renderGlowBaseRooms(t,e){if(this._markup||![...e.byRoom.values()].some(Boolean))return W``;const i=new Map(t.rooms.map(t=>[t,ci(t)])),s=this._openPairs().flatMap(t=>t.segs),n=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",o=t.rooms.map(o=>{const a=e.byRoom.get(o)||null,r=i.get(o)||null;if(!a||!r)return G;const l=this._spaceWalls.length&&o.id&&ol(t.rooms,o.id,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||r,c=Di(l,t.rooms.filter(t=>t!==o).map(t=>i.get(t)).filter(t=>!!t)),h=this._cleanFloor(o,l,t).path;return h||c.length?W``:o.poly||l!==r?W` - `}_isoDecorationLayers(t){const e="undefined"==typeof CSS||"function"!=typeof CSS.supports||CSS.supports("filter","blur(1px)"),i="function"==typeof matchMedia&&matchMedia("(forced-colors: active)").matches;return function(t){const e=!!t.showBorders;return{structural:e,panels:e&&!t.hideOpenings,shadows:e&&t.filtersSupported&&!t.forcedColors,materialNuance:e&&!t.forcedColors,floorSymbols:!t.hideOpenings&&!e}}({showBorders:t.showBorders,hideOpenings:t.hideOpenings,filtersSupported:e,forcedColors:i})}_isoOpeningPanels(t){if(!t.panels)return[];const e=this._isoScene();if(!e)return[];return e.openings.flatMap(t=>{const e=this._openingsR[t.sourceIndex];return e?i_(t,this._openingAmt(e)):[]}).sort((t,e)=>t.depth-e.depth||t.sourceIndex-e.sourceIndex||t.leaf-e.leaf)}_renderIsoDefs(t,e){return W` + `}_isoDecorationLayers(t){const e="undefined"==typeof CSS||"function"!=typeof CSS.supports||CSS.supports("filter","blur(1px)"),i="function"==typeof matchMedia&&matchMedia("(forced-colors: active)").matches;return function(t){const e=!!t.showBorders;return{structural:e,panels:e&&!t.hideOpenings,shadows:e&&t.filtersSupported&&!t.forcedColors,materialNuance:e&&!t.forcedColors,floorSymbols:!t.hideOpenings&&!e}}({showBorders:t.showBorders,hideOpenings:t.hideOpenings,filtersSupported:e,forcedColors:i})}_isoOpeningPanels(t){if(!t.panels)return[];const e=this._isoScene();if(!e)return[];return e.openings.flatMap(t=>{const e=this._openingsR[t.sourceIndex];return e?s_(t,this._openingAmt(e)):[]}).sort((t,e)=>t.depth-e.depth||t.sourceIndex-e.sourceIndex||t.leaf-e.leaf)}_renderIsoDefs(t,e){return W` ${"walls"===e&&t.materialNuance?W` @@ -5146,7 +5163,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${t.panels?W``:G} - `:W``}_roomHoverPaths(t){const e=this._hoverRoom;if("view"!==this._mode||!e||e.space!==t.id)return null;const i=t.rooms.find(t=>t===e.room||!!t.id&&t.id===e.room.id);if(!i)return null;const s=ci(i);if(!s)return null;const n=t.rooms.filter(t=>t!==i).map(t=>({room:t,poly:ci(t)})).filter(t=>!!t.poly),o=Di(s,n.map(t=>t.poly)),a=this._openPairs(),r=a.flatMap(t=>t.segs),l=i.id?a.filter(t=>t.a.id===i.id||t.b.id===i.id).flatMap(t=>t.segs):a.flatMap(t=>t.segs),c=this._spaceWalls,h=c.length&&i.id&&ol(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||s,d=[{axis:s,face:h}];for(const e of o){const i=n.find(t=>t.poly===e)?.room;let s=e;if(c.length&&i?.id){const n=Qr(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);n&&(s=gl(n.poly,n.offsets)||e)}d.push({axis:e,face:s})}const u=this._roomWallOpeningInputs(this._openingsR,t).map(t=>{const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,s=Math.sin(e)*t.length/2;return[t.x-i,t.y-s,t.x+i,t.y+s]}),p=.02*this._gridPitch,_=l.concat(u),g=d.map(({axis:t,face:e})=>{const i=_.map(i=>((t,e,i)=>{const s=t[2]-t[0],n=t[3]-t[1],o=Math.hypot(s,n);if(o.05)&&Ns([l,c],[i[0],i[1],s[0],s[1]])<=4*p){h=!0;break}}if(!h)return null;let d=null;for(let t=0;t.05)continue;const u=Ns([l,c],[e[0],e[1],s[0],s[1]]);(!d||u!!t);return i.length?Ds(e,i,p).map(t=>`M ${t[0]} ${t[1]} L ${t[2]} ${t[3]}`).join(" "):`M ${e.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`}).filter(Boolean).join(" ");if(!g)return null;const m=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`;return{fillD:[this._cleanFloor(i,h,t).path||m(h),...o.map(m)].join(" "),outlineD:g}}_renderRoomHoverFill(t){return t?W` + `:W``}_roomHoverPaths(t){const e=this._hoverRoom;if("view"!==this._mode||!e||e.space!==t.id)return null;const i=t.rooms.find(t=>t===e.room||!!t.id&&t.id===e.room.id);if(!i)return null;const s=ci(i);if(!s)return null;const n=t.rooms.filter(t=>t!==i).map(t=>({room:t,poly:ci(t)})).filter(t=>!!t.poly),o=Di(s,n.map(t=>t.poly)),a=this._openPairs(),r=a.flatMap(t=>t.segs),l=i.id?a.filter(t=>t.a.id===i.id||t.b.id===i.id).flatMap(t=>t.segs):a.flatMap(t=>t.segs),c=this._spaceWalls,h=c.length&&i.id&&ol(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||s,d=[{axis:s,face:h}];for(const e of o){const i=n.find(t=>t.poly===e)?.room;let s=e;if(c.length&&i?.id){const n=Qr(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);n&&(s=gl(n.poly,n.offsets)||e)}d.push({axis:e,face:s})}const u=this._roomWallOpeningInputs(this._openingsR,t).map(t=>{const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,s=Math.sin(e)*t.length/2;return[t.x-i,t.y-s,t.x+i,t.y+s]}),p=.02*this._gridPitch,_=l.concat(u),g=d.map(({axis:t,face:e})=>{const i=_.map(i=>((t,e,i)=>{const s=t[2]-t[0],n=t[3]-t[1],o=Math.hypot(s,n);if(o.05)&&Hs([l,c],[i[0],i[1],s[0],s[1]])<=4*p){h=!0;break}}if(!h)return null;let d=null;for(let t=0;t.05)continue;const u=Hs([l,c],[e[0],e[1],s[0],s[1]]);(!d||u!!t);return i.length?Ds(e,i,p).map(t=>`M ${t[0]} ${t[1]} L ${t[2]} ${t[3]}`).join(" "):`M ${e.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`}).filter(Boolean).join(" ");if(!g)return null;const m=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`;return{fillD:[this._cleanFloor(i,h,t).path||m(h),...o.map(m)].join(" "),outlineD:g}}_renderRoomHoverFill(t){return t?W` `:W``}_renderRoomHoverOutline(t){return t?W` @@ -5170,7 +5187,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 - `:j``}_openingAt(t){if(!this._openingsR.length)return null;const e=this._openingsR.flatMap(e=>{const i=e.angle*Math.PI/180,s=t[0]-e.rx,n=t[1]-e.ry,o=s*Math.cos(i)+n*Math.sin(i);return Math.abs(o)>e.rlen/2+12?[]:[{o:e,localY:-s*Math.sin(i)+n*Math.cos(i)}]});if(!e.length)return null;const i=this._spaceModel();if(!i)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return e.find(({o:t,localY:e})=>{const i="gate"===t.type?!t.flip_v:t.flip_v,s=t.partitionHost||this._spaceWalls.length||"gate"===t.type?this._openingFace(t,n,!!i):{ox:0,oy:0,cm:0,side:-1},o=tu({type:t.type,length:t.rlen,angle:t.angle,amount:this._openingAmt(t),flipH:!!t.flip_h,flipV:!!t.flip_v,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s});return Math.abs(e)<=o.hitHalf})?.o||null}_resolveOpeningPlacement(t){const e=this._openingPreset;if("opening"!==this._tool||!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._openCuts(),n=this._openingWallIndexFor(i,s),o=`${n.key}|partitions:${this._cfgEpoch}`;var a,r,l;this._openingPlacementIntervalsCache&&this._openingPlacementIntervalsCache.key===o||(this._openingPlacementIntervalsCache={key:o,value:[...tl(i.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),...(a=i.partitions,r=this._cellCm,l=this._gridPitch,a.flatMap(t=>!sd(t.a)||!sd(t.b)||Math.hypot(t.b[0]-t.a[0],t.b[1]-t.a[1])<=1e-9?[]:[{roomId:"",a:[t.a[0],t.a[1]],b:[t.b[0],t.b[1]],key:`partition:${t.id}`,kind:"outer",cm:t.cm,open:!1,half:vr(t.cm,r,l)/2,partitionHost:{kind:"partition",id:t.id}}]))]});const c=l_({pointer:[t[0],t[1]],preset:e,geometryRevision:this._cfgEpoch,renderedLength:this._cmToUnits(e.lengthCm),intervals:this._openingPlacementIntervalsCache.value,baseTolerance:1.5*this._gridPitch,bodyPointerPadding:this._cssPxToRender(this._boundaryCoarse?10:6),gridStep:this._gridPitch});this._openingJambBlockCm=c.jambBlockedTarget?c.jambBlockedTarget.physicalHalfWidth/this._gridPitch*this._cellCm:null;const h=c.candidate;if(!h)return null;const d="gate"===h.type?!h.flipV:h.flipV;let u;if(h.host){const t=ad({id:"preview",type:h.type,x:h.x/T_,y:h.y/T_,angle:h.angle,length:h.renderedLength/T_,host:h.host},i.partitions,T_,this._cellCm,this._gridPitch).resolved;u=t?hd(t,d):{ox:0,oy:0,cm:0,side:-1}}else u=bl(n.value,{x:h.x,y:h.y,angle:h.angle,length:h.renderedLength,flip_v:d});const p="mi"===this.hass?.config?.unit_system?.length,_=pi([h.x,h.y],h.angle,h.renderedLength,i.rooms,this._gridPitch/2),g=(_?[{distance:_.sideA,midpoint:_.midA},{distance:_.sideB,midpoint:_.midB}]:h.measure.labels).map(t=>({x:t.midpoint[0],y:t.midpoint[1],text:ri(t.distance/this._gridPitch*this._cellCm,p)}));return{...h,face:u,measure:{labels:g,guide:h.measure.guide}}}_activateOpeningPlacement(t){this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingPreset=function(t,e){return{type:t,lengthCm:n_(t),flipH:!1,flipV:!1,revision:e}}(t,++this._openingPresetRevision),this._openingHoverCandidate=null,this._cursorPt=null)}_clearOpeningPlacement(t){this._openingHoverCandidate=null,this._openingJambBlockCm=null,t&&(this._openingPreset=null,this._openingRebindId=null)}_openingClick(t){const e=this._spaceModel();if(!e)return;const i=this._openingRebindId?null:this._openingAt(t);if(i)return void this._editOpening(i);const s=this._openingPreset;if(!s)return;const n=this._openingHoverCandidate,o=n&&c_(n,[t[0],t[1]],s.revision,this._cfgEpoch)?n:this._resolveOpeningPlacement(t);if(!o){if(null!=this._openingJambBlockCm)return void this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(this._openingJambBlockCm,this._imperial)}));const i=1.5*this._gridPitch,s=ui(t,e.rooms,i);return s&&function(t,e,i,s,n){for(const o of s)if(!(Ns([t,e],o)>n)&&Rr([o[0],o[1]],[o[2],o[3]],i))return!0;return!1}(s.x,s.y,s.angle,this._openCuts(),i)?void this._showToast(this._t("toast.opening_on_virtual")):void this._showToast(this._t("toast.opening_no_wall"))}const a=this._openingRebindId?this._curSpaceCfg?.openings?.find(t=>t.id===this._openingRebindId):null;this._openingDialog={...a?{id:a.id,type:a.type,lengthCm:Math.round(a.length*T_/this._gridPitch*this._cellCm),lengthTouched:!1,contact:a.contact||"",lock:a.lock||"",invert:!!a.invert,flipH:!!a.flip_h,flipV:!!a.flip_v}:{type:o.type,lengthCm:o.lengthCm,contact:"",lock:"",invert:!1,flipH:o.flipH,flipV:o.flipV},...o.host?{host:o.host}:{},x:o.x,y:o.y,angle:o.angle},this._openingRebindId=null,this._openingHoverCandidate=null,this._cursorPt=null}_editOpening(t){this._openingDialog={id:t.id,type:t.type,lengthCm:Math.round(t.rlen/this._gridPitch*this._cellCm),lengthTouched:!1,contact:t.contact||"",lock:t.lock||"",invert:!!t.invert,flipH:!!t.flip_h,flipV:!!t.flip_v,...t.host?{host:{...t.host}}:{},x:t.rx,y:t.ry,angle:t.angle}}_opPointerDown(t,e){if("plan"===this._mode&&this._spaceModel()&&"resize"!==this._tool){t.preventDefault(),t.stopPropagation();try{O_(t)}catch{}this._opDrag={id:e.id,moved:!1,sx:t.clientX,sy:t.clientY,dirty:!1,before:this._geometrySnapshot()}}}_opPointerMove(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;if(Math.abs(t.clientX-this._opDrag.sx)+Math.abs(t.clientY-this._opDrag.sy)<=3)return;const i=this._spaceModel();if(!i)return;const s=this._svgPoint(t),n=this._curSpaceCfg,o=n?.openings?.find(t=>t.id===e.id);if(!o)return;if("partition"===o.host?.kind){const t=i.partitions.find(t=>t.id===o.host.id);if(!t)return;const e=t.b[0]-t.a[0],n=t.b[1]-t.a[1],a=Math.hypot(e,n);if(!(a>1e-9))return;const r=e/a,l=n/a;if(Math.abs((s[0]-t.a[0])*l-(s[1]-t.a[1])*r)>4*this._gridPitch)return;const c=o.length*T_/2+nd(t,this._cellCm,this._gridPitch);let h=(s[0]-t.a[0])*r+(s[1]-t.a[1])*l;if(h=Math.round(h/this._gridPitch)*this._gridPitch,h=Math.max(c,Math.min(a-c,h)),a<2*c-1e-9)return;const d=h/a,u=(t.a[0]+r*h)/T_,p=(t.a[1]+l*h)/this._spaceH;let _=180*Math.atan2(n,e)/Math.PI;_>=90?_-=180:_<-90&&(_+=180);const g=o.host.t!==d||o.x!==u||o.y!==p||o.angle!==_;return this._opDrag.moved=!0,g&&(this._opDrag.dirty=!0),o.host={...o.host,t:d},o.x=u,o.y=p,o.angle=_,this._opMeasure=null,g&&this._cfgEpoch++,void this.requestUpdate()}const a=ui(s,i.rooms,4*this._gridPitch);if(!a)return;this._opDrag.moved=!0;const r=this._opRuler(a,o.length*T_);this._opMeasure=r.measure;const l=r.x/T_,c=r.y/this._spaceH,h=o.x!==l||o.y!==c||o.angle!==a.angle;h&&(this._opDrag.dirty=!0),o.x=l,o.y=c,o.angle=a.angle,h&&this._cfgEpoch++,this.requestUpdate()}_opRuler(t,e){const i=this._spaceModel()?.rooms||[],s=this._gridPitch/2;let n=t.x,o=t.y,a=pi([n,o],t.angle,e,i,s);if(a&&a.centered&&(n!==a.wallCenter[0]||o!==a.wallCenter[1]))[n,o]=a.wallCenter,a=pi([n,o],t.angle,e,i,s);else if(a){const[r,l]=a.wallA,[c,h]=a.wallB,d=c-r,u=h-l,p=Math.hypot(d,u);if(p>0){const c=this._gridPitch,h=Math.min(e/2,p/2);let _=Math.round(((n-r)*d+(o-l)*u)/p/c)*c;_=Math.max(h,Math.min(p-h,_)),n=r+_/p*d,o=l+_/p*u,a=pi([n,o],t.angle,e,i,s)||a}}if(!a)return{x:n,y:o,angle:t.angle,measure:null};const r="mi"===this.hass?.config?.unit_system?.length,l=(t,e)=>({x:e[0],y:e[1],text:ri(t/this._gridPitch*this._cellCm,r)});return{x:n,y:o,angle:t.angle,measure:{labels:[l(a.sideA,a.midA),l(a.sideB,a.midB)],guide:a.centered?{x:a.wallCenter[0],y:a.wallCenter[1],angle:t.angle}:null}}}_opPointerUp(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;const i=this._opDrag,s=i.moved;this._opMeasure=null,s&&i.dirty&&(this._recordGeometry(this._t("history.move_opening"),i.before),this._saveConfig()),s?window.setTimeout(()=>this._opDrag=null,0):this._opDrag=null}_opClick(t,e){"plan"===this._mode&&"resize"===this._tool||(t.stopPropagation(),this._opDrag?.moved||"plan"===this._mode&&this._editOpening(e))}_saveOpening(){const t=this._openingDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=this._geometrySnapshot(),n=this._spaceH,o=(e.openings||[]).find(e=>e.id===t.id),a={...o||{},id:t.id||"o"+Date.now().toString(36),type:t.type,x:t.x/T_,y:t.y/n,angle:t.angle,length:o&&!t.lengthTouched?o.length:this._cmToUnits(Math.max(20,t.lengthCm))/T_,...t.host?{host:{...t.host}}:{}};if(a.host){const t=ld(o,a)?rd(a,i.partitions,T_,this._cellCm,this._gridPitch):ad(a,i.partitions,T_,this._cellCm,this._gridPitch);if(!t.resolved){const e=i.partitions.find(t=>t.id===a.host.id);if("does-not-fit-jamb"===t.reason&&e){const t=nd(e,this._cellCm,this._gridPitch);this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(t/this._gridPitch*this._cellCm,this._imperial)}))}else this._showToast(this._t("opening.partition_orphan"));return}const s=(e.openings||[]).flatMap(t=>{if(!t.host||t.id===a.id)return[];const e=ad(t,i.partitions,T_,this._cellCm,this._gridPitch).resolved;return e?[e]:[]});if(function(t,e,i=1e-9){const s=t.length/(2*t.axis.length),n=t.t-s,o=t.t+s;return e.some(e=>{if(e.host.id!==t.host.id||e.opening.id===t.opening.id)return!1;const s=e.length/(2*e.axis.length);return Math.max(n,e.t-s)t.id===a.id);r>=0?e.openings[r]=a:e.openings.push(a),this._recordGeometry(this._t(t.id?"history.edit_opening":"history.add_opening"),s),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_deleteOpening(){const t=this._openingDialog,e=this._curSpaceCfg;if(!t?.id||!e?.openings)return;const i=this._geometrySnapshot();e.openings=e.openings.filter(e=>e.id!==t.id),this._recordGeometry(this._t("history.delete_opening"),i),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_contactCandidates(){const t=[];for(const e of Object.keys(this.hass.states)){if(!this._openingEntityAvailable(e))continue;const i=e.split(".")[0];if("binary_sensor"!==i&&"cover"!==i)continue;const s=this.hass.states[e],n=["door","window","opening","garage_door","garage"].includes(s?.attributes?.device_class||"");("cover"!==i||n)&&t.push([e,s?.attributes?.friendly_name||e,n?0:1])}return t.sort((t,e)=>t[2]-e[2]||t[1].localeCompare(e[1])).map(([t,e])=>({value:t,label:e}))}_lockCandidates(){return Object.keys(this.hass.states).filter(t=>t.startsWith("lock.")&&this._openingEntityAvailable(t)).map(t=>({value:t,label:this.hass.states[t]?.attributes?.friendly_name||t})).sort((t,e)=>t.label.localeCompare(e.label))}_mergeClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms,s=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!s?.id)return;const n=s.id;if(!this._mergeSel||this._mergeSel===n)return void(this._mergeSel=this._mergeSel===n?null:n);const o=i.find(t=>t.id===this._mergeSel),a=o?ci(o):null,r=ci(s),l=a&&r?function(t,e){if(!t||!e||t.length<3||e.length<3)return null;const i=si(Pi(t),Pi(e));if(1!==i.length)return null;if(1!==i[0].length)return null;const s=i[0][0].slice(0,-1).map(t=>[t[0],t[1]]);return s.length>=3?s:null}(a,r):null;if(!l)return this._showToast(this._t("toast.merge_not_adjacent")),void(this._mergeSel=null);this._mergeDialog={aId:this._mergeSel,bId:n,poly:l,pick:"a"},this._mergeSel=null}_commitMerge(){const t=this._mergeDialog,e=this._curSpaceCfg;if(!t||!e||!this._spaceModel())return;const i=this._geometrySnapshot(),s=this._spaceH,n="a"===t.pick?t.aId:t.bId,o="a"===t.pick?t.bId:t.aId,a=e.rooms.find(t=>t.id===n);a?(a.poly=t.poly.map(t=>[t[0]/T_,t[1]/s]),delete a.x,delete a.y,delete a.w,delete a.h,e.rooms=e.rooms.filter(t=>t.id!==o),this._commitOpenSpans(),this._recordGeometry(this._t("history.merge_rooms"),i),this._saveConfig(),this._mergeDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.rooms_merged",{name:a.name||""}))):this._mergeDialog=null}_splitClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms;if(!this._splitSel){const e=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!e?.id)return;return void(this._splitSel={roomId:e.id,pts:[]})}const s=i.find(t=>t.id===this._splitSel.roomId),n=s?ci(s):null;if(!s||!n)return void(this._splitSel=null);const o=.02*this._gridPitch,a=6*this._gridPitch,r=function(t,e){if(!e||e.length<2)return null;let i=null,s=1/0;for(let n=0;n=n)continue;n=_;const g=Math.sqrt(u),m=(i>0?Math.max(0,Math.min(g,Math.round(p*g/i)*i)):p*g)/g;s=[a+m*h,r+m*d]}return s}(r,n,this._gridPitch)||r,c=r&&l&&Math.hypot(r[0]-t[0],r[1]-t[1])<=a?l:null,h=!!c&&yi(c,n,o),d=this._splitSel.pts;if(!d.length)return h?void(this._splitSel={...this._splitSel,pts:[c]}):void this._showToast(this._t("toast.split_pick_wall"));if(!h){const e=this._snap(t);return bi(e,n,o)?void(this._splitSel={...this._splitSel,pts:[...d,e]}):void this._showToast(this._t("toast.split_pick_inside"))}const u=Ii(n,[...d,c],o);if(!u)return void this._showToast(this._t("toast.split_bad_cut"));this._resetRoomDialogFields();const[p,_]=u,g=Ti(p)>=Ti(_)?p:_,m=g===p?_:p;this._pendingSplit={roomId:s.id,mainPoly:g,newPoly:m},this._cursorPt=null,this._nameSel="",this._areaSel="",this._roomDialog=!0}get _contourClosed(){return this._path.length>=4&&this._samePt(this._path[0],this._path[this._path.length-1])&&(null!=this._closingWallCm||!this._activeDraftId)}_markupMove(t){if(!this._markup)return;const e=t.pointerType;if(e&&(this._boundaryPointerType=e),"column"===this._tool)return void(this._cursorPt=this._snap(this._svgPoint(t)));if("opening"===this._tool||"boundary"===this._tool||"wallthick"===this._tool)return void(this._cursorPt=this._svgPoint(t));const i="draw"===this._tool&&!this._contourClosed,s="split"===this._tool&&!!this._splitSel?.pts?.length;if(!i&&!s)return;const n=this._svgPoint(t);if(i){const e=this._resolvePlanDrawPoint(n,t.shiftKey);return this._planSnapHover={contextKey:e.contextKey,candidate:e.candidate},this._path.length?void(this._cursorPt=e.point):void this._syncPlanSnapActiveMarker(e.candidate)}this._cursorPt=this._snap(n)}get _openingPreview(){const t=this._openingPreset;if("opening"!==this._tool||!t||!this._cursorPt)return null;const e=this._cursorPt,i=this._openingHoverCandidate;if(i&&c_(i,[e[0],e[1]],t.revision,this._cfgEpoch))return i;if(this._openingAt(e))return this._openingHoverCandidate=null,null;const s=this._resolveOpeningPlacement(e);return this._openingHoverCandidate=s,s}get _opMeasureView(){return this._opMeasure||this._openingPreview?.measure||null}_saveRoom(){(this._areaSel||this._nameSel.trim())&&(this._wallFaceBatch?this._decideWallFace(!0):this._commitRoom())}_decideWallFace(t){const e=this._wallFaceBatch;if(!e)return;const i=e.candidates[e.index];if(!i)return;const s=t?{candidate:i,create:!0,name:this._nameSel.trim(),area:this._areaSel||null,settings:this._roomSettingsFromDialog()?JSON.parse(JSON.stringify(this._roomSettingsFromDialog())):null}:{candidate:i,create:!1},n=[...e.decisions,s],o=e.index+1;if(o"number"==typeof t&&Number.isFinite(t)&&t>=0?t:null,n=.02*this._gridPitch,o=this._spaceModel();if(!o)return _r;for(const e of this._planSnapGeometrySnapshot().value.segments){if("room"===e.sourceKind||Ns(t,[e.a[0],e.a[1],e.b[0],e.b[1]])>n)continue;if("partition"===e.sourceKind)return s(o.partitions.find(t=>t.id===e.sourceId)?.cm)??_r;const i=e.sourceId.lastIndexOf(":"),a=i>=0?e.sourceId.slice(0,i):e.sourceId,r=i>=0?Number(e.sourceId.slice(i+1)):-1;return s(o.room_drafts.find(t=>t.id===a)?.segments[r]?.cm)??_r}for(let o=0;o+1{this._showToast(this._t(t,e)),this._roomDialogCancel()},n=t.decisions.filter(t=>t.create),o=n.map(t=>t.candidate.ring),a=i.rooms;for(let t=0;ti.id!==e&&!!ci(i)&&Ci(o[t],ci(i)));if(i)return void s("toast.room_overlap",{name:i.name||""})}if((e.rooms||[]).length+n.length>400)return void s("toast.physical_limit");if(n.some(t=>t.candidate.split&&!e.rooms.some(e=>e.id===t.candidate.split.roomId)))return void s("toast.contour_cannot_close");const r=2e-4*this._gridPitch,l=new Map;for(let e=0;et.candidate.atomKeys)),i=n.some(t=>t.candidate.consumeAllActive);for(const s of Gd(this._wallGraphSources(t.activePath),r)){const t=s.sourceKeys.find(t=>l.has(t));!t||i||e.has(s.key)||c.push({a:s.a,b:s.b,cm:l.get(t)})}}else c.push(...Sd(t.activePath,t.activeCms,_r));if((e.partitions||[]).length+c.length>I_)return void s("toast.physical_limit");const h=this._geometrySnapshot(),d=n.some(t=>!!t.candidate.split),u=d?el(i.rooms,e.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,T_):null,p=d&&Array.isArray(e.walls)?e.walls:null;for(const t of n){const i=t.candidate.split;if(!i)continue;const n=e.rooms.find(t=>t.id===i.roomId);if(!n)return void s("toast.contour_cannot_close");n.poly=i.mainPoly.map(t=>[t[0]/T_,t[1]/this._spaceH]),delete n.x,delete n.y,delete n.w,delete n.h}const _=Date.now().toString(36),g=[];if(n.forEach((t,i)=>{const s=t.area?this.hass.areas[t.area]?.name:"",n={id:`r${_}-${i}`,name:t.name||s||this._t("room.default_name"),area:t.area||null,poly:t.candidate.ring.map(t=>[t[0]/T_,t[1]/this._spaceH]),...t.settings?{settings:JSON.parse(JSON.stringify(t.settings))}:{}};e.rooms.push(n),g.push({room:n,decision:t})}),t.activeDraftId&&Array.isArray(e.room_drafts)&&(e.room_drafts=e.room_drafts.filter(e=>e.id!==t.activeDraftId),e.room_drafts.length||delete e.room_drafts),c.length&&(e.partitions||=[],c.forEach((t,i)=>e.partitions.push({id:`partition-${_}-${i}`,a:[t.a[0]/T_,t.a[1]/T_],b:[t.b[0]/T_,t.b[1]/T_],cm:t.cm}))),d){this._commitOpenSpans();const t=this._normalizeWalls(u,this._openCuts());t.length?e.walls=t:p?.length?e.walls=p:delete e.walls}if(g.length){this._cfgEpoch++;const i=this._openCuts(),s=this._spaceModel();if(!s)return;let n=e.walls;for(const{room:e,decision:o}of g){const a=o.candidate.ring,r=this._wallSourceCmAt(a[0],t.activePath,t.activeCms);n=Er(n,s.rooms,e.id,r,this._wallKeyPitch,i,T_);for(const o of tl(s.rooms,n,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){if(o.roomId!==e.id||"outer"!==o.kind)continue;const i=[(o.a[0]+o.b[0])/2,(o.a[1]+o.b[1])/2];n=Ir(n,o.a,o.b,this._wallSourceCmAt(i,t.activePath,t.activeCms),this._wallKeyPitch,T_)}}const o=this._normalizeWalls(n,i);o.length?e.walls=o:delete e.walls}this._recordGeometry(this._t("history.wall_face_batch"),h),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._wallFaceBatch=null,this._roomDialog=!1,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices();const m=new Set(n.map(t=>t.area).filter(t=>!!t));if(m.size){const t={...this._layout};for(const e of this._devices){if(!m.has(e.area||"")||e.space!==this._space)continue;if(this._layout[e.id])continue;const i=this._defPos[e.id];i&&(t[e.id]={s:this._space,x:i.x/T_,y:i.y/T_},this._dirtyPos.add(e.id))}this._layout=t,this._persistLayout()}this._showToast(this._t(n.length?"toast.wall_rooms_saved":"toast.wall_chain_saved",{n:n.length}))}_commitRoom(){const t=this._curSpaceCfg,e=this._spaceModel();if(!t||!e)return;const i=this._geometrySnapshot(),s=this._spaceH,n=!!this._pendingSplit,o=n?el(e.rooms,t.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,T_):null,a=n&&Array.isArray(t.walls)?t.walls:null;let r;if(this._pendingSplit){const e=t.rooms.find(t=>t.id===this._pendingSplit.roomId);if(!e)return this._pendingSplit=null,this._splitSel=null,void(this._roomDialog=!1);e.poly=this._pendingSplit.mainPoly.map(t=>[t[0]/T_,t[1]/s]),delete e.x,delete e.y,delete e.w,delete e.h,r=this._pendingSplit.newPoly}else{if(!this._contourClosed)return;r=this._path.slice(0,-1)}const l=this._areaSel?this.hass.areas[this._areaSel]?.name:"",c={id:"r"+Date.now().toString(36),name:this._nameSel||l||this._t("room.default_name"),area:this._areaSel||null,poly:r.map(t=>[t[0]/T_,t[1]/s]),...this._roomSettingsFromDialog()?{settings:this._roomSettingsFromDialog()}:{}};if(t.rooms.push(c),!n&&this._activeDraftId&&Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),n){this._commitOpenSpans();const e=this._normalizeWalls(o,this._openCuts());e.length?t.walls=e:a?.length?t.walls=a:delete t.walls}if(!n){const e=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r],i=e[0]||this._drawWallCm;if(null!=i){this._cfgEpoch++;const s=this._openCuts(),n=this._spaceModel();if(!n)return;let o=Er(t.walls,n.rooms,c.id,i,this._wallKeyPitch,s,T_);for(const t of tl(n.rooms,o,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){if(t.roomId!==c.id||"outer"!==t.kind)continue;const s=[(t.a[0]+t.b[0])/2,(t.a[1]+t.b[1])/2],n=r.findIndex((t,e)=>{const i=r[(e+1)%r.length];return Ns(s,[t[0],t[1],i[0],i[1]])<=.02*this._gridPitch});n>=0&&(o=Ir(o,t.a,t.b,e[n]||i,this._wallKeyPitch,T_))}o=this._normalizeWalls(o,s),o.length?t.walls=o:delete t.walls}}this._recordGeometry(this._t(n?"history.split_room":"history.add_room"),i),this._saveConfig(),this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._pendingSplit=null,this._splitSel=null;const h=this._areaSel;this._areaSel="",this._nameSel="",this._roomDialog=!1,this._regSignature="",this._maybeRebuildDevices();let d=0;if(h){const t=T_,e={...this._layout};for(const i of this._devices){if(i.area!==h||i.space!==this._space)continue;if(d++,this._layout[i.id])continue;const s=this._defPos[i.id];s&&(e[i.id]={s:this._space,x:s.x/T_,y:s.y/t},this._dirtyPos.add(i.id))}this._layout=e,this._persistLayout()}const u=this._model.find(t=>t.id===this._space)?.rooms.length||0;this._showToast(h?this._t("toast.room_saved",{n:u,added:d}):this._t("toast.room_saved_no_area",{n:u}))}_cancelPath(){this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),this._roomDialog=!1,this._pendingSplit=null,this._wallFaceBatch=null,this._splitSel=null,this._mergeSel=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._clearOpeningPlacement(!0)}_resumeLastDraft(){const t=this._resumeDraftBySpace[this._space];if(!t)return;const e=this._spaceModel()?.room_drafts.find(e=>e.id===t);e?(this._activeDraftId=t,this._path=e.points.map(t=>[...t]),this._draftSegmentCms=e.segments.map(t=>t.cm),this._clearPlanSnapHover()):delete this._resumeDraftBySpace[this._space]}_roomDialogCancel(){if(this._roomDialog=!1,this._roomEditId)return this._roomEditId=null,this._nameSel="",void(this._areaSel="");if(this._wallFaceBatch){const t=this._wallFaceBatch;return this._wallFaceBatch=null,this._path=t.activePath.map(t=>[...t]),this._draftSegmentCms=[...t.activeCms],this._activeDraftId=t.activeDraftId,this._nameSel="",this._areaSel="",void this.requestUpdate()}if(this._pendingSplit)return this._pendingSplit=null,void(this._splitSel=null);this._undoPoint()}get _freeAreas(){const t=new Set;for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area&&t.add(i.area);for(const e of this._wallFaceBatch?.decisions||[])e.create&&e.area&&t.add(e.area);return Object.values(this.hass?.areas||{}).filter(e=>!t.has(e.area_id)).sort((t,e)=>(t.name||"").localeCompare(e.name||""))}_openMarkerDialog(t){if(this._vacAllCamerasFor=null,this._vacAllCameraCache=null,t&&this._ackNewDevice(t.id),this._norm)if(t){const e=t.marker,i=Object.prototype.hasOwnProperty.call(e||{},"is_light"),s=Object.prototype.hasOwnProperty.call(e||{},"light_entity"),n=Object.prototype.hasOwnProperty.call(e||{},"glow_color"),o=Object.prototype.hasOwnProperty.call(e||{},"value_badge"),a=Object.prototype.hasOwnProperty.call(e||{},"tap_action"),r=Object.prototype.hasOwnProperty.call(e||{},"toggle_entity"),l=ws(e?.glow_color),c=this._devicePresentation(t,!0).valueBadge,h=Lo(this._planHass,t,this._devices),d=Bo(this._planHass,t,h);this._markerDialog={devId:t.id,name:t.name,binding:"virtual"===t.bindingKind?"virtual":t.bindingKind+":"+t.bindingRef,bindingMode:"virtual"===t.bindingKind?"virtual":"ha",bindingOpen:!1,showEntities:"entity"===t.bindingKind&&!!this._fullRegistryHass.entities[t.bindingRef||""]?.device_id,bindingFilter:"",icon:t.marker?.icon||"",autoIcon:t.icon||"",display:Li(t.marker?.display),rippleColor:Rt(t.marker?.ripple_color,""),rippleSize:Number(t.marker?.ripple_size)>0?Number(t.marker.ripple_size):1.5,size:Number(t.marker?.size)>0?Number(t.marker.size):1,angle:Number(t.marker?.angle)||0,tapAction:Yh(t.marker?.tap_action,t.primary?.split(".")[0]),tapActionTouched:!1,originalHasTapAction:a,originalTapAction:t.marker?.tap_action,tapHintAnnouncement:"",toggleEntity:e?.toggle_entity||"",toggleEntityTouched:!1,originalHasToggleEntity:r,originalToggleEntity:e?.toggle_entity,tapTarget:t.marker?.tap_target||"",tapConfirm:!0===t.marker?.tap_confirm,runFilter:"",controls:Yn(t.marker?.binding,t.marker?.controls,t.entities),controlsFilter:"",lightRole:!0===e?.is_light?"always":!1===e?.is_light?"never":"auto",lightRoleTouched:!1,originalHasIsLight:i,originalIsLight:e?.is_light,lightEntity:e?.light_entity||"",lightEntityTouched:!1,originalHasLightEntity:s,originalLightEntity:e?.light_entity,glowMode:null!=l?.bri?"fixed":l?"color":"auto",glowColor:l?.c||this._fillColors.glow_light.c,glowBrightness:Math.max(1,Math.round(100*(l?.bri??1))),glowColorDrafted:!!l,glowBrightnessDrafted:null!=l?.bri,glowTouched:!1,originalHasGlowColor:n&&(!!l||null===e?.glow_color),originalGlowColor:l||(null===e?.glow_color?null:void 0),valueBadgeEnabled:o?!0===e?.value_badge?.enabled:!!c,valueBadgeSource:e?.value_badge?.source||c?.source||d,valueBadgePosition:e?.value_badge?.position||c?.position||"right",valueBadgeTouched:!1,originalHasValueBadge:o,originalValueBadge:e?.value_badge,useClimateTemp:!0===t.marker?.use_climate_temp,glowRadius:Number(t.marker?.glow_radius_cm)>0?String(this._imperial?Math.round(Number(t.marker.glow_radius_cm)/30.48*10)/10:Math.round(Number(t.marker.glow_radius_cm))/100):"",model:t.model||"",link:t.link||"",description:t.description||"",pdfs:[...t.pdfs||[]],room:t.marker?.room_id?t.space+"#@"+t.marker.room_id:t.space&&t.area?t.space+"#"+t.area:"",hideFromPlan:!0===t.marker?.hidden,busy:!1}}else this._markerDialog={name:"",binding:"virtual",bindingMode:"virtual",bindingOpen:!1,showEntities:!1,bindingFilter:"",icon:"",autoIcon:"",display:"badge",rippleColor:"",rippleSize:1.5,size:1,angle:0,tapAction:"info",tapActionTouched:!1,originalHasTapAction:!1,originalTapAction:void 0,tapHintAnnouncement:"",toggleEntity:"",toggleEntityTouched:!1,originalHasToggleEntity:!1,originalToggleEntity:void 0,tapTarget:"",tapConfirm:!1,runFilter:"",controls:[],controlsFilter:"",lightRole:"auto",lightRoleTouched:!1,originalHasIsLight:!1,originalIsLight:void 0,lightEntity:"",lightEntityTouched:!1,originalHasLightEntity:!1,originalLightEntity:void 0,glowMode:"auto",glowColor:this._fillColors.glow_light.c,glowBrightness:100,glowColorDrafted:!1,glowBrightnessDrafted:!1,glowTouched:!1,originalHasGlowColor:!1,originalGlowColor:void 0,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgePosition:"right",valueBadgeTouched:!1,originalHasValueBadge:!1,originalValueBadge:void 0,useClimateTemp:!1,glowRadius:"",model:"",link:"",description:"",pdfs:[],room:"",hideFromPlan:!1,busy:!1,uploadId:"up_"+Date.now().toString(36)+Math.random().toString(36).slice(2,6)};else this._showToast(this._t("toast.marker_needs_server"))}_runCandidates(){const t=[];for(const e of Ui)for(const[i,s]of Object.entries(this.hass.states))i.startsWith(e+".")&&this._planEntityAvailable(i)&&t.push({value:i,label:s?.attributes?.friendly_name||i,sub:this._t("run."+e)});return t.sort((t,e)=>t.sub.localeCompare(e.sub)||t.label.localeCompare(e.label))}_bindingCandidates(){const t=this._planHass,e=vo(this._markers),i=new Set(this._markers.filter(t=>t.removed).map(t=>t.binding)),s=new Set;for(const t of this._devices)t.id!==this._markerDialog?.devId&&("device"===t.bindingKind&&t.bindingRef&&s.add("device:"+t.bindingRef),"entity"===t.bindingKind&&t.bindingRef&&s.add("entity:"+t.bindingRef));const n=new Set;for(const t of this._devices)"device"===t.bindingKind&&t.name&&n.add(t.name.trim()+"|"+(t.area||""));const o=[];for(const e of Object.values(t.devices)){if("service"===e.entry_type)continue;const t="device:"+e.id;if(s.has(t))continue;const a=(e.name_by_user||e.name||e.id).trim();t!==this._markerDialog?.binding&&!i.has(t)&&n.has(a+"|"+(e.area_id||""))||o.push({value:t,label:a,sub:(e.model||this._t("marker.sub_device"))+("Group"===e.model?this._t("marker.sub_z2m_group"):"")})}const a=new Set(["group","template","derivative","min_max","threshold","integration","statistics","trend","utility_meter","tod","switch_as_x","schedule"]);for(const[n,r]of Object.entries(t.entities)){const l="entity:"+n;if(s.has(l))continue;if(yo(t,n,e)&&!i.has(l))continue;const c=a.has(r.platform),h="group"===r.platform;if(!c&&!h)continue;if(r.hidden&&!i.has(l))continue;const d=t.states[n];o.push({value:l,label:r.name||d?.attributes?.friendly_name||n,sub:n.split(".")[0]+" · "+("group"===r.platform?this._t("marker.sub_group"):this._t("marker.sub_helper"))})}if(this._markerDialog?.showEntities){const n=new Set(o.map(t=>t.value));for(const[a,r]of Object.entries(t.entities)){const l="entity:"+a;if(s.has(l)||n.has(l)||r.hidden&&!i.has(l))continue;if(yo(t,a,e)&&!i.has(l))continue;const c=t.states[a],h=r.name||c?.attributes?.friendly_name||a,d=r.device_id?t.devices[r.device_id]:null,u=d&&(d.name_by_user||d.name)||"";o.push({value:l,label:h,sub:a.split(".")[0]+" · "+this._t("marker.sub_entity")+(u?" · "+u:"")})}}const r=(this._markerDialog?.bindingFilter||"").toLowerCase().trim(),l=r?o.filter(t=>(t.label+" "+t.sub+" "+t.value).toLowerCase().includes(r)):o;return l.sort((t,e)=>t.label.localeCompare(e.label)),l.slice(0,200)}_physicalBodiesR(t=this._spaceModel()){if(!t)return[];const e=`${t.id}|${this._cfgEpoch}|${this._cellCm}|${this._gridPitch}`;if(this._physicalBodiesCache?.key===e)return this._physicalBodiesCache.all;const i=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t));return this._physicalBodiesCache={key:e,...i},i.all}_rawPhysicalBodiesR(t=this._spaceModel()){if(!t)return[];this._physicalBodiesR(t);const e=this._physicalBodiesCache;return e?[...e.drafts,...e.partitions,...e.columns]:[]}_cleanFloor(t,e,i=this._spaceModel()){if(!i)return{floor:e,geom:null,path:"",area:Ol([[[...e,e[0]]]])};const s=t.id||`#${i.rooms.indexOf(t)}`,n=`${i.id}|${this._cfgEpoch}|${s}`;if(!this._rszPreview){const t=f_(this._cleanFloorCache,n);if(t.hit)return t.value}const o=e.map(t=>t[0]),a=e.map(t=>t[1]),r=[Math.min(...o),Math.min(...a),Math.max(...o),Math.max(...a)],l=this._physicalBodiesR(i).filter(t=>{const e=t.map(t=>t[0]),i=t.map(t=>t[1]);return Math.max(...e)>=r[0]&&Math.min(...e)<=r[2]&&Math.max(...i)>=r[1]&&Math.min(...i)<=r[3]}),c=l.length?zl(e,l):null,h={floor:e,geom:c,path:c?Dl(c):"",area:Ol(c||[[[...e,e[0]]]])};return this._rszPreview||v_(this._cleanFloorCache,n,h,600),h}_autoIconForBinding(t){if("virtual"===t)return"mdi:map-marker";const[e,i]=t.split(":");if(!i)return"";const s=this._fullRegistryHass,n=this._bindingStatus(t),o="active"===n.kind?n.enabledEntityIds:n.allEntityIds;if("device"===e){const t=s.devices?.[i];if(!t)return"mdi:help-circle";const e=o;return e.some(t=>t.startsWith("lock."))?"mdi:lock":fo(s,t.name_by_user||t.name||"",t.model,e,this._iconRules)}if("entity"===e){const t=s.entities?.[i],e=this.hass.states?.[i],n=t?.name||e?.attributes?.friendly_name||i;return i.startsWith("lock.")?"mdi:lock":fo(s,n,"",[i],this._iconRules)}return""}_allRoomsFlat(){const t=[];for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area?t.push({value:e.id+"#"+i.area,label:(e.title||e.id)+" · "+i.name}):i.id&&t.push({value:e.id+"#@"+i.id,label:(e.title||e.id)+" · "+i.name+" · "+this._t("marker.subarea")});return t}_errText(t){if(!t)return this._t("err.unknown");if("string"==typeof t)return t;if("invalid_passage_fields"===t.code){const e=String(t.message||t.error||"").match(/space=([^;]*);\s*opening=([^;]*);\s*fields=([^;]*)/);if(e){const t=this._serverCfg?.spaces?.find(t=>String(t.id)===e[1]),i={contact:"opening.contact_label",lock:"opening.lock_label",invert:"opening.invert",flip_h:"opening.flip_h",flip_v:"opening.flip_v"},s=e[3].split(",").filter(Boolean).map(t=>i[t]?this._t(i[t]):t).join(", ");return this._t("opening.invalid_passage_fields",{room:t?.title||e[1],fields:s})}}if("invalid_partition_opening_jamb_margin"===t.code){const e=String(t.message||t.error||"").match(/margin_cm=([^;]*)/),i=e?Number(e[1]):NaN;if(Number.isFinite(i))return this._t("opening.partition_jamb_margin",{distance:ri(i,this._imperial)})}if(t.message)return t.message;if(t.error)return t.error;if(null!=t.code)return this._t("err.code",{code:t.code});try{return JSON.stringify(t)}catch{return String(t)}}_backupErrorText(t){const e=t?.code??t?.error;if("string"==typeof e){const t=`backup.error.${e}`,i=this._t(t);if(i!==t)return i}return this._errText(t)}async _pickMarkerFiles(t){const e=t.target,i=e.files?[...e.files]:[];if(e.value="",!i.length||!this._markerDialog)return;const s=this._markerDialog.uploadId||this._markerDialog.devId||"new",n=[];for(const t of i)try{const e=new FormData;e.append("marker_id",s),e.append("file",t,t.name);const i=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth("/api/houseplan/upload",{method:"POST",body:e}):await fetch("/api/houseplan/upload",{method:"POST",body:e,headers:this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}),o=await i.json().catch(()=>({}));if(!i.ok||o.error){const t={too_large:this._t("err.too_large",{mb:o.max_mb||50}),bad_ext:this._t("err.bad_ext"),unauthorized:this._t("err.unauthorized")};throw new Error(t[o.error]||o.error||"HTTP "+i.status)}n.push({name:o.name||t.name,url:o.url})}catch(e){this._showToast(this._t("toast.file_failed",{name:t.name,err:this._errText(e)}))}n.length&&this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:[...this._markerDialog.pdfs,...n]},this._showToast(this._t("toast.files_attached",{n:n.length})))}_removeMarkerPdf(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:this._markerDialog.pdfs.filter(e=>e.url!==t)})}_markerLightFields(t){const e={};if(t.lightRoleTouched?"always"===t.lightRole?e.is_light=!0:"never"===t.lightRole&&(e.is_light=!1):t.originalHasIsLight&&(e.is_light=t.originalIsLight??null),t.lightEntityTouched?t.lightEntity&&(e.light_entity=t.lightEntity):t.originalHasLightEntity&&(e.light_entity=t.originalLightEntity??null),t.glowTouched){if("auto"!==t.glowMode){const i={c:Rt(t.glowColor,this._fillColors.glow_light.c)};"fixed"===t.glowMode&&(i.bri=Math.max(.01,Math.min(1,Math.round(t.glowBrightness)/100))),e.glow_color=i}}else t.originalHasGlowColor&&(e.glow_color=t.originalGlowColor??null);return e}_markerTapActionFields(t){return t.tapActionTouched?{tap_action:t.tapAction||null}:t.originalHasTapAction?{tap_action:t.originalTapAction??null}:{}}_markerToggleEntityFields(t){return(e={touched:t.toggleEntityTouched,originalHas:t.originalHasToggleEntity,original:t.originalToggleEntity,value:t.toggleEntity}).touched?e.value?{toggle_entity:e.value}:{}:e.originalHas?{toggle_entity:e.original??null}:{};var e}async _saveMarker(){const t=this._markerDialog;if(!t||t.busy)return;const e=this._effectiveMarkerTapAction(t);if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return;if("virtual"===t.binding&&!t.name.trim())return void this._showToast(this._t("toast.virtual_name_required"));if("run"===e&&!t.tapTarget)return void this._showToast(this._t("toast.run_target_required"));if(t.valueBadgeTouched&&t.valueBadgeEnabled&&!t.valueBadgeSource)return void this._showToast(this._t("toast.value_badge_source_required"));if("ha"===t.bindingMode){const e=this._bindingStatus(t.binding),i=t.devId?this._markers.find(e=>e.id===t.devId):null,s=!i||i.binding!==t.binding;if("active"!==e.kind&&s)return void this._showToast(this._t("ha_disabled"===e.kind?"toast.ha_disabled_add":"toast.ha_binding_unverified"));if("ha_disabled"===e.kind&&!0===i?.hidden&&!t.hideFromPlan)return this._markerDialog={...t,hideFromPlan:!0},void this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device"))}const i=this._serverCfg;if(!i)return;const s=i.markers||[],n=Bs(t.room);let o=n?.space||null;const a=n?.area||null,r=n?.roomId||null,l=Fi(t.binding,t.devId,()=>"v_"+Date.now().toString(36)),c=t.devId,h=c?this._devices.find(t=>t.id===c):null,d=n?.space||h?.space||null,u=d?this._spaceModelById(d):this._spaceModel();if(!u)return;const p=u.id;"virtual"!==t.binding||o||(o=p),this._markerDialog={...t,busy:!0};try{const n="virtual"===t.binding?[]:s.filter(e=>e.removed&&e.binding===t.binding).map(t=>t.id),d=n.length>0,_=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),g=s.find(t=>t.id===l||t.id===c)?.vacuum||null,m={id:l,vacuum:g,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle?t.angle:null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===e&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:_.length?_:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=m_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:!!t.hideFromPlan};("virtual"===t.binding||t.room)&&(m.space=o,m.area=a,m.room_id=r);const f=h?.marker?.room_id??null,v=!!t.room&&null!=h&&(h.space!==o||h.area!==a||f!==r);let y=!1;const b=t.uploadId||c;if(b&&b!==l&&m.pdfs?.length)try{const t=await this.hass.callWS({type:"houseplan/files/migrate",from_id:b,to_id:l}),e=t?.mapping||{};m.pdfs=function(t,e,i,s){if(!e||!i||e===i)return t;const n="/files/"+e+"/",o="/files/"+i+"/";return t.map(t=>{if(!t.url.includes(n))return t;const e=t.url.split(n)[1]||"",[i,a]=[e.split("?")[0],e.includes("?")?"?"+e.split("?")[1]:""];if(s){const e=s[decodeURIComponent(i)]??s[i];return e?{...t,url:t.url.split(n+i)[0]+o+encodeURIComponent(e)+a}:t}return{...t,url:t.url.split(n).join(o)}})}(m.pdfs,b,l,e),y=Object.keys(e).length>0}catch(t){this._showToast(this._t("toast.files_migrate_failed",{err:this._errText(t)}))}i.markers=s,c&&c!==l&&(i.markers=function(t,e,i){if(!e||!i||e===i)return[...t];const s=`marker:${e}`,n=`marker:${i}`;return t.map(t=>{const e=Array.isArray(t.controls)?t.controls.map(t=>t===s?n:t):t.controls,i="derived_marker_state"===t.value_badge?.source?.kind&&t.value_badge.source.ref===s?{...t.value_badge,source:{...t.value_badge.source,ref:n}}:t.value_badge;return e===t.controls&&i===t.value_badge?t:{...t,controls:e,value_badge:i}})}(i.markers,c,l)),c&&c!==l&&"derived_marker_state"===m.value_badge?.source?.kind&&m.value_badge.source.ref===`marker:${c}`&&(m.value_badge.source={kind:"derived_marker_state",ref:`marker:${l}`}),i.markers=i.markers.filter(t=>t.id!==l&&t.id!==c&&("virtual"===m.binding||t.binding!==m.binding)),i.markers.push(m);let w=null;const k=c?this._layout[c]:null,x=k?{s:k.s||h?.space||this._space,x:k.x,y:k.y}:c&&h&&this._defPos[c]?this._normPos(h.space,this._defPos[c].x,this._defPos[c].y):null;if(!d&&x&&x.s===p)l===c&&this._layout[l]&&!v||(w={s:x.s,x:x.x,y:x.y},this._layout={...this._layout,[l]:w});else if(d||!this._layout[l]||v){let t=u.vb[0]+u.vb[2]/2,e=u.vb[1]+u.vb[3]/2;const i=r?u.rooms.find(t=>t.id===r):a?u.rooms.find(t=>t.area===a):void 0;i&&([t,e]=this._roomCenter(i)),w=this._normPos(p,t,e),this._layout={...this._layout,[l]:w}}await this._saveConfigNow(),w&&this._noteLayoutRev(await this.hass.callWS({type:"houseplan/layout/update",device_id:l,pos:w}));const $=new Set(n);c&&c!==l&&$.add(c),$.delete(l);for(const t of $)delete this._layout[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{});y&&b&&await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:b}).catch(()=>{}),this._markerDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_saved"))}catch(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteMarker(){const t=this._markerDialog;if(!t||t.busy||!t.devId)return;const e=t.devId?this._devices.find(e=>e.id===t.devId):null;if(!e)return;const i=t.name||this._t("device.fallback");if(!confirm(this._t("confirm.remove_marker",{name:i})))return;const s=this._serverCfg;s.markers=s.markers||[];const n=s.markers,o="virtual"===e.bindingKind?"virtual":e.bindingKind&&e.bindingRef?`${e.bindingKind}:${e.bindingRef}`:"";if(!o)return;const a=function(t,e,i,s){const n=new Set([e]),o=t.filter(t=>{const o=t.id===e||!s&&t.binding===i;return o&&n.add(t.id),!o});return{markers:s?o:[...o,{id:e,binding:i,removed:!0,hidden:!0}],cleanupIds:n}}(s.markers,e.id,o,"virtual"===e.bindingKind);var r,l;s.markers=(r=a.markers,l=a.cleanupIds,r.map(t=>{if(!Array.isArray(t.controls))return t;const e=t.controls.filter(t=>!("string"==typeof t&&t.startsWith("marker:")&&l.has(t.slice(7))));return e.length===t.controls.length?t:{...t,controls:e.length?e:null}}));const c=a.cleanupIds;this._markerDialog={...t,busy:!0};try{await this._saveConfigNow();for(const t of c){delete this._layout[t],delete this._defPos[t],this._dirtyPos.delete(t),this._sentPos.delete(t);const e=this._activityRt.get(t);e&&clearTimeout(e.timer),this._activityRt.delete(t),this._vacRt.delete(t),delete this._vacSrvTrails[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{}),await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:t}).catch(()=>{}),await this.hass.callWS({type:"houseplan/trail/delete",marker_id:t}).catch(()=>{})}this._markerDialog=null,this._infoCard?.id===e.id&&this._closeInfoCard(),this._selId===e.id&&(this._selId=null),this._drag?.id===e.id&&(this._drag=null),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_removed"))}catch(t){this._serverCfg===s&&(s.markers=n),this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}_normPos(t,e,i){return{s:t,x:e/T_,y:i/T_}}_openSpaceDialog(t,e){if(this._serverStorage&&this._serverCfg)if("edit"===t){const i=this._serverCfg.spaces.find(t=>t.id===e);if(!i)return;const s=ls(i),n=i.settings?.custom_fill&&"object"==typeof i.settings.custom_fill?as(i.settings.custom_fill):null,o="none"===s.fill?{...n||os,a:0}:n;this._spaceDialog={mode:t,spaceId:e,title:i.title,planUrl:i.plan_url||null,planFile:null,source:i.plan_url?"file":"draw",showBorders:s.showBorders,showNames:s.showNames,displayTouched:!0,hideDecor:s.hideDecor,hideOpenings:s.hideOpenings,roomColor:s.color,roomOpacity:s.opacity,fillMode:"none"===s.fill?"custom":s.fill,customFill:o,glowEnabled:s.glow,bgColor:s.bgColor,bgMode:"static"===i.settings?.bg_mode||"daynight"===i.settings?.bg_mode?i.settings.bg_mode:null,northDeg:Ya({},i.settings),sunRays:"boolean"==typeof i.settings?.sun_rays?i.settings.sun_rays:null,tempMin:s.tempMin,tempMax:s.tempMax,showLqi:s.showLqi??this._config?.show_signal??!0,cardFontScale:s.cardFontScale,labelTemp:s.labelTemp,labelHum:s.labelHum,labelLqi:s.labelLqi,labelLight:s.labelLight,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,busy:!1}}else this._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:{...os,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1};else this._showToast(this._t("toast.integration_missing"))}async _pickPlanFile(t){const e=t.target,i=e.files?.[0];if(!i||!this._spaceDialog)return;const s={"image/svg+xml":"svg","image/png":"png","image/jpeg":"jpg","image/webp":"webp"}[i.type]||(i.name.toLowerCase().endsWith(".svg")?"svg":"");if(!s)return void this._showToast(this._t("toast.plan_formats"));const n=new Uint8Array(await i.arrayBuffer());let o="";for(let t=0;t{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:1.414),e.onerror=()=>t(1.414),e.src=r});URL.revokeObjectURL(r),this._spaceDialog={...this._spaceDialog,planFile:{ext:s,b64:a,aspect:l,name:i.name}}}_useServerPlan(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let e=0;e<40;e++){const e=this._display(t);if(e){const i=await new Promise(t=>{const i=new Image;i.onload=()=>t(i.naturalWidth&&i.naturalHeight?i.naturalWidth/i.naturalHeight:0),i.onerror=()=>t(0),i.src=e}),s=this._spaceDialog;return s&&s.planUrl===t&&Number.isFinite(i)&&i>0?(this._spaceDialog={...s,savedAspect:i},i):0}if(await new Promise(t=>setTimeout(t,150)),this._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){if(confirm(this._t("confirm.delete_plan",{name:t})))try{await this.hass.callWS({type:"houseplan/plans/delete",name:t});const e=this._spaceDialog;e?.saved&&(this._spaceDialog={...e,saved:e.saved.filter(e=>e.name!==t)})}catch(t){this._showToast(this._t("toast.plan_delete_failed",{err:this._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return j`
${this._t("space.loading")}
`;const e=t.saved||[];if(!e.length)return j`
${this._t("space.no_saved")}
`;return j`
+
`:j``}_openingAt(t){if(!this._openingsR.length)return null;const e=this._openingsR.flatMap(e=>{const i=e.angle*Math.PI/180,s=t[0]-e.rx,n=t[1]-e.ry,o=s*Math.cos(i)+n*Math.sin(i);return Math.abs(o)>e.rlen/2+12?[]:[{o:e,localY:-s*Math.sin(i)+n*Math.cos(i)}]});if(!e.length)return null;const i=this._spaceModel();if(!i)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return e.find(({o:t,localY:e})=>{const i="gate"===t.type?!t.flip_v:t.flip_v,s=t.partitionHost||this._spaceWalls.length||"gate"===t.type?this._openingFace(t,n,!!i):{ox:0,oy:0,cm:0,side:-1},o=tu({type:t.type,length:t.rlen,angle:t.angle,amount:this._openingAmt(t),flipH:!!t.flip_h,flipV:!!t.flip_v,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s});return Math.abs(e)<=o.hitHalf})?.o||null}_resolveOpeningPlacement(t){const e=this._openingPreset;if("opening"!==this._tool||!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._openCuts(),n=this._openingWallIndexFor(i,s),o=`${n.key}|partitions:${this._cfgEpoch}`;var a,r,l;this._openingPlacementIntervalsCache&&this._openingPlacementIntervalsCache.key===o||(this._openingPlacementIntervalsCache={key:o,value:[...tl(i.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),...(a=i.partitions,r=this._cellCm,l=this._gridPitch,a.flatMap(t=>!sd(t.a)||!sd(t.b)||Math.hypot(t.b[0]-t.a[0],t.b[1]-t.a[1])<=1e-9?[]:[{roomId:"",a:[t.a[0],t.a[1]],b:[t.b[0],t.b[1]],key:`partition:${t.id}`,kind:"outer",cm:t.cm,open:!1,half:vr(t.cm,r,l)/2,partitionHost:{kind:"partition",id:t.id}}]))]});const c=c_({pointer:[t[0],t[1]],preset:e,geometryRevision:this._cfgEpoch,renderedLength:this._cmToUnits(e.lengthCm),intervals:this._openingPlacementIntervalsCache.value,baseTolerance:1.5*this._gridPitch,bodyPointerPadding:this._cssPxToRender(this._boundaryCoarse?10:6),gridStep:this._gridPitch});this._openingJambBlockCm=c.jambBlockedTarget?c.jambBlockedTarget.physicalHalfWidth/this._gridPitch*this._cellCm:null;const h=c.candidate;if(!h)return null;const d="gate"===h.type?!h.flipV:h.flipV;let u;if(h.host){const t=ad({id:"preview",type:h.type,x:h.x/P_,y:h.y/P_,angle:h.angle,length:h.renderedLength/P_,host:h.host},i.partitions,P_,this._cellCm,this._gridPitch).resolved;u=t?hd(t,d):{ox:0,oy:0,cm:0,side:-1}}else u=bl(n.value,{x:h.x,y:h.y,angle:h.angle,length:h.renderedLength,flip_v:d});const p="mi"===this.hass?.config?.unit_system?.length,_=pi([h.x,h.y],h.angle,h.renderedLength,i.rooms,this._gridPitch/2),g=(_?[{distance:_.sideA,midpoint:_.midA},{distance:_.sideB,midpoint:_.midB}]:h.measure.labels).map(t=>({x:t.midpoint[0],y:t.midpoint[1],text:ri(t.distance/this._gridPitch*this._cellCm,p)}));return{...h,face:u,measure:{labels:g,guide:h.measure.guide}}}_activateOpeningPlacement(t){this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingPreset=function(t,e){return{type:t,lengthCm:o_(t),flipH:!1,flipV:!1,revision:e}}(t,++this._openingPresetRevision),this._openingHoverCandidate=null,this._cursorPt=null)}_clearOpeningPlacement(t){this._openingHoverCandidate=null,this._openingJambBlockCm=null,t&&(this._openingPreset=null,this._openingRebindId=null)}_openingClick(t){const e=this._spaceModel();if(!e)return;const i=this._openingRebindId?null:this._openingAt(t);if(i)return void this._editOpening(i);const s=this._openingPreset;if(!s)return;const n=this._openingHoverCandidate,o=n&&h_(n,[t[0],t[1]],s.revision,this._cfgEpoch)?n:this._resolveOpeningPlacement(t);if(!o){if(null!=this._openingJambBlockCm)return void this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(this._openingJambBlockCm,this._imperial)}));const i=1.5*this._gridPitch,s=ui(t,e.rooms,i);return s&&function(t,e,i,s,n){for(const o of s)if(!(Hs([t,e],o)>n)&&Rr([o[0],o[1]],[o[2],o[3]],i))return!0;return!1}(s.x,s.y,s.angle,this._openCuts(),i)?void this._showToast(this._t("toast.opening_on_virtual")):void this._showToast(this._t("toast.opening_no_wall"))}const a=this._openingRebindId?this._curSpaceCfg?.openings?.find(t=>t.id===this._openingRebindId):null;this._openingDialog={...a?{id:a.id,type:a.type,lengthCm:Math.round(a.length*P_/this._gridPitch*this._cellCm),lengthTouched:!1,contact:a.contact||"",lock:a.lock||"",invert:!!a.invert,flipH:!!a.flip_h,flipV:!!a.flip_v}:{type:o.type,lengthCm:o.lengthCm,contact:"",lock:"",invert:!1,flipH:o.flipH,flipV:o.flipV},...o.host?{host:o.host}:{},x:o.x,y:o.y,angle:o.angle},this._openingRebindId=null,this._openingHoverCandidate=null,this._cursorPt=null}_editOpening(t){this._openingDialog={id:t.id,type:t.type,lengthCm:Math.round(t.rlen/this._gridPitch*this._cellCm),lengthTouched:!1,contact:t.contact||"",lock:t.lock||"",invert:!!t.invert,flipH:!!t.flip_h,flipV:!!t.flip_v,...t.host?{host:{...t.host}}:{},x:t.rx,y:t.ry,angle:t.angle}}_opPointerDown(t,e){if("plan"===this._mode&&this._spaceModel()&&"resize"!==this._tool){t.preventDefault(),t.stopPropagation();try{H_(t)}catch{}this._opDrag={id:e.id,moved:!1,sx:t.clientX,sy:t.clientY,dirty:!1,before:this._geometrySnapshot()}}}_opPointerMove(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;if(Math.abs(t.clientX-this._opDrag.sx)+Math.abs(t.clientY-this._opDrag.sy)<=3)return;const i=this._spaceModel();if(!i)return;const s=this._svgPoint(t),n=this._curSpaceCfg,o=n?.openings?.find(t=>t.id===e.id);if(!o)return;if("partition"===o.host?.kind){const t=i.partitions.find(t=>t.id===o.host.id);if(!t)return;const e=t.b[0]-t.a[0],n=t.b[1]-t.a[1],a=Math.hypot(e,n);if(!(a>1e-9))return;const r=e/a,l=n/a;if(Math.abs((s[0]-t.a[0])*l-(s[1]-t.a[1])*r)>4*this._gridPitch)return;const c=o.length*P_/2+nd(t,this._cellCm,this._gridPitch);let h=(s[0]-t.a[0])*r+(s[1]-t.a[1])*l;if(h=Math.round(h/this._gridPitch)*this._gridPitch,h=Math.max(c,Math.min(a-c,h)),a<2*c-1e-9)return;const d=h/a,u=(t.a[0]+r*h)/P_,p=(t.a[1]+l*h)/this._spaceH;let _=180*Math.atan2(n,e)/Math.PI;_>=90?_-=180:_<-90&&(_+=180);const g=o.host.t!==d||o.x!==u||o.y!==p||o.angle!==_;return this._opDrag.moved=!0,g&&(this._opDrag.dirty=!0),o.host={...o.host,t:d},o.x=u,o.y=p,o.angle=_,this._opMeasure=null,g&&this._cfgEpoch++,void this.requestUpdate()}const a=ui(s,i.rooms,4*this._gridPitch);if(!a)return;this._opDrag.moved=!0;const r=this._opRuler(a,o.length*P_);this._opMeasure=r.measure;const l=r.x/P_,c=r.y/this._spaceH,h=o.x!==l||o.y!==c||o.angle!==a.angle;h&&(this._opDrag.dirty=!0),o.x=l,o.y=c,o.angle=a.angle,h&&this._cfgEpoch++,this.requestUpdate()}_opRuler(t,e){const i=this._spaceModel()?.rooms||[],s=this._gridPitch/2;let n=t.x,o=t.y,a=pi([n,o],t.angle,e,i,s);if(a&&a.centered&&(n!==a.wallCenter[0]||o!==a.wallCenter[1]))[n,o]=a.wallCenter,a=pi([n,o],t.angle,e,i,s);else if(a){const[r,l]=a.wallA,[c,h]=a.wallB,d=c-r,u=h-l,p=Math.hypot(d,u);if(p>0){const c=this._gridPitch,h=Math.min(e/2,p/2);let _=Math.round(((n-r)*d+(o-l)*u)/p/c)*c;_=Math.max(h,Math.min(p-h,_)),n=r+_/p*d,o=l+_/p*u,a=pi([n,o],t.angle,e,i,s)||a}}if(!a)return{x:n,y:o,angle:t.angle,measure:null};const r="mi"===this.hass?.config?.unit_system?.length,l=(t,e)=>({x:e[0],y:e[1],text:ri(t/this._gridPitch*this._cellCm,r)});return{x:n,y:o,angle:t.angle,measure:{labels:[l(a.sideA,a.midA),l(a.sideB,a.midB)],guide:a.centered?{x:a.wallCenter[0],y:a.wallCenter[1],angle:t.angle}:null}}}_opPointerUp(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;const i=this._opDrag,s=i.moved;this._opMeasure=null,s&&i.dirty&&(this._recordGeometry(this._t("history.move_opening"),i.before),this._saveConfig()),s?window.setTimeout(()=>this._opDrag=null,0):this._opDrag=null}_opClick(t,e){"plan"===this._mode&&"resize"===this._tool||(t.stopPropagation(),this._opDrag?.moved||"plan"===this._mode&&this._editOpening(e))}_saveOpening(){const t=this._openingDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=this._geometrySnapshot(),n=this._spaceH,o=(e.openings||[]).find(e=>e.id===t.id),a={...o||{},id:t.id||"o"+Date.now().toString(36),type:t.type,x:t.x/P_,y:t.y/n,angle:t.angle,length:o&&!t.lengthTouched?o.length:this._cmToUnits(Math.max(20,t.lengthCm))/P_,...t.host?{host:{...t.host}}:{}};if(a.host){const t=ld(o,a)?rd(a,i.partitions,P_,this._cellCm,this._gridPitch):ad(a,i.partitions,P_,this._cellCm,this._gridPitch);if(!t.resolved){const e=i.partitions.find(t=>t.id===a.host.id);if("does-not-fit-jamb"===t.reason&&e){const t=nd(e,this._cellCm,this._gridPitch);this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(t/this._gridPitch*this._cellCm,this._imperial)}))}else this._showToast(this._t("opening.partition_orphan"));return}const s=(e.openings||[]).flatMap(t=>{if(!t.host||t.id===a.id)return[];const e=ad(t,i.partitions,P_,this._cellCm,this._gridPitch).resolved;return e?[e]:[]});if(function(t,e,i=1e-9){const s=t.length/(2*t.axis.length),n=t.t-s,o=t.t+s;return e.some(e=>{if(e.host.id!==t.host.id||e.opening.id===t.opening.id)return!1;const s=e.length/(2*e.axis.length);return Math.max(n,e.t-s)t.id===a.id);r>=0?e.openings[r]=a:e.openings.push(a),this._recordGeometry(this._t(t.id?"history.edit_opening":"history.add_opening"),s),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_deleteOpening(){const t=this._openingDialog,e=this._curSpaceCfg;if(!t?.id||!e?.openings)return;const i=this._geometrySnapshot();e.openings=e.openings.filter(e=>e.id!==t.id),this._recordGeometry(this._t("history.delete_opening"),i),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_contactCandidates(){const t=[];for(const e of Object.keys(this.hass.states)){if(!this._openingEntityAvailable(e))continue;const i=e.split(".")[0];if("binary_sensor"!==i&&"cover"!==i)continue;const s=this.hass.states[e],n=["door","window","opening","garage_door","garage"].includes(s?.attributes?.device_class||"");("cover"!==i||n)&&t.push([e,s?.attributes?.friendly_name||e,n?0:1])}return t.sort((t,e)=>t[2]-e[2]||t[1].localeCompare(e[1])).map(([t,e])=>({value:t,label:e}))}_lockCandidates(){return Object.keys(this.hass.states).filter(t=>t.startsWith("lock.")&&this._openingEntityAvailable(t)).map(t=>({value:t,label:this.hass.states[t]?.attributes?.friendly_name||t})).sort((t,e)=>t.label.localeCompare(e.label))}_mergeClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms,s=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!s?.id)return;const n=s.id;if(!this._mergeSel||this._mergeSel===n)return void(this._mergeSel=this._mergeSel===n?null:n);const o=i.find(t=>t.id===this._mergeSel),a=o?ci(o):null,r=ci(s),l=a&&r?function(t,e){if(!t||!e||t.length<3||e.length<3)return null;const i=si(Pi(t),Pi(e));if(1!==i.length)return null;if(1!==i[0].length)return null;const s=i[0][0].slice(0,-1).map(t=>[t[0],t[1]]);return s.length>=3?s:null}(a,r):null;if(!l)return this._showToast(this._t("toast.merge_not_adjacent")),void(this._mergeSel=null);this._mergeDialog={aId:this._mergeSel,bId:n,poly:l,pick:"a"},this._mergeSel=null}_commitMerge(){const t=this._mergeDialog,e=this._curSpaceCfg;if(!t||!e||!this._spaceModel())return;const i=this._geometrySnapshot(),s=this._spaceH,n="a"===t.pick?t.aId:t.bId,o="a"===t.pick?t.bId:t.aId,a=e.rooms.find(t=>t.id===n);a?(a.poly=t.poly.map(t=>[t[0]/P_,t[1]/s]),delete a.x,delete a.y,delete a.w,delete a.h,e.rooms=e.rooms.filter(t=>t.id!==o),this._commitOpenSpans(),this._recordGeometry(this._t("history.merge_rooms"),i),this._saveConfig(),this._mergeDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.rooms_merged",{name:a.name||""}))):this._mergeDialog=null}_splitClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms;if(!this._splitSel){const e=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!e?.id)return;return void(this._splitSel={roomId:e.id,pts:[]})}const s=i.find(t=>t.id===this._splitSel.roomId),n=s?ci(s):null;if(!s||!n)return void(this._splitSel=null);const o=.02*this._gridPitch,a=6*this._gridPitch,r=function(t,e){if(!e||e.length<2)return null;let i=null,s=1/0;for(let n=0;n=n)continue;n=_;const g=Math.sqrt(u),m=(i>0?Math.max(0,Math.min(g,Math.round(p*g/i)*i)):p*g)/g;s=[a+m*h,r+m*d]}return s}(r,n,this._gridPitch)||r,c=r&&l&&Math.hypot(r[0]-t[0],r[1]-t[1])<=a?l:null,h=!!c&&yi(c,n,o),d=this._splitSel.pts;if(!d.length)return h?void(this._splitSel={...this._splitSel,pts:[c]}):void this._showToast(this._t("toast.split_pick_wall"));if(!h){const e=this._snap(t);return bi(e,n,o)?void(this._splitSel={...this._splitSel,pts:[...d,e]}):void this._showToast(this._t("toast.split_pick_inside"))}const u=Ii(n,[...d,c],o);if(!u)return void this._showToast(this._t("toast.split_bad_cut"));this._resetRoomDialogFields();const[p,_]=u,g=Ti(p)>=Ti(_)?p:_,m=g===p?_:p;this._pendingSplit={roomId:s.id,mainPoly:g,newPoly:m},this._cursorPt=null,this._nameSel="",this._areaSel="",this._roomDialog=!0}get _contourClosed(){return this._path.length>=4&&this._samePt(this._path[0],this._path[this._path.length-1])&&(null!=this._closingWallCm||!this._activeDraftId)}_markupMove(t){if(!this._markup)return;const e=t.pointerType;if(e&&(this._boundaryPointerType=e),"column"===this._tool)return void(this._cursorPt=this._snap(this._svgPoint(t)));if("opening"===this._tool||"boundary"===this._tool||"wallthick"===this._tool)return void(this._cursorPt=this._svgPoint(t));const i="draw"===this._tool&&!this._contourClosed,s="split"===this._tool&&!!this._splitSel?.pts?.length;if(!i&&!s)return;const n=this._svgPoint(t);if(i){const e=this._resolvePlanDrawPoint(n,t.shiftKey);return this._planSnapHover={contextKey:e.contextKey,candidate:e.candidate},this._path.length?void(this._cursorPt=e.point):void this._syncPlanSnapActiveMarker(e.candidate)}this._cursorPt=this._snap(n)}get _openingPreview(){const t=this._openingPreset;if("opening"!==this._tool||!t||!this._cursorPt)return null;const e=this._cursorPt,i=this._openingHoverCandidate;if(i&&h_(i,[e[0],e[1]],t.revision,this._cfgEpoch))return i;if(this._openingAt(e))return this._openingHoverCandidate=null,null;const s=this._resolveOpeningPlacement(e);return this._openingHoverCandidate=s,s}get _opMeasureView(){return this._opMeasure||this._openingPreview?.measure||null}_saveRoom(){(this._areaSel||this._nameSel.trim())&&(this._wallFaceBatch?this._decideWallFace(!0):this._commitRoom())}_decideWallFace(t){const e=this._wallFaceBatch;if(!e)return;const i=e.candidates[e.index];if(!i)return;const s=t?{candidate:i,create:!0,name:this._nameSel.trim(),area:this._areaSel||null,settings:this._roomSettingsFromDialog()?JSON.parse(JSON.stringify(this._roomSettingsFromDialog())):null}:{candidate:i,create:!1},n=[...e.decisions,s],o=e.index+1;if(o"number"==typeof t&&Number.isFinite(t)&&t>=0?t:null,n=.02*this._gridPitch,o=this._spaceModel();if(!o)return _r;for(const e of this._planSnapGeometrySnapshot().value.segments){if("room"===e.sourceKind||Hs(t,[e.a[0],e.a[1],e.b[0],e.b[1]])>n)continue;if("partition"===e.sourceKind)return s(o.partitions.find(t=>t.id===e.sourceId)?.cm)??_r;const i=e.sourceId.lastIndexOf(":"),a=i>=0?e.sourceId.slice(0,i):e.sourceId,r=i>=0?Number(e.sourceId.slice(i+1)):-1;return s(o.room_drafts.find(t=>t.id===a)?.segments[r]?.cm)??_r}for(let o=0;o+1{this._showToast(this._t(t,e)),this._roomDialogCancel()},n=t.decisions.filter(t=>t.create),o=n.map(t=>t.candidate.ring),a=i.rooms;for(let t=0;ti.id!==e&&!!ci(i)&&Ci(o[t],ci(i)));if(i)return void s("toast.room_overlap",{name:i.name||""})}if((e.rooms||[]).length+n.length>400)return void s("toast.physical_limit");if(n.some(t=>t.candidate.split&&!e.rooms.some(e=>e.id===t.candidate.split.roomId)))return void s("toast.contour_cannot_close");const r=2e-4*this._gridPitch,l=new Map;for(let e=0;et.candidate.atomKeys)),i=n.some(t=>t.candidate.consumeAllActive);for(const s of Gd(this._wallGraphSources(t.activePath),r)){const t=s.sourceKeys.find(t=>l.has(t));!t||i||e.has(s.key)||c.push({a:s.a,b:s.b,cm:l.get(t)})}}else c.push(...Sd(t.activePath,t.activeCms,_r));if((e.partitions||[]).length+c.length>F_)return void s("toast.physical_limit");const h=this._geometrySnapshot(),d=n.some(t=>!!t.candidate.split),u=d?el(i.rooms,e.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,P_):null,p=d&&Array.isArray(e.walls)?e.walls:null;for(const t of n){const i=t.candidate.split;if(!i)continue;const n=e.rooms.find(t=>t.id===i.roomId);if(!n)return void s("toast.contour_cannot_close");n.poly=i.mainPoly.map(t=>[t[0]/P_,t[1]/this._spaceH]),delete n.x,delete n.y,delete n.w,delete n.h}const _=Date.now().toString(36),g=[];if(n.forEach((t,i)=>{const s=t.area?this.hass.areas[t.area]?.name:"",n={id:`r${_}-${i}`,name:t.name||s||this._t("room.default_name"),area:t.area||null,poly:t.candidate.ring.map(t=>[t[0]/P_,t[1]/this._spaceH]),...t.settings?{settings:JSON.parse(JSON.stringify(t.settings))}:{}};e.rooms.push(n),g.push({room:n,decision:t})}),t.activeDraftId&&Array.isArray(e.room_drafts)&&(e.room_drafts=e.room_drafts.filter(e=>e.id!==t.activeDraftId),e.room_drafts.length||delete e.room_drafts),c.length&&(e.partitions||=[],c.forEach((t,i)=>e.partitions.push({id:`partition-${_}-${i}`,a:[t.a[0]/P_,t.a[1]/P_],b:[t.b[0]/P_,t.b[1]/P_],cm:t.cm}))),d){this._commitOpenSpans();const t=this._normalizeWalls(u,this._openCuts());t.length?e.walls=t:p?.length?e.walls=p:delete e.walls}if(g.length){this._cfgEpoch++;const i=this._openCuts(),s=this._spaceModel();if(!s)return;let n=e.walls;for(const{room:e,decision:o}of g){const a=o.candidate.ring,r=this._wallSourceCmAt(a[0],t.activePath,t.activeCms);n=Er(n,s.rooms,e.id,r,this._wallKeyPitch,i,P_);for(const o of tl(s.rooms,n,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){if(o.roomId!==e.id||"outer"!==o.kind)continue;const i=[(o.a[0]+o.b[0])/2,(o.a[1]+o.b[1])/2];n=Ir(n,o.a,o.b,this._wallSourceCmAt(i,t.activePath,t.activeCms),this._wallKeyPitch,P_)}}const o=this._normalizeWalls(n,i);o.length?e.walls=o:delete e.walls}this._recordGeometry(this._t("history.wall_face_batch"),h),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._wallFaceBatch=null,this._roomDialog=!1,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices();const m=new Set(n.map(t=>t.area).filter(t=>!!t));if(m.size){const t={...this._layout};for(const e of this._devices){if(!m.has(e.area||"")||e.space!==this._space)continue;if(this._layout[e.id])continue;const i=this._defPos[e.id];i&&(t[e.id]={s:this._space,x:i.x/P_,y:i.y/P_},this._dirtyPos.add(e.id))}this._layout=t,this._persistLayout()}this._showToast(this._t(n.length?"toast.wall_rooms_saved":"toast.wall_chain_saved",{n:n.length}))}_commitRoom(){const t=this._curSpaceCfg,e=this._spaceModel();if(!t||!e)return;const i=this._geometrySnapshot(),s=this._spaceH,n=!!this._pendingSplit,o=n?el(e.rooms,t.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,P_):null,a=n&&Array.isArray(t.walls)?t.walls:null;let r;if(this._pendingSplit){const e=t.rooms.find(t=>t.id===this._pendingSplit.roomId);if(!e)return this._pendingSplit=null,this._splitSel=null,void(this._roomDialog=!1);e.poly=this._pendingSplit.mainPoly.map(t=>[t[0]/P_,t[1]/s]),delete e.x,delete e.y,delete e.w,delete e.h,r=this._pendingSplit.newPoly}else{if(!this._contourClosed)return;r=this._path.slice(0,-1)}const l=this._areaSel?this.hass.areas[this._areaSel]?.name:"",c={id:"r"+Date.now().toString(36),name:this._nameSel||l||this._t("room.default_name"),area:this._areaSel||null,poly:r.map(t=>[t[0]/P_,t[1]/s]),...this._roomSettingsFromDialog()?{settings:this._roomSettingsFromDialog()}:{}};if(t.rooms.push(c),!n&&this._activeDraftId&&Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),n){this._commitOpenSpans();const e=this._normalizeWalls(o,this._openCuts());e.length?t.walls=e:a?.length?t.walls=a:delete t.walls}if(!n){const e=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r],i=e[0]||this._drawWallCm;if(null!=i){this._cfgEpoch++;const s=this._openCuts(),n=this._spaceModel();if(!n)return;let o=Er(t.walls,n.rooms,c.id,i,this._wallKeyPitch,s,P_);for(const t of tl(n.rooms,o,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){if(t.roomId!==c.id||"outer"!==t.kind)continue;const s=[(t.a[0]+t.b[0])/2,(t.a[1]+t.b[1])/2],n=r.findIndex((t,e)=>{const i=r[(e+1)%r.length];return Hs(s,[t[0],t[1],i[0],i[1]])<=.02*this._gridPitch});n>=0&&(o=Ir(o,t.a,t.b,e[n]||i,this._wallKeyPitch,P_))}o=this._normalizeWalls(o,s),o.length?t.walls=o:delete t.walls}}this._recordGeometry(this._t(n?"history.split_room":"history.add_room"),i),this._saveConfig(),this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._pendingSplit=null,this._splitSel=null;const h=this._areaSel;this._areaSel="",this._nameSel="",this._roomDialog=!1,this._regSignature="",this._maybeRebuildDevices();let d=0;if(h){const t=P_,e={...this._layout};for(const i of this._devices){if(i.area!==h||i.space!==this._space)continue;if(d++,this._layout[i.id])continue;const s=this._defPos[i.id];s&&(e[i.id]={s:this._space,x:s.x/P_,y:s.y/t},this._dirtyPos.add(i.id))}this._layout=e,this._persistLayout()}const u=this._model.find(t=>t.id===this._space)?.rooms.length||0;this._showToast(h?this._t("toast.room_saved",{n:u,added:d}):this._t("toast.room_saved_no_area",{n:u}))}_cancelPath(){this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),this._roomDialog=!1,this._pendingSplit=null,this._wallFaceBatch=null,this._splitSel=null,this._mergeSel=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._clearOpeningPlacement(!0)}_resumeLastDraft(){const t=this._resumeDraftBySpace[this._space];if(!t)return;const e=this._spaceModel()?.room_drafts.find(e=>e.id===t);e?(this._activeDraftId=t,this._path=e.points.map(t=>[...t]),this._draftSegmentCms=e.segments.map(t=>t.cm),this._clearPlanSnapHover()):delete this._resumeDraftBySpace[this._space]}_roomDialogCancel(){if(this._roomDialog=!1,this._roomEditId)return this._roomEditId=null,this._nameSel="",void(this._areaSel="");if(this._wallFaceBatch){const t=this._wallFaceBatch;return this._wallFaceBatch=null,this._path=t.activePath.map(t=>[...t]),this._draftSegmentCms=[...t.activeCms],this._activeDraftId=t.activeDraftId,this._nameSel="",this._areaSel="",void this.requestUpdate()}if(this._pendingSplit)return this._pendingSplit=null,void(this._splitSel=null);this._undoPoint()}get _freeAreas(){const t=new Set;for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area&&t.add(i.area);for(const e of this._wallFaceBatch?.decisions||[])e.create&&e.area&&t.add(e.area);return Object.values(this.hass?.areas||{}).filter(e=>!t.has(e.area_id)).sort((t,e)=>(t.name||"").localeCompare(e.name||""))}_openMarkerDialog(t){if(this._vacAllCamerasFor=null,this._vacAllCameraCache=null,t&&this._ackNewDevice(t.id),this._norm)if(t){const e=t.marker,i=Object.prototype.hasOwnProperty.call(e||{},"is_light"),s=Object.prototype.hasOwnProperty.call(e||{},"light_entity"),n=Object.prototype.hasOwnProperty.call(e||{},"glow_color"),o=Object.prototype.hasOwnProperty.call(e||{},"value_badge"),a=Object.prototype.hasOwnProperty.call(e||{},"tap_action"),r=Object.prototype.hasOwnProperty.call(e||{},"toggle_entity"),l=ws(e?.glow_color),c=this._devicePresentation(t,!0).valueBadge,h=Lo(this._planHass,t,this._devices),d=Bo(this._planHass,t,h);this._markerDialog={devId:t.id,name:t.name,binding:"virtual"===t.bindingKind?"virtual":t.bindingKind+":"+t.bindingRef,bindingMode:"virtual"===t.bindingKind?"virtual":"ha",bindingOpen:!1,showEntities:"entity"===t.bindingKind&&!!this._fullRegistryHass.entities[t.bindingRef||""]?.device_id,bindingFilter:"",icon:t.marker?.icon||"",autoIcon:t.icon||"",display:Li(t.marker?.display),rippleColor:Rt(t.marker?.ripple_color,""),rippleSize:Number(t.marker?.ripple_size)>0?Number(t.marker.ripple_size):1.5,size:Number(t.marker?.size)>0?Number(t.marker.size):1,angle:Number(t.marker?.angle)||0,tapAction:Yh(t.marker?.tap_action,t.primary?.split(".")[0]),tapActionTouched:!1,originalHasTapAction:a,originalTapAction:t.marker?.tap_action,tapHintAnnouncement:"",toggleEntity:e?.toggle_entity||"",toggleEntityTouched:!1,originalHasToggleEntity:r,originalToggleEntity:e?.toggle_entity,tapTarget:t.marker?.tap_target||"",tapConfirm:!0===t.marker?.tap_confirm,runFilter:"",controls:Yn(t.marker?.binding,t.marker?.controls,t.entities),controlsFilter:"",lightRole:!0===e?.is_light?"always":!1===e?.is_light?"never":"auto",lightRoleTouched:!1,originalHasIsLight:i,originalIsLight:e?.is_light,lightEntity:e?.light_entity||"",lightEntityTouched:!1,originalHasLightEntity:s,originalLightEntity:e?.light_entity,glowMode:null!=l?.bri?"fixed":l?"color":"auto",glowColor:l?.c||this._fillColors.glow_light.c,glowBrightness:Math.max(1,Math.round(100*(l?.bri??1))),glowColorDrafted:!!l,glowBrightnessDrafted:null!=l?.bri,glowTouched:!1,originalHasGlowColor:n&&(!!l||null===e?.glow_color),originalGlowColor:l||(null===e?.glow_color?null:void 0),valueBadgeEnabled:o?!0===e?.value_badge?.enabled:!!c,valueBadgeSource:e?.value_badge?.source||c?.source||d,valueBadgePosition:e?.value_badge?.position||c?.position||"right",valueBadgeTouched:!1,originalHasValueBadge:o,originalValueBadge:e?.value_badge,useClimateTemp:!0===t.marker?.use_climate_temp,glowRadius:Number(t.marker?.glow_radius_cm)>0?String(this._imperial?Math.round(Number(t.marker.glow_radius_cm)/30.48*10)/10:Math.round(Number(t.marker.glow_radius_cm))/100):"",model:t.model||"",link:t.link||"",description:t.description||"",pdfs:[...t.pdfs||[]],room:t.marker?.room_id?t.space+"#@"+t.marker.room_id:t.space&&t.area?t.space+"#"+t.area:"",hideFromPlan:!0===t.marker?.hidden,busy:!1}}else this._markerDialog={name:"",binding:"virtual",bindingMode:"virtual",bindingOpen:!1,showEntities:!1,bindingFilter:"",icon:"",autoIcon:"",display:"badge",rippleColor:"",rippleSize:1.5,size:1,angle:0,tapAction:"info",tapActionTouched:!1,originalHasTapAction:!1,originalTapAction:void 0,tapHintAnnouncement:"",toggleEntity:"",toggleEntityTouched:!1,originalHasToggleEntity:!1,originalToggleEntity:void 0,tapTarget:"",tapConfirm:!1,runFilter:"",controls:[],controlsFilter:"",lightRole:"auto",lightRoleTouched:!1,originalHasIsLight:!1,originalIsLight:void 0,lightEntity:"",lightEntityTouched:!1,originalHasLightEntity:!1,originalLightEntity:void 0,glowMode:"auto",glowColor:this._fillColors.glow_light.c,glowBrightness:100,glowColorDrafted:!1,glowBrightnessDrafted:!1,glowTouched:!1,originalHasGlowColor:!1,originalGlowColor:void 0,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgePosition:"right",valueBadgeTouched:!1,originalHasValueBadge:!1,originalValueBadge:void 0,useClimateTemp:!1,glowRadius:"",model:"",link:"",description:"",pdfs:[],room:"",hideFromPlan:!1,busy:!1,uploadId:"up_"+Date.now().toString(36)+Math.random().toString(36).slice(2,6)};else this._showToast(this._t("toast.marker_needs_server"))}_runCandidates(){const t=[];for(const e of Ui)for(const[i,s]of Object.entries(this.hass.states))i.startsWith(e+".")&&this._planEntityAvailable(i)&&t.push({value:i,label:s?.attributes?.friendly_name||i,sub:this._t("run."+e)});return t.sort((t,e)=>t.sub.localeCompare(e.sub)||t.label.localeCompare(e.label))}_bindingCandidates(){const t=this._planHass,e=vo(this._markers),i=new Set(this._markers.filter(t=>t.removed).map(t=>t.binding)),s=new Set;for(const t of this._devices)t.id!==this._markerDialog?.devId&&("device"===t.bindingKind&&t.bindingRef&&s.add("device:"+t.bindingRef),"entity"===t.bindingKind&&t.bindingRef&&s.add("entity:"+t.bindingRef));const n=new Set;for(const t of this._devices)"device"===t.bindingKind&&t.name&&n.add(t.name.trim()+"|"+(t.area||""));const o=[];for(const e of Object.values(t.devices)){if("service"===e.entry_type)continue;const t="device:"+e.id;if(s.has(t))continue;const a=(e.name_by_user||e.name||e.id).trim();t!==this._markerDialog?.binding&&!i.has(t)&&n.has(a+"|"+(e.area_id||""))||o.push({value:t,label:a,sub:(e.model||this._t("marker.sub_device"))+("Group"===e.model?this._t("marker.sub_z2m_group"):"")})}const a=new Set(["group","template","derivative","min_max","threshold","integration","statistics","trend","utility_meter","tod","switch_as_x","schedule"]);for(const[n,r]of Object.entries(t.entities)){const l="entity:"+n;if(s.has(l))continue;if(yo(t,n,e)&&!i.has(l))continue;const c=a.has(r.platform),h="group"===r.platform;if(!c&&!h)continue;if(r.hidden&&!i.has(l))continue;const d=t.states[n];o.push({value:l,label:r.name||d?.attributes?.friendly_name||n,sub:n.split(".")[0]+" · "+("group"===r.platform?this._t("marker.sub_group"):this._t("marker.sub_helper"))})}if(this._markerDialog?.showEntities){const n=new Set(o.map(t=>t.value));for(const[a,r]of Object.entries(t.entities)){const l="entity:"+a;if(s.has(l)||n.has(l)||r.hidden&&!i.has(l))continue;if(yo(t,a,e)&&!i.has(l))continue;const c=t.states[a],h=r.name||c?.attributes?.friendly_name||a,d=r.device_id?t.devices[r.device_id]:null,u=d&&(d.name_by_user||d.name)||"";o.push({value:l,label:h,sub:a.split(".")[0]+" · "+this._t("marker.sub_entity")+(u?" · "+u:"")})}}const r=(this._markerDialog?.bindingFilter||"").toLowerCase().trim(),l=r?o.filter(t=>(t.label+" "+t.sub+" "+t.value).toLowerCase().includes(r)):o;return l.sort((t,e)=>t.label.localeCompare(e.label)),l.slice(0,200)}_physicalBodiesR(t=this._spaceModel()){if(!t)return[];const e=`${t.id}|${this._cfgEpoch}|${this._cellCm}|${this._gridPitch}`;if(this._physicalBodiesCache?.key===e)return this._physicalBodiesCache.all;const i=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t));return this._physicalBodiesCache={key:e,...i},i.all}_rawPhysicalBodiesR(t=this._spaceModel()){if(!t)return[];this._physicalBodiesR(t);const e=this._physicalBodiesCache;return e?[...e.drafts,...e.partitions,...e.columns]:[]}_cleanFloor(t,e,i=this._spaceModel()){if(!i)return{floor:e,geom:null,path:"",area:Ol([[[...e,e[0]]]])};const s=t.id||`#${i.rooms.indexOf(t)}`,n=`${i.id}|${this._cfgEpoch}|${s}`;if(!this._rszPreview){const t=v_(this._cleanFloorCache,n);if(t.hit)return t.value}const o=e.map(t=>t[0]),a=e.map(t=>t[1]),r=[Math.min(...o),Math.min(...a),Math.max(...o),Math.max(...a)],l=this._physicalBodiesR(i).filter(t=>{const e=t.map(t=>t[0]),i=t.map(t=>t[1]);return Math.max(...e)>=r[0]&&Math.min(...e)<=r[2]&&Math.max(...i)>=r[1]&&Math.min(...i)<=r[3]}),c=l.length?zl(e,l):null,h={floor:e,geom:c,path:c?Dl(c):"",area:Ol(c||[[[...e,e[0]]]])};return this._rszPreview||y_(this._cleanFloorCache,n,h,600),h}_autoIconForBinding(t){if("virtual"===t)return"mdi:map-marker";const[e,i]=t.split(":");if(!i)return"";const s=this._fullRegistryHass,n=this._bindingStatus(t),o="active"===n.kind?n.enabledEntityIds:n.allEntityIds;if("device"===e){const t=s.devices?.[i];if(!t)return"mdi:help-circle";const e=o;return e.some(t=>t.startsWith("lock."))?"mdi:lock":fo(s,t.name_by_user||t.name||"",t.model,e,this._iconRules)}if("entity"===e){const t=s.entities?.[i],e=this.hass.states?.[i],n=t?.name||e?.attributes?.friendly_name||i;return i.startsWith("lock.")?"mdi:lock":fo(s,n,"",[i],this._iconRules)}return""}_allRoomsFlat(){const t=[];for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area?t.push({value:e.id+"#"+i.area,label:(e.title||e.id)+" · "+i.name}):i.id&&t.push({value:e.id+"#@"+i.id,label:(e.title||e.id)+" · "+i.name+" · "+this._t("marker.subarea")});return t}_errText(t){if(!t)return this._t("err.unknown");if("string"==typeof t)return t;if("invalid_passage_fields"===t.code){const e=String(t.message||t.error||"").match(/space=([^;]*);\s*opening=([^;]*);\s*fields=([^;]*)/);if(e){const t=this._serverCfg?.spaces?.find(t=>String(t.id)===e[1]),i={contact:"opening.contact_label",lock:"opening.lock_label",invert:"opening.invert",flip_h:"opening.flip_h",flip_v:"opening.flip_v"},s=e[3].split(",").filter(Boolean).map(t=>i[t]?this._t(i[t]):t).join(", ");return this._t("opening.invalid_passage_fields",{room:t?.title||e[1],fields:s})}}if("invalid_partition_opening_jamb_margin"===t.code){const e=String(t.message||t.error||"").match(/margin_cm=([^;]*)/),i=e?Number(e[1]):NaN;if(Number.isFinite(i))return this._t("opening.partition_jamb_margin",{distance:ri(i,this._imperial)})}if(t.message)return t.message;if(t.error)return t.error;if(null!=t.code)return this._t("err.code",{code:t.code});try{return JSON.stringify(t)}catch{return String(t)}}_backupErrorText(t){const e=t?.code??t?.error;if("string"==typeof e){const t=`backup.error.${e}`,i=this._t(t);if(i!==t)return i}return this._errText(t)}async _pickMarkerFiles(t){const e=t.target,i=e.files?[...e.files]:[];if(e.value="",!i.length||!this._markerDialog)return;const s=this._markerDialog.uploadId||this._markerDialog.devId||"new",n=[];for(const t of i)try{const e=new FormData;e.append("marker_id",s),e.append("file",t,t.name);const i=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth("/api/houseplan/upload",{method:"POST",body:e}):await fetch("/api/houseplan/upload",{method:"POST",body:e,headers:this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}),o=await i.json().catch(()=>({}));if(!i.ok||o.error){const t={too_large:this._t("err.too_large",{mb:o.max_mb||50}),bad_ext:this._t("err.bad_ext"),unauthorized:this._t("err.unauthorized")};throw new Error(t[o.error]||o.error||"HTTP "+i.status)}n.push({name:o.name||t.name,url:o.url})}catch(e){this._showToast(this._t("toast.file_failed",{name:t.name,err:this._errText(e)}))}n.length&&this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:[...this._markerDialog.pdfs,...n]},this._showToast(this._t("toast.files_attached",{n:n.length})))}_removeMarkerPdf(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:this._markerDialog.pdfs.filter(e=>e.url!==t)})}_markerLightFields(t){const e={};if(t.lightRoleTouched?"always"===t.lightRole?e.is_light=!0:"never"===t.lightRole&&(e.is_light=!1):t.originalHasIsLight&&(e.is_light=t.originalIsLight??null),t.lightEntityTouched?t.lightEntity&&(e.light_entity=t.lightEntity):t.originalHasLightEntity&&(e.light_entity=t.originalLightEntity??null),t.glowTouched){if("auto"!==t.glowMode){const i={c:Rt(t.glowColor,this._fillColors.glow_light.c)};"fixed"===t.glowMode&&(i.bri=Math.max(.01,Math.min(1,Math.round(t.glowBrightness)/100))),e.glow_color=i}}else t.originalHasGlowColor&&(e.glow_color=t.originalGlowColor??null);return e}_markerTapActionFields(t){return t.tapActionTouched?{tap_action:t.tapAction||null}:t.originalHasTapAction?{tap_action:t.originalTapAction??null}:{}}_markerToggleEntityFields(t){return(e={touched:t.toggleEntityTouched,originalHas:t.originalHasToggleEntity,original:t.originalToggleEntity,value:t.toggleEntity}).touched?e.value?{toggle_entity:e.value}:{}:e.originalHas?{toggle_entity:e.original??null}:{};var e}async _saveMarker(){const t=this._markerDialog;if(!t||t.busy)return;const e=this._effectiveMarkerTapAction(t);if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return;if("virtual"===t.binding&&!t.name.trim())return void this._showToast(this._t("toast.virtual_name_required"));if("run"===e&&!t.tapTarget)return void this._showToast(this._t("toast.run_target_required"));if(t.valueBadgeTouched&&t.valueBadgeEnabled&&!t.valueBadgeSource)return void this._showToast(this._t("toast.value_badge_source_required"));if("ha"===t.bindingMode){const e=this._bindingStatus(t.binding),i=t.devId?this._markers.find(e=>e.id===t.devId):null,s=!i||i.binding!==t.binding;if("active"!==e.kind&&s)return void this._showToast(this._t("ha_disabled"===e.kind?"toast.ha_disabled_add":"toast.ha_binding_unverified"));if("ha_disabled"===e.kind&&!0===i?.hidden&&!t.hideFromPlan)return this._markerDialog={...t,hideFromPlan:!0},void this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device"))}const i=this._serverCfg;if(!i)return;const s=i.markers||[],n=Bs(t.room);let o=n?.space||null;const a=n?.area||null,r=n?.roomId||null,l=Fi(t.binding,t.devId,()=>"v_"+Date.now().toString(36)),c=t.devId,h=c?this._devices.find(t=>t.id===c):null,d=n?.space||h?.space||null,u=d?this._spaceModelById(d):this._spaceModel();if(!u)return;const p=u.id;"virtual"!==t.binding||o||(o=p),this._markerDialog={...t,busy:!0};try{const n="virtual"===t.binding?[]:s.filter(e=>e.removed&&e.binding===t.binding).map(t=>t.id),d=n.length>0,_=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),g=s.find(t=>t.id===l||t.id===c)?.vacuum||null,m={id:l,vacuum:g,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle?t.angle:null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===e&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:_.length?_:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=f_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:!!t.hideFromPlan};("virtual"===t.binding||t.room)&&(m.space=o,m.area=a,m.room_id=r);const f=h?.marker?.room_id??null,v=!!t.room&&null!=h&&(h.space!==o||h.area!==a||f!==r);let y=!1;const b=t.uploadId||c;if(b&&b!==l&&m.pdfs?.length)try{const t=await this.hass.callWS({type:"houseplan/files/migrate",from_id:b,to_id:l}),e=t?.mapping||{};m.pdfs=function(t,e,i,s){if(!e||!i||e===i)return t;const n="/files/"+e+"/",o="/files/"+i+"/";return t.map(t=>{if(!t.url.includes(n))return t;const e=t.url.split(n)[1]||"",[i,a]=[e.split("?")[0],e.includes("?")?"?"+e.split("?")[1]:""];if(s){const e=s[decodeURIComponent(i)]??s[i];return e?{...t,url:t.url.split(n+i)[0]+o+encodeURIComponent(e)+a}:t}return{...t,url:t.url.split(n).join(o)}})}(m.pdfs,b,l,e),y=Object.keys(e).length>0}catch(t){this._showToast(this._t("toast.files_migrate_failed",{err:this._errText(t)}))}i.markers=s,c&&c!==l&&(i.markers=function(t,e,i){if(!e||!i||e===i)return[...t];const s=`marker:${e}`,n=`marker:${i}`;return t.map(t=>{const e=Array.isArray(t.controls)?t.controls.map(t=>t===s?n:t):t.controls,i="derived_marker_state"===t.value_badge?.source?.kind&&t.value_badge.source.ref===s?{...t.value_badge,source:{...t.value_badge.source,ref:n}}:t.value_badge;return e===t.controls&&i===t.value_badge?t:{...t,controls:e,value_badge:i}})}(i.markers,c,l)),c&&c!==l&&"derived_marker_state"===m.value_badge?.source?.kind&&m.value_badge.source.ref===`marker:${c}`&&(m.value_badge.source={kind:"derived_marker_state",ref:`marker:${l}`}),i.markers=i.markers.filter(t=>t.id!==l&&t.id!==c&&("virtual"===m.binding||t.binding!==m.binding)),i.markers.push(m);let w=null;const k=c?this._layout[c]:null,x=k?{s:k.s||h?.space||this._space,x:k.x,y:k.y}:c&&h&&this._defPos[c]?this._normPos(h.space,this._defPos[c].x,this._defPos[c].y):null;if(!d&&x&&x.s===p)l===c&&this._layout[l]&&!v||(w={s:x.s,x:x.x,y:x.y},this._layout={...this._layout,[l]:w});else if(d||!this._layout[l]||v){let t=u.vb[0]+u.vb[2]/2,e=u.vb[1]+u.vb[3]/2;const i=r?u.rooms.find(t=>t.id===r):a?u.rooms.find(t=>t.area===a):void 0;i&&([t,e]=this._roomCenter(i)),w=this._normPos(p,t,e),this._layout={...this._layout,[l]:w}}await this._saveConfigNow(),w&&this._noteLayoutRev(await this.hass.callWS({type:"houseplan/layout/update",device_id:l,pos:w}));const $=new Set(n);c&&c!==l&&$.add(c),$.delete(l);for(const t of $)delete this._layout[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{});y&&b&&await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:b}).catch(()=>{}),this._markerDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_saved"))}catch(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteMarker(){const t=this._markerDialog;if(!t||t.busy||!t.devId)return;const e=t.devId?this._devices.find(e=>e.id===t.devId):null;if(!e)return;const i=t.name||this._t("device.fallback");if(!confirm(this._t("confirm.remove_marker",{name:i})))return;const s=this._serverCfg;s.markers=s.markers||[];const n=s.markers,o="virtual"===e.bindingKind?"virtual":e.bindingKind&&e.bindingRef?`${e.bindingKind}:${e.bindingRef}`:"";if(!o)return;const a=function(t,e,i,s){const n=new Set([e]),o=t.filter(t=>{const o=t.id===e||!s&&t.binding===i;return o&&n.add(t.id),!o});return{markers:s?o:[...o,{id:e,binding:i,removed:!0,hidden:!0}],cleanupIds:n}}(s.markers,e.id,o,"virtual"===e.bindingKind);var r,l;s.markers=(r=a.markers,l=a.cleanupIds,r.map(t=>{if(!Array.isArray(t.controls))return t;const e=t.controls.filter(t=>!("string"==typeof t&&t.startsWith("marker:")&&l.has(t.slice(7))));return e.length===t.controls.length?t:{...t,controls:e.length?e:null}}));const c=a.cleanupIds;this._markerDialog={...t,busy:!0};try{await this._saveConfigNow();for(const t of c){delete this._layout[t],delete this._defPos[t],this._dirtyPos.delete(t),this._sentPos.delete(t);const e=this._activityRt.get(t);e&&clearTimeout(e.timer),this._activityRt.delete(t),this._vacRt.delete(t),delete this._vacSrvTrails[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{}),await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:t}).catch(()=>{}),await this.hass.callWS({type:"houseplan/trail/delete",marker_id:t}).catch(()=>{})}this._markerDialog=null,this._infoCard?.id===e.id&&this._closeInfoCard(),this._selId===e.id&&(this._selId=null),this._drag?.id===e.id&&(this._drag=null),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_removed"))}catch(t){this._serverCfg===s&&(s.markers=n),this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}_normPos(t,e,i){return{s:t,x:e/P_,y:i/P_}}_openSpaceDialog(t,e){if(this._serverStorage&&this._serverCfg)if("edit"===t){const i=this._serverCfg.spaces.find(t=>t.id===e);if(!i)return;const s=ls(i),n=i.settings?.custom_fill&&"object"==typeof i.settings.custom_fill?as(i.settings.custom_fill):null,o="none"===s.fill?{...n||os,a:0}:n;this._spaceDialog={mode:t,spaceId:e,title:i.title,planUrl:i.plan_url||null,planFile:null,source:i.plan_url?"file":"draw",showBorders:s.showBorders,showNames:s.showNames,displayTouched:!0,hideDecor:s.hideDecor,hideOpenings:s.hideOpenings,roomColor:s.color,roomOpacity:s.opacity,fillMode:"none"===s.fill?"custom":s.fill,customFill:o,glowEnabled:s.glow,bgColor:s.bgColor,bgMode:"static"===i.settings?.bg_mode||"daynight"===i.settings?.bg_mode?i.settings.bg_mode:null,northDeg:Ya({},i.settings),sunRays:"boolean"==typeof i.settings?.sun_rays?i.settings.sun_rays:null,tempMin:s.tempMin,tempMax:s.tempMax,showLqi:s.showLqi??this._config?.show_signal??!0,cardFontScale:s.cardFontScale,labelTemp:s.labelTemp,labelHum:s.labelHum,labelLqi:s.labelLqi,labelLight:s.labelLight,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,busy:!1}}else this._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:{...os,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1};else this._showToast(this._t("toast.integration_missing"))}async _pickPlanFile(t){const e=t.target,i=e.files?.[0];if(!i||!this._spaceDialog)return;const s={"image/svg+xml":"svg","image/png":"png","image/jpeg":"jpg","image/webp":"webp"}[i.type]||(i.name.toLowerCase().endsWith(".svg")?"svg":"");if(!s)return void this._showToast(this._t("toast.plan_formats"));const n=new Uint8Array(await i.arrayBuffer());let o="";for(let t=0;t{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:1.414),e.onerror=()=>t(1.414),e.src=r});URL.revokeObjectURL(r),this._spaceDialog={...this._spaceDialog,planFile:{ext:s,b64:a,aspect:l,name:i.name}}}_useServerPlan(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let e=0;e<40;e++){const e=this._display(t);if(e){const i=await new Promise(t=>{const i=new Image;i.onload=()=>t(i.naturalWidth&&i.naturalHeight?i.naturalWidth/i.naturalHeight:0),i.onerror=()=>t(0),i.src=e}),s=this._spaceDialog;return s&&s.planUrl===t&&Number.isFinite(i)&&i>0?(this._spaceDialog={...s,savedAspect:i},i):0}if(await new Promise(t=>setTimeout(t,150)),this._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){if(confirm(this._t("confirm.delete_plan",{name:t})))try{await this.hass.callWS({type:"houseplan/plans/delete",name:t});const e=this._spaceDialog;e?.saved&&(this._spaceDialog={...e,saved:e.saved.filter(e=>e.name!==t)})}catch(t){this._showToast(this._t("toast.plan_delete_failed",{err:this._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return j`
${this._t("space.loading")}
`;const e=t.saved||[];if(!e.length)return j`
${this._t("space.no_saved")}
`;return j`
${e.map(e=>j`
@@ -5187,7 +5204,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`)} -
`}async _saveSpaceDialog(){const t=this._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this._showToast(this._t("toast.plan_required"));const e="create"===t.mode&&0===(this._serverCfg?.spaces.length||0);this._spaceDialog={...t,busy:!0};try{const i="create"===t.mode?"s"+Date.now().toString(36):t.spaceId;let s=null;if("file"===t.source&&t.planFile){s={url:(await this.hass.callWS({type:"houseplan/plan/set",space_id:i,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let n=t.savedAspect||null;!s&&"file"===t.source&&t.planUrl&&!n&&this._aspectJob&&(n=await this._aspectJob||null);const o=this._serverCfg;let a;if("create"===t.mode)a={id:i,title:t.title.trim(),plan_url:null,view_box:[0,0,1,1],rooms:[]},o.spaces.push(a);else{if(a=o.spaces.find(t=>t.id===i),!a)throw new Error("space "+i+" is gone from the config");a.title=t.title.trim()}s?(a.plan_url=s.url,a.plan_aspect=s.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==a.plan_url&&(a.plan_url=t.planUrl,a.plan_aspect=n),"draw"===t.source&&(a.plan_url=null,a.plan_aspect=null,delete a.plan_x,delete a.plan_y,delete a.plan_scale,delete a.plan_scale_x,delete a.plan_scale_y,delete a.plan_angle),a.settings={...a.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):20,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):25,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},a.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(__,t.cellCm)):5,await this._saveConfigNow(),this._spaceDialog=null,"create"===t.mode&&this._commitSpace(a.id),this._regSignature="",this._maybeRebuildDevices(),this._importQueue.length?this._openNextImport():e||this._importTotal>0?(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._showToast(this._t(e&&!this._importTotal?"toast.space_added_onboard":"import.done"))):(this._showToast("create"===t.mode?this._t("toast.space_added"):this._t("toast.space_saved")),"create"===t.mode&&("plan"!==this._mode?this._setMode("plan"):(this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._saveNav())))}catch(t){this._spaceDialog&&(this._spaceDialog={...this._spaceDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteSpace(){const t=this._spaceDialog;if(!t||"edit"!==t.mode)return;const e=this._serverCfg.spaces.find(e=>e.id===t.spaceId);if(confirm(this._t("confirm.delete_space",{title:e.title}))){this._serverCfg.spaces=this._serverCfg.spaces.filter(e=>e.id!==t.spaceId);try{await this._saveConfigNow(),this._spaceDialog=null,this._space===t.spaceId&&this._commitSpace(this._serverCfg.spaces[0]?.id||""),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.space_deleted"))}catch(t){this._showToast(this._t("toast.delete_failed",{err:this._errText(t)}))}}}async _saveConfigNow(){this._cfgEpoch++;try{await this._writeConfig()}catch(t){throw"conflict"===t?.code&&await this._reloadConfigOnly(),t}}_startImport(){const t=this._importDialog;if(!t)return;const e=t.floors.filter(t=>t.checked).map(t=>t.name);this._importDialog=null,e.length?(this._importQueue=e,this._importTotal=e.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this._importQueue.shift();void 0!==t&&(this._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1})}_skipImport(){this._spaceDialog=null,this._importQueue.length?this._openNextImport():this._importTotal>0&&this._model.length&&(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._showToast(this._t("import.done")))}_renderImportDialog(){const t=this._importDialog,e=t.floors.filter(t=>t.checked).length;return j``}async _saveSpaceDialog(){const t=this._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this._showToast(this._t("toast.plan_required"));const e="create"===t.mode&&0===(this._serverCfg?.spaces.length||0);this._spaceDialog={...t,busy:!0};try{const i="create"===t.mode?"s"+Date.now().toString(36):t.spaceId;let s=null;if("file"===t.source&&t.planFile){s={url:(await this.hass.callWS({type:"houseplan/plan/set",space_id:i,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let n=t.savedAspect||null;!s&&"file"===t.source&&t.planUrl&&!n&&this._aspectJob&&(n=await this._aspectJob||null);const o=this._serverCfg;let a;if("create"===t.mode)a={id:i,title:t.title.trim(),plan_url:null,view_box:[0,0,1,1],rooms:[]},o.spaces.push(a);else{if(a=o.spaces.find(t=>t.id===i),!a)throw new Error("space "+i+" is gone from the config");a.title=t.title.trim()}s?(a.plan_url=s.url,a.plan_aspect=s.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==a.plan_url&&(a.plan_url=t.planUrl,a.plan_aspect=n),"draw"===t.source&&(a.plan_url=null,a.plan_aspect=null,delete a.plan_x,delete a.plan_y,delete a.plan_scale,delete a.plan_scale_x,delete a.plan_scale_y,delete a.plan_angle),a.settings={...a.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):20,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):25,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},a.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(g_,t.cellCm)):5,await this._saveConfigNow(),this._spaceDialog=null,"create"===t.mode&&this._commitSpace(a.id),this._regSignature="",this._maybeRebuildDevices(),this._importQueue.length?this._openNextImport():e||this._importTotal>0?(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._showToast(this._t(e&&!this._importTotal?"toast.space_added_onboard":"import.done"))):(this._showToast("create"===t.mode?this._t("toast.space_added"):this._t("toast.space_saved")),"create"===t.mode&&("plan"!==this._mode?this._setMode("plan"):(this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._saveNav())))}catch(t){this._spaceDialog&&(this._spaceDialog={...this._spaceDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteSpace(){const t=this._spaceDialog;if(!t||"edit"!==t.mode)return;const e=this._serverCfg.spaces.find(e=>e.id===t.spaceId);if(confirm(this._t("confirm.delete_space",{title:e.title}))){this._serverCfg.spaces=this._serverCfg.spaces.filter(e=>e.id!==t.spaceId);try{await this._saveConfigNow(),this._spaceDialog=null,this._space===t.spaceId&&this._commitSpace(this._serverCfg.spaces[0]?.id||""),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.space_deleted"))}catch(t){this._showToast(this._t("toast.delete_failed",{err:this._errText(t)}))}}}async _saveConfigNow(){this._cfgEpoch++;try{await this._writeConfig()}catch(t){throw"conflict"===t?.code&&await this._reloadConfigOnly(),t}}_startImport(){const t=this._importDialog;if(!t)return;const e=t.floors.filter(t=>t.checked).map(t=>t.name);this._importDialog=null,e.length?(this._importQueue=e,this._importTotal=e.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this._importQueue.shift();void 0!==t&&(this._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1})}_skipImport(){this._spaceDialog=null,this._importQueue.length?this._openNextImport():this._importTotal>0&&this._model.length&&(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._showToast(this._t("import.done")))}_renderImportDialog(){const t=this._importDialog,e=t.floors.filter(t=>t.checked).length;return j`this._importDialog=null}>
${this._t("import.hint")}
@@ -5207,7 +5224,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t("import.start",{n:e})}
-
`}_sunGlobal(){const t=this._settingsDialog;return t?{...this._settings,north_deg:t.northDeg??void 0,bg_mode:t.bgMode,sun_rays:t.sunRays}:this._settings}_sunSpace(){const t=this._spaceDialog,e=this._curSpaceCfg?.settings||{};return t&&"edit"===t.mode&&t.spaceId===this._space?{...e,north_deg:t.northDeg??void 0,bg_mode:t.bgMode??void 0,sun_rays:t.sunRays??void 0}:e}_effNorth(){return Ya(this._sunGlobal(),this._sunSpace())}_effBgMode(){return Xa(this._sunGlobal(),this._sunSpace())}_dayCycleState(t=new Date){return(this._modeTransitionVisual?.viewWeight??("view"===this._mode?1:0))<=0||"daynight"!==this._effBgMode()?null:Ha(this._renderPlanHass,t)}_syncDayCycleClock(){const t=this._dayCycleState();this._dayCycleClockKey=t?La(t):"";const e="clock"===t?.source&&"hidden"!==this.ownerDocument.visibilityState&&this.isConnected;e&&!this._dayCycleTimer?this._dayCycleTimer=window.setInterval(this._dayCycleTick,3e4):!e&&this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_dayCycleVisibility(t){"hidden"!==t.kind?(this._dayCycleTick(),this._syncDayCycleClock()):this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_effSunRays(){return Ja(this._sunGlobal(),this._sunSpace())}_sunNow(){return null!==this._effNorth()?Za(this._renderPlanHass):null}_renderSunRays(t){const e=W``,i=this._modeTransitionVisual?.viewWeight??0;if(this._editing&&i<=0||!this._effSunRays())return this._sunFadeReset(),e;const s=this._effNorth(),n=null!==s?Za(this._renderPlanHass):null;if(!n||n.elevation<=0)return this._sunFadeReset(),e;if(o=n.elevation,Number(o)>=3)this._sunOutTimer&&(clearTimeout(this._sunOutTimer),this._sunOutTimer=0),this._sunOut=!1,this._sunShown=!0;else{if(!this._sunShown)return e;this._sunOut||(this._sunOut=!0,this._sunOutTimer=window.setTimeout(()=>{this._sunOutTimer=0,this._sunShown=!1,this._sunOut=!1,this.requestUpdate()},2e3))}var o;const a=`${t.id}|${n.azimuth}|${n.elevation}|${s}|${this._cfgEpoch}`;if(!this._sunRaysCache||this._sunRaysCache.key!==a){const e=t.rooms.map(t=>({id:t.id||"",poly:ci(t)})).filter(t=>!!t.id&&!!t.poly),i=this._openingsR.filter(t=>"window"===t.type&&!t.host).map(t=>({id:t.id,x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=this._spaceWalls,r=this._openPairs().flatMap(t=>t.segs),l=this._openingWallIndexFor(t,r).value,c={},h={};if(o.length){for(const i of e){const e=ol(t.rooms,i.id,o,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);e&&(c[i.id]=e)}for(const t of i){const e=bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length});e.cm>0&&(h[t.id]=vr(e.cm,this._cellCm,this._gridPitch))}}let d=Va(e,i,n.azimuth,n.elevation,s,o.length?c:void 0,o.length?h:void 0);const u=this._physicalBodiesR(t);u.length&&(d=d.map(t=>{const e=function(t,e,i){return i>0?t.map(t=>function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<=2)return e;const i=(t,e,i)=>(e[0]-t[0])*(i[1]-t[1])-(e[1]-t[1])*(i[0]-t[0]),s=[];for(const t of e){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],t)<=0;)s.pop();s.push(t)}const n=[];for(let t=e.length-1;t>=0;t--){const s=e[t];for(;n.length>=2&&i(n[n.length-2],n[n.length-1],s)<=0;)n.pop();n.push(s)}return s.slice(0,-1).concat(n.slice(0,-1))}([...t,...t.map(t=>[t[0]+e[0]*i,t[1]+e[1]*i])])).filter(t=>t.length>=3):t}(u,t.dir,t.len),i=t.polys.map(t=>zl(t,e));return{...t,paths:i.map(Dl).filter(Boolean),polys:i.flatMap(Nl)}}).filter(t=>t.paths?.length||t.polys.length)),this._sunRaysCache={key:a,rays:d,rims:d.map(t=>function(t,e=1e-4){const[i,s]=t.dir,n=-s,o=i,a=[];for(const r of[t.a,t.b]){const l=[];for(const a of t.polys)for(let t=0;te)continue;if(Math.abs((h[0]-r[0])*n+(h[1]-r[1])*o)>e)continue;const d=(c[0]-r[0])*i+(c[1]-r[1])*s,u=(h[0]-r[0])*i+(h[1]-r[1])*s;Math.abs(u-d)<=e||l.push(dt[0]-e[0]);const c=[];for(const t of l){const i=c[c.length-1];i&&t[0]<=i[1]+e?i[1]=Math.max(i[1],t[1]):c.push([t[0],t[1]])}for(const[t,e]of c)a.push([[r[0]+i*t,r[1]+s*t],[r[0]+i*e,r[1]+s*e]])}return a}(t))}}const r=this._sunRaysCache.rays,l=this._sunRaysCache.rims;if(!r.length)return e;const c=(h=function(t){const e=Math.min(90,Math.max(-90,Number(t)||0));let i=Ba[Ba.length-1][1];for(let t=1;t +
`}_sunGlobal(){const t=this._settingsDialog;return t?{...this._settings,north_deg:t.northDeg??void 0,bg_mode:t.bgMode,sun_rays:t.sunRays}:this._settings}_sunSpace(){const t=this._spaceDialog,e=this._curSpaceCfg?.settings||{};return t&&"edit"===t.mode&&t.spaceId===this._space?{...e,north_deg:t.northDeg??void 0,bg_mode:t.bgMode??void 0,sun_rays:t.sunRays??void 0}:e}_effNorth(){return Ya(this._sunGlobal(),this._sunSpace())}_effBgMode(){return Xa(this._sunGlobal(),this._sunSpace())}_dayCycleState(t=new Date){return(this._modeTransitionVisual?.viewWeight??("view"===this._mode?1:0))<=0||"daynight"!==this._effBgMode()?null:Na(this._renderPlanHass,t)}_syncDayCycleClock(){const t=this._dayCycleState();this._dayCycleClockKey=t?La(t):"";const e="clock"===t?.source&&"hidden"!==this.ownerDocument.visibilityState&&this.isConnected;e&&!this._dayCycleTimer?this._dayCycleTimer=window.setInterval(this._dayCycleTick,3e4):!e&&this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_dayCycleVisibility(t){"hidden"!==t.kind?(this._dayCycleTick(),this._syncDayCycleClock()):this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_effSunRays(){return Ja(this._sunGlobal(),this._sunSpace())}_sunNow(){return null!==this._effNorth()?Za(this._renderPlanHass):null}_renderSunRays(t){const e=W``,i=this._modeTransitionVisual?.viewWeight??0;if(this._editing&&i<=0||!this._effSunRays())return this._sunFadeReset(),e;const s=this._effNorth(),n=null!==s?Za(this._renderPlanHass):null;if(!n||n.elevation<=0)return this._sunFadeReset(),e;if(o=n.elevation,Number(o)>=3)this._sunOutTimer&&(clearTimeout(this._sunOutTimer),this._sunOutTimer=0),this._sunOut=!1,this._sunShown=!0;else{if(!this._sunShown)return e;this._sunOut||(this._sunOut=!0,this._sunOutTimer=window.setTimeout(()=>{this._sunOutTimer=0,this._sunShown=!1,this._sunOut=!1,this.requestUpdate()},2e3))}var o;const a=`${t.id}|${n.azimuth}|${n.elevation}|${s}|${this._cfgEpoch}`;if(!this._sunRaysCache||this._sunRaysCache.key!==a){const e=t.rooms.map(t=>({id:t.id||"",poly:ci(t)})).filter(t=>!!t.id&&!!t.poly),i=this._openingsR.filter(t=>"window"===t.type&&!t.host).map(t=>({id:t.id,x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=this._spaceWalls,r=this._openPairs().flatMap(t=>t.segs),l=this._openingWallIndexFor(t,r).value,c={},h={};if(o.length){for(const i of e){const e=ol(t.rooms,i.id,o,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);e&&(c[i.id]=e)}for(const t of i){const e=bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length});e.cm>0&&(h[t.id]=vr(e.cm,this._cellCm,this._gridPitch))}}let d=Va(e,i,n.azimuth,n.elevation,s,o.length?c:void 0,o.length?h:void 0);const u=this._physicalBodiesR(t);u.length&&(d=d.map(t=>{const e=function(t,e,i){return i>0?t.map(t=>function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<=2)return e;const i=(t,e,i)=>(e[0]-t[0])*(i[1]-t[1])-(e[1]-t[1])*(i[0]-t[0]),s=[];for(const t of e){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],t)<=0;)s.pop();s.push(t)}const n=[];for(let t=e.length-1;t>=0;t--){const s=e[t];for(;n.length>=2&&i(n[n.length-2],n[n.length-1],s)<=0;)n.pop();n.push(s)}return s.slice(0,-1).concat(n.slice(0,-1))}([...t,...t.map(t=>[t[0]+e[0]*i,t[1]+e[1]*i])])).filter(t=>t.length>=3):t}(u,t.dir,t.len),i=t.polys.map(t=>zl(t,e));return{...t,paths:i.map(Dl).filter(Boolean),polys:i.flatMap(Hl)}}).filter(t=>t.paths?.length||t.polys.length)),this._sunRaysCache={key:a,rays:d,rims:d.map(t=>function(t,e=1e-4){const[i,s]=t.dir,n=-s,o=i,a=[];for(const r of[t.a,t.b]){const l=[];for(const a of t.polys)for(let t=0;te)continue;if(Math.abs((h[0]-r[0])*n+(h[1]-r[1])*o)>e)continue;const d=(c[0]-r[0])*i+(c[1]-r[1])*s,u=(h[0]-r[0])*i+(h[1]-r[1])*s;Math.abs(u-d)<=e||l.push(dt[0]-e[0]);const c=[];for(const t of l){const i=c[c.length-1];i&&t[0]<=i[1]+e?i[1]=Math.max(i[1],t[1]):c.push([t[0],t[1]])}for(const[t,e]of c)a.push([[r[0]+i*t,r[1]+s*t],[r[0]+i*e,r[1]+s*e]])}return a}(t))}}const r=this._sunRaysCache.rays,l=this._sunRaysCache.rims;if(!r.length)return e;const c=(h=function(t){const e=Math.min(90,Math.max(-90,Number(t)||0));let i=Ba[Ba.length-1][1];for(let t=1;t ${r.map((t,e)=>{const i=(t.a[0]+t.b[0])/2,s=(t.a[1]+t.b[1])/2,n=i+t.normal[0]*t.depth,o=s+t.normal[1]*t.depth;return W` ${d.map(([t,e])=>W`${this._t("gs.north_letter")}
${null===t?"—":t+"°"} - `}_stageBg(t){const e=this._settingsDialog,i=this._spaceDialog,s=e?e.bgColor||"":cs(this._settings,{bgColor:null});return(i&&"edit"===i.mode&&i.spaceId===this._space?i.bgColor||"":t.bgColor||"")||s}_stageBgHex(){const t=this._stageEl;if(t){const e=getComputedStyle(t).backgroundColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e)return"#"+e.slice(1,4).map(t=>(+t).toString(16).padStart(2,"0")).join("")}return"#111111"}async _runAlignToGrid(){const t=this._alignDialog;if(t&&!t.busy&&this._serverCfg){this._clearGeometryGesture(),this._alignDialog={...t,busy:!0};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain;const e=await this.hass.callWS({type:"houseplan/plan/optimize",config:t.config,layout:t.layout,expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});this._serverCfg=t.config,this._layout=t.layout,this._geometryHistory.clear(),this._cfgRev=e?.config_rev??this._cfgRev+1,this._layoutRev=e?.layout_rev??this._layoutRev+1,this._canOptimizeUndo=!!e?.can_undo,this._undoKind=e?.can_undo?"optimize":null,this._dirtyPos.clear(),this._sentPos.clear(),this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this._alignDialog=null,this.requestUpdate(),this._showToast(this._t("gs.align_done",{n:String(t.report.moved),m:String(t.report.migrated+t.report.canonicalized+t.report.wallsMerged+t.report.spansMerged)}))}catch(t){this._alignDialog&&(this._alignDialog={...this._alignDialog,busy:!1}),"conflict"===t?.code&&await Promise.all([this._reloadConfigOnly(!0),this._reloadLayoutOnly()]),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}async _undoPlanOptimization(){if(!this._canOptimizeUndo||this._optimizeUndoBusy)return;const t=this._undoKind;this._clearGeometryGesture(),this._optimizeUndoBusy=!0,this.requestUpdate();try{await this.hass.callWS({type:"houseplan/plan/optimize_undo",expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});const[e,i]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._serverCfg=e?.config||this._serverCfg,this._cfgRev=e?.rev??this._cfgRev,this._layout=i?.layout||this._layout,this._geometryHistory.clear(),this._layoutRev=i?.rev??this._layoutRev,this._canOptimizeUndo=!1,this._undoKind=null,this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this.requestUpdate(),this._showToast(this._t("import"===t?"backup.import_undone":"gs.optimize_undone"))}catch(t){this._canOptimizeUndo=!1,this._undoKind=null,this._showToast(this._t("toast.error",{err:this._errText(t)}))}finally{this._optimizeUndoBusy=!1,this.requestUpdate()}}async _runBackupExport(){const t=this._backupExportDialog;if(t&&!t.busy){this._backupExportDialog={...t,busy:!0,error:""};try{const e=await this.hass.callWS({type:"houseplan/export/create",kind:t.kind,space_id:"space"===t.kind?this._space:void 0,..."space"===t.kind&&t.planOnly?{plan_only:!0}:{},card_version:h_}),i=new Blob([JSON.stringify(e.document,null,2)+"\n"],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(i),n=document.createElement("a");n.href=s,n.download=e.filename||`houseplan-${t.kind}.json`,n.style.display="none",document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0),this._backupExportDialog=null,this._showToast(this._t("backup.export_done"))}catch(t){this._backupExportDialog&&(this._backupExportDialog={...this._backupExportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _pickBackupImport(t){const e=t.target,i=e.files?.[0];if(e.value="",i){this._settingsDialog=null,this._backupImportDialog={filename:i.name,size:i.size,token:"",preview:null,expectedConfigRev:this._cfgRev,expectedLayoutRev:this._layoutRev,duplicatePolicy:"skip",confirmMissing:!1,busy:!0,error:""};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain,this._persistLayout.pending()&&this._persistLayout.flush();const t="/api/houseplan/import/preview?duplicate_policy=skip",e={method:"POST",body:i,headers:{"content-type":"application/json"}},s=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth(t,e):await fetch(t,{...e,headers:{...e.headers,...this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}}),n=await s.json().catch(()=>({}));if(!s.ok||n.error)throw Object.assign(new Error(n.message||n.error||`HTTP ${s.status}`),{code:n.error});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,token:n.token,preview:n.preview,expectedConfigRev:n.expected_config_rev,expectedLayoutRev:n.expected_layout_rev,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _setBackupDuplicatePolicy(t){const e=this._backupImportDialog;if(e&&!e.busy&&e.token&&t!==e.duplicatePolicy){this._backupImportDialog={...e,duplicatePolicy:t,busy:!0,error:""};try{const i=await this.hass.callWS({type:"houseplan/import/revalidate",token:e.token,duplicate_policy:t});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,preview:{...e.preview,...i.preview},expectedConfigRev:i.expected_config_rev,expectedLayoutRev:i.expected_layout_rev,confirmMissing:!1,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,duplicatePolicy:e.duplicatePolicy,preview:e.preview,confirmMissing:e.confirmMissing,busy:!1,error:this._backupErrorText(t)})}}}async _applyBackupImport(){const t=this._backupImportDialog;if(!t||t.busy||!t.token||!t.preview)return;if(t.preview.confirmation_required&&!t.confirmMissing)return;this._backupImportDialog={...t,busy:!0,error:""};const e=this._space;try{const i=await this.hass.callWS({type:"houseplan/import/apply",token:t.token,expected_config_rev:t.expectedConfigRev,expected_layout_rev:t.expectedLayoutRev,duplicate_policy:t.duplicatePolicy,confirm_missing_content:t.confirmMissing}),[s,n]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._adoptStructuralResponses(s,n),this._geometryHistory.clear(),this._dirtyPos.clear(),this._sentPos.clear(),this._defPos={},this._cfgEpoch++,this._modelCache=null,this._frame=null,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotConfigEpoch=-1,this._regSignature="",this._signer.invalidate(this.hass),this._resign(),this._maybeRebuildDevices();const o=this._serverCfg?.spaces||[],a="space"===i.kind&&i.space_id?i.space_id:o.some(t=>t.id===e)?e:o[0]?.id||this._space;this._hasFixedFloor?this._adoptInitialSpace(this._model,!0):this._commitSpace(a),this._backupImportDialog=null,this._cacheSnapshot(),this.requestUpdate();const r="space"===i.kind?t.preview.counts:i.counts;this._showToast(this._t("space"===i.kind?"backup.space_done":"backup.full_done",{spaces:String(r?.spaces||0),rooms:String(r?.rooms||0),markers:String(r?.markers||0)}))}catch(t){if("conflict"===t?.code&&this._backupImportDialog?.token)try{const t=this._backupImportDialog,e=await this.hass.callWS({type:"houseplan/import/revalidate",token:t.token,duplicate_policy:t.duplicatePolicy});return void(this._backupImportDialog={...t,preview:{...t.preview,...e.preview},expectedConfigRev:e.expected_config_rev,expectedLayoutRev:e.expected_layout_rev,confirmMissing:!1,busy:!1,error:this._t("backup.revalidated")})}catch(e){t=e}this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}_renderBackupExportDialog(){const t=this._backupExportDialog,e=(this._serverCfg?.spaces||[]).find(t=>t.id===this._space);return j``}_stageBg(t){const e=this._settingsDialog,i=this._spaceDialog,s=e?e.bgColor||"":cs(this._settings,{bgColor:null});return(i&&"edit"===i.mode&&i.spaceId===this._space?i.bgColor||"":t.bgColor||"")||s}_stageBgHex(){const t=this._stageEl;if(t){const e=getComputedStyle(t).backgroundColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e)return"#"+e.slice(1,4).map(t=>(+t).toString(16).padStart(2,"0")).join("")}return"#111111"}async _runAlignToGrid(){const t=this._alignDialog;if(t&&!t.busy&&this._serverCfg){this._clearGeometryGesture(),this._alignDialog={...t,busy:!0};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain;const e=await this.hass.callWS({type:"houseplan/plan/optimize",config:t.config,layout:t.layout,expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});this._serverCfg=t.config,this._layout=t.layout,this._geometryHistory.clear(),this._cfgRev=e?.config_rev??this._cfgRev+1,this._layoutRev=e?.layout_rev??this._layoutRev+1,this._canOptimizeUndo=!!e?.can_undo,this._undoKind=e?.can_undo?"optimize":null,this._dirtyPos.clear(),this._sentPos.clear(),this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this._alignDialog=null,this.requestUpdate(),this._showToast(this._t("gs.align_done",{n:String(t.report.moved),m:String(t.report.migrated+t.report.canonicalized+t.report.wallsMerged+t.report.spansMerged)}))}catch(t){this._alignDialog&&(this._alignDialog={...this._alignDialog,busy:!1}),"conflict"===t?.code&&await Promise.all([this._reloadConfigOnly(!0),this._reloadLayoutOnly()]),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}async _undoPlanOptimization(){if(!this._canOptimizeUndo||this._optimizeUndoBusy)return;const t=this._undoKind;this._clearGeometryGesture(),this._optimizeUndoBusy=!0,this.requestUpdate();try{await this.hass.callWS({type:"houseplan/plan/optimize_undo",expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});const[e,i]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._serverCfg=e?.config||this._serverCfg,this._cfgRev=e?.rev??this._cfgRev,this._layout=i?.layout||this._layout,this._geometryHistory.clear(),this._layoutRev=i?.rev??this._layoutRev,this._canOptimizeUndo=!1,this._undoKind=null,this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this.requestUpdate(),this._showToast(this._t("import"===t?"backup.import_undone":"gs.optimize_undone"))}catch(t){this._canOptimizeUndo=!1,this._undoKind=null,this._showToast(this._t("toast.error",{err:this._errText(t)}))}finally{this._optimizeUndoBusy=!1,this.requestUpdate()}}async _runBackupExport(){const t=this._backupExportDialog;if(t&&!t.busy){this._backupExportDialog={...t,busy:!0,error:""};try{const e=await this.hass.callWS({type:"houseplan/export/create",kind:t.kind,space_id:"space"===t.kind?this._space:void 0,..."space"===t.kind&&t.planOnly?{plan_only:!0}:{},card_version:d_}),i=new Blob([JSON.stringify(e.document,null,2)+"\n"],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(i),n=document.createElement("a");n.href=s,n.download=e.filename||`houseplan-${t.kind}.json`,n.style.display="none",document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0),this._backupExportDialog=null,this._showToast(this._t("backup.export_done"))}catch(t){this._backupExportDialog&&(this._backupExportDialog={...this._backupExportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _pickBackupImport(t){const e=t.target,i=e.files?.[0];if(e.value="",i){this._settingsDialog=null,this._backupImportDialog={filename:i.name,size:i.size,token:"",preview:null,expectedConfigRev:this._cfgRev,expectedLayoutRev:this._layoutRev,duplicatePolicy:"skip",confirmMissing:!1,busy:!0,error:""};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain,this._persistLayout.pending()&&this._persistLayout.flush();const t="/api/houseplan/import/preview?duplicate_policy=skip",e={method:"POST",body:i,headers:{"content-type":"application/json"}},s=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth(t,e):await fetch(t,{...e,headers:{...e.headers,...this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}}),n=await s.json().catch(()=>({}));if(!s.ok||n.error)throw Object.assign(new Error(n.message||n.error||`HTTP ${s.status}`),{code:n.error});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,token:n.token,preview:n.preview,expectedConfigRev:n.expected_config_rev,expectedLayoutRev:n.expected_layout_rev,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _setBackupDuplicatePolicy(t){const e=this._backupImportDialog;if(e&&!e.busy&&e.token&&t!==e.duplicatePolicy){this._backupImportDialog={...e,duplicatePolicy:t,busy:!0,error:""};try{const i=await this.hass.callWS({type:"houseplan/import/revalidate",token:e.token,duplicate_policy:t});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,preview:{...e.preview,...i.preview},expectedConfigRev:i.expected_config_rev,expectedLayoutRev:i.expected_layout_rev,confirmMissing:!1,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,duplicatePolicy:e.duplicatePolicy,preview:e.preview,confirmMissing:e.confirmMissing,busy:!1,error:this._backupErrorText(t)})}}}async _applyBackupImport(){const t=this._backupImportDialog;if(!t||t.busy||!t.token||!t.preview)return;if(t.preview.confirmation_required&&!t.confirmMissing)return;this._backupImportDialog={...t,busy:!0,error:""};const e=this._space;try{const i=await this.hass.callWS({type:"houseplan/import/apply",token:t.token,expected_config_rev:t.expectedConfigRev,expected_layout_rev:t.expectedLayoutRev,duplicate_policy:t.duplicatePolicy,confirm_missing_content:t.confirmMissing}),[s,n]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._adoptStructuralResponses(s,n),this._geometryHistory.clear(),this._dirtyPos.clear(),this._sentPos.clear(),this._defPos={},this._cfgEpoch++,this._modelCache=null,this._frame=null,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotConfigEpoch=-1,this._regSignature="",this._signer.invalidate(this.hass),this._resign(),this._maybeRebuildDevices();const o=this._serverCfg?.spaces||[],a="space"===i.kind&&i.space_id?i.space_id:o.some(t=>t.id===e)?e:o[0]?.id||this._space;this._hasFixedFloor?this._adoptInitialSpace(this._model,!0):this._commitSpace(a),this._backupImportDialog=null,this._cacheSnapshot(),this.requestUpdate();const r="space"===i.kind?t.preview.counts:i.counts;this._showToast(this._t("space"===i.kind?"backup.space_done":"backup.full_done",{spaces:String(r?.spaces||0),rooms:String(r?.rooms||0),markers:String(r?.markers||0)}))}catch(t){if("conflict"===t?.code&&this._backupImportDialog?.token)try{const t=this._backupImportDialog,e=await this.hass.callWS({type:"houseplan/import/revalidate",token:t.token,duplicate_policy:t.duplicatePolicy});return void(this._backupImportDialog={...t,preview:{...t.preview,...e.preview},expectedConfigRev:e.expected_config_rev,expectedLayoutRev:e.expected_layout_rev,confirmMissing:!1,busy:!1,error:this._t("backup.revalidated")})}catch(e){t=e}this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}_renderBackupExportDialog(){const t=this._backupExportDialog,e=(this._serverCfg?.spaces||[]).find(t=>t.id===this._space);return j`this._backupExportDialog=null}>
${this._t("backup.export_hint")}
@@ -5334,12 +5351,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 .pickerLabels=${this._colorPickerLabels} .color=${i.c} .opacity=${i.a} .showOpacity=${!0} @hp-color-opacity-change=${e=>{this._setFillColor(t,{c:e.detail.color,a:e.detail.opacity})}}> -
`}get _glowRadiusCm(){const t=Number(this._settings.glow_radius_cm);return Number.isFinite(t)&&t>0?t:300}get _imperial(){return"mi"===this.hass?.config?.unit_system?.length}get _glowRadiusPlaceholder(){const t=this._glowRadiusCm;return this._imperial?String(Math.round(t/30.48*10)/10):String(t/100)}_glowTransition(t,e){let i=this._glowRenderedSources.get(t);if(e){const e=this._glowFadeTimers.get(t);if(null!=e&&(clearTimeout(e),this._glowFadeTimers.delete(t)),null==i){this._suspendGlowFeatherForTransition(),i=++this._glowSourceSeq,this._glowRenderedSources.set(t,i),this._glowEnteringSources.add(t);const e=requestAnimationFrame(()=>{this._glowEnterRafs.get(t)===e&&(this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),this.isConnected&&this.requestUpdate())});this._glowEnterRafs.set(t,e)}return{domId:i,entering:this._glowEnteringSources.has(t),leaving:!1}}if(null==i)return null;const s=this._glowEnterRafs.get(t);if(null!=s&&cancelAnimationFrame(s),this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),!this._glowFadeTimers.has(t)){this._suspendGlowFeatherForTransition();const e=window.setTimeout(()=>{this._glowFadeTimers.get(t)===e&&(this._glowFadeTimers.delete(t),this._glowRenderedSources.delete(t),this._glowLastAppearance.delete(t),this.isConnected&&this.requestUpdate())},534);this._glowFadeTimers.set(t,e)}return{domId:i,entering:!1,leaving:!0}}_suspendGlowFeatherForTransition(){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;this._glowFeatherSuspendUntil=Math.max(this._glowFeatherSuspendUntil,Date.now()+500),clearTimeout(this._glowFeatherResumeTimer);const t=Math.max(0,this._glowFeatherSuspendUntil-Date.now())+17,e=()=>{this._glowFeatherResumeTimer=0,Date.now()t.segs),s=[...i],n=Math.max(this._cmToUnits(10),.5*this._gridPitch),o=t=>e.some(e=>this._pointInRoom(t,e.r)),a=this._openingsR.filter(t=>{if("door"!==(e=String(t.type))&&"gate"!==e&&"passage"!==e)return!1;var e;const i=t.angle*Math.PI/180,s=-Math.sin(i),a=Math.cos(i);return o([t.rx+s*n,t.ry+a*n])&&o([t.rx-s*n,t.ry-a*n])}),r=this._roomWallOpeningInputs(a,t);for(const t of r){const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,n=Math.sin(e)*t.length/2;s.push([t.x-i,t.y-n,t.x+i,t.y+n])}const l=new Set(a.filter(t=>t.partitionHost).map(t=>t.id)),c=[t.id,this._cfgEpoch,this._cellCm,this._gridPitch,[...l].sort().join(",")].join("|");this._lightPhysicalBodiesCache?.key!==c&&(this._lightPhysicalBodiesCache={key:c,all:Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t,t=>l.has(t.id))).all});const h=this._lightPhysicalBodiesCache.all;let d=2166136261;const u=t=>{d^=Math.round(64*(Number.isFinite(t)?t:0)),d=Math.imul(d,16777619)>>>0},p=this._spaceWalls;u(this._cellCm),u(this._gridPitch),u(this._wallKeyPitch);for(const{poly:t}of e){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of s)for(const e of t)u(e);for(const t of h){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of p)u(t.cm),u(t.a?.[0]??0),u(t.a?.[1]??0),u(t.b?.[0]??0),u(t.b?.[1]??0);const _=d.toString(36),g=`${t.id}|${_}`;if(this._lightBarrierCache?.key===g)return this._lightBarrierCache.value;const m=.02*this._gridPitch,f=[],v=p.length||h.length?ul(t.rooms,p,i,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,h):null;if(v)for(const t of function(t){const e=[];for(const i of t||[])for(const t of i||[])t?.length>=4&&e.push(t.slice(0,-1).map(t=>[t[0],t[1]]));return e}(v.geom))f.push(...Yd(t));else for(const t of h)f.push(...Yd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Yd(t))f.push(e);const y={occluders:Kd(f),floor:e.map(t=>t.poly),fingerprint:_,masonryGeometry:v?.geom||[],opaqueBodies:h};return this._lightBarrierCache={key:g,value:y},y}_renderGlowLayer(t,e){const i=this._fillColors,s=this._glowRadiusCm/this._cellCm*this._gridPitch,n=t.rooms.map(t=>({r:t,poly:ci(t)})).filter(t=>!!t.poly),o=n.filter(({r:t})=>Fs(e.glow,t));if(!o.length)return this._forgetGlowSpace(t.id),W``;const{occluders:a,floor:r,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=ro(this._renderPlanHass,this._renderDevices,null,this._virtualLights).filter(e=>e.device.space===t.id),u=new Map;for(const t of d){if(!t.device.id)continue;const e=u.get(t.device.id)||[];e.push(t),u.set(t.device.id,e)}const p=[],_=new Set;for(const e of this._renderDevices){if(e.space!==t.id)continue;const n=lo(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=xs(n.passive?{state:n.on?"on":"off",attributes:{}}:this._renderPlanHass.states[n.eid],e.marker?.glow_color,i.glow_light.c),g=Number(e.marker?.glow_radius_cm),m=Number.isFinite(g)&&g>0?g/this._cellCm*this._gridPitch:s,f=this._pos(e);if(Ll([f.x,f.y],c,h)){this._forgetGlowSource(o);continue}const v=this._glowTransition(o,!!d);if(!v)continue;d&&this._glowLastAppearance.set(o,{c:d.c,alpha:$s(d.bri,i.glow_light.a)});const y=this._glowLastAppearance.get(o);if(!y)continue;let b=null;const w=`${t.id}|${l}|${f.x.toFixed(4)},${f.y.toFixed(4)}|${m.toFixed(4)}`,k=f_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Zd([f.x,f.y],m,a,96);b={lit:t.length>=3?El([t],r):[]},v_(this._glowClipCache,w,b,256)}p.push({key:o,sourceEid:n.eid,domId:v.domId,entering:v.entering,leaving:v.leaving,pos:f,c:y.c,alpha:y.alpha,geometry:b,r:m})}const g=`${t.id}|`;for(const t of this._glowRenderedSources.keys())t.startsWith(g)&&!_.has(t)&&this._forgetGlowSource(t);if(!p.length)return W``;const m=this._spaceWalls,f=o.length===n.length?[]:this._openPairs().flatMap(t=>t.segs),v=o.length===n.length?null:o.map(({r:e,poly:i})=>{const s=m.length&&e.id&&ol(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||i,o=this._cleanFloor(e,s,t).path,a=Di(s,n.filter(t=>t.r!==e).map(t=>t.poly)),r=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||r(s),...a.map(r)].join(" ")}),y=this._viewOr(this._baseVb()),b=this._stageEl?.clientWidth&&y.w?this._stageEl.clientWidth/y.w:1,w=1/(b>0?b:1),k=!this._pinchStart&&!this._panStart&&Date.now()>=this._glowFeatherSuspendUntil;(null==this._glowFeatherUnits||k)&&(this._glowFeatherUnits=w);const x=this._glowFeatherUnits??w,$=4*x,S=p.reduce((t,e)=>({x:Math.min(t.x,e.pos.x-e.r-$),y:Math.min(t.y,e.pos.y-e.r-$),maxX:Math.max(t.maxX,e.pos.x+e.r+$),maxY:Math.max(t.maxY,e.pos.y+e.r+$),w:0,h:0}),{x:1/0,y:1/0,maxX:-1/0,maxY:-1/0,w:0,h:0});return S.w=S.maxX-S.x,S.h=S.maxY-S.y,W` + `}get _glowRadiusCm(){const t=Number(this._settings.glow_radius_cm);return Number.isFinite(t)&&t>0?t:300}get _imperial(){return"mi"===this.hass?.config?.unit_system?.length}get _glowRadiusPlaceholder(){const t=this._glowRadiusCm;return this._imperial?String(Math.round(t/30.48*10)/10):String(t/100)}_glowTransition(t,e){let i=this._glowRenderedSources.get(t);if(e){const e=this._glowFadeTimers.get(t);if(null!=e&&(clearTimeout(e),this._glowFadeTimers.delete(t)),null==i){this._suspendGlowFeatherForTransition(),i=++this._glowSourceSeq,this._glowRenderedSources.set(t,i),this._glowEnteringSources.add(t);const e=requestAnimationFrame(()=>{this._glowEnterRafs.get(t)===e&&(this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),this.isConnected&&this.requestUpdate())});this._glowEnterRafs.set(t,e)}return{domId:i,entering:this._glowEnteringSources.has(t),leaving:!1}}if(null==i)return null;const s=this._glowEnterRafs.get(t);if(null!=s&&cancelAnimationFrame(s),this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),!this._glowFadeTimers.has(t)){this._suspendGlowFeatherForTransition();const e=window.setTimeout(()=>{this._glowFadeTimers.get(t)===e&&(this._glowFadeTimers.delete(t),this._glowRenderedSources.delete(t),this._glowLastAppearance.delete(t),this.isConnected&&this.requestUpdate())},534);this._glowFadeTimers.set(t,e)}return{domId:i,entering:!1,leaving:!0}}_suspendGlowFeatherForTransition(){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;this._glowFeatherSuspendUntil=Math.max(this._glowFeatherSuspendUntil,Date.now()+500),clearTimeout(this._glowFeatherResumeTimer);const t=Math.max(0,this._glowFeatherSuspendUntil-Date.now())+17,e=()=>{this._glowFeatherResumeTimer=0,Date.now()t.segs),s=[...i],n=Math.max(this._cmToUnits(10),.5*this._gridPitch),o=t=>e.some(e=>this._pointInRoom(t,e.r)),a=this._openingsR.filter(t=>{if("door"!==(e=String(t.type))&&"gate"!==e&&"passage"!==e)return!1;var e;const i=t.angle*Math.PI/180,s=-Math.sin(i),a=Math.cos(i);return o([t.rx+s*n,t.ry+a*n])&&o([t.rx-s*n,t.ry-a*n])}),r=this._roomWallOpeningInputs(a,t);for(const t of r){const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,n=Math.sin(e)*t.length/2;s.push([t.x-i,t.y-n,t.x+i,t.y+n])}const l=new Set(a.filter(t=>t.partitionHost).map(t=>t.id)),c=[t.id,this._cfgEpoch,this._cellCm,this._gridPitch,[...l].sort().join(",")].join("|");this._lightPhysicalBodiesCache?.key!==c&&(this._lightPhysicalBodiesCache={key:c,all:Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t,t=>l.has(t.id))).all});const h=this._lightPhysicalBodiesCache.all;let d=2166136261;const u=t=>{d^=Math.round(64*(Number.isFinite(t)?t:0)),d=Math.imul(d,16777619)>>>0},p=this._spaceWalls;u(this._cellCm),u(this._gridPitch),u(this._wallKeyPitch);for(const{poly:t}of e){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of s)for(const e of t)u(e);for(const t of h){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of p)u(t.cm),u(t.a?.[0]??0),u(t.a?.[1]??0),u(t.b?.[0]??0),u(t.b?.[1]??0);const _=d.toString(36),g=`${t.id}|${_}`;if(this._lightBarrierCache?.key===g)return this._lightBarrierCache.value;const m=.02*this._gridPitch,f=[],v=p.length||h.length?ul(t.rooms,p,i,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,h):null;if(v)for(const t of function(t){const e=[];for(const i of t||[])for(const t of i||[])t?.length>=4&&e.push(t.slice(0,-1).map(t=>[t[0],t[1]]));return e}(v.geom))f.push(...Yd(t));else for(const t of h)f.push(...Yd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Yd(t))f.push(e);const y={occluders:Kd(f),floor:e.map(t=>t.poly),fingerprint:_,masonryGeometry:v?.geom||[],opaqueBodies:h};return this._lightBarrierCache={key:g,value:y},y}_renderGlowLayer(t,e){const i=this._fillColors,s=this._glowRadiusCm/this._cellCm*this._gridPitch,n=t.rooms.map(t=>({r:t,poly:ci(t)})).filter(t=>!!t.poly),o=n.filter(({r:t})=>Fs(e.glow,t));if(!o.length)return this._forgetGlowSpace(t.id),W``;const{occluders:a,floor:r,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=ro(this._renderPlanHass,this._renderDevices,null,this._virtualLights).filter(e=>e.device.space===t.id),u=new Map;for(const t of d){if(!t.device.id)continue;const e=u.get(t.device.id)||[];e.push(t),u.set(t.device.id,e)}const p=[],_=new Set;for(const e of this._renderDevices){if(e.space!==t.id)continue;const n=lo(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=xs(n.passive?{state:n.on?"on":"off",attributes:{}}:this._renderPlanHass.states[n.eid],e.marker?.glow_color,i.glow_light.c),g=Number(e.marker?.glow_radius_cm),m=Number.isFinite(g)&&g>0?g/this._cellCm*this._gridPitch:s,f=this._pos(e);if(Ll([f.x,f.y],c,h)){this._forgetGlowSource(o);continue}const v=this._glowTransition(o,!!d);if(!v)continue;d&&this._glowLastAppearance.set(o,{c:d.c,alpha:$s(d.bri,i.glow_light.a)});const y=this._glowLastAppearance.get(o);if(!y)continue;let b=null;const w=`${t.id}|${l}|${f.x.toFixed(4)},${f.y.toFixed(4)}|${m.toFixed(4)}`,k=v_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Zd([f.x,f.y],m,a,96);b={lit:t.length>=3?El([t],r):[]},y_(this._glowClipCache,w,b,256)}p.push({key:o,sourceEid:n.eid,domId:v.domId,entering:v.entering,leaving:v.leaving,pos:f,c:y.c,alpha:y.alpha,geometry:b,r:m})}const g=`${t.id}|`;for(const t of this._glowRenderedSources.keys())t.startsWith(g)&&!_.has(t)&&this._forgetGlowSource(t);if(!p.length)return W``;const m=this._spaceWalls,f=o.length===n.length?[]:this._openPairs().flatMap(t=>t.segs),v=o.length===n.length?null:o.map(({r:e,poly:i})=>{const s=m.length&&e.id&&ol(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||i,o=this._cleanFloor(e,s,t).path,a=Di(s,n.filter(t=>t.r!==e).map(t=>t.poly)),r=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||r(s),...a.map(r)].join(" ")}),y=this._viewOr(this._baseVb()),b=this._stageEl?.clientWidth&&y.w?this._stageEl.clientWidth/y.w:1,w=1/(b>0?b:1),k=!this._pinchStart&&!this._panStart&&Date.now()>=this._glowFeatherSuspendUntil;(null==this._glowFeatherUnits||k)&&(this._glowFeatherUnits=w);const x=this._glowFeatherUnits??w,$=4*x,S=p.reduce((t,e)=>({x:Math.min(t.x,e.pos.x-e.r-$),y:Math.min(t.y,e.pos.y-e.r-$),maxX:Math.max(t.maxX,e.pos.x+e.r+$),maxY:Math.max(t.maxY,e.pos.y+e.r+$),w:0,h:0}),{x:1/0,y:1/0,maxX:-1/0,maxY:-1/0,w:0,h:0});return S.w=S.maxX-S.x,S.h=S.maxY-S.y,W` ${Mt(p,t=>t.key,t=>{const e=t.domId,i=t.geometry;return W` ${""} - ${P_.map(([e,i])=>W` + ${R_.map(([e,i])=>W` `)} @@ -5418,7 +5435,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t("gs.glow_radius")} {const e=m_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> + @input=${t=>{const e=f_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> ${this._imperial?this._t("gs.unit_ft"):this._t("gs.unit_m")} @@ -5493,7 +5510,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G} -
${this._t("gs.about_version",{v:h_})}
+
${this._t("gs.about_version",{v:d_})}
${this._t("gs.about_github")} @@ -5550,7 +5567,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${t.busy?"…":this._t("btn.save")} -
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(C_,JSON.stringify(this._kioskScale))}catch{}this.requestUpdate()}_renderKioskDialog(){const t=this._kioskScale,e=(e,i)=>j` +
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(D_,JSON.stringify(this._kioskScale))}catch{}this.requestUpdate()}_renderKioskDialog(){const t=this._kioskScale,e=(e,i)=>j`
${this._rangeInput(50,300,5,Math.round(100*t[e]),t=>this._saveKioskScale({[e]:t/100}))} ${Math.round(100*t[e])}% @@ -5607,7 +5624,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._spaceDialog?this._renderSpaceDialog():G} ${this._importDialog?this._renderImportDialog():G} ${this._toast?j``:G} - `;const s=this._spaceModel();if(!s)return G;const n="valid"===i.kind?[s]:t,o=s.vb,a=this._effectiveProjection();this._renderProjection=a,this._labs.active.length&&function(t){Rp||Op(t);const e=Pp,i=e.active.join(",");if(!i||i===Ip)return;Ip=i;const s=new Map(wp.map(t=>[t.id,t])),n=e.active.map(t=>{const e=s.get(t);return`${t} (#${e.issue}, expires ${e.expires})`}).join(", ");console.info(`HOUSEPLAN LABS: ${n}`)}(h_);const r="iso"===a,l="devices"===this._mode&&this._showAll,c=this._renderDevices.filter(t=>t.space===s.id&&(!t.hidden||l)),h=this._renderDeviceSnapshot,d=this._spaceDisplayForRender(),u=r?this._isoDecorationLayers(d):null,p=u?this._isoOpeningPanels(u):[],_=this._resolvedRoomFills(s,d),g=this._resolvedGlowBase(s,d,_),m=d.showLqi??this._config.show_signal??!0,f=this._config.icon_size??2.5,v=f>8?2.5:f,y=this._viewOr(this._baseVb()),b=this._floorView(y),w=this._editing?"":this._stageBg(d),k=this._opMeasureView,x=this._decorMeasure,$=this._bdLive,S=this._furnLive,M="view"===this._mode?this._editorChromeMode:this._mode,C=this._roomHoverPaths(s),D=s.bg?this._display(s.bg.href):"",T=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,P=this._modeTransitionVisual,R=this._dayCycleState(),A=P?.viewWeight??("view"===this._mode?1:0),I=this._modeTransition.state?.from.presentedMode,F=!this._markup||!!P&&("view"===P.presentedMode||"devices"===P.presentedMode||"view"===I||"devices"===I),E=P?.stageColor||w,z=P?.sceneBrightness??1;return j` + `;const s=this._spaceModel();if(!s)return G;const n="valid"===i.kind?[s]:t,o=s.vb,a=this._effectiveProjection();this._renderProjection=a,this._labs.active.length&&function(t){Ap||Hp(t);const e=Rp,i=e.active.join(",");if(!i||i===Fp)return;Fp=i;const s=new Map(kp.map(t=>[t.id,t])),n=e.active.map(t=>{const e=s.get(t);return`${t} (#${e.issue}, expires ${e.expires})`}).join(", ");console.info(`HOUSEPLAN LABS: ${n}`)}(d_);const r="iso"===a,l="devices"===this._mode&&this._showAll,c=this._renderDevices.filter(t=>t.space===s.id&&(!t.hidden||l)),h=this._renderDeviceSnapshot,d=this._spaceDisplayForRender(),u=r?this._isoDecorationLayers(d):null,p=u?this._isoOpeningPanels(u):[],_=this._resolvedRoomFills(s,d),g=this._resolvedGlowBase(s,d,_),m=d.showLqi??this._config.show_signal??!0,f=this._config.icon_size??2.5,v=f>8?2.5:f,y=this._viewOr(this._baseVb()),b=this._floorView(y),w=this._editing?"":this._stageBg(d),k=this._opMeasureView,x=this._decorMeasure,$=this._bdLive,S=this._furnLive,M="view"===this._mode?this._editorChromeMode:this._mode,C=this._roomHoverPaths(s),D=s.bg?this._display(s.bg.href):"",T=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,P=this._modeTransitionVisual,R=this._dayCycleState(),A=P?.viewWeight??("view"===this._mode?1:0),I=this._modeTransition.state?.from.presentedMode,F=!this._markup||!!P&&("view"===P.presentedMode||"devices"===P.presentedMode||"view"===I||"devices"===I),E=P?.stageColor||w,z=P?.sceneBrightness??1;return j`
@@ -5710,7 +5729,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 viewBox=${u?.structural?`${y.x} ${y.y} ${y.w} ${y.h}`:`${b.x} ${b.y} ${b.w} ${b.h}`} preserveAspectRatio=${u?.structural||!r?"xMidYMid meet":"none"}> + transform=${u?.structural?Wp():G}> ${""} ${this._wallHatchDefs(d.color)}${W`${this._paperShapes(s.rooms).map(t=>"path"in t?W``:"poly"in t?W``:W``)}`} ${this._editing?this._renderMarkupDefs(o):G} @@ -5724,30 +5743,30 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 preserveAspectRatio="none" />`:G} ${""} ${d.hideDecor&&"decor"!==this._mode?G:this._renderDecorLayer()} - ${(()=>{const t=this._openPairs(),e=new Map,i=t=>(e.has(t)||e.set(t,ci(t)),e.get(t));return s.rooms.filter(t=>t.area||"view"===this._mode||this._markup||d.showBorders).map(e=>{let n="room "+(s.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||e.id!==this._mergeSel&&e.id!==this._splitSel?.roomId||(n+=" picked");let o="";const a=Is(d.fill,e);if(!this._markup&&(d.showBorders||"none"!==a)){n+=" styled";const t=[];t.push(`--room-stroke:${d.color}`,`--room-stroke-op:${d.showBorders?d.opacity:0}`);const i=_.byRoom.get(e)||null;i?(n+=" filled",t.push(`--room-fill:${i.color}`,`--room-fill-op:${i.opacity}`)):t.push("--room-fill:transparent","--room-fill-op:0"),o=t.join(";")}let r;const l=t=>{"view"===this._mode&&(void 0===r&&(r=this._roomArea(e)),this._showTip(t,e.name||this._t("room.unnamed"),r?this._t("tip.area",{value:r}):"",m?this._roomLqi(e.area):null,this._roomTemp(e),this._roomHum(e)))},c=this._markup&&(e.id===this._mergeSel||e.id===this._splitSel?.roomId),h=e.id&&!c?t.filter(t=>t.a.id===e.id||t.b.id===e.id).flatMap(t=>t.segs):[],u=c?[]:this._thickWallCuts(),p=h.concat(u);p.length&&(n+=" noedge");const g=i(e),f=this._spaceWalls,v=f.length&&e.id&&g&&ol(s.rooms,e.id,f,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||g,y=v?Di(v,(b=e,s.rooms.filter(t=>t!==b).map(i).filter(Boolean))):[];var b;const w=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",k=v?this._cleanFloor(e,v,s).path:"",x=e.id||G,$=e.area||G,S=k&&v?W`{const t=this._openPairs(),e=new Map,i=t=>(e.has(t)||e.set(t,ci(t)),e.get(t));return s.rooms.filter(t=>t.area||"view"===this._mode||this._markup||d.showBorders).map(e=>{let n="room "+(s.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||e.id!==this._mergeSel&&e.id!==this._splitSel?.roomId||(n+=" picked");let o="";const a=Is(d.fill,e);if(!this._markup&&(d.showBorders||"none"!==a)){n+=" styled";const t=[];t.push(`--room-stroke:${d.color}`,`--room-stroke-op:${d.showBorders?d.opacity:0}`);const i=_.byRoom.get(e)||null;i?(n+=" filled",t.push(`--room-fill:${i.color}`,`--room-fill-op:${i.opacity}`)):t.push("--room-fill:transparent","--room-fill-op:0"),o=t.join(";")}let r;const l=t=>{"view"===this._mode&&(void 0===r&&(r=this._roomArea(e)),this._showTip(t,e.name||this._t("room.unnamed"),r?this._t("tip.area",{value:r}):"",m?this._roomLqi(e.area):null,this._roomTemp(e),this._roomHum(e)))},c=this._markup&&(e.id===this._mergeSel||e.id===this._splitSel?.roomId),h=e.id&&!c?t.filter(t=>t.a.id===e.id||t.b.id===e.id).flatMap(t=>t.segs):[],u=c?[]:this._thickWallCuts(),p=h.concat(u);p.length&&(n+=" noedge");const g=i(e),f=this._spaceWalls,v=f.length&&e.id&&g&&ol(s.rooms,e.id,f,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||g,y=v?Di(v,(b=e,s.rooms.filter(t=>t!==b).map(i).filter(Boolean))):[];var b;const w=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",k=v?this._cleanFloor(e,v,s).path:"",x=e.id||G,$=e.area||G,S=k&&v?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:y.length&&v?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:y.length&&v?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:v&&v!==g?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:v&&v!==g?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:e.poly?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:e.poly?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`,M=p.length&&g?Ds(g,p,.02*this._gridPitch):null,C=M?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`,M=p.length&&g?Ds(g,p,.02*this._gridPitch):null,C=M?W``:G;return W`${S}${C}`})})()} ${this._renderRoomHoverFill(C)} @@ -5895,7 +5914,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G} ${this._toast?j``:G} - `}_vacCandidateStatus(t,e,i=this._planHass){const s=this._bindingStatus("entity:"+t);if("ha_disabled"===s.kind)return"disabled";if("orphaned"===s.kind)return"missing";if("unverified"===s.kind)return"unverified";const n=i?.states?.[t];return"unavailable"===n?.state?"unavailable":e?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(t){const e=this._haRegistry.entities||{},i=[];for(const[t,s]of Object.entries(this.hass?.states||{})){if(!t.startsWith("camera."))continue;const n=wh(t,s,e[t]);n&&i.push(n)}this._vacAllCameraCache={devId:t.id,candidates:i},this._vacAllCamerasFor=t.id}_vacSourceResolution(t,e=!1,i=this._planHass){const s=t.marker?.vacuum,n="string"==typeof s?.source&&!!s.source,o=new Set(t.entities||[]),a=new Set(o);n&&a.add(s.source);const r=i?.entities||{},l=[];for(const t of a){const e=i?.states?.[t],o=wh(t,e,r[t]);o?l.push(o):n&&t===s.source&&l.push({entityId:t,name:String(e?.attributes?.friendly_name||t),platform:r[t]?.platform?String(r[t].platform):null,category:t.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(e&&this._vacAllCameraCache?.devId===t.id){const t=new Set(l.map(t=>t.entityId));for(const e of this._vacAllCameraCache.candidates)t.has(e.entityId)||l.push(e)}const c={};for(const t of l)c[t.entityId]=this._vacCandidateStatus(t.entityId,t,i);return function(t,e,i,s){const n="string"==typeof t&&t.length>0,o=new Set(e),a=Array.from(i).sort((e,i)=>n&&e.entityId===t?-1:n&&i.entityId===t?1:i.score-e.score||e.entityId.localeCompare(i.entityId));if(n){const e=a.find(e=>e.entityId===t);return{entityId:t,status:s[t]||(e?.hasPosition?"ok":"unverified"),pinned:!0,candidates:a}}const r=a.find(t=>o.has(t.entityId)&&t.hasPosition&&"ok"===s[t.entityId]);return r?{entityId:r.entityId,status:"ok",pinned:!1,candidates:a}:{entityId:null,status:"none",pinned:!1,candidates:a}}(s?.source,o,l,c)}_vacSource(t,e=this._planHass){if(!1===t.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(t,!1,e);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(t){return t.primary?.startsWith("vacuum.")?t.primary:(t.entities||[]).find(t=>t.startsWith("vacuum."))||null}_isVacDev(t){return!!this._vacEntity(t)}_activitySourceKey(t){return this._activitySnapshot(t).sourceKey}_activitySnapshot(t,e=ro(this._planHass,this._devices,null,this._virtualLights)){const i=cu(this._planHass,t,this._devices,e,this._fullRegistryHass);return{samples:i.samples,sourceKey:uu(this._planHass,t,i)}}_stampActivity(t,e,i){let s=this._activityRt.get(t);s||(s=Eu(i||"",[]),this._activityRt.set(t,s)),null!=i&&(s.sources=i),Ou(s,e,Date.now(),window.clearTimeout.bind(window),t=>window.setTimeout(()=>this.requestUpdate(),t))}_syncActivityRuntime(){const t=new Map;if(!this.hass)return t;if(!1===this._config?.live_states){for(const t of this._activityRt.values())clearTimeout(t.timer);return this._activityRt.clear(),t}const e=new Set,i=ro(this._planHass,this._devices,null,this._virtualLights);for(const s of this._devices){if(s.hidden)continue;if("icon_ripple"!==Li(s.marker?.display))continue;e.add(s.id);const n=this._activitySnapshot(s,i);t.set(s.id,n);const{samples:o,sourceKey:a}=n;let r=this._activityRt.get(s.id);r?r.sources!==a&&zu(r,a,o,window.clearTimeout.bind(window)):(r=Eu(a,o),this._activityRt.set(s.id,r))}for(const[t,i]of this._activityRt)e.has(t)||(clearTimeout(i.timer),this._activityRt.delete(t));return t}_activityTick(){if(!this.hass)return;const t=this._syncActivityRuntime();for(const e of this._devices){if(e.hidden)continue;if("icon_ripple"!==Li(e.marker?.display))continue;const i=t.get(e.id)||this._activitySnapshot(e),{samples:s,sourceKey:n}=i,o=this._activityRt.get(e.id);if(!o||o.sources!==n)continue;const a=Nu(o,s,window.clearTimeout.bind(window));a&&this._stampActivity(e.id,a,n)}}_vacTick(){if(this.hass)for(const t of this._devices){if(t.hidden||!this._isVacDev(t))continue;if("static_icon"===Li(t.marker?.display)){this._vacRt.delete(t.id);continue}const e=this._vacSource(t);if(!e)continue;const i=this._vacEntity(t),s=Sh(this.hass.states[i||""]?.state),n=bh(this.hass.states[e]?.attributes);let o=this._vacRt.get(t.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(t.id,o)),s&&!o.moving&&(o.trail=[],o.lastPos=null);const a="never"!==Ph(t.marker?.vacuum)&&!n?.path.length;!s&&o.moving&&(o.endedTs=Date.now(),a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=s;const r=n?.pos;if(s&&r){const t=r.x+":"+r.y;if(t!==o.lastKey){const e=Date.now();o.jump=o.lastTs>0&&e-o.lastTs>1e4,o.lastKey=t,o.lastTs=e,a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=[r.x,r.y]}}}}_vacEnsureMarker(t){const e=this._serverCfg;if(!e)return null;e.markers=e.markers||[];const i=e.markers.find(e=>e.id===t.id);if(i)return i;if("device"!==t.bindingKind&&"entity"!==t.bindingKind||!t.bindingRef)return null;const s={id:t.id,binding:t.bindingKind+":"+t.bindingRef,space:t.space||null,area:t.area||null,hidden:!!t.hidden};return e.markers.push(s),s}_renderVacSection(t){const e=this._devices.find(e=>e.id===t.devId);if(!e||!this._isVacDev(e))return G;const i=e.marker?.vacuum||{},s=this._vacAllCamerasFor===e.id,n=this._vacSourceResolution(e,s),o=n.entityId,a=n.candidates.find(t=>t.entityId===o)||null,r=o?bh(this.hass?.states[o]?.attributes):null,l=!1!==i.live&&("ok"===n.status||"unsupported"===n.status),c=this._vacPlanRoomAnchors(e.space),h=r?function(t,e){const i=new Set(e.map(kh).filter(Boolean)),s=new Set;for(const e of t){const t=kh(e.name||"");t&&i.has(t)&&s.add(t)}return s.size}(r.rooms,c.map(t=>t.name)):0,d=!!(l&&r&&h>=3),u=Object.keys(i.calibration||{}),p=t=>{const i=this._vacEnsureMarker(e);i&&(i.vacuum={...i.vacuum||{},...t},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate())},_=new Set(e.entities||[]),g=n.candidates.filter(t=>_.has(t.entityId)||t.entityId===i.source),m=s?n.candidates.filter(t=>t.entityId.startsWith("camera.")&&!g.some(e=>e.entityId===t.entityId)):[],f=t=>[t.hasPosition?this._t("vac.cap_position"):"",t.hasRooms?this._t("vac.cap_rooms_short"):"",t.hasPath?this._t("vac.cap_path"):"",t.hasMapId?this._t("vac.cap_map"):""].filter(Boolean).join(" · ")||this._t("vac.cap_none"),v=t=>j` + `}_vacCandidateStatus(t,e,i=this._planHass){const s=this._bindingStatus("entity:"+t);if("ha_disabled"===s.kind)return"disabled";if("orphaned"===s.kind)return"missing";if("unverified"===s.kind)return"unverified";const n=i?.states?.[t];return"unavailable"===n?.state?"unavailable":e?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(t){const e=this._haRegistry.entities||{},i=[];for(const[t,s]of Object.entries(this.hass?.states||{})){if(!t.startsWith("camera."))continue;const n=wh(t,s,e[t]);n&&i.push(n)}this._vacAllCameraCache={devId:t.id,candidates:i},this._vacAllCamerasFor=t.id}_vacSourceResolution(t,e=!1,i=this._planHass){const s=t.marker?.vacuum,n="string"==typeof s?.source&&!!s.source,o=new Set(t.entities||[]),a=new Set(o);n&&a.add(s.source);const r=i?.entities||{},l=[];for(const t of a){const e=i?.states?.[t],o=wh(t,e,r[t]);o?l.push(o):n&&t===s.source&&l.push({entityId:t,name:String(e?.attributes?.friendly_name||t),platform:r[t]?.platform?String(r[t].platform):null,category:t.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(e&&this._vacAllCameraCache?.devId===t.id){const t=new Set(l.map(t=>t.entityId));for(const e of this._vacAllCameraCache.candidates)t.has(e.entityId)||l.push(e)}const c={};for(const t of l)c[t.entityId]=this._vacCandidateStatus(t.entityId,t,i);return function(t,e,i,s){const n="string"==typeof t&&t.length>0,o=new Set(e),a=Array.from(i).sort((e,i)=>n&&e.entityId===t?-1:n&&i.entityId===t?1:i.score-e.score||e.entityId.localeCompare(i.entityId));if(n){const e=a.find(e=>e.entityId===t);return{entityId:t,status:s[t]||(e?.hasPosition?"ok":"unverified"),pinned:!0,candidates:a}}const r=a.find(t=>o.has(t.entityId)&&t.hasPosition&&"ok"===s[t.entityId]);return r?{entityId:r.entityId,status:"ok",pinned:!1,candidates:a}:{entityId:null,status:"none",pinned:!1,candidates:a}}(s?.source,o,l,c)}_vacSource(t,e=this._planHass){if(!1===t.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(t,!1,e);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(t){return t.primary?.startsWith("vacuum.")?t.primary:(t.entities||[]).find(t=>t.startsWith("vacuum."))||null}_isVacDev(t){return!!this._vacEntity(t)}_activitySourceKey(t){return this._activitySnapshot(t).sourceKey}_activitySnapshot(t,e=ro(this._planHass,this._devices,null,this._virtualLights)){const i=cu(this._planHass,t,this._devices,e,this._fullRegistryHass);return{samples:i.samples,sourceKey:uu(this._planHass,t,i)}}_stampActivity(t,e,i){let s=this._activityRt.get(t);s||(s=Eu(i||"",[]),this._activityRt.set(t,s)),null!=i&&(s.sources=i),Ou(s,e,Date.now(),window.clearTimeout.bind(window),t=>window.setTimeout(()=>this.requestUpdate(),t))}_syncActivityRuntime(){const t=new Map;if(!this.hass)return t;if(!1===this._config?.live_states){for(const t of this._activityRt.values())clearTimeout(t.timer);return this._activityRt.clear(),t}const e=new Set,i=ro(this._planHass,this._devices,null,this._virtualLights);for(const s of this._devices){if(s.hidden)continue;if("icon_ripple"!==Li(s.marker?.display))continue;e.add(s.id);const n=this._activitySnapshot(s,i);t.set(s.id,n);const{samples:o,sourceKey:a}=n;let r=this._activityRt.get(s.id);r?r.sources!==a&&zu(r,a,o,window.clearTimeout.bind(window)):(r=Eu(a,o),this._activityRt.set(s.id,r))}for(const[t,i]of this._activityRt)e.has(t)||(clearTimeout(i.timer),this._activityRt.delete(t));return t}_activityTick(){if(!this.hass)return;const t=this._syncActivityRuntime();for(const e of this._devices){if(e.hidden)continue;if("icon_ripple"!==Li(e.marker?.display))continue;const i=t.get(e.id)||this._activitySnapshot(e),{samples:s,sourceKey:n}=i,o=this._activityRt.get(e.id);if(!o||o.sources!==n)continue;const a=Hu(o,s,window.clearTimeout.bind(window));a&&this._stampActivity(e.id,a,n)}}_vacTick(){if(this.hass)for(const t of this._devices){if(t.hidden||!this._isVacDev(t))continue;if("static_icon"===Li(t.marker?.display)){this._vacRt.delete(t.id);continue}const e=this._vacSource(t);if(!e)continue;const i=this._vacEntity(t),s=Sh(this.hass.states[i||""]?.state),n=bh(this.hass.states[e]?.attributes);let o=this._vacRt.get(t.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(t.id,o)),s&&!o.moving&&(o.trail=[],o.lastPos=null);const a="never"!==Ph(t.marker?.vacuum)&&!n?.path.length;!s&&o.moving&&(o.endedTs=Date.now(),a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=s;const r=n?.pos;if(s&&r){const t=r.x+":"+r.y;if(t!==o.lastKey){const e=Date.now();o.jump=o.lastTs>0&&e-o.lastTs>1e4,o.lastKey=t,o.lastTs=e,a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=[r.x,r.y]}}}}_vacEnsureMarker(t){const e=this._serverCfg;if(!e)return null;e.markers=e.markers||[];const i=e.markers.find(e=>e.id===t.id);if(i)return i;if("device"!==t.bindingKind&&"entity"!==t.bindingKind||!t.bindingRef)return null;const s={id:t.id,binding:t.bindingKind+":"+t.bindingRef,space:t.space||null,area:t.area||null,hidden:!!t.hidden};return e.markers.push(s),s}_renderVacSection(t){const e=this._devices.find(e=>e.id===t.devId);if(!e||!this._isVacDev(e))return G;const i=e.marker?.vacuum||{},s=this._vacAllCamerasFor===e.id,n=this._vacSourceResolution(e,s),o=n.entityId,a=n.candidates.find(t=>t.entityId===o)||null,r=o?bh(this.hass?.states[o]?.attributes):null,l=!1!==i.live&&("ok"===n.status||"unsupported"===n.status),c=this._vacPlanRoomAnchors(e.space),h=r?function(t,e){const i=new Set(e.map(kh).filter(Boolean)),s=new Set;for(const e of t){const t=kh(e.name||"");t&&i.has(t)&&s.add(t)}return s.size}(r.rooms,c.map(t=>t.name)):0,d=!!(l&&r&&h>=3),u=Object.keys(i.calibration||{}),p=t=>{const i=this._vacEnsureMarker(e);i&&(i.vacuum={...i.vacuum||{},...t},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate())},_=new Set(e.entities||[]),g=n.candidates.filter(t=>_.has(t.entityId)||t.entityId===i.source),m=s?n.candidates.filter(t=>t.entityId.startsWith("camera.")&&!g.some(e=>e.entityId===t.entityId)):[],f=t=>[t.hasPosition?this._t("vac.cap_position"):"",t.hasRooms?this._t("vac.cap_rooms_short"):"",t.hasPath?this._t("vac.cap_path"):"",t.hasMapId?this._t("vac.cap_map"):""].filter(Boolean).join(" · ")||this._t("vac.cap_none"),v=t=>j`
`}_roomArea(t){const e=ci(t);if(!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._spaceWalls,n=s.length&&t.id&&ol(i.rooms,t.id,s,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||e,o=this._cleanFloor(t,n),a=this._cellCm/this._gridPitch;return Ta(o.area*a*a/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(t){const e=t.settings?.temp_source;return e?xo(this._renderPlanHass,e,"temp",this._markers):t.area?this._climate().get(t.area)?.temp??null:null}_roomHum(t){const e=t.settings?.hum_source;return e?xo(this._renderPlanHass,e,"hum",this._markers):t.area?this._climate().get(t.area)?.hum??null:null}_climate(){const t=this._serverCfg?.markers,e=this._renderPlanHass,i=this._climateCache;if(i&&i.h===e&&i.r===this._iconRules&&i.mk===t)return i.m;const s=function(t,e,i){const s=new Map;if(!t?.entities)return s;const n=vo(i),o=new Set;for(const t of i||[]){if(t?.removed||!0!==t?.use_climate_temp)continue;const e=(t.binding||"").indexOf(":");e>0&&o.add(t.binding.slice(e+1))}const a=new Map;for(const[e,i]of Object.entries(t.entities)){if(i.device_id&&n.devices.has(i.device_id)||!i.device_id&&n.entities.has(e))continue;const s=i.device_id?t.devices?.[i.device_id]:null,r=i.area_id||s?.area_id||null;if(!r)continue;if(i.entity_category)continue;if(!(o.size>0&&e.startsWith("climate.")&&(o.has(e)||i.device_id&&o.has(i.device_id)))){if(Yt.has(i.platform))continue;if($o.test(e))continue}let l=a.get(r);l||(l=new Map,a.set(r,l));const c=i.device_id||e;let h=l.get(c);if(!h){const n=t.states?.[e];h={name:(s?s.name_by_user||s.name:i.name||n?.attributes?.friendly_name||e)||e,model:s?.model,ents:[]},l.set(c,h)}h.ents.push(e)}for(const[i,n]of a){const a=[],r=[];for(const[i,s]of n){const n=fo(t,s.name,s.model,s.ents,e),l="mdi:thermometer"===n||"mdi:air-filter"===n;if(l){const e=uo(t,s.ents);null!=e&&a.push(e)}if(o.size>0&&(o.has(i)||s.ents.some(t=>o.has(t)))){const e=po(t,s.ents);null!=e&&a.push(e)}if(l||"mdi:water-percent"===n){const e=go(t,s.ents);null!=e&&r.push(e)}}(a.length||r.length)&&s.set(i,{temp:a.length?Math.round(a.reduce((t,e)=>t+e,0)/a.length*10)/10:null,hum:r.length?Math.round(r.reduce((t,e)=>t+e,0)/r.length):null})}return s}(e,this._iconRules,t);return this._climateCache={h:e,r:this._iconRules,mk:t,m:s},s}_resetRoomDialogFields(){this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1}_openRoomEdit(t){if(!t.id)return;this._roomEditId=t.id,this._nameSel=t.name||"",this._areaSel=t.area||"",this._roomFill="glow"===t.settings?.fill_mode?"":t.settings?.fill_mode||"";const e=t.settings?.custom_fill;this._roomCustomFill=e&&"object"==typeof e?as(e,ls(this._curSpaceCfg).customFill):null,this._roomTempSrc=t.settings?.temp_source||"",this._roomHumSrc=t.settings?.hum_source||"",this._roomNameScale=Es(t.settings?.name_scale),this._roomLabelScale=Es(t.settings?.label_scale),this._roomSrcOpen=null,this._roomSrcFilter="",this._roomDialog=!0}_roomSettingsFromDialog(){const t={};return this._roomFill&&(t.fill_mode=this._roomFill),this._roomCustomFill&&(t.custom_fill=this._roomCustomFill),this._roomTempSrc&&(t.temp_source=this._roomTempSrc),this._roomHumSrc&&(t.hum_source=this._roomHumSrc),1!==this._roomNameScale&&(t.name_scale=this._roomNameScale),1!==this._roomLabelScale&&(t.label_scale=this._roomLabelScale),Object.keys(t).length?t:null}_saveRoomEdit(){const t=this._curSpaceCfg,e=t?.rooms.find(t=>t.id===this._roomEditId);if(!e)return this._roomDialog=!1,void(this._roomEditId=null);e.name=this._nameSel.trim()||e.name,e.area=this._areaSel||null;const i=e.settings||{},s={...i};this._roomFill?s.fill_mode=this._roomFill:delete s.fill_mode,this._roomCustomFill?s.custom_fill=this._roomCustomFill:delete s.custom_fill,"glow"===i.fill_mode&&"boolean"!=typeof i.glow&&(s.glow=!0),this._roomTempSrc?s.temp_source=this._roomTempSrc:delete s.temp_source,this._roomHumSrc?s.hum_source=this._roomHumSrc:delete s.hum_source,1!==this._roomNameScale?s.name_scale=this._roomNameScale:delete s.name_scale,1!==this._roomLabelScale?s.label_scale=this._roomLabelScale:delete s.label_scale,Object.keys(s).length?e.settings=s:delete e.settings,this._saveConfig(),this._roomDialog=!1,this._roomEditId=null,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate(),this._showToast(this._t("toast.room_updated"))}_roomSrcCandidates(){const t=this._planHass,e=vo(this._markers),i=this._roomSrcFilter.trim().toLowerCase(),s=[];for(const n of Object.values(t.devices)){if("service"===n.entry_type)continue;if(e.devices.has(n.id))continue;const t=(n.name_by_user||n.name||n.id).trim();i&&!t.toLowerCase().includes(i)||s.push({value:"device:"+n.id,label:t,sub:n.model||this._t("marker.sub_device")})}for(const[n,o]of Object.entries(t.entities)){if(!n.startsWith("sensor.")||o.hidden)continue;if(yo(t,n,e))continue;const a=o.name||t.states[n]?.attributes?.friendly_name||n;i&&!(a+" "+n).toLowerCase().includes(i)||s.push({value:"entity:"+n,label:a,sub:n})}return s.sort((t,e)=>t.label.localeCompare(e.label)),s.slice(0,200)}_roomSrcLabel(t){const e=t.indexOf(":"),i=t.slice(0,e),s=t.slice(e+1);return"device"===i?this._fullRegistryHass.devices[s]?.name_by_user||this._fullRegistryHass.devices[s]?.name||s:this._fullRegistryHass.entities[s]?.name||this.hass.states[s]?.attributes?.friendly_name||s}_labelPos(t,e){const i=this._layout["rl_"+(t.id||"")];if(i&&i.s===e)return{x:i.x*T_,y:i.y*T_};const s=this._snap(this._roomCenter(t));return{x:s[0],y:s[1]}}_labelDown(t,e,i){if("plan"!==this._mode)return;t.preventDefault(),t.stopPropagation();const s=this._labelPos(e,i);this._drag={id:"rl_"+(e.id||""),sx:t.clientX,sy:t.clientY,ox:s.x,oy:s.y,moved:!1},O_(t),this._tip=null}_labelMove(t,e,i){const s="rl_"+(e.id||"");if(!this._drag||this._drag.id!==s)return;const n=this._stageEl;if(!n)return;const o=this._spaceModelById(i);if(!o)return;const a=o.vb,r=n.getBoundingClientRect(),l=this._viewOr(a),c=(t.clientX-this._drag.sx)/r.width*l.w,h=(t.clientY-this._drag.sy)/r.height*l.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0);const d=ic(this._drag.ox+c),u=ic(this._drag.oy+h);this._savePos({id:s,space:i},d,u)}_labelUp(t){const e="rl_"+(t.id||"");if(!this._drag||this._drag.id!==e)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&window.setTimeout(()=>this._drag=null,0)}_labelScale(t){const e=this._layout["rl_"+(t.id||"")]?.k;return"number"==typeof e&&Number.isFinite(e)?Math.min(3,Math.max(.5,e)):1}_rlResizeDown(t,e,i){if("plan"!==this._mode)return;t.preventDefault(),t.stopPropagation();const s=t.target.closest(".roomlabel");if(!s)return;const n=s.getBoundingClientRect(),o=n.left+n.width/2,a=n.top+n.height/2,r=Math.max(8,Math.hypot(t.clientX-o,t.clientY-a));this._rlResize={id:"rl_"+(e.id||""),space:i,k0:this._labelScale(e),cx:o,cy:a,d0:r},O_(t)}_rlResizeMove(t){const e=this._rlResize;if(!e)return;t.stopPropagation();const i=Math.max(8,Math.hypot(t.clientX-e.cx,t.clientY-e.cy)),s=Math.min(3,Math.max(.5,e.k0*(i/e.d0))),n=this._layout[e.id];if(n)this._layout={...this._layout,[e.id]:{...n,k:s}};else{const t=e.id.slice(3),i=this._spaceModelById(e.space);if(!i)return;const n=i.rooms.find(e=>e.id===t);if(!n)return;const o=this._labelPos(n,e.space);this._layout={...this._layout,[e.id]:{s:e.space,x:o.x/T_,y:o.y/T_,k:s}}}this._dirtyPos.add(e.id)}_rlResizeUp(){this._rlResize&&(this._rlResize=null,this._persistLayout())}_renderRoomGear(t,e,i){if(!t.id)return G;let s=null;if(t.poly?(s=this._gearPtCache.get(t.poly)||null,s||(s=xi(t.poly),this._gearPtCache.set(t.poly,s))):null!=t.x&&null!=t.y&&(s=[t.x+(t.w||0)/2,t.y+(t.h||0)/2]),!s)return G;const n=(s[0]-i.x)/i.w*100,o=(s[1]-i.y)/i.h*100;return j`
`}get _measureAnchor(){return this._markup&&this._cursorPt?"draw"===this._tool&&this._path.length&&!this._contourClosed?this._path[this._path.length-1]:"split"===this._tool&&this._splitSel?.pts?.length?this._splitSel.pts[this._splitSel.pts.length-1]:null:null}_renderMeasureLabel(t){const e=this._measureAnchor,i=this._cursorPt,s=(i[0]-t.x)/t.w*100,n=(i[1]-t.y)/t.h*100,o=zs(e,i),a=Math.round(10*o)/10,r=Os(o);return j`
- ${this._fmtLen(e,i)} · ${a}°
`}get _decorMeasure(){const t=this._decorDraft;if(!t||"decor"!==this._mode)return null;const[e,i]=t.a,[s,n]=t.b;if(Math.abs(e-s)<1e-6&&Math.abs(i-n)<1e-6)return null;const o=(e+s)/2,a=(i+n)/2;if("line"===t.kind){const e=zs(t.a,t.b);return{x:o,y:a,on45:Os(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const r=this._fmtLen([e,i],[s,i]),l=this._fmtLen([s,i],[s,n]);if("ellipse"===t.kind){const t=this._fmtLen([0,0],[Math.abs(s-e)/2,0]),r=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:a,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${r}`}}return{x:o,y:a,on45:!1,text:`${r} × ${l} · ${Ta(rr(Math.abs(s-e),this._cellCm,this._gridPitch)*rr(Math.abs(n-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const t=this._drag.id.slice(3),e=this._spaceModel()?.rooms.find(e=>e.id===t);return e?(()=>{const t=this._labelPos(e,this._space);return[t.x,t.y]})():null}return null}if("devices"===this._mode&&this._drag?.moved){const t=this._devices.find(t=>t.id===this._drag.id);return t?(()=>{const e=this._pos(t);return[e.x,e.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const t=this._decorList.find(t=>t.id===this._decorMove.id);if(!t)return null;const e=T_,i=this._decorH;return"line"===t.kind?[t.x1*e,t.y1*i]:[t.x*e,t.y*i]}return null}return null}_alignCandidates(){const t=[],e=this._spaceModel();if(this._markup){if(!e)return t;if(this._drag?.id.startsWith("rl_")){const i=this._drag.id.slice(3);for(const s of e.rooms){if(!s.name||s.id===i)continue;const e=this._labelPos(s,this._space);t.push([e.x,e.y])}return t}for(const i of e.rooms){const e=ci(i);if(e)for(const i of e)t.push(i)}if("draw"===this._tool)for(const e of this._path)t.push(e);if("split"===this._tool&&this._splitSel?.pts)for(const e of this._splitSel.pts)t.push(e);return t}if("devices"===this._mode){for(const e of this._devices){if(e.space!==this._space||e.id===this._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const i=this._pos(e);t.push([i.x,i.y])}return t}if("decor"===this._mode){const e=this._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this._decorDraft&&t.push(this._decorDraft.a),t}return t}_renderAlignGuides(){const t=this._alignPoint;if(!t)return W``;const e=this._drag?.id.startsWith("rl_")?.5*this._gridPitch:.05*this._gridPitch,i=function(t,e,i){let s=null,n=null;for(const o of e)if(!(Math.abs(o[0]-t[0])<1e-6&&Math.abs(o[1]-t[1])<1e-6)){if(Math.abs(o[0]-t[0])<=i){const e=Math.abs(o[1]-t[1]);e>1e-6&&(!s||e1e-6&&(!n||e + ${this._fmtLen(e,i)} · ${a}°`}get _decorMeasure(){const t=this._decorDraft;if(!t||"decor"!==this._mode)return null;const[e,i]=t.a,[s,n]=t.b;if(Math.abs(e-s)<1e-6&&Math.abs(i-n)<1e-6)return null;const o=(e+s)/2,a=(i+n)/2;if("line"===t.kind){const e=zs(t.a,t.b);return{x:o,y:a,on45:Os(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const r=this._fmtLen([e,i],[s,i]),l=this._fmtLen([s,i],[s,n]);if("ellipse"===t.kind){const t=this._fmtLen([0,0],[Math.abs(s-e)/2,0]),r=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:a,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${r}`}}return{x:o,y:a,on45:!1,text:`${r} × ${l} · ${Ta(rr(Math.abs(s-e),this._cellCm,this._gridPitch)*rr(Math.abs(n-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const t=this._drag.id.slice(3),e=this._spaceModel()?.rooms.find(e=>e.id===t);return e?(()=>{const t=this._labelPos(e,this._space);return[t.x,t.y]})():null}return null}if("devices"===this._mode&&this._drag?.moved){const t=this._devices.find(t=>t.id===this._drag.id);return t?(()=>{const e=this._pos(t);return[e.x,e.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const t=this._decorList.find(t=>t.id===this._decorMove.id);if(!t)return null;const e=P_,i=this._decorH;return"line"===t.kind?[t.x1*e,t.y1*i]:[t.x*e,t.y*i]}return null}return null}_alignCandidates(){const t=[],e=this._spaceModel();if(this._markup){if(!e)return t;if(this._drag?.id.startsWith("rl_")){const i=this._drag.id.slice(3);for(const s of e.rooms){if(!s.name||s.id===i)continue;const e=this._labelPos(s,this._space);t.push([e.x,e.y])}return t}for(const i of e.rooms){const e=ci(i);if(e)for(const i of e)t.push(i)}if("draw"===this._tool)for(const e of this._path)t.push(e);if("split"===this._tool&&this._splitSel?.pts)for(const e of this._splitSel.pts)t.push(e);return t}if("devices"===this._mode){for(const e of this._devices){if(e.space!==this._space||e.id===this._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const i=this._pos(e);t.push([i.x,i.y])}return t}if("decor"===this._mode){const e=this._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this._decorDraft&&t.push(this._decorDraft.a),t}return t}_renderAlignGuides(){const t=this._alignPoint;if(!t)return W``;const e=this._drag?.id.startsWith("rl_")?.5*this._gridPitch:.05*this._gridPitch,i=function(t,e,i){let s=null,n=null;for(const o of e)if(!(Math.abs(o[0]-t[0])<1e-6&&Math.abs(o[1]-t[1])<1e-6)){if(Math.abs(o[0]-t[0])<=i){const e=Math.abs(o[1]-t[1]);e>1e-6&&(!s||e1e-6&&(!n||e ${i.map(e=>{const[i,o,a,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*n]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*n,e.at];return W` `})} `}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180;return W`
- `}_renderOpeningDialog(){const t=this._openingDialog,e=this._spaceModel()?.partitions||[],i=t.id?this._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,s={id:t.id||"preview",type:t.type,x:t.x/T_,y:t.y/this._spaceH,angle:t.angle,length:i&&!t.lengthTouched?i.length:this._cmToUnits(Math.max(20,t.lengthCm))/T_,...t.host?{host:t.host}:{}},n=ld(i,s),o=t.host?n?rd(s,e,T_,this._cellCm,this._gridPitch):ad(s,e,T_,this._cellCm,this._gridPitch):null,a="does-not-fit-jamb"===o?.reason,r=t.host?e.find(e=>e.id===t.host.id):null,l=r?ri(r.cm/2,this._imperial):"",c=!!t.host&&!o?.resolved&&!a,h="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",d=(t,e,i)=>j`i(t.target.value)}> ${t.map(t=>j``)} `;return j` {const i=m_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> + @input=${e=>{const i=f_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> ${"passage"===t.type&&(t.contact||t.lock)?j`
@@ -6220,7 +6239,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 data-active=${e?"true":"false"} cx=${e?.point[0]??0} cy=${e?.point[1]??0} r=${s} visibility=${e?"visible":"hidden"} pointer-events="none"> - `}_syncPlanSnapActiveMarker(t){const e=this.renderRoot?.querySelector('[data-hp="plan-snap-active-marker"]');if(e){if(e.setAttribute("class",`plan-snap-node${t?" active":""}${"line"===t?.kind?" dynamic":""}`),e.setAttribute("data-active",t?"true":"false"),e.setAttribute("visibility",t?"visible":"hidden"),!t)return e.removeAttribute("data-kind"),void e.removeAttribute("data-key");e.setAttribute("data-kind",t.kind),e.setAttribute("data-key",t.key),e.setAttribute("cx",String(t.point[0])),e.setAttribute("cy",String(t.point[1])),e.setAttribute("r",String(vr(10,this._cellCm,this._gridPitch)))}}_planSnapPhysicalSegment(t){let e=0;const i=this._spaceModel();if(!i)return null;if("partition"===t.sourceKind)e=Number(i.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const s=/^(.*):(\d+)$/.exec(t.sourceId),n=s?i.room_drafts.find(t=>t.id===s[1]):null;e=n&&s&&Number(n.segments[Number(s[2])]?.cm)||0}else e=sl(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,T_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:vr(e,this._cellCm,this._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const i=[];for(let s=0;s+10&&i.push({a:t[s],b:t[s+1],halfDepth:e[s]});if(!i.length)return"";const s=2e-4*this._gridPitch,n=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>Ns(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=s)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Lr([...i,...n],s).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this._openPairs().flatMap(t=>t.segs),i=this._thickWallCuts(),s=e.concat(i),n=s.length?Cs(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,a=this._gridPitch,r=this._viewOr(this._baseVb()),l="draw"===this._tool?this._drawWallCm:null,c=(()=>"draw"===this._tool&&o.length&&null!=l&&l>0?this._contourClosed?o:this._cursorPt?[...o,this._cursorPt]:o.length>=2?o:null:null)(),h=c?c.slice(0,-1).map((t,e)=>vr(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||_r:l||_r,this._cellCm,this._gridPitch)/2):[],d=c?Br(c,vr(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` + `}_syncPlanSnapActiveMarker(t){const e=this.renderRoot?.querySelector('[data-hp="plan-snap-active-marker"]');if(e){if(e.setAttribute("class",`plan-snap-node${t?" active":""}${"line"===t?.kind?" dynamic":""}`),e.setAttribute("data-active",t?"true":"false"),e.setAttribute("visibility",t?"visible":"hidden"),!t)return e.removeAttribute("data-kind"),void e.removeAttribute("data-key");e.setAttribute("data-kind",t.kind),e.setAttribute("data-key",t.key),e.setAttribute("cx",String(t.point[0])),e.setAttribute("cy",String(t.point[1])),e.setAttribute("r",String(vr(10,this._cellCm,this._gridPitch)))}}_planSnapPhysicalSegment(t){let e=0;const i=this._spaceModel();if(!i)return null;if("partition"===t.sourceKind)e=Number(i.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const s=/^(.*):(\d+)$/.exec(t.sourceId),n=s?i.room_drafts.find(t=>t.id===s[1]):null;e=n&&s&&Number(n.segments[Number(s[2])]?.cm)||0}else e=sl(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,P_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:vr(e,this._cellCm,this._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const i=[];for(let s=0;s+10&&i.push({a:t[s],b:t[s+1],halfDepth:e[s]});if(!i.length)return"";const s=2e-4*this._gridPitch,n=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>Hs(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=s)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Lr([...i,...n],s).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this._openPairs().flatMap(t=>t.segs),i=this._thickWallCuts(),s=e.concat(i),n=s.length?Cs(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,a=this._gridPitch,r=this._viewOr(this._baseVb()),l="draw"===this._tool?this._drawWallCm:null,c=(()=>"draw"===this._tool&&o.length&&null!=l&&l>0?this._contourClosed?o:this._cursorPt?[...o,this._cursorPt]:o.length>=2?o:null:null)(),h=c?c.slice(0,-1).map((t,e)=>vr(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||_r:l||_r,this._cellCm,this._gridPitch)/2):[],d=c?Br(c,vr(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` ${this._gridLevels()?W``:G} ${n.map(t=>W``)} ${this._renderPhysicalEditorLayer()} @@ -6244,7 +6263,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182

${this._t("confirm.delete_partition_openings_body",{count:t.openings.length})}

    - ${t.openings.map(t=>j`
  • ${this._t("confirm.delete_partition_openings_item",{type:this._t(`opening.${t.type}`),length:ri(t.length*T_/this._gridPitch*this._cellCm,e)})}
  • `)} + ${t.openings.map(t=>j`
  • ${this._t("confirm.delete_partition_openings_item",{type:this._t(`opening.${t.type}`),length:ri(t.length*P_/this._gridPitch*this._cellCm,e)})}
  • `)}
@@ -6406,11 +6425,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`:G})()} ${t.model?j`
${this._t("info.model")}${t.model}
`:G} ${i&&!this._cardEntities(t).length?j`
${this._t("info.state")}${i}
`:G} - ${Ni(t.link)?j`
`:G} + ${Hi(t.link)?j`
${this._t("info.link")} + ${t.link}
`:G} ${t.description?j`
${t.description}
`:G} ${t.pdfs&&t.pdfs.length?j`
${this._t("info.manuals")} - ${t.pdfs.map(t=>j` + ${t.pdfs.map(t=>j` ${t.name}`)}
`:G} ${s.length?j`
${this._t("info.controls")} @@ -6429,7 +6448,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G}
- `}_markerValueBadgeFields(t){return(e={touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition}).touched?{value_badge:{enabled:e.enabled,source:e.source,position:e.position}}:e.originalHas?{value_badge:e.original}:{};var e}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=Bs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),a={id:i,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle||null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===o&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:n.length?n:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=m_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:t.hideFromPlan,vacuum:s?.vacuum||null};return("virtual"===t.binding||t.room)&&(a.space=e?.space||("virtual"===t.binding?this._space:null),a.area=e?.area||null,a.room_id=e?.roomId||null),a}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const i=`${this._haRegistry.revision}\n${JSON.stringify(e)}`;if(this._markerPreviewMemo?.key===i)return this._markerPreviewMemo.device;const s=function(t){const{marker:e,...i}=t;return ko({...i,markers:[e]}).find(t=>t.id===e.id)||null}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||this._space,loc:t=>this._t(t),iconRules:this._iconRules});return this._markerPreviewMemo={key:i,device:s},s}_markerPreviewDevices(t){const e=this._markerPreviewDevicesMemo;if(e?.base===this._devices&&e.preview===t)return e.devices;const i=[...this._devices.filter(e=>e.id!==t.id),t];return this._markerPreviewDevicesMemo={base:this._devices,preview:t,devices:i},i}_toggleIntent(t,e=this._devices){return Qh({hass:this._planHass,registryHass:this._fullRegistryHass,devices:e,device:t,virtualLights:this._virtualLights})}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i=this._markerPreviewDevices(e);return this._toggleIntent(e,i)}_toggleStateText(t,e){const i=this._planHass?.states?.[t]||this.hass?.states?.[t];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):e}catch{return e}}_toggleConfirmationStateText(t){const e=String(t.state||"unknown"),i=t.entityId?this._toggleStateText(t.entityId,e):e;if(i.trim().toLocaleLowerCase()!==e.trim().toLocaleLowerCase())return i;const s={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[e];return s?this._t(s):e.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(t){const e={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(t,e){if(!ed(t)||!t.nextEffect||!t.targets.length)return[];const i="group"===t.kind,s=i?t.targets.filter(t=>"on"===t.state).length:0,n=i?0===s?e.groupAllOff():e.groupCurrent(s,t.targets.length):e.state(t.targets[0]);let o;return o="toggle"===t.nextEffect?e.expectedByHa():i&&"turn-on"===t.nextEffect?e.groupAllOn():i&&"turn-off"===t.nextEffect?e.groupAllOff():e.effect(t.nextEffect),[e.current(n),e.expected(o),...t.skippedTargets.length?[e.unavailable(t.skippedTargets.length)]:[]]}(t,{state:t=>this._toggleConfirmationStateText(t),current:t=>this._t("confirm.current_state",{state:t}),expected:t=>this._t("confirm.expected_state",{state:t}),groupCurrent:(t,e)=>this._t("confirm.group_current",{on:t,total:e}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:t=>this._t("confirm.unavailable_targets",{count:t}),effect:t=>this._t(e[t]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(t){if(!t)return[];const e=t=>this._t(`marker.toggle_effect_${t.replace("-","_")}`),i=t=>this._t(`marker.toggle_skip_${t.replace("-","_")}`);return function(t,e){const i=t.targets[0]||t.skippedTargets[0],s=[];return"group"===t.kind?t.targets.length&&s.push(e.group(t.targets)):i&&s.push(e.single(i)),t.nextEffect&&t.targets.length&&s.push("group"===t.kind?e.groupCurrentNext(t.targets,t.nextEffect):e.currentNext(t.targets[0],t.nextEffect)),t.skippedTargets.length&&s.push(e.skipped(t.skippedTargets)),!t.command&&t.noneReason&&s.push(e.none(t.noneReason)),s}(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),i=t.name||e;return this._t("marker.toggle_hint_single",{name:i,id:e})},group:t=>this._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,i)=>"virtual-light"===t.via?this._t("marker.virtual_light_current",{state:this._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(i)}):this._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(i)}),groupCurrentNext:(t,i)=>this._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(i)}),skipped:t=>this._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${i(t.reason)})`}).join(", ")}),none:t=>this._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:Yh(t.originalHasTapAction?t.originalTapAction:null,e)}_effectiveMarkerTapAction(t,e=this._markerPreviewDevice(t)){return this._effectiveStoredTapAction(t,e?.primary?.split(".")[0])}_announceToggleDraft(t){const e=this._markerPreviewDevice(t),i=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},s="toggle"===i.tapAction?this._toggleHintLines(this._toggleIntentForDialog(i)).join(" "):"";return{...i,tapHintAnnouncement:s}}_valueBadgeForBinding(t,e){const i={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},s=this._markerPreviewDevice(i);if(!s)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const n=[...this._devices.filter(t=>t.id!==s.id),s],o=Lo(this._planHass,s,n),a=Bo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!a,valueBadgeSource:a,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return lo(ro(this._planHass,[...this._devices.filter(t=>t.id!==i.id),i],null,this._virtualLights).filter(t=>t.device.id===i.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},i=this._markerPreviewDevice(e);return!!i&&oo(this._planHass,{...i})}_setMarkerLightRole(t){const e=this._markerDialog;e&&(this._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this._planEntityAvailable(t)};const e=t.slice(7),i=this._markers.find(t=>t.id===e),s=this._devices.find(t=>t.id===e);if(!i||i.removed||!0!==i.is_light)return{label:this._t("marker.control_missing_label"),sub:`${this._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const n=this._serverCfg?.spaces.find(t=>t.id===(s?.space||i.space)),o=!!s&&Jn(s).length>0;return{label:i.name||s?.name||e,sub:[n?.title||s?.space||i.space,i.room_id||s?.area,o?"":this._t("marker.control_passive")].filter(Boolean).join(" · "),icon:i.icon||s?.icon||"mdi:lightbulb-outline",warning:!0===i.hidden||!0===s?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this._t("marker.value_badge_state",{name:t.label});const i=this.hass.states[e.entity_id]?.attributes?.friendly_name||this._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this._t(`marker.value_badge_attr_${e.attribute}`,{name:i})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",i=[],s=new Set;for(const t of this._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this._bindingStatus(t.binding).kind)continue;const n=this._devices.find(e=>e.id===t.id);if(!n||n.hidden)continue;const o=this._controlRefInfo(`marker:${t.id}`);for(const t of Jn(n))s.add(t);i.push({value:`marker:${t.id}`,label:o.label,sub:o.sub,icon:o.icon,search:`${o.label} ${o.sub} ${t.id} ${Jn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ss(e)&&!s.has(e)&&Kn(t.binding,[e],this._bindingEntities(t.binding)).length>0&&this._planEntityAvailable(e)).map(t=>{const e=this._controlRefInfo(t);return{value:t,label:e.label,sub:t,icon:e.icon,search:`${e.label} ${t}`.toLowerCase()}}),o=t.controlsFilter.trim().toLowerCase();return[...i,...n].filter(e=>!t.controls.includes(e.value)&&(!o||e.search.includes(o))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const i=this._markerDraft(t)?.id||t.devId||"";if(!i)return void this._showToast(this._t("toast.marker_binding_required"));const s=e.slice(7),n=this._markerDraft(t);if(function(t,e,i){if(!e||e===i)return!0;const s=new Map;for(const e of t)s.set(e.id,(e.controls||[]).filter(t=>"string"==typeof t&&t.startsWith("marker:")).map(t=>t.slice(7)));const n=new Set,o=[i];for(;o.length;){const t=o.pop();if(t===e)return!0;n.has(t)||(n.add(t),o.push(...s.get(t)||[]))}return!1}(n?[...this._markers.filter(t=>t.id!==i),n]:this._markers,i,s))return void this._showToast(this._t("toast.marker_control_cycle"))}this._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this._markerDialog;if(!e)return;if("auto"===t)return void(this._markerDialog={...e,glowMode:t,glowTouched:!0});const i=this._markerSpatialSource(e),s=ks(i?this._planHass.states[i.eid]:void 0,null,this._fillColors.glow_light.c),n=!e.glowColorDrafted,o="fixed"===t&&!e.glowBrightnessDrafted;this._markerDialog={...e,glowMode:t,glowColor:n?s.c:e.glowColor,glowBrightness:o?Math.max(1,Math.round(100*s.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this._markerDialog,e="virtual"===t.bindingMode,i=this._bindingCandidates();this._bindingEntities(t.binding);const s=e?null:this._bindingStatus(t.binding),n=!e&&this._bindingHasHaPage(t.binding),o=this._markerPreviewDevice(t),a=this._effectiveMarkerTapAction(t,o),r=o?ls(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===a&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?_u(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:r?.showLqi??!1!==this._config?.show_signal,designPreview:!0,activityRuntime:this._activityRt.get(o.id),lightDevices:l,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}):null,u=o?Lo(this._planHass,o,l):[],p=o?Bo(this._planHass,o,u):null,_=t.valueBadgeTouched?t.valueBadgeEnabled:!!d?.valueBadge,g=t.valueBadgeTouched?t.valueBadgeSource:d?.valueBadge?.source||t.valueBadgeSource,m=t.valueBadgeTouched?t.valueBadgePosition:d?.valueBadge?.position||t.valueBadgePosition,f=Po(g),v=!!g&&!u.some(t=>t.key===f),y=u.find(t=>t.key===f),b=d?.valueSource?d.valueSource.attribute?`attr:${d.valueSource.eid}:${d.valueSource.attribute}`:`state:${d.valueSource.eid}`:"",w=this._markerAutoHasSpatialSource(t),k=!!o&&function(t,e){return Qn(t,e).some(t=>!!t.eid)}(this._planHass,{...o}),x=function(t,e,i,s){const n="always"===t||"auto"===t&&e,o=n&&!i;return{sourceExists:n,fromSourceEnabled:n&&i,manualEnabled:n,radiusEnabled:n,passive:o,effectiveMode:o&&"auto"===s?"fixed":s}}(t.lightRole,w,k,t.glowMode),$=!x.sourceExists,S=!x.fromSourceEnabled,M=x.passive,C=x.effectiveMode,D="never"===t.lightRole?this._t("marker.glow_disabled_never"):"auto"!==t.lightRole||w?M?this._t("marker.glow_passive_hint"):this._t("marker.glow_disabled_no_entity"):this._t("marker.glow_disabled_auto"),T=o?Jn(o):[],P=o&&Zn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?Wh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),F="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=F?[...F.targets,...F.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",z=(()=>{if(e)return null;const s=i.find(e=>e.value===t.binding);if(s)return s.label;const[n,o]=t.binding.split(":");return"device"===n?this._fullRegistryHass.devices[o]?.name_by_user||this._fullRegistryHass.devices[o]?.name||o:this._fullRegistryHass.entities[o]?.name||this.hass.states[o]?.attributes?.friendly_name||o})();return j``}_markerValueBadgeFields(t){return(e={touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition}).touched?{value_badge:{enabled:e.enabled,source:e.source,position:e.position}}:e.originalHas?{value_badge:e.original}:{};var e}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=Bs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),a={id:i,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle||null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===o&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:n.length?n:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=f_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:t.hideFromPlan,vacuum:s?.vacuum||null};return("virtual"===t.binding||t.room)&&(a.space=e?.space||("virtual"===t.binding?this._space:null),a.area=e?.area||null,a.room_id=e?.roomId||null),a}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const i=`${this._haRegistry.revision}\n${JSON.stringify(e)}`;if(this._markerPreviewMemo?.key===i)return this._markerPreviewMemo.device;const s=function(t){const{marker:e,...i}=t;return ko({...i,markers:[e]}).find(t=>t.id===e.id)||null}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||this._space,loc:t=>this._t(t),iconRules:this._iconRules});return this._markerPreviewMemo={key:i,device:s},s}_markerPreviewDevices(t){const e=this._markerPreviewDevicesMemo;if(e?.base===this._devices&&e.preview===t)return e.devices;const i=[...this._devices.filter(e=>e.id!==t.id),t];return this._markerPreviewDevicesMemo={base:this._devices,preview:t,devices:i},i}_toggleIntent(t,e=this._devices){return Qh({hass:this._planHass,registryHass:this._fullRegistryHass,devices:e,device:t,virtualLights:this._virtualLights})}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i=this._markerPreviewDevices(e);return this._toggleIntent(e,i)}_toggleStateText(t,e){const i=this._planHass?.states?.[t]||this.hass?.states?.[t];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):e}catch{return e}}_toggleConfirmationStateText(t){const e=String(t.state||"unknown"),i=t.entityId?this._toggleStateText(t.entityId,e):e;if(i.trim().toLocaleLowerCase()!==e.trim().toLocaleLowerCase())return i;const s={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[e];return s?this._t(s):e.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(t){const e={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(t,e){if(!ed(t)||!t.nextEffect||!t.targets.length)return[];const i="group"===t.kind,s=i?t.targets.filter(t=>"on"===t.state).length:0,n=i?0===s?e.groupAllOff():e.groupCurrent(s,t.targets.length):e.state(t.targets[0]);let o;return o="toggle"===t.nextEffect?e.expectedByHa():i&&"turn-on"===t.nextEffect?e.groupAllOn():i&&"turn-off"===t.nextEffect?e.groupAllOff():e.effect(t.nextEffect),[e.current(n),e.expected(o),...t.skippedTargets.length?[e.unavailable(t.skippedTargets.length)]:[]]}(t,{state:t=>this._toggleConfirmationStateText(t),current:t=>this._t("confirm.current_state",{state:t}),expected:t=>this._t("confirm.expected_state",{state:t}),groupCurrent:(t,e)=>this._t("confirm.group_current",{on:t,total:e}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:t=>this._t("confirm.unavailable_targets",{count:t}),effect:t=>this._t(e[t]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(t){if(!t)return[];const e=t=>this._t(`marker.toggle_effect_${t.replace("-","_")}`),i=t=>this._t(`marker.toggle_skip_${t.replace("-","_")}`);return function(t,e){const i=t.targets[0]||t.skippedTargets[0],s=[];return"group"===t.kind?t.targets.length&&s.push(e.group(t.targets)):i&&s.push(e.single(i)),t.nextEffect&&t.targets.length&&s.push("group"===t.kind?e.groupCurrentNext(t.targets,t.nextEffect):e.currentNext(t.targets[0],t.nextEffect)),t.skippedTargets.length&&s.push(e.skipped(t.skippedTargets)),!t.command&&t.noneReason&&s.push(e.none(t.noneReason)),s}(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),i=t.name||e;return this._t("marker.toggle_hint_single",{name:i,id:e})},group:t=>this._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,i)=>"virtual-light"===t.via?this._t("marker.virtual_light_current",{state:this._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(i)}):this._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(i)}),groupCurrentNext:(t,i)=>this._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(i)}),skipped:t=>this._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${i(t.reason)})`}).join(", ")}),none:t=>this._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:Yh(t.originalHasTapAction?t.originalTapAction:null,e)}_effectiveMarkerTapAction(t,e=this._markerPreviewDevice(t)){return this._effectiveStoredTapAction(t,e?.primary?.split(".")[0])}_announceToggleDraft(t){const e=this._markerPreviewDevice(t),i=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},s="toggle"===i.tapAction?this._toggleHintLines(this._toggleIntentForDialog(i)).join(" "):"";return{...i,tapHintAnnouncement:s}}_valueBadgeForBinding(t,e){const i={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},s=this._markerPreviewDevice(i);if(!s)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const n=[...this._devices.filter(t=>t.id!==s.id),s],o=Lo(this._planHass,s,n),a=Bo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!a,valueBadgeSource:a,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return lo(ro(this._planHass,[...this._devices.filter(t=>t.id!==i.id),i],null,this._virtualLights).filter(t=>t.device.id===i.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},i=this._markerPreviewDevice(e);return!!i&&oo(this._planHass,{...i})}_setMarkerLightRole(t){const e=this._markerDialog;e&&(this._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this._planEntityAvailable(t)};const e=t.slice(7),i=this._markers.find(t=>t.id===e),s=this._devices.find(t=>t.id===e);if(!i||i.removed||!0!==i.is_light)return{label:this._t("marker.control_missing_label"),sub:`${this._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const n=this._serverCfg?.spaces.find(t=>t.id===(s?.space||i.space)),o=!!s&&Jn(s).length>0;return{label:i.name||s?.name||e,sub:[n?.title||s?.space||i.space,i.room_id||s?.area,o?"":this._t("marker.control_passive")].filter(Boolean).join(" · "),icon:i.icon||s?.icon||"mdi:lightbulb-outline",warning:!0===i.hidden||!0===s?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this._t("marker.value_badge_state",{name:t.label});const i=this.hass.states[e.entity_id]?.attributes?.friendly_name||this._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this._t(`marker.value_badge_attr_${e.attribute}`,{name:i})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",i=[],s=new Set;for(const t of this._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this._bindingStatus(t.binding).kind)continue;const n=this._devices.find(e=>e.id===t.id);if(!n||n.hidden)continue;const o=this._controlRefInfo(`marker:${t.id}`);for(const t of Jn(n))s.add(t);i.push({value:`marker:${t.id}`,label:o.label,sub:o.sub,icon:o.icon,search:`${o.label} ${o.sub} ${t.id} ${Jn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ss(e)&&!s.has(e)&&Kn(t.binding,[e],this._bindingEntities(t.binding)).length>0&&this._planEntityAvailable(e)).map(t=>{const e=this._controlRefInfo(t);return{value:t,label:e.label,sub:t,icon:e.icon,search:`${e.label} ${t}`.toLowerCase()}}),o=t.controlsFilter.trim().toLowerCase();return[...i,...n].filter(e=>!t.controls.includes(e.value)&&(!o||e.search.includes(o))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const i=this._markerDraft(t)?.id||t.devId||"";if(!i)return void this._showToast(this._t("toast.marker_binding_required"));const s=e.slice(7),n=this._markerDraft(t);if(function(t,e,i){if(!e||e===i)return!0;const s=new Map;for(const e of t)s.set(e.id,(e.controls||[]).filter(t=>"string"==typeof t&&t.startsWith("marker:")).map(t=>t.slice(7)));const n=new Set,o=[i];for(;o.length;){const t=o.pop();if(t===e)return!0;n.has(t)||(n.add(t),o.push(...s.get(t)||[]))}return!1}(n?[...this._markers.filter(t=>t.id!==i),n]:this._markers,i,s))return void this._showToast(this._t("toast.marker_control_cycle"))}this._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this._markerDialog;if(!e)return;if("auto"===t)return void(this._markerDialog={...e,glowMode:t,glowTouched:!0});const i=this._markerSpatialSource(e),s=ks(i?this._planHass.states[i.eid]:void 0,null,this._fillColors.glow_light.c),n=!e.glowColorDrafted,o="fixed"===t&&!e.glowBrightnessDrafted;this._markerDialog={...e,glowMode:t,glowColor:n?s.c:e.glowColor,glowBrightness:o?Math.max(1,Math.round(100*s.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this._markerDialog,e="virtual"===t.bindingMode,i=this._bindingCandidates();this._bindingEntities(t.binding);const s=e?null:this._bindingStatus(t.binding),n=!e&&this._bindingHasHaPage(t.binding),o=this._markerPreviewDevice(t),a=this._effectiveMarkerTapAction(t,o),r=o?ls(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===a&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?_u(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:r?.showLqi??!1!==this._config?.show_signal,designPreview:!0,activityRuntime:this._activityRt.get(o.id),lightDevices:l,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}):null,u=o?Lo(this._planHass,o,l):[],p=o?Bo(this._planHass,o,u):null,_=t.valueBadgeTouched?t.valueBadgeEnabled:!!d?.valueBadge,g=t.valueBadgeTouched?t.valueBadgeSource:d?.valueBadge?.source||t.valueBadgeSource,m=t.valueBadgeTouched?t.valueBadgePosition:d?.valueBadge?.position||t.valueBadgePosition,f=Po(g),v=!!g&&!u.some(t=>t.key===f),y=u.find(t=>t.key===f),b=d?.valueSource?d.valueSource.attribute?`attr:${d.valueSource.eid}:${d.valueSource.attribute}`:`state:${d.valueSource.eid}`:"",w=this._markerAutoHasSpatialSource(t),k=!!o&&function(t,e){return Qn(t,e).some(t=>!!t.eid)}(this._planHass,{...o}),x=function(t,e,i,s){const n="always"===t||"auto"===t&&e,o=n&&!i;return{sourceExists:n,fromSourceEnabled:n&&i,manualEnabled:n,radiusEnabled:n,passive:o,effectiveMode:o&&"auto"===s?"fixed":s}}(t.lightRole,w,k,t.glowMode),$=!x.sourceExists,S=!x.fromSourceEnabled,M=x.passive,C=x.effectiveMode,D="never"===t.lightRole?this._t("marker.glow_disabled_never"):"auto"!==t.lightRole||w?M?this._t("marker.glow_passive_hint"):this._t("marker.glow_disabled_no_entity"):this._t("marker.glow_disabled_auto"),T=o?Jn(o):[],P=o&&Zn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?Wh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),F="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=F?[...F.targets,...F.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",z=(()=>{if(e)return null;const s=i.find(e=>e.value===t.binding);if(s)return s.label;const[n,o]=t.binding.split(":");return"device"===n?this._fullRegistryHass.devices[o]?.name_by_user||this._fullRegistryHass.devices[o]?.name||o:this._fullRegistryHass.entities[o]?.name||this.hass.states[o]?.attributes?.friendly_name||o})();return j`this._markerDialog=null}>
@@ -6674,11 +6693,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 -

${this._t(u_[t.display])}

+

${this._t(p_[t.display])}

${"static_icon"===t.display&&this._bindingHasAlarm(t.binding)?j`
${this._t("marker.static_alarm_warning")} @@ -6780,7 +6799,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
${t.pdfs.map(t=>j` - ${t.name} + ${t.name} this._removeMarkerPdf(t.url)}>`)} `}
- `}}N_.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_hoverRoom:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeDraftId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_openWallAnchor:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_alignDialog:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},N_.ZOOM_MAX=8,N_.ZOOM_MIN=1/3,N_._touchSeen=!1,N_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,N_.styles=[Kt,qu],customElements.get("houseplan-card")||customElements.define("houseplan-card",N_),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${h_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}N_.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_hoverRoom:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeDraftId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_openWallAnchor:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_alignDialog:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},N_.ZOOM_MAX=8,N_.ZOOM_MIN=1/3,N_.styles=[Kt,ju],customElements.get("houseplan-card")||customElements.define("houseplan-card",N_),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${d_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/demo/smoke_device_icon_design.mjs b/demo/smoke_device_icon_design.mjs index d4b06f88..3a71ac98 100644 --- a/demo/smoke_device_icon_design.mjs +++ b/demo/smoke_device_icon_design.mjs @@ -190,6 +190,10 @@ const result = await page.evaluate(async ({ beforeUnavailable, afterUnavailable, const presence = node('d_motion'); const unavailable = node('d_kettle'); const text = node('d_tv'); + const textCoreRect = rect(text?.querySelector('.device-core')); + const textCoreRadius = parseFloat( + getComputedStyle(text?.querySelector('.device-core')).borderTopLeftRadius, + ); const double = node('d_temp'); const doubleShellRect = rect(double?.querySelector('.device-shell')); const doubleCoreRect = rect(double?.querySelector('.device-core')); @@ -299,12 +303,51 @@ const result = await page.evaluate(async ({ beforeUnavailable, afterUnavailable, const focusCoreDecoration = getComputedStyle(text.querySelector('.device-core')).boxShadow; text.blur(); + const originalCallService = c.hass.callService; + let actionDispatches = 0; + c.hass.callService = async () => { actionDispatches++; }; + light.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true })); + await Promise.resolve(); + const pressAnimation = lightShell.getAnimations().find((animation) => + animation.effect?.getTiming().duration === 200); + const pressFrames = pressAnimation?.effect?.getKeyframes?.() || []; + const acceptedActionFeedback = actionDispatches === 1 + && pressAnimation?.effect?.getTiming().duration === 200 + && pressFrames.some((frame) => frame.scale === '0.95'); + await new Promise((resolve) => setTimeout(resolve, 240)); + const feedbackLifecycleBounded = !lightShell.getAnimations().some((animation) => + animation.effect?.getTiming().duration === 200); + c._reducedMotion = true; + light.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true })); + await Promise.resolve(); + const reducedAnimation = lightShell.getAnimations().find((animation) => + animation.effect?.getTiming().duration === 200); + const reducedFrames = reducedAnimation?.effect?.getKeyframes?.() || []; + const reducedMotionUsesNoScale = !!reducedAnimation + && reducedFrames.every((frame) => frame.scale == null) + && reducedFrames.some((frame) => frame.outlineWidth === '2px'); + c._cancelDevicePressFeedback(); + c._reducedMotion = false; + const enterAction = new KeyboardEvent('keydown', { + key: 'Enter', bubbles: true, composed: true, cancelable: true, + }); + light.dispatchEvent(enterAction); + await Promise.resolve(); + const keyboardAnimation = lightShell.getAnimations().find((animation) => + animation.effect?.getTiming().duration === 200); + const keyboardActionFeedback = enterAction.defaultPrevented && actionDispatches === 3 + && keyboardAnimation?.effect?.getKeyframes?.().some((frame) => frame.scale === '0.95'); + c._cancelDevicePressFeedback(); + c.hass.callService = originalCallService; + let moreInfo = 0; c._openMoreInfo = () => { moreInfo++; }; const enter = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, cancelable: true }); unavailable.dispatchEvent(enter); const space = new KeyboardEvent('keydown', { key: ' ', bubbles: true, cancelable: true }); unavailable.dispatchEvent(space); + const informationalActionHasNoFeedback = unavailable.querySelector('.device-shell') + .getAnimations().every((animation) => animation.effect?.getTiming().duration !== 200); const aria = unavailable.getAttribute('aria-label') || ''; const viewKeyboard = unavailable.getAttribute('role') === 'button' @@ -350,7 +393,7 @@ const result = await page.evaluate(async ({ beforeUnavailable, afterUnavailable, .every((state) => state.core.startsWith('rgb') && state.glyph.startsWith('rgb') && state.shell.startsWith('rgb'))), geometryMatchesAt32_56_96: sizeMatrix.every((sample) => - Math.abs(sample.core - sample.requested) <= 0.5 + Math.abs(sample.core - sample.requested * 0.9) <= 0.5 && Math.abs(sample.shell / sample.core - 1.26875) < 0.03 && sample.coreRadius === '50%' && Math.abs(sample.valueHeight / sample.core - 0.7875) < 0.015 @@ -364,7 +407,7 @@ const result = await page.evaluate(async ({ beforeUnavailable, afterUnavailable, && stateMatrix[theme][state].glyph === reference[theme][state].glyph && stateMatrix[theme][state].shell === reference[theme][state].shell && Math.abs(stateMatrix[theme][state].shellWidth - - Math.max(1, reference[theme][state].shellWidth * 56)) <= 0.5)), + - Math.max(1, Math.floor(reference[theme][state].shellWidth * 56 * 0.9))) <= 0.5)), referenceHoverMatches: lightHover.core === reference.light.hover.core && lightHover.glyph === reference.light.hover.glyph && lightHover.shell === reference.light.default.shell @@ -379,6 +422,8 @@ const result = await page.evaluate(async ({ beforeUnavailable, afterUnavailable, sharedShellGeometry: !!shellRect && !!coreRect && Math.abs(shellRect.width / coreRect.width - 1.26875) < 0.03, iconCoreIsCircle: !!coreRect && radiusIsHalf(coreRadiusText, coreRect), + textCoreIsStadium: !!textCoreRect && textCoreRect.width > textCoreRect.height + && Math.abs(textCoreRadius - textCoreRect.height / 2) <= 0.5, valueBadgeIsPill: !!doubleValueRect && Math.abs(valueRadius - doubleValueRect.height / 2) <= 0.5, packageShadowColor: getComputedStyle(lightShell).boxShadow.includes('37, 40, 45'), @@ -396,6 +441,11 @@ const result = await page.evaluate(async ({ beforeUnavailable, afterUnavailable, && selectedCoreDecoration.includes('240, 160, 12'), focusDecoratesCoreNotShell: focusVisibleMatched && focusShell === defaultShell && focusCoreDecoration.includes('12, 130, 240'), + acceptedActionFeedback, + feedbackLifecycleBounded, + reducedMotionUsesNoScale, + keyboardActionFeedback, + informationalActionHasNoFeedback, lightThemeCoreIsWhite: lightThemeCore === 'rgb(255, 255, 255)', darkThemeCoreIs252525: darkThemeClassProjected && darkThemeCore === 'rgb(37, 37, 37)', darkLockUsesWhiteGlyphAndDarkShell: darkLockGlyph === 'rgb(255, 255, 255)' diff --git a/demo/smoke_device_preview_parity.mjs b/demo/smoke_device_preview_parity.mjs index 7e3f2455..69164c01 100644 --- a/demo/smoke_device_preview_parity.mjs +++ b/demo/smoke_device_preview_parity.mjs @@ -160,6 +160,11 @@ const res = await page.evaluate(async () => { const staticNode = card.renderRoot.querySelector('.dev[data-id="d_light1"]'); const staticFace = face(staticNode); const staticBadgeFace = face(card.renderRoot.querySelector('.dev[data-id="d_temp"]')); + const visualFactorParity = [ + sr().querySelector('.dev[data-id="d_light1"]'), + persistedPreview?.renderRoot?.querySelector('.dev'), + staticNode, + ].every((node) => getComputedStyle(node).getPropertyValue('--device-visual-factor').trim() === '0.9'); return { allFacesPresent: !!planFace && !!previewFace && !!staticFace, @@ -175,6 +180,7 @@ const res = await page.evaluate(async () => { badgeBounds, valueBadgePlanPreviewParity: JSON.stringify(planBadgeFace) === JSON.stringify(persistedPreviewFace), valueBadgePlanStaticParity: JSON.stringify(planBadgeFace) === JSON.stringify(staticBadgeFace), + visualFactorParity, bottomBadgeLqiStacked, staticBindingHook: staticNode?.getAttribute('data-binding-status') === 'active', }; diff --git a/demo/smoke_feedback_v2.mjs b/demo/smoke_feedback_v2.mjs index abc89a6f..f19b4c78 100644 --- a/demo/smoke_feedback_v2.mjs +++ b/demo/smoke_feedback_v2.mjs @@ -38,12 +38,26 @@ const res = await page.evaluate(async () => { const metaSz = parseFloat(getComputedStyle(lbl.querySelector('.rlmetrics')).fontSize); out.metricsRatio = Math.round((metaSz / nameSz) * 100) / 100; } else out.metricsRatio = 'no-metrics'; - // 4) касание помечает сессию как тач и гасит тултип + // 4) modality lives on this card: touch clears transient hover, a synthetic + // compatibility mouse cannot restore it, and a real mouse can. c._tip = { x: 1, y: 1, title: 't', meta: 'm' }; + c._hoverRoom = { space: c._space, room: c._curSpaceCfg.rooms[0] }; c._notePointer(new PointerEvent('pointerdown', { pointerType: 'touch' })); - out.touchClearsTip = c._tip === null; - c._showTip(new MouseEvent('mousemove', { clientX: 5, clientY: 5 }), 'x', 'y'); - out.noTipAfterTouch = !c._tip; + out.touchClearsTransientHover = c._tip === null && c._hoverRoom === null + && !c.hasAttribute('data-pointer-hover'); + const compatibilityMouse = new PointerEvent('pointermove', { + pointerType: 'mouse', clientX: 5, clientY: 5, + }); + Object.defineProperty(compatibilityMouse, 'sourceCapabilities', { + value: { firesTouchEvents: true }, + }); + c._showTip(compatibilityMouse, 'compatibility', 'ignored'); + out.compatibilityMouseIgnored = !c._tip && !c.hasAttribute('data-pointer-hover'); + c._showTip(new PointerEvent('pointermove', { + pointerType: 'mouse', clientX: 7, clientY: 7, + }), 'real mouse', 'restored'); + out.realMouseRestoresHover = c._tip?.title === 'real mouse' + && c.hasAttribute('data-pointer-hover'); return out; }); check('metricsRatio 0.75', res.metricsRatio, 0.75); diff --git a/demo/smoke_help_affordance.mjs b/demo/smoke_help_affordance.mjs index 84f9a89c..3514db85 100644 --- a/demo/smoke_help_affordance.mjs +++ b/demo/smoke_help_affordance.mjs @@ -47,6 +47,14 @@ const res = await page.evaluate(async () => { return help?.shadowRoot?.querySelector('.tooltip') || root().querySelector('hp-dialog')?.shadowRoot?.querySelector('[data-hp-overlay="help"]')?.shadowRoot?.querySelector('.tooltip'); }; + const enterWithRealMouse = (target) => { + target?.dispatchEvent(new PointerEvent('pointerover', { + pointerType: 'mouse', bubbles: true, composed: true, + })); + target?.dispatchEvent(new PointerEvent('pointerenter', { + pointerType: 'mouse', bubbles: false, composed: true, + })); + }; // Empty or incomplete content must not leave a dead focus target behind. const incompleteHelp = document.createElement('hp-help'); @@ -103,7 +111,7 @@ const res = await page.evaluate(async () => { && !roleButton.hasAttribute('aria-describedby'); const beforeHoverGeometry = scrollGeometry(); - roleButton?.dispatchEvent(new PointerEvent('pointerenter', { pointerType: 'mouse', bubbles: true, composed: true })); + enterWithRealMouse(roleButton); await wait(330); out.mouseHover = roleButton?.getAttribute('aria-expanded') === 'true' && roleButton.getAttribute('aria-describedby') === roleDescription?.id @@ -118,7 +126,7 @@ const res = await page.evaluate(async () => { // away from the form control the user was editing. const nameInput = root().querySelector('hp-dialog .namein'); nameInput?.focus(); - roleButton?.dispatchEvent(new PointerEvent('pointerenter', { pointerType: 'mouse', bubbles: true, composed: true })); + enterWithRealMouse(roleButton); await wait(330); nameInput?.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true, composed: true, cancelable: true, diff --git a/demo/smoke_touch_tips.mjs b/demo/smoke_touch_tips.mjs index 85a38977..fb204620 100644 --- a/demo/smoke_touch_tips.mjs +++ b/demo/smoke_touch_tips.mjs @@ -1,22 +1,53 @@ import { launch, checkAll, finish } from './serve.mjs'; -const { page, browser } = await launch(); -// эмуляция тач-устройства: переопределяем matchMedia ДО загрузки бандла -await page.addInitScript(() => { - const orig = window.matchMedia.bind(window); - window.matchMedia = (q) => q.includes('hover: none') - ? { matches: true, media: q, addEventListener() {}, removeEventListener() {}, addListener() {}, removeListener() {}, onchange: null, dispatchEvent: () => false } - : orig(q); -}); -await page.reload(); -await page.waitForFunction(() => window.__card && window.__card._devices?.length, null, { timeout: 15000 }); +const { page, browser } = await launch( + { width: 390, height: 760 }, 1, [], { hasTouch: true, isMobile: true }, +); const res = await page.evaluate(async () => { const out = {}; const c = window.__card; c._setMode('view'); await c.updateComplete; - // "тап" по комнате → mousemove-эмуляция → тултип НЕ должен появиться - c._showTip(new MouseEvent('mousemove', { clientX: 100, clientY: 100 }), 'Room', 'meta'); + out.touchHardwareHasNoFineHover = !matchMedia( + '(any-hover: hover) and (any-pointer: fine)', + ).matches; + c._tip = { x: 1, y: 1, title: 'stale', meta: 'stale' }; + c._hoverRoom = { space: c._space, room: c._curSpaceCfg.rooms[0] }; + c._notePointer(new PointerEvent('pointerdown', { + pointerType: 'touch', pointerId: 9, clientX: 100, clientY: 100, + })); await c.updateComplete; - out.noTipOnTouch = c._tip === null || c._tip === undefined || !c._tip; + out.touchClearsAllTransientHover = !c._tip && !c._hoverRoom + && !c.hasAttribute('data-pointer-hover'); + c._showTip(new PointerEvent('pointermove', { + pointerType: 'touch', pointerId: 9, clientX: 100, clientY: 100, + }), 'Room', 'meta'); + out.noTipOnTouch = !c._tip; + c._notePointer(new PointerEvent('pointermove', { + pointerType: 'mouse', clientX: 110, clientY: 110, + })); + out.touchOnlyHardwareRejectsMouseHover = !c.hasAttribute('data-pointer-hover'); + out.nestedHoverGateIsOff = [...c.renderRoot.querySelectorAll( + 'hp-dialog, hp-help, hp-color-opacity', + )].every((node) => !node.hasAttribute('data-pointer-hover')); + + const marker = c.renderRoot.querySelector('.dev[data-id="d_light1"]'); + const shell = marker?.querySelector('.device-shell'); + const originalCallService = c.hass.callService; + let dispatches = 0; + c.hass.callService = async () => { dispatches++; }; + marker?.dispatchEvent(new PointerEvent('pointerdown', { + pointerType: 'touch', pointerId: 10, bubbles: true, composed: true, + })); + marker?.dispatchEvent(new PointerEvent('pointerup', { + pointerType: 'touch', pointerId: 10, bubbles: true, composed: true, + })); + marker?.click(); + await Promise.resolve(); + const touchFeedback = shell?.getAnimations().find((animation) => + animation.effect?.getTiming().duration === 200); + out.touchDispatchGetsFeedback = dispatches === 1 + && touchFeedback?.effect?.getKeyframes?.().some((frame) => frame.scale === '0.95'); + c._cancelDevicePressFeedback(); + c.hass.callService = originalCallService; return out; }); checkAll(res); diff --git a/demo/srv/assets/houseplan-card.js b/demo/srv/assets/houseplan-card.js index 630ddc71..5994bc03 100755 --- a/demo/srv/assets/houseplan-card.js +++ b/demo/srv/assets/houseplan-card.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let n=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=s.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&s.set(i,t))}return t}toString(){return this.cssText}};const o=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new n(s,t,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new n("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:r,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,g=_?_.emptyScript:"",m=p.reactiveElementPolyfillSupport,f=(t,e)=>t,v={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},y=(t,e)=>!r(t,e),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=b){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const t=this.properties,e=[...h(t),...d(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(e)i.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of s){const s=document.createElement("style"),n=t.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=e.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:v;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??y)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,m?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=t=>t,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,M="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,D="?"+C,T=`<${D}>`,P=document,R=()=>P.createComment(""),A=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,F="[ \t\n\f\r]",E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=P.createTreeWalker(P,129);function Y(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(e):e}const X=(t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"":3===e?"":"",a=E;for(let e=0;e"===l[0]?(a=n??E,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?N:'"'===l[3]?L:H):a===L||a===H?a=N:a===z||a===O?a=E:(a=N,n=void 0);const d=a===N&&t[e+1].startsWith("/>")?" ":"";o+=a===E?i+T:c>=0?(s.push(r),i.slice(0,c)+M+i.slice(c)+C+d):i+C+(-2===c?e:d)}return[Y(t,o+(t[i]||"")+(2===e?"":3===e?"":"")),s]};class J{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=t.length-1,r=this.parts,[l,c]=X(t,e);if(this.el=J.createElement(l,i),K.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=K.nextNode())&&r.length0){s.textContent=$?$.emptyScript:"";for(let i=0;iI(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&A(this._$AH)?this._$AA.nextSibling.data=t:this.T(P.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=J.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new J(t)),e}k(t){I(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(R()),this.O(R()),this,this.options)):i=e[s],i._$AI(n),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!A(t)||t!==this._$AH&&t!==U,o&&(this._$AH=t);else{const s=t;let a,r;for(t=n[0],a=0;a{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(R(),t),t,void 0,i??{})}return n._$AI(t),n},ct=globalThis;let ht=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=lt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};ht._$litElement$=!0,ht.finalized=!0,ct.litElementHydrateSupport?.({LitElement:ht});const dt=ct.litElementPolyfillSupport;dt?.({LitElement:ht}),(ct.litElementVersions??=[]).push("4.2.2");const ut=2,pt=t=>(...e)=>({_$litDirective$:t,values:e});let _t=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};const gt={},mt=pt(class extends _t{constructor(){super(...arguments),this.ot=gt}render(t,e){return e()}update(t,[e,i]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((t,e)=>t===this.ot[e]))return U}else if(this.ot===e)return U;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,i)}}),{I:ft}=at,vt=t=>t,yt=()=>document.createComment(""),bt=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(yt(),n),o=s.insertBefore(yt(),n);i=new ft(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,a=o!==t;if(a){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||a){let t=i._$AA;for(;t!==e;){const e=vt(t).nextSibling;vt(s).insertBefore(t,n),t=e}}}return i},wt=(t,e,i=t)=>(t._$AI(e,i),t),kt={},xt=(t,e=kt)=>t._$AH=e,$t=t=>{t._$AR(),t._$AA.remove()},St=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},Mt=pt(class extends _t{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let a=0;for(const e of t)n[a]=s?s(e,a):a,o[a]=i(e,a),a++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:a}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=a,o;const r=this.ut??=[],l=[];let c,h,d=0,u=n.length-1,p=0,_=o.length-1;for(;d<=u&&p<=_;)if(null===n[d])d++;else if(null===n[u])u--;else if(r[d]===a[p])l[p]=wt(n[d],o[p]),d++,p++;else if(r[u]===a[_])l[_]=wt(n[u],o[_]),u--,_--;else if(r[d]===a[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(r[u]===a[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(a,p,_),h=St(r,d,u)),c.has(r[d]))if(c.has(r[u])){const e=h.get(a[p]),i=void 0!==e?n[e]:null;if(null===i){const e=bt(t,n[d]);wt(e,o[p]),l[p]=e}else l[p]=wt(i,o[p]),bt(t,n[d],i),n[e]=null;p++}else $t(n[u]),u--;else $t(n[d]),d++;for(;p<=_;){const e=bt(t,l[_+1]);wt(e,o[p]),l[p++]=e}for(;d<=u;){const t=n[d++];null!==t&&$t(t)}return this.ut=a,xt(t,l),U}}),Ct=new WeakMap;let Dt=0;class Tt extends ht{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=!1,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Dt,this._focusInitial=()=>{const t=this._focusableElements(),e=t.find(t=>t.hasAttribute("autofocus"))||t[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");e?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=t=>{if("Escape"===t.key){t.preventDefault(),t.stopImmediatePropagation(),this._pruneOverlays();const e=this._overlays[this._overlays.length-1];return e?void this._closeOverlay(e,"escape"):void this._requestClose()}if("Tab"!==t.key||this._useHaDialog)return;const e=this.renderRoot.querySelector(".close"),i=e?[e,...this._focusableElements()]:this._focusableElements();if(!i.length)return t.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const s=this._deepActiveElement(),n=i[0],o=i[i.length-1];!t.shiftKey||s!==n&&i.includes(s)?t.shiftKey||s!==o||(t.preventDefault(),n.focus()):(t.preventDefault(),o.focus())},this._onFallbackCancel=t=>{t.preventDefault(),this._requestClose()},this._onFallbackClick=t=>{this.dismissOnScrim&&t.target===t.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const t=this.getRootNode();this._focusRoot=t;const e=Ct.get(t)||{dialogs:new Set,opener:this._opener};e.dialogs.add(this),Ct.set(t,e),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const t=[...this._overlays];this._overlays=[];for(const e of t.reverse())e.close("disconnect");const e=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const s=e?Ct.get(e):void 0;s?.dialogs.delete(this),super.disconnectedCallback(),e&&s&&requestAnimationFrame(()=>{const t=Ct.get(e);if(!t)return;if(!t.dialogs.size)return t.opener?.isConnected&&t.opener.focus({preventScroll:!0}),void Ct.delete(e);const s=i?.closest("hp-dialog");i?.isConnected&&s&&t.dialogs.has(s)&&i.focus({preventScroll:!0})})}firstUpdated(t){if(super.firstUpdated(t),!this._useHaDialog){const t=this.renderRoot.querySelector("dialog");t&&!t.open&&t.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t&&t!==document.body?t:null}_focusableElements(){const t=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),e=[],i=new Set,s=n=>{if(!i.has(n)){if(i.add(n),n instanceof HTMLElement){if(n.matches(t)&&e.push(n),n instanceof HTMLSlotElement){for(const t of n.assignedNodes({flatten:!0}))s(t);return}if(n.shadowRoot){for(const t of n.shadowRoot.childNodes)s(t);return}}for(const t of n.childNodes)s(t)}};for(const t of this.childNodes)s(t);const n=this.overlayPortal();return n&&s(n),e.filter(t=>{let e=t;for(;e;){const t=getComputedStyle(e);if(e.hidden||e.inert||"true"===e.getAttribute("aria-hidden")||"none"===t.display||"hidden"===t.visibility)return!1;if(e=e.assignedSlot||e.parentElement||(e.getRootNode()instanceof ShadowRoot?e.getRootNode().host:null),e===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(t=>t.owner.isConnected)}_closeOverlay(t,e){const i=this._overlays.findIndex(e=>e.token===t.token);i>=0&&this._overlays.splice(i,1),t.close(e)}registerOverlay(t){this._pruneOverlays();const e=this._overlays.find(e=>e.owner===t.owner);e&&this._overlays.splice(this._overlays.indexOf(e),1);const i=t.group||"transient";for(const t of[...this._overlays].reverse())t.group===i&&this._closeOverlay(t,"exclusive");const s={...t,group:i,token:Symbol("hp-overlay")};this._overlays.push(s);let n=!1;return()=>{if(n)return;n=!0;const t=this._overlays.findIndex(t=>t.token===s.token);t>=0&&this._overlays.splice(t,1)}}closeTransientOverlays(t="outside"){this._pruneOverlays();const e=[...this._overlays].filter(t=>"transient"===(t.group||"transient"));for(const i of e.reverse())this._closeOverlay(i,t);return e.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const t=j` +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let n=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=s.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&s.set(i,t))}return t}toString(){return this.cssText}};const o=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new n(s,t,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new n("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:r,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,g=_?_.emptyScript:"",m=p.reactiveElementPolyfillSupport,f=(t,e)=>t,v={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},y=(t,e)=>!r(t,e),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=b){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const t=this.properties,e=[...h(t),...d(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(e)i.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of s){const s=document.createElement("style"),n=t.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=e.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:v;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??y)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,m?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=t=>t,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,M="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,D="?"+C,T=`<${D}>`,P=document,R=()=>P.createComment(""),A=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,F="[ \t\n\f\r]",E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,H=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=P.createTreeWalker(P,129);function Y(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(e):e}const X=(t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"":3===e?"":"",a=E;for(let e=0;e"===l[0]?(a=n??E,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?H:'"'===l[3]?L:N):a===L||a===N?a=H:a===z||a===O?a=E:(a=H,n=void 0);const d=a===H&&t[e+1].startsWith("/>")?" ":"";o+=a===E?i+T:c>=0?(s.push(r),i.slice(0,c)+M+i.slice(c)+C+d):i+C+(-2===c?e:d)}return[Y(t,o+(t[i]||"")+(2===e?"":3===e?"":"")),s]};class J{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=t.length-1,r=this.parts,[l,c]=X(t,e);if(this.el=J.createElement(l,i),K.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=K.nextNode())&&r.length0){s.textContent=$?$.emptyScript:"";for(let i=0;iI(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&A(this._$AH)?this._$AA.nextSibling.data=t:this.T(P.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=J.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new J(t)),e}k(t){I(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(R()),this.O(R()),this,this.options)):i=e[s],i._$AI(n),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!A(t)||t!==this._$AH&&t!==U,o&&(this._$AH=t);else{const s=t;let a,r;for(t=n[0],a=0;a{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(R(),t),t,void 0,i??{})}return n._$AI(t),n},ct=globalThis;let ht=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=lt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};ht._$litElement$=!0,ht.finalized=!0,ct.litElementHydrateSupport?.({LitElement:ht});const dt=ct.litElementPolyfillSupport;dt?.({LitElement:ht}),(ct.litElementVersions??=[]).push("4.2.2");const ut=2,pt=t=>(...e)=>({_$litDirective$:t,values:e});let _t=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};const gt={},mt=pt(class extends _t{constructor(){super(...arguments),this.ot=gt}render(t,e){return e()}update(t,[e,i]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((t,e)=>t===this.ot[e]))return U}else if(this.ot===e)return U;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,i)}}),{I:ft}=at,vt=t=>t,yt=()=>document.createComment(""),bt=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(yt(),n),o=s.insertBefore(yt(),n);i=new ft(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,a=o!==t;if(a){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||a){let t=i._$AA;for(;t!==e;){const e=vt(t).nextSibling;vt(s).insertBefore(t,n),t=e}}}return i},wt=(t,e,i=t)=>(t._$AI(e,i),t),kt={},xt=(t,e=kt)=>t._$AH=e,$t=t=>{t._$AR(),t._$AA.remove()},St=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},Mt=pt(class extends _t{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let a=0;for(const e of t)n[a]=s?s(e,a):a,o[a]=i(e,a),a++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:a}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=a,o;const r=this.ut??=[],l=[];let c,h,d=0,u=n.length-1,p=0,_=o.length-1;for(;d<=u&&p<=_;)if(null===n[d])d++;else if(null===n[u])u--;else if(r[d]===a[p])l[p]=wt(n[d],o[p]),d++,p++;else if(r[u]===a[_])l[_]=wt(n[u],o[_]),u--,_--;else if(r[d]===a[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(r[u]===a[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(a,p,_),h=St(r,d,u)),c.has(r[d]))if(c.has(r[u])){const e=h.get(a[p]),i=void 0!==e?n[e]:null;if(null===i){const e=bt(t,n[d]);wt(e,o[p]),l[p]=e}else l[p]=wt(i,o[p]),bt(t,n[d],i),n[e]=null;p++}else $t(n[u]),u--;else $t(n[d]),d++;for(;p<=_;){const e=bt(t,l[_+1]);wt(e,o[p]),l[p++]=e}for(;d<=u;){const t=n[d++];null!==t&&$t(t)}return this.ut=a,xt(t,l),U}}),Ct=new WeakMap;let Dt=0;class Tt extends ht{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=!1,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Dt,this._focusInitial=()=>{const t=this._focusableElements(),e=t.find(t=>t.hasAttribute("autofocus"))||t[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");e?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=t=>{if("Escape"===t.key){t.preventDefault(),t.stopImmediatePropagation(),this._pruneOverlays();const e=this._overlays[this._overlays.length-1];return e?void this._closeOverlay(e,"escape"):void this._requestClose()}if("Tab"!==t.key||this._useHaDialog)return;const e=this.renderRoot.querySelector(".close"),i=e?[e,...this._focusableElements()]:this._focusableElements();if(!i.length)return t.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const s=this._deepActiveElement(),n=i[0],o=i[i.length-1];!t.shiftKey||s!==n&&i.includes(s)?t.shiftKey||s!==o||(t.preventDefault(),n.focus()):(t.preventDefault(),o.focus())},this._onFallbackCancel=t=>{t.preventDefault(),this._requestClose()},this._onFallbackClick=t=>{this.dismissOnScrim&&t.target===t.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const t=this.getRootNode();this._focusRoot=t;const e=Ct.get(t)||{dialogs:new Set,opener:this._opener};e.dialogs.add(this),Ct.set(t,e),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const t=[...this._overlays];this._overlays=[];for(const e of t.reverse())e.close("disconnect");const e=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const s=e?Ct.get(e):void 0;s?.dialogs.delete(this),super.disconnectedCallback(),e&&s&&requestAnimationFrame(()=>{const t=Ct.get(e);if(!t)return;if(!t.dialogs.size)return t.opener?.isConnected&&t.opener.focus({preventScroll:!0}),void Ct.delete(e);const s=i?.closest("hp-dialog");i?.isConnected&&s&&t.dialogs.has(s)&&i.focus({preventScroll:!0})})}firstUpdated(t){if(super.firstUpdated(t),!this._useHaDialog){const t=this.renderRoot.querySelector("dialog");t&&!t.open&&t.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t&&t!==document.body?t:null}_focusableElements(){const t=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),e=[],i=new Set,s=n=>{if(!i.has(n)){if(i.add(n),n instanceof HTMLElement){if(n.matches(t)&&e.push(n),n instanceof HTMLSlotElement){for(const t of n.assignedNodes({flatten:!0}))s(t);return}if(n.shadowRoot){for(const t of n.shadowRoot.childNodes)s(t);return}}for(const t of n.childNodes)s(t)}};for(const t of this.childNodes)s(t);const n=this.overlayPortal();return n&&s(n),e.filter(t=>{let e=t;for(;e;){const t=getComputedStyle(e);if(e.hidden||e.inert||"true"===e.getAttribute("aria-hidden")||"none"===t.display||"hidden"===t.visibility)return!1;if(e=e.assignedSlot||e.parentElement||(e.getRootNode()instanceof ShadowRoot?e.getRootNode().host:null),e===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(t=>t.owner.isConnected)}_closeOverlay(t,e){const i=this._overlays.findIndex(e=>e.token===t.token);i>=0&&this._overlays.splice(i,1),t.close(e)}registerOverlay(t){this._pruneOverlays();const e=this._overlays.find(e=>e.owner===t.owner);e&&this._overlays.splice(this._overlays.indexOf(e),1);const i=t.group||"transient";for(const t of[...this._overlays].reverse())t.group===i&&this._closeOverlay(t,"exclusive");const s={...t,group:i,token:Symbol("hp-overlay")};this._overlays.push(s);let n=!1;return()=>{if(n)return;n=!0;const t=this._overlays.findIndex(t=>t.token===s.token);t>=0&&this._overlays.splice(t,1)}}closeTransientOverlays(t="outside"){this._pruneOverlays();const e=[...this._overlays].filter(t=>"transient"===(t.group||"transient"));for(const i of e.reverse())this._closeOverlay(i,t);return e.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const t=j` ${this.icon?j``:G} ${this.title} `;return this._useHaDialog?j` * { pointer-events: auto; } - `,customElements.get("hp-dialog")||customElements.define("hp-dialog",Tt);const Pt=/^#[0-9a-fA-F]{6}$/;function Rt(t,e){return"string"==typeof t&&Pt.test(t)?t:e}const At="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",It=new RegExp(`^rgb\\(${At}, ${At}, ${At}\\)$`);function Ft(t){if(!Array.isArray(t)||t.length<3)return null;const e=t.slice(0,3);if(!e.every(t=>"number"==typeof t&&Number.isFinite(t)))return null;const[i,s,n]=e.map(t=>Math.round(Math.min(255,Math.max(0,t))));return`rgb(${i}, ${s}, ${n})`}const Et=(t,e,i)=>Math.min(i,Math.max(e,Number.isFinite(t)?t:e));function zt(t){return Number.isFinite(t)?(t%360+360)%360:0}function Ot(t){if("string"!=typeof t)return null;const e=t.trim().replace(/^#/,""),i=/^[0-9a-fA-F]{3}$/.test(e)?e.split("").map(t=>`${t}${t}`).join(""):e;return/^[0-9a-fA-F]{6}$/.test(i)?`#${i.toLowerCase()}`:null}function Nt(t){const e=Ot(t);return e?{r:Number.parseInt(e.slice(1,3),16),g:Number.parseInt(e.slice(3,5),16),b:Number.parseInt(e.slice(5,7),16)}:null}function Ht(t){const e=Et(t.r,0,255)/255,i=Et(t.g,0,255)/255,s=Et(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let a=0;return o>0&&(a=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(a),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Et(t,0,255)).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}(function(t){const e=zt(t.h),i=Et(t.s,0,100)/100,s=Et(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),a=s-n;let r;return r=e<60?[n,o,0]:e<120?[o,n,0]:e<180?[0,n,o]:e<240?[0,o,n]:e<300?[o,0,n]:[n,0,o],{r:Math.round(255*(r[0]+a)),g:Math.round(255*(r[1]+a)),b:Math.round(255*(r[2]+a))}}(t))}function Bt(t){const e=t.visualViewport;return e&&Number.isFinite(e.width)&&Number.isFinite(e.height)?{left:Number(e.offsetLeft)||0,top:Number(e.offsetTop)||0,width:Math.max(0,Number(e.width)||0),height:Math.max(0,Number(e.height)||0)}:{left:0,top:0,width:t.innerWidth,height:t.innerHeight}}function qt(t,e,i,s=7,n=8){const o=i.left+n,a=i.top+n,r=Math.max(o,i.left+i.width-n),l=Math.max(a,i.top+i.height-n),c=Math.max(0,r-o),h=Math.max(0,l-a),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>r&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,r-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=a?(m="top",f=Math.min(Math.max(a,g),Math.max(a,l-u))):f=Math.min(Math.max(a,_),Math.max(a,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(c),maxHeight:Math.round(h)}}class jt{constructor(t,e,i){this.owner=t,this.name=e,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(t=!1){const e=this.window();return!t&&!!e&&function(t){const e=t.HTMLElement?.prototype;return"function"==typeof e?.showPopover&&"function"==typeof e?.hidePopover}(e)}get hasFallback(){return!!this.host}containsPath(t){return t.includes(this.owner)||!!this.host&&t.includes(this.host)}ownsActiveElement(){let t=this.owner.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return!(!t||t!==this.owner&&!this.owner.shadowRoot?.contains(t)&&!this.root?.contains(t))}renderFallback(t,e){const i=this.ensureFallback();return i?(lt(j`${t}`,i),i):null}surface(t,e){return e?this.owner.shadowRoot?.querySelector(t)||null:this.root?.querySelector(t)||null}destroy(){this.root&<(G,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const t=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!t)return null;const e=this.owner.ownerDocument.createElement("div");return e.dataset.hpOverlay=this.name,e.style.display="contents",this.keydown&&e.addEventListener("keydown",this.keydown,!0),t.append(e),this.host=e,this.root=e.attachShadow({mode:"open"}),this.root}}const Wt={title:"Color picker",hue:"Hue",saturation:"Saturation",value:"Brightness",hex:"Hex color",invalidHex:"Enter a 3- or 6-digit hex color"};class Ut extends ht{constructor(){super(...arguments),this.label="",this.opacityLabel="Opacity",this.color="#607d8b",this.opacity=1,this.disabled=!1,this.showOpacity=!0,this.pickerLabels=Wt,this._open=!1,this._pickerRaf=0,this._emitRaf=0,this._forceFallback=!1,this._overlayDispose=null,this._hue=0,this._saturation=0,this._value=0,this._hexDraft="#607d8b",this._hexInvalid=!1,this._lastValidColor="#607d8b",this._activePointerId=null,this._outsidePointerDown=t=>{if(!this._open)return;const e=t.composedPath();this._floating.containsPath(e)||this._closePicker(!1,"outside")},this._keyDown=t=>{this._open&&"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation(),this._closePicker(this._floating.ownsActiveElement(),"escape"))},this._floating=new jt(this,"color-opacity",this._keyDown),this._queuePickerPosition=()=>{if(!this._open)return;this._pickerRaf&&cancelAnimationFrame(this._pickerRaf);const t=this._window();t&&(this._pickerRaf=t.requestAnimationFrame(()=>{this._pickerRaf=0,this._positionPicker()||this._closePicker()}))}}connectedCallback(){super.connectedCallback(),this._syncFromColor(this.color,!1),this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.addEventListener("resize",this._queuePickerPosition),t?.addEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.addEventListener("resize",this._queuePickerPosition),t?.visualViewport?.addEventListener("scroll",this._queuePickerPosition),this.addEventListener("keydown",this._keyDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.removeEventListener("resize",this._queuePickerPosition),t?.removeEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.removeEventListener("resize",this._queuePickerPosition),t?.visualViewport?.removeEventListener("scroll",this._queuePickerPosition),this.removeEventListener("keydown",this._keyDown,!0),this._pickerRaf&&cancelAnimationFrame(this._pickerRaf),this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._pickerRaf=0,this._emitRaf=0,this._closePicker(!1,"disconnect"),super.disconnectedCallback()}updated(t){if(t.has("color")){const t=Ot(this.color);t&&t!==this._lastValidColor&&this._syncFromColor(t,this._open)}this.disabled&&this._open?this._closePicker():this._open&&(this._supportsPopover()||this._renderFallback(),(t.has("color")||t.has("opacity")||t.has("showOpacity")||t.has("label")||t.has("opacityLabel")||t.has("pickerLabels"))&&this._queuePickerPosition())}_window(){return this._floating.window()}_supportsPopover(){return this._floating.usesPopover(this._forceFallback)}_dialog(){return this._floating.dialog()}async _toggle(){this.disabled||(this._open?this._closePicker():(this._forceFallback=!1,this._syncFromColor(this.color,!1),this._hexInvalid=!1,this._activePointerId=null,this._open=!0,await this.updateComplete,this._open&&(this._supportsPopover()||this._renderFallback(),this._positionPicker()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:t=>this._closePicker("escape"===t&&this._floating.ownsActiveElement(),t)})||null:this._closePicker())))}_closePicker(t=!1,e="exclusive"){if(!this._open&&!this._floating.hasFallback)return;const i=this._overlayDispose;this._overlayDispose=null,i?.();const s=this.renderRoot.querySelector(".picker");if(s?.hidePopover)try{s.matches(":popover-open")&&s.hidePopover()}catch{}this._open=!1,this._cancelQueuedEmit(),this._activePointerId=null,this._floating.destroy(),t&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_surface(){return this._floating.surface(".picker",this._supportsPopover())}_renderFallback(){const t=Ut.styles.cssText;this._floating.renderFallback(this._pickerTemplate(!1),t)}_positionPicker(){if(!this._open)return!1;const t=this._window(),e=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!t||!e?.isConnected||!i?.isConnected)return!1;const s=Bt(t);if(i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden",this._supportsPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden"}const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(!(n.width&&n.height&&o.width&&o.height))return!1;const a=qt(n,o,s);return i.style.left=`${a.left}px`,i.style.top=`${a.top}px`,i.dataset.side=a.side,i.style.visibility="",!0}_labels(){const t=this.pickerLabels||Wt;return{title:t.title||Wt.title,hue:t.hue||Wt.hue,saturation:t.saturation||Wt.saturation,value:t.value||Wt.value,hex:t.hex||Wt.hex,invalidHex:t.invalidHex||Wt.invalidHex}}_syncFromColor(t,e){const i=Ot(Rt(t,"#607d8b"))||"#607d8b",s=Nt(i);if(!s)return;const n=Ht(s);(!e||n.s>1e-4)&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._hexDraft=i,this._hexInvalid=!1,this._lastValidColor=i}_cancelQueuedEmit(t=!1){this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._emitRaf=0,t&&this._syncFromColor(this._lastValidColor,!0)}_queueHsvEmit(){if(this._emitRaf)return;const t=this._window();t?this._emitRaf=t.requestAnimationFrame(()=>{this._emitRaf=0,this._emitHsv()}):this._emitHsv()}_emitHsv(){this._emit(Lt({h:this._hue,s:this._saturation,v:this._value}),this.opacity)}_setHue(t){this._hue=Math.min(359,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setSaturation(t){this._saturation=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setValue(t){this._value=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setOpacity(t){this._emit(this._lastValidColor,t)}_shiftRangeKey(t,e,i,s,n){if(!t.shiftKey)return;const o="ArrowRight"===t.key||"ArrowUp"===t.key?10:"ArrowLeft"===t.key||"ArrowDown"===t.key?-10:0;o&&(t.preventDefault(),t.stopPropagation(),n(Math.min(s,Math.max(i,e+o))))}_setSvFromPointer(t,e){const i=t.currentTarget.getBoundingClientRect();i.width&&i.height&&(this._saturation=Math.min(100,Math.max(0,(t.clientX-i.left)/i.width*100)),this._value=Math.min(100,Math.max(0,100*(1-(t.clientY-i.top)/i.height))),e?(this._cancelQueuedEmit(),this._emitHsv()):this._queueHsvEmit())}_svPointerDown(t){if(t.preventDefault(),t.stopPropagation(),null===this._activePointerId){this._activePointerId=t.pointerId;try{t.currentTarget.setPointerCapture(t.pointerId)}catch{}this._setSvFromPointer(t,!0)}}_svPointerMove(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!1))}_svPointerUp(t){if(t.pointerId===this._activePointerId){t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!0),this._activePointerId=null;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}}}_svPointerCancel(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._activePointerId=null,this._cancelQueuedEmit(!0))}_svLostPointerCapture(t){t.pointerId===this._activePointerId&&(this._activePointerId=null,this._cancelQueuedEmit(!0))}_hexInput(t){const e=t.target.value;this._hexDraft=e,this._hexInvalid=!1;const i=Ot(e),s=i?Nt(i):null;if(!i||!s)return;const n=Ht(s);n.s>1e-4&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._emit(i,this.opacity,!0)}_commitHex(){const t=Ot(this._hexDraft);if(!t)return this._hexDraft=this._lastValidColor,void(this._hexInvalid=!0);this._hexDraft=t,this._hexInvalid=!1,t!==this._lastValidColor&&this._emit(t,this.opacity)}_hexKeyDown(t){"Enter"===t.key&&(t.preventDefault(),t.stopPropagation(),this._commitHex())}_emit(t,e,i=!1){const s=Ot(t)||this._lastValidColor,n=Number.isFinite(e)?e:Number(this.opacity)||0,o=Math.min(1,Math.max(0,n));this.color=s,this.opacity=o,this._lastValidColor=s,i||(this._hexDraft=s),this._hexInvalid=!1,this.dispatchEvent(new CustomEvent("hp-color-opacity-change",{detail:{color:s,opacity:o},bubbles:!0,composed:!0}))}_pickerTemplate(t){const e=Math.round(100*Math.min(1,Math.max(0,Number(this.opacity)||0))),i=Lt({h:this._hue,s:this._saturation,v:this._value}),s=Lt({h:this._hue,s:100,v:100}),n=this._labels(),o=Math.round(this._hue),a=Math.round(this._saturation),r=Math.round(this._value);return j` + `,customElements.get("hp-dialog")||customElements.define("hp-dialog",Tt);const Pt=/^#[0-9a-fA-F]{6}$/;function Rt(t,e){return"string"==typeof t&&Pt.test(t)?t:e}const At="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",It=new RegExp(`^rgb\\(${At}, ${At}, ${At}\\)$`);function Ft(t){if(!Array.isArray(t)||t.length<3)return null;const e=t.slice(0,3);if(!e.every(t=>"number"==typeof t&&Number.isFinite(t)))return null;const[i,s,n]=e.map(t=>Math.round(Math.min(255,Math.max(0,t))));return`rgb(${i}, ${s}, ${n})`}const Et=(t,e,i)=>Math.min(i,Math.max(e,Number.isFinite(t)?t:e));function zt(t){return Number.isFinite(t)?(t%360+360)%360:0}function Ot(t){if("string"!=typeof t)return null;const e=t.trim().replace(/^#/,""),i=/^[0-9a-fA-F]{3}$/.test(e)?e.split("").map(t=>`${t}${t}`).join(""):e;return/^[0-9a-fA-F]{6}$/.test(i)?`#${i.toLowerCase()}`:null}function Ht(t){const e=Ot(t);return e?{r:Number.parseInt(e.slice(1,3),16),g:Number.parseInt(e.slice(3,5),16),b:Number.parseInt(e.slice(5,7),16)}:null}function Nt(t){const e=Et(t.r,0,255)/255,i=Et(t.g,0,255)/255,s=Et(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let a=0;return o>0&&(a=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(a),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Et(t,0,255)).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}(function(t){const e=zt(t.h),i=Et(t.s,0,100)/100,s=Et(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),a=s-n;let r;return r=e<60?[n,o,0]:e<120?[o,n,0]:e<180?[0,n,o]:e<240?[0,o,n]:e<300?[o,0,n]:[n,0,o],{r:Math.round(255*(r[0]+a)),g:Math.round(255*(r[1]+a)),b:Math.round(255*(r[2]+a))}}(t))}function Bt(t){const e=t.visualViewport;return e&&Number.isFinite(e.width)&&Number.isFinite(e.height)?{left:Number(e.offsetLeft)||0,top:Number(e.offsetTop)||0,width:Math.max(0,Number(e.width)||0),height:Math.max(0,Number(e.height)||0)}:{left:0,top:0,width:t.innerWidth,height:t.innerHeight}}function qt(t,e,i,s=7,n=8){const o=i.left+n,a=i.top+n,r=Math.max(o,i.left+i.width-n),l=Math.max(a,i.top+i.height-n),c=Math.max(0,r-o),h=Math.max(0,l-a),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>r&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,r-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=a?(m="top",f=Math.min(Math.max(a,g),Math.max(a,l-u))):f=Math.min(Math.max(a,_),Math.max(a,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(c),maxHeight:Math.round(h)}}class jt{constructor(t,e,i){this.owner=t,this.name=e,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(t=!1){const e=this.window();return!t&&!!e&&function(t){const e=t.HTMLElement?.prototype;return"function"==typeof e?.showPopover&&"function"==typeof e?.hidePopover}(e)}get hasFallback(){return!!this.host}containsPath(t){return t.includes(this.owner)||!!this.host&&t.includes(this.host)}ownsActiveElement(){let t=this.owner.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return!(!t||t!==this.owner&&!this.owner.shadowRoot?.contains(t)&&!this.root?.contains(t))}renderFallback(t,e){const i=this.ensureFallback();return i?(lt(j`${t}`,i),i):null}surface(t,e){return e?this.owner.shadowRoot?.querySelector(t)||null:this.root?.querySelector(t)||null}destroy(){this.root&<(G,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const t=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!t)return null;const e=this.owner.ownerDocument.createElement("div");return e.dataset.hpOverlay=this.name,e.style.display="contents",this.keydown&&e.addEventListener("keydown",this.keydown,!0),t.append(e),this.host=e,this.root=e.attachShadow({mode:"open"}),this.root}}const Wt={title:"Color picker",hue:"Hue",saturation:"Saturation",value:"Brightness",hex:"Hex color",invalidHex:"Enter a 3- or 6-digit hex color"};class Ut extends ht{constructor(){super(...arguments),this.label="",this.opacityLabel="Opacity",this.color="#607d8b",this.opacity=1,this.disabled=!1,this.showOpacity=!0,this.pickerLabels=Wt,this._open=!1,this._pickerRaf=0,this._emitRaf=0,this._forceFallback=!1,this._overlayDispose=null,this._hue=0,this._saturation=0,this._value=0,this._hexDraft="#607d8b",this._hexInvalid=!1,this._lastValidColor="#607d8b",this._activePointerId=null,this._outsidePointerDown=t=>{if(!this._open)return;const e=t.composedPath();this._floating.containsPath(e)||this._closePicker(!1,"outside")},this._keyDown=t=>{this._open&&"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation(),this._closePicker(this._floating.ownsActiveElement(),"escape"))},this._floating=new jt(this,"color-opacity",this._keyDown),this._queuePickerPosition=()=>{if(!this._open)return;this._pickerRaf&&cancelAnimationFrame(this._pickerRaf);const t=this._window();t&&(this._pickerRaf=t.requestAnimationFrame(()=>{this._pickerRaf=0,this._positionPicker()||this._closePicker()}))}}connectedCallback(){super.connectedCallback(),this._syncFromColor(this.color,!1),this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.addEventListener("resize",this._queuePickerPosition),t?.addEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.addEventListener("resize",this._queuePickerPosition),t?.visualViewport?.addEventListener("scroll",this._queuePickerPosition),this.addEventListener("keydown",this._keyDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.removeEventListener("resize",this._queuePickerPosition),t?.removeEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.removeEventListener("resize",this._queuePickerPosition),t?.visualViewport?.removeEventListener("scroll",this._queuePickerPosition),this.removeEventListener("keydown",this._keyDown,!0),this._pickerRaf&&cancelAnimationFrame(this._pickerRaf),this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._pickerRaf=0,this._emitRaf=0,this._closePicker(!1,"disconnect"),super.disconnectedCallback()}updated(t){if(t.has("color")){const t=Ot(this.color);t&&t!==this._lastValidColor&&this._syncFromColor(t,this._open)}this.disabled&&this._open?this._closePicker():this._open&&(this._supportsPopover()||this._renderFallback(),(t.has("color")||t.has("opacity")||t.has("showOpacity")||t.has("label")||t.has("opacityLabel")||t.has("pickerLabels"))&&this._queuePickerPosition())}_window(){return this._floating.window()}_supportsPopover(){return this._floating.usesPopover(this._forceFallback)}_dialog(){return this._floating.dialog()}async _toggle(){this.disabled||(this._open?this._closePicker():(this._forceFallback=!1,this._syncFromColor(this.color,!1),this._hexInvalid=!1,this._activePointerId=null,this._open=!0,await this.updateComplete,this._open&&(this._supportsPopover()||this._renderFallback(),this._positionPicker()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:t=>this._closePicker("escape"===t&&this._floating.ownsActiveElement(),t)})||null:this._closePicker())))}_closePicker(t=!1,e="exclusive"){if(!this._open&&!this._floating.hasFallback)return;const i=this._overlayDispose;this._overlayDispose=null,i?.();const s=this.renderRoot.querySelector(".picker");if(s?.hidePopover)try{s.matches(":popover-open")&&s.hidePopover()}catch{}this._open=!1,this._cancelQueuedEmit(),this._activePointerId=null,this._floating.destroy(),t&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_surface(){return this._floating.surface(".picker",this._supportsPopover())}_renderFallback(){const t=Ut.styles.cssText;this._floating.renderFallback(this._pickerTemplate(!1),t)}_positionPicker(){if(!this._open)return!1;const t=this._window(),e=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!t||!e?.isConnected||!i?.isConnected)return!1;const s=Bt(t);if(i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden",this._supportsPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden"}const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(!(n.width&&n.height&&o.width&&o.height))return!1;const a=qt(n,o,s);return i.style.left=`${a.left}px`,i.style.top=`${a.top}px`,i.dataset.side=a.side,i.style.visibility="",!0}_labels(){const t=this.pickerLabels||Wt;return{title:t.title||Wt.title,hue:t.hue||Wt.hue,saturation:t.saturation||Wt.saturation,value:t.value||Wt.value,hex:t.hex||Wt.hex,invalidHex:t.invalidHex||Wt.invalidHex}}_syncFromColor(t,e){const i=Ot(Rt(t,"#607d8b"))||"#607d8b",s=Ht(i);if(!s)return;const n=Nt(s);(!e||n.s>1e-4)&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._hexDraft=i,this._hexInvalid=!1,this._lastValidColor=i}_cancelQueuedEmit(t=!1){this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._emitRaf=0,t&&this._syncFromColor(this._lastValidColor,!0)}_queueHsvEmit(){if(this._emitRaf)return;const t=this._window();t?this._emitRaf=t.requestAnimationFrame(()=>{this._emitRaf=0,this._emitHsv()}):this._emitHsv()}_emitHsv(){this._emit(Lt({h:this._hue,s:this._saturation,v:this._value}),this.opacity)}_setHue(t){this._hue=Math.min(359,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setSaturation(t){this._saturation=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setValue(t){this._value=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setOpacity(t){this._emit(this._lastValidColor,t)}_shiftRangeKey(t,e,i,s,n){if(!t.shiftKey)return;const o="ArrowRight"===t.key||"ArrowUp"===t.key?10:"ArrowLeft"===t.key||"ArrowDown"===t.key?-10:0;o&&(t.preventDefault(),t.stopPropagation(),n(Math.min(s,Math.max(i,e+o))))}_setSvFromPointer(t,e){const i=t.currentTarget.getBoundingClientRect();i.width&&i.height&&(this._saturation=Math.min(100,Math.max(0,(t.clientX-i.left)/i.width*100)),this._value=Math.min(100,Math.max(0,100*(1-(t.clientY-i.top)/i.height))),e?(this._cancelQueuedEmit(),this._emitHsv()):this._queueHsvEmit())}_svPointerDown(t){if(t.preventDefault(),t.stopPropagation(),null===this._activePointerId){this._activePointerId=t.pointerId;try{t.currentTarget.setPointerCapture(t.pointerId)}catch{}this._setSvFromPointer(t,!0)}}_svPointerMove(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!1))}_svPointerUp(t){if(t.pointerId===this._activePointerId){t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!0),this._activePointerId=null;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}}}_svPointerCancel(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._activePointerId=null,this._cancelQueuedEmit(!0))}_svLostPointerCapture(t){t.pointerId===this._activePointerId&&(this._activePointerId=null,this._cancelQueuedEmit(!0))}_hexInput(t){const e=t.target.value;this._hexDraft=e,this._hexInvalid=!1;const i=Ot(e),s=i?Ht(i):null;if(!i||!s)return;const n=Nt(s);n.s>1e-4&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._emit(i,this.opacity,!0)}_commitHex(){const t=Ot(this._hexDraft);if(!t)return this._hexDraft=this._lastValidColor,void(this._hexInvalid=!0);this._hexDraft=t,this._hexInvalid=!1,t!==this._lastValidColor&&this._emit(t,this.opacity)}_hexKeyDown(t){"Enter"===t.key&&(t.preventDefault(),t.stopPropagation(),this._commitHex())}_emit(t,e,i=!1){const s=Ot(t)||this._lastValidColor,n=Number.isFinite(e)?e:Number(this.opacity)||0,o=Math.min(1,Math.max(0,n));this.color=s,this.opacity=o,this._lastValidColor=s,i||(this._hexDraft=s),this._hexInvalid=!1,this.dispatchEvent(new CustomEvent("hp-color-opacity-change",{detail:{color:s,opacity:o},bubbles:!0,composed:!0}))}_pickerTemplate(t){const e=Math.round(100*Math.min(1,Math.max(0,Number(this.opacity)||0))),i=Lt({h:this._hue,s:this._saturation,v:this._value}),s=Lt({h:this._hue,s:100,v:100}),n=this._labels(),o=Math.round(this._hue),a=Math.round(this._saturation),r=Math.round(this._value);return j` `:G}
${s} @@ -4440,7 +4457,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`:G} - `}}Bu.properties={hass:{attribute:!1},_config:{state:!0},_snap:{state:!0},_continuityEpoch:{state:!0}},Bu.styles=[Kt,o` + `}}qu.properties={hass:{attribute:!1},_config:{state:!0},_snap:{state:!0},_continuityEpoch:{state:!0}},qu.styles=[Kt,o` .hp-static-title { font-weight: 700; padding: 10px 14px 6px; @@ -4512,7 +4529,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 font-weight: 600; cursor: pointer; } - .hp-static-btn:hover { + :host([data-pointer-hover]) .hp-static-btn:hover { filter: brightness(1.08); } .hp-static-error { @@ -4520,7 +4537,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 text-align: center; color: var(--secondary-text-color, #9aa4ad); } - `],customElements.get("houseplan-space-card")||customElements.define("houseplan-space-card",Bu),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-space-card"===t.type)||window.customCards.push({type:"houseplan-space-card",name:"House Plan — Space (static)",description:"Read-only live schematic of a single houseplan space, with a deep-link button.",preview:!1,documentation:"https://github.com/Matysh/houseplan-card"});const qu=o` + `],customElements.get("houseplan-space-card")||customElements.define("houseplan-space-card",qu),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-space-card"===t.type)||window.customCards.push({type:"houseplan-space-card",name:"House Plan — Space (static)",description:"Read-only live schematic of a single houseplan space, with a deep-link button.",preview:!1,documentation:"https://github.com/Matysh/houseplan-card"});const ju=o` :host { --hp-editor-tray-bg-fallback: color-mix(in srgb, var(--card-background-color, var(--hp-bg)) 94%, var(--hp-line)); --hp-editor-tray-bg: color-mix(in srgb, var(--card-background-color, var(--hp-bg)) 86%, transparent); @@ -4691,7 +4708,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 .editor-secondary { transition: none; } .editor-group-launcher .group-chevron { transition: none; } } -`,ju=(t,e)=>(t.composedPath?.()||[t.target]).some(t=>(t=>!!t&&"function"==typeof t.matches)(t)&&e(t));class Wu{constructor(t){this.host=t,this._openGroupId=null,this._groupGeneration=0,this._renderedContext="",this._focusOwned=!1,this._currentModel=null,this._blocked=!1,this._dismissPointerTarget=null,this._globalDismissListening=!1,this._globalDismissGuard=t=>{this.handleOutsideDismiss(t)}}get hasOpenGroup(){return null!==this._openGroupId}get groupGeneration(){return this._groupGeneration}activeGroup(t){return this._openGroupId&&t.find(t=>t.id===this._openGroupId)||null}reset(){this._openGroupId=null,this._contentAnimation?.cancel(),this._contentAnimation=void 0,this._renderedContext="",this._focusOwned=!1,this._currentModel=null,this._blocked=!1,this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}closeForNavigation(){const t="palette"===this._currentModel?.kind?this._currentModel.dismiss:void 0,e=!!this._openGroupId||!!t;this._openGroupId=null,t?.(),t&&(this._currentModel=null),this._clearDismissClick(),e&&this.host.requestUpdate(),this._syncGlobalDismissListener()}openPalette(){this._openGroupId&&this.closeGroup(!1)}toggleGroup(t,e){this._openGroupId!==e?t.some(t=>t.id===e)&&("palette"===this._currentModel?.kind&&this._currentModel.dismiss?.(),this._groupGeneration+=1,this._openGroupId=e,this.host.clearTip(),this.host.requestUpdate(),this._syncGlobalDismissListener()):this.closeGroup(!1)}closeGroup(t){const e=this._openGroupId;this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener(),t&&e&&this.host.updateComplete().then(()=>{const t=this.host.root(),i=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===e&&null!==t.offsetParent);(i||t.querySelector(".editbar-tools"))?.focus?.()})}renderGroupLauncher(t,e,i){const s=this._openGroupId===t.id,n=t.items.find(e=>e.id===t.activeItemId&&!e.disabled);return j`
-
`}afterRender(){const t=this.host.root();this._blocked&&(this._openGroupId?this.closeGroup(!1):"palette"===this._currentModel?.kind&&this._currentModel.dismiss?.()),this._syncGlobalDismissListener();const e=t.querySelector(".editor-secondary"),i=this._renderedContext,s=e?.dataset.contextId||"";if(s&&i&&s!==i&&!window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches&&(this._contentAnimation?.cancel(),this._contentAnimation=e?.querySelector(".editor-secondary-content")?.animate([{opacity:.35,transform:"translateY(-4px)"},{opacity:1,transform:"translateY(0)"}],{duration:100,easing:"ease-out"})),this._renderedContext=s,i&&s!==i&&this._focusOwned){const i=s?e?.querySelector('[tabindex="0"], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled])'):t.querySelector(".editbar-tools");i?.focus?.(),this._focusOwned=!!s}if("palette"===this._currentModel?.kind&&this._currentModel.launcherId){const e=[...t.querySelectorAll("[data-editor-palette]")].find(t=>t.dataset.editorPalette===this._currentModel?.launcherId);e&&null!==e.offsetParent||this._currentModel.dismiss?.()}if(!this._openGroupId)return;const n=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===this._openGroupId);n&&null!==n.offsetParent||this.closeGroup(!0)}handleOutsideDismiss(t){if(ju(t,t=>t.hasAttribute("data-editor-navigation")))return"pointerdown"===t.type?this.closeForNavigation():"click"===t.type&&this._dismissPointerTarget&&this._clearDismissClick(),!1;if("click"===t.type&&this._dismissPointerTarget){return!!(t.composedPath?.()||[t.target]).includes(this._dismissPointerTarget)&&(this._clearDismissClick(),t.preventDefault(),t.stopImmediatePropagation(),!0)}const e=this._openGroupId||this._blocked||"palette"!==this._currentModel?.kind?null:this._currentModel;if("pointerdown"===t.type&&(this._openGroupId||e)){const i=ju(t,t=>t.classList.contains("editor-secondary")),s=ju(t,t=>!!t.dataset.editorGroup),n=ju(t,t=>!!t.dataset.editorPalette),o=ju(t,t=>t.classList.contains("stage"));if(!(i||s||n||"stay-open-on-canvas"===e?.dismissPolicy&&o))return t.preventDefault(),t.stopImmediatePropagation(),this._dismissPointerTarget=t.target,clearTimeout(this._dismissTimer),this._dismissTimer=window.setTimeout(()=>{this._clearDismissClick()},800),this._openGroupId?this.closeGroup(!1):e?.dismiss?.(),this._syncGlobalDismissListener(),!0}return!1}_activateGroupItem(t,e,i){if(t.id!==this._openGroupId)return;const s=t.items.find(t=>t.id===e);if(!s||s.disabled)return;const n="toggle"===s.role&&"stay-open"===s.closePolicy,o=0===i.detail;n||(this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener()),s.invoke(),!n&&o&&this.host.updateComplete().then(()=>{const e=[...this.host.root().querySelectorAll("[data-editor-group]")].find(e=>e.dataset.editorGroup===t.id&&null!==e.offsetParent);e?.focus()})}_groupKeydown(t){if(!["ArrowLeft","ArrowRight","Home","End"].includes(t.key))return;const e=[...t.currentTarget.querySelectorAll(".editor-group-item:not([disabled])")];if(!e.length)return;t.preventDefault();const i=e.indexOf(this.host.root().activeElement),s="Home"===t.key?0:"End"===t.key?e.length-1:"ArrowLeft"===t.key?i<=0?e.length-1:i-1:(i+1)%e.length;e[s]?.focus()}_clearDismissClick(){this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}_syncGlobalDismissListener(){const t=!this._blocked&&"palette"===this._currentModel?.kind,e=!!this._openGroupId||t||!!this._dismissPointerTarget;e!==this._globalDismissListening&&(this._globalDismissListening=e,e?(window.addEventListener("pointerdown",this._globalDismissGuard,!0),window.addEventListener("click",this._globalDismissGuard,!0)):(window.removeEventListener("pointerdown",this._globalDismissGuard,!0),window.removeEventListener("click",this._globalDismissGuard,!0)))}}const Uu=t=>t.stopPropagation(),Gu=4.166666666666667e-9;function Vu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Gu?t:e}const Ku=(t,e,i,s)=>Math.hypot(i-t,s-e),Yu=(t,e,i,s,n,o,a,r)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+a-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+r-(e+s)))),Xu=(t,e,i,s,n,o,a)=>{const r=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*r,h=Math.sin(i*l)*r,d=Math.cos(a*l)*r,u=Math.sin(a*l)*r,p=Math.max(Ku(t+c,e+h,n+d,o+u),Ku(t-c,e-h,n-d,o-u)),_=Math.max(Ku(t+c,e+h,n-d,o-u),Ku(t-c,e-h,n+d,o+u));return Math.min(p,_)},Ju=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Zu=t=>JSON.parse(JSON.stringify(t)),Qu=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),tp=(t,e,i)=>Math.min(i,Math.max(e,t)),ep=t=>Kl({spaces:[t]})[0],ip=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),a=n(e);return o0?a:1,l=Math.max(s*r*.02,1e-9),c=[];for(const e of t||[])for(const t of ci(e)||[])c.push([t[0],t[1]]);for(const t of i||[])Array.isArray(t)&&t.length>=4&&t.slice(0,4).every(Number.isFinite)&&c.push([t[0],t[1]],[t[2],t[3]]);const h=t=>c.some(e=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l),d=new Map;for(const a of t||[]){if(!a?.id)continue;const c=Qr(t,a.id,e,i,s,n,o,r);if(c)for(let t=0;t0&&u>0&&a===p&&u!==a))continue;const _=c.poly[s],g=c.poly[(s+1)%c.poly.length],m=Math.hypot(g[0]-_[0],g[1]-_[1]);if(!(m>l&&m<.5*o-1e-9*o))continue;if(h(_)||h(g))continue;const f=ip(_,g,r),v=d.get(f);v?v.targets.add(a):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([a])})}}}let u=e.slice();const p=(t,e)=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l,_=(t,e)=>{if(!Array.isArray(t.a)||!Array.isArray(t.b)||t.a.length<2||t.b.length<2)return!1;const i=[Number(t.a[0])*r,Number(t.a[1])*r],s=[Number(t.b[0])*r,Number(t.b[1])*r];return!![...i,...s].every(Number.isFinite)&&(p(i,e.a)&&p(s,e.b)||p(i,e.b)&&p(s,e.a))};for(const t of[...d.values()].filter(t=>1===t.targets.size).sort((t,e)=>ip(t.a,t.b,r).localeCompare(ip(e.a,e.b,r)))){const e=[...t.targets][0],i=u.filter(e=>_(e,t));if(new Set(i.map(t=>t.cm)).size>1)continue;let n=!1;u=u.map(i=>_(i,t)?(n=!0,i.cm===e?i:{...i,cm:e}):i),n||(u=Ir(u,t.a,t.b,e,s,r))}return u}const np=t=>{const e=[];for(const i of t||[]){const t=ci(i);if(t?.length)for(let i=0;i{let e=0,i=0,s=0;for(const i of t.markers||[]){if("ripple"===i.display&&(i.display="icon_ripple",e++),Array.isArray(i.controls)){const t="string"==typeof i.binding&&i.binding.startsWith("entity:")?i.binding.slice(7):"",s=t?i.controls.filter(e=>e!==t):i.controls;JSON.stringify(s)!==JSON.stringify(i.controls)&&(i.controls=s.length?s:null,e++)}const t=i.vacuum;t&&Qu(t,"trail")&&(["never","cleaning","always"].includes(t.trail_mode)||(t.trail_mode=!1===t.trail?"never":"cleaning"),delete t.trail,e++)}for(const n of t.spaces||[]){const t=n.settings;"glow"===t?.fill_mode&&("boolean"!=typeof t.glow_enabled&&(t.glow_enabled=!0),t.fill_mode="none",e++,i++);for(const t of n.rooms||[]){const i=t.settings;"glow"===i?.fill_mode&&("boolean"!=typeof i.glow&&(i.glow=!0),delete i.fill_mode,e++,s++)}if(Qu(n,"segments")&&(delete n.segments,e++),Qu(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(Qu(n,"plan_scale_x")||(n.plan_scale_x=t),Qu(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Qu(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?tp(o,.1,1e3):5,e++);const a=Number(n.cell_cm),r=Number.isFinite(a)&&a>0?a:5;for(const t of n.wall_columns||[])if("circle"===t.shape)Qu(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Qu(t,"angle")){const i=((Number(t.angle)||0)%90+90)%90;t.angle!==i&&(t.angle=i,e++)}for(const t of n.decor||[]){if(Qu(t,"width")){const i=Number(t.width);(Qu(t,"width_cm")||Number.isFinite(i))&&(Qu(t,"width_cm")||(t.width_cm=Number(tp(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Qu(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Qu(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(tp(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Qu(t,"scale")||Qu(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1]));if(!(Qu(t,"entity")||Qu(t,"attr")||Qu(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,a=s||n?"":Yi(t.entity,o);if(s||a){if(a){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+a+i.slice(e+2):`${i}${i?" ":""}${a}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let r=a.total;for(const t of i.spaces||[]){const e=ep(t);if(!e)continue;if(!zc(t.open_spans).length){const i=Bc(e.rooms,null,ql,.02*Zl,!0);i.length&&(t.open_spans=qc(i,ql),r++)}}const l=Zu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,a=0,r=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Ju(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Gu||s))return;n++,t>a&&(a=t);const o=t*Jl*e;o>r&&(r=o,l=i)};for(const t of i){const e=Ju(t),i=null!=t?.id?String(t.id):"";for(const s of t.rooms||[]){o++;let t=0;if(s.poly?.length)s.poly=s.poly.map(e=>{const i=[Vu(e[0]),Vu(e[1])];return t=Math.max(t,Ku(e[0],e[1],i[0],i[1])),i});else if(null!=s.x&&null!=s.y){const e=s.x,i=s.y,n=s.w||0,o=s.h||0,a=Vu(e+n),r=Vu(i+o),l=Vu(e),c=Vu(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Yu(e,i,n,o,l,c,h,d),s.x=l,s.y=c,s.w=h,s.h=d}p(t,e,i)}for(const s of t.room_drafts||[]){o++;let t=0;const n=(s.points||[]).map(e=>{const i=[Vu(e[0]),Vu(e[1])];return t=Math.max(t,Ku(e[0],e[1],i[0],i[1])),i}),a=n.length?[n[0]]:[],r=[];for(let t=0;t+1t.points?.length>=2),h+=e-t.room_drafts.length,t.room_drafts.length||delete t.room_drafts}for(const s of t.partitions||[]){o++;const n=[Vu(s.a[0]),Vu(s.a[1])],a=[Vu(s.b[0]),Vu(s.b[1])];let r=Math.max(Ku(s.a[0],s.a[1],n[0],n[1]),Ku(s.b[0],s.b[1],a[0],a[1]));const l=Ku(n[0],n[1],a[0],a[1]),c=(t.openings||[]).filter(t=>"partition"===t.host?.kind&&t.host.id===s.id).every(t=>{const e=Number(t.length),i=Number(t.host.t),s=i*l;return Number.isFinite(e)&&e>0&&Number.isFinite(i)&&i>=0&&i<=1&&s-e/2>=-Gu&&s+e/2<=l+Gu});l>Gu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Vu(s.center[0]),Vu(s.center[1])],n=Ku(s.center[0],s.center[1],t[0],t[1]);s.center=t,p(n,e,i)}for(const s of t.decor||[]){o++;let t=0;if("line"===s.kind){const e=[Vu(s.x1),Vu(s.y1)],i=[Vu(s.x2),Vu(s.y2)];t=Math.max(Ku(s.x1,s.y1,e[0],e[1]),Ku(s.x2,s.y2,i[0],i[1])),s.x1=e[0],s.y1=e[1],s.x2=i[0],s.y2=i[1]}else{const e=Vu(s.x),i=Vu(s.y);if(null!=s.w&&null!=s.h){const n=Vu(s.x+s.w),o=Vu(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Yu(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Ku(s.x,s.y,e,i);s.x=e,s.y=i}p(t,e,i)}for(const s of t.openings||[]){if(o++,"partition"===s.host?.kind){const n=(t.partitions||[]).find(t=>t.id===s.host.id),o=Number(s.host.t);if(!n||!Number.isFinite(o)||o<0||o>1)continue;const a=n.b[0]-n.a[0],r=n.b[1]-n.a[1];if(Math.hypot(a,r)<=Gu)continue;const l=n.a[0]+a*o,h=n.a[1]+r*o;let d=180*Math.atan2(r,a)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Xu(s.x,s.y,Number.isFinite(u)?u:d,Number(s.length)||0,l,h,d);s.x=l,s.y=h,s.angle=d,_&&c++,p(g,e,i,_);continue}const n=ui([s.x,s.y],t.rooms||[],.025,{step:Ql,length:Number(s.length)||0});if(!n)continue;const a=Number(s.angle),r=!(Number.isFinite(a)&&a===n.angle),l=Xu(s.x,s.y,Number.isFinite(a)?a:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,r&&c++,p(l,e,i,r)}}for(const[t,e]of Object.entries(s)){if(!e||"object"!=typeof e)continue;const i=e;if("number"!=typeof i.x||"number"!=typeof i.y)continue;o++;const n=Vu(i.x),a=Vu(i.y),r=Ku(i.x,i.y,n,a);s[t]={...i,x:n,y:a};const l="string"==typeof i.s?i.s:"";p(r,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:a,maxShiftCm:r,maxSpace:l,rotated:c,removedDrafts:h},changed:n>0}}(i.spaces||[],e||{});i.spaces=c.spaces;const h={...c.report};let d=0,u=0,p=0;for(let t=0;t[t.id,t.open_to||[]]),walls:e.walls||[]}),o=ep(e),a=ep(s);if(!o||!a)continue;const r=np(o.rooms),c=np(a.rooms),_=.02*Zl;let g=Xc(zc(e.open_spans),r,c,ql);const m=g.length;g=Yc(g,a.rooms,ql,_),g=g.map(t=>{const e=Fc(t,ql),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=e[2]-e[0],r=e[3]-e[1],l=Math.hypot(a,r)||1,d=c.map(([t,e])=>[t[0],t[1],e[0],e[1]]).filter(t=>{const e=t[2]-t[0],s=t[3]-t[1],c=Math.hypot(e,s)||1;return Math.abs(a*s-r*e)/(l*c)<=1e-6&&Oc(o,t).d<=4*_&&Oc(i,t).d<=4*_&&Oc(n,t).d<=4*_}).sort((t,e)=>Math.hypot(e[2]-e[0],e[3]-e[1])-Math.hypot(t[2]-t[0],t[3]-t[1]))[0];if(h.total++,!d)return t;const u=[[d[0],d[1]],[d[2],d[3]]],p=Hc(i,d,u,Zl,2*_),g=Hc(n,d,u,Zl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Zl)return t;const m=Math.max(Math.hypot(p[0]-i[0],p[1]-i[1]),Math.hypot(g[0]-n[0],g[1]-n[1]));if(m>1e-6*Zl){h.moved++;const t=m/ql;t>h.maxShift&&(h.maxShift=t);const e=m/Zl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ic(p,g,ql)}),g=Yc(g,a.rooms,ql,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Fc(t,ql));g.length?s.open_spans=g:delete s.open_spans,jc(s.rooms||[],a.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ar(e.walls,r,c,Ql,ql);y=sp(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=il(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=Pr(y,s.rooms||[],Ql,1,f.map(t=>[t[0]/ql,t[1]/ql,t[2]/ql,t[3]/ql])),d+=Math.max(0,v-y.length),y.length?s.walls=y:delete s.walls;const b=JSON.stringify({spans:s.open_spans||[],links:(s.rooms||[]).map(t=>[t.id,t.open_to||[]]),walls:s.walls||[]});b!==n&&p++}const _=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n;o<6&&_&&(i.model_version=6);const g=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n,m=Number.isInteger(Number(i.model_version))?Number(i.model_version):o;return{config:i,layout:c.layout,report:{...h,modelFrom:o,modelTo:m,migrated:r,glowSpacesMigrated:a.glowSpaces,glowRoomsMigrated:a.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class ap{constructor(t=50){this._undo=[],this._redo=[],this._limit=Math.max(30,Math.floor(t))}get canUndo(){return this._undo.length>0}get canRedo(){return this._redo.length>0}get undoName(){return this._undo[this._undo.length-1]?.name??null}get redoName(){return this._redo[this._redo.length-1]?.name??null}get size(){return this._undo.length}push(t){this._undo.push(t),this._undo.length>this._limit&&this._undo.splice(0,this._undo.length-this._limit),this._redo=[]}undo(){const t=this._undo.pop()??null;return t&&this._redo.push(t),t}redo(){const t=this._redo.pop()??null;return t&&this._undo.push(t),t}clear(){this._undo=[],this._redo=[]}}const rp=new WeakMap;const lp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function cp(t){const e=t.defaultView;if(!e||!e.CSS?.supports?.("mix-blend-mode","screen"))return!1;const i=[128,32,16],s=[16,64,128],n=[9,19,29],o=`\n \n \n \n \n \n `,a=e.URL.createObjectURL(new Blob([o],{type:"image/svg+xml"}));try{const o=await new Promise((t,i)=>{const s=new e.Image,n=e.setTimeout(()=>i(new Error("SVG blend probe timeout")),1e3);s.onload=()=>{e.clearTimeout(n),t(s)},s.onerror=()=>{e.clearTimeout(n),i(new Error("SVG blend probe failed"))},s.src=a}),r=t.createElement("canvas");r.width=4,r.height=1;const l=r.getContext("2d",{willReadFrequently:!0});if(!l)return!1;l.drawImage(o,0,0,4,1);const c=l.getImageData(0,0,4,1).data;return lp(c,i,0)&&lp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&lp(c,s,8)&&lp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const hp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},dp=t=>Math.max(0,Math.min(1,t)),up=(t,e,i)=>t+(e-t)*i,pp=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function _p(t,e){return{centerX:t.x+t.w/2,centerY:t.y+t.h/2,pixelsPerUnit:e>0&&t.w>0?e/t.w:1,viewBox:{...t}}}function gp(t,e,i){const s=Math.max(1e-9,t.pixelsPerUnit),n=Math.max(1e-9,e/s),o=Math.max(1e-9,i/s);return{x:t.centerX-n/2,y:t.centerY-o/2,w:n,h:o}}function mp(t){const e=t.trim(),i=/^rgba?\(\s*([\d.]+)[, ]+([\d.]+)[, ]+([\d.]+)(?:\s*[,/]\s*([\d.]+))?\s*\)$/i.exec(e);if(i)return[Number(i[1]),Number(i[2]),Number(i[3]),null==i[4]?1:Number(i[4])];const s=/^#([0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];return s?[parseInt(s.slice(0,2),16),parseInt(s.slice(2,4),16),parseInt(s.slice(4,6),16),8===s.length?parseInt(s.slice(6,8),16)/255:1]:null}function fp(t,e,i){const s=mp(t),n=mp(e);if(!s||!n)return i<.5?t:e;const o=dp(i);return`rgba(${Math.round(up(s[0],n[0],o))}, ${Math.round(up(s[1],n[1],o))}, ${Math.round(up(s[2],n[2],o))}, ${up(s[3],n[3],o).toFixed(3)})`}function vp(t,e,i){const s=(t=>{const e=dp(t);if(0===e||1===e)return e;let i=0,s=1,n=e;for(let t=0;t<12;t++)n=(i+s)/2,pp(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=dp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:vp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(a):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(a),n}cancel(t=!0){this._raf&&this._clock.cancelFrame(this._raf),this._raf=0;const e=this._state;this._state=null,this._token++,e&&t&&(e.phase="settling",e.presented=e.to,this._hooks.frame(e),this._hooks.settled(e))}dispose(){this.cancel(!1)}}const bp="houseplan_card_labs_v1",wp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function kp(t){const e=/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/.exec(String(t||"").trim());if(!e)return null;const i=e.slice(1).map(Number);return i.every(t=>Number.isSafeInteger(t))?i:null}function xp(t,e){for(let i=0;i<3;i++)if(t[i]!==e[i])return t[i]t.split(",")).map(t=>t.trim()).filter(Boolean)}function Tp(t,e,i,s=wp){const n=function(t,e=wp){const i=kp(t),s=new Map;if(!i||!Sp(e))return s;for(const t of e){const e=kp(t.since),n=kp(t.expires);xp(i,e)>=0&&xp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(Sp(s)?s.map(t=>t.id):[]),a=new Set(function(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e.filter(t=>"string"==typeof t):[]}catch{return[]}}(e).filter(t=>n.has(t)));let r=!1;const l=t=>{if("off"===t)return a.clear(),void(r=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(r=!0,e||!n.has(i)?a.delete(i):a.add(i))};for(const e of Dp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Dp(Mp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Cp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Pp={active:Object.freeze([]),space:""},Rp="",Ap=!1,Ip="";const Fp=new Set;function Ep(){if("undefined"==typeof window)return Pp;const t=Tp(window.location,function(){try{return window.localStorage.getItem(bp)}catch{return null}}(),Rp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(bp,t)}catch{}}(t.persist),Pp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Fp)t(Pp);return Pp}function zp(){Ep()}function Op(t){return Rp=t,"undefined"==typeof window?Pp:(Ap||(Ap=!0,window.addEventListener("hashchange",zp),window.addEventListener("popstate",zp)),Ep())}const Np=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Hp=64;function Lp(t){return[t.rotDeg,t.tiltDeg,t.xyScale,t.zScale,t.origin[0],t.origin[1]].every(Number.isFinite)&&Math.abs(t.xyScale)>1e-12&&Math.abs(Math.cos(t.tiltDeg*Math.PI/180))>1e-12}function Bp(t,e,i=Np){if(!(Lp(i)&&Number.isFinite(t[0])&&Number.isFinite(t[1])&&Number.isFinite(e)))throw new Error("invalid isometric projection input");const s=i.rotDeg*Math.PI/180,n=i.tiltDeg*Math.PI/180,o=t[0]-i.origin[0],a=t[1]-i.origin[1],r=(o*Math.cos(s)-a*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+a*Math.cos(s))*i.xyScale;return[i.origin[0]+r,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function qp(t,e=Np){if(!Lp(e)||!Number.isFinite(t[0])||!Number.isFinite(t[1]))throw new Error("invalid isometric projection input");const i=e.rotDeg*Math.PI/180,s=e.tiltDeg*Math.PI/180,n=(t[0]-e.origin[0])/e.xyScale,o=(t[1]-e.origin[1])/(e.xyScale*Math.cos(s));return[e.origin[0]+n*Math.cos(i)+o*Math.sin(i),e.origin[1]-n*Math.sin(i)+o*Math.cos(i)]}function jp(t=Np){return`matrix(${function(t=Np){if(!Lp(t))throw new Error("invalid isometric camera");const e=t.rotDeg*Math.PI/180,i=t.tiltDeg*Math.PI/180,s=t.xyScale*Math.cos(e),n=-t.xyScale*Math.sin(e),o=t.xyScale*Math.sin(e)*Math.cos(i),a=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,a,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-a*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Wp(t,e=Np){const{rect:i,wallHeight:s}=t,n=t.openingHeight??s,o=t.floorDepth??0;if(!(i.w>=0)||!(i.h>=0)||!Number.isFinite(s)||!Number.isFinite(n)||!Number.isFinite(o)||s<0||n<0||o<0)throw new Error("invalid isometric frame");const a=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],r=Math.max(s,n),l=a.flatMap(t=>[Bp(t,-o,e),Bp(t,r,e)]),c=l.map(t=>t[0]),h=l.map(t=>t[1]),d=Math.min(...c),u=Math.min(...h);return{x:d,y:u,w:Math.max(...c)-d,h:Math.max(...h)-u}}const Up=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Gp(t){let e=0;for(let i=0;iArray.isArray(t)&&Number.isFinite(t[0])&&Number.isFinite(t[1])).map(t=>[Number(t[0]),Number(t[1])]),i=e[e.length-1];return e.length>1&&e[0][0]===i[0]&&e[0][1]===i[1]&&e.pop(),e}(t);if(i.length<3)return[];const s=!e;return Gp(i)>0===s?i:[...i].reverse()}function Kp(t,e,i){return t.length?`M ${t.map(t=>Up(Bp(t,i,e))).join(" L ")} Z`:""}function Yp(t,e,i){const s=e[1]-t[1],n=-(e[0]-t[0]),o=i.rotDeg*Math.PI/180;return s*Math.sin(o)+n*Math.cos(o)}function Xp(t,e,i=Np){if(!Number.isFinite(e)||e<0)throw new Error("invalid floor edge height");const s=(t||[]).map(t=>(t||[]).map((t,e)=>function(t,e){const i=Vp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Gp(t))>=1e-9)).filter(t=>t.length&&Gp(t[0])>0);s.sort((t,e)=>{const i=t[0][0],s=e[0][0];return i[0]-s[0]||i[1]-s[1]||Math.abs(Gp(e[0]))-Math.abs(Gp(t[0]))});const n=[],o=[];let a=0;for(let t=0;tt.depth-e.depth||t.component-e.component||t.edge-e.edge),{footprintPath:n.join(" "),sides:o,componentCount:s.length,edgeCount:a}}function Jp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Zp=t=>t.every(Number.isFinite);function Qp(t,e,i,s){const n=t[0]*i,o=t[1]*s,a=e*Math.PI/180;return[n*Math.cos(a)-o*Math.sin(a),n*Math.sin(a)+o*Math.cos(a)]}function t_(t,e,i,s,n,o,a){const r=t.flipH?-1:1,l=t.flipV?-1:1,c=function(t,e){return[t[0]+e[0],t[1]+e[1]]}([t.x+t.face.ox,t.y+t.face.oy],Qp(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:Qp(s,t.angle,r,l),quarterVector:Qp([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const e_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function i_(t,e,i=Np){const s=Math.max(0,Math.min(1,Number.isFinite(e)?e:0));return t.leaves.map(e=>{const n=function(t,e){const i=t.turnDeg*e*Math.PI/180;return[t.hinge[0]+t.closedVector[0]*Math.cos(i)+t.quarterVector[0]*Math.sin(i),t.hinge[1]+t.closedVector[1]*Math.cos(i)+t.quarterVector[1]*Math.sin(i)]}(e,s),o=Bp(e.hinge,e.bottom,i),a=Bp(n,e.bottom,i),r=Bp(n,e.top,i),l=Bp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${e_(o)} L ${e_(a)} L ${e_(r)} L ${e_(l)} Z`,shadowD:`M ${e_(Bp(e.hinge,0,i))} L ${e_(Bp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const s_={window:120,door:90,passage:90,gate:300};function n_(t){return s_[t]}function o_(t,e){const i=[t[0],t[1]],s=[e[0],e[1]];return function(t,e){return t[0]-e[0]||t[1]-e[1]}(i,s)<=0?{a:i,b:s}:{a:s,b:i}}function a_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=o_(t.a,t.b);if(Math.hypot(s.b[0]-s.a[0],s.b[1]-s.a[1])<=1e-9)return;const n=function(t,e){const i=t=>(Math.abs(t)<=5e-10?0:Math.round(1e6*t)/1e6).toFixed(6);return`${i(t[0])},${i(t[1])}>${i(e[0])},${i(e[1])}`}(s.a,s.b),o=e.get(n);if(o)return o.physicalHalfWidth=Math.max(o.physicalHalfWidth,t.half||0),o.sourceOrder=Math.min(o.sourceOrder,i),void(t.partitionHost&&(o.partitionHost&&o.partitionHost.id!==t.partitionHost.id?o.ambiguousPartitionHost=!0:o.partitionHost=t.partitionHost));e.set(n,{segmentKey:n,a:s.a,b:s.b,physicalHalfWidth:Math.max(0,t.half||0),sourceOrder:i,...t.partitionHost?{partitionHost:t.partitionHost}:{}})}),[...e.values()]}function r_(t,e){if(Math.abs(t.distance-e.distance)>1e-9)return t.distance-e.distance;if(Math.abs(t.perpendicular-e.perpendicular)>1e-9)return t.perpendicular-e.perpendicular;return(t.target.segmentKeye.target.segmentKey?1:0)||t.target.sourceOrder-e.target.sourceOrder}function l_(t){const e=a_(t.intervals).map(e=>{const i=function(t,e){const i=e.b[0]-e.a[0],s=e.b[1]-e.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,r=(t[0]-e.a[0])*o+(t[1]-e.a[1])*a,l=Math.max(0,Math.min(n,r)),c=e.a[0]+l*o,h=e.a[1]+l*a;return{along:l,length:n,x:c,y:h,distance:Math.hypot(t[0]-c,t[1]-h),perpendicular:Math.abs((t[0]-e.a[0])*a-(t[1]-e.a[1])*o)}}(t.pointer,e);return{target:e,...i,envelope:Math.max(t.baseTolerance,e.physicalHalfWidth+t.bodyPointerPadding)}}).filter(t=>t.distance<=t.envelope+1e-9).filter(e=>!function(t,e,i,s,n){const o=e.b[0]-e.a[0],a=e.b[1]-e.a[1],r=Math.hypot(o,a);if(!(r>1e-9))return!1;const l=o/r,c=a/r;for(const o of i){if(!o.open&&o.kind)continue;const i=o_(o.a,o.b),a=i.b[0]-i.a[0],r=i.b[1]-i.a[1],h=Math.hypot(a,r);if(!(h>1e-9))continue;const d=a/h,u=r/h;if(Math.abs(l*u-c*d)>1e-6)continue;if(Math.abs((i.a[0]-e.a[0])*c-(i.a[1]-e.a[1])*l)>n)continue;const p=(t[0]-i.a[0])*d+(t[1]-i.a[1])*u,_=1e-9;if(!(p<=_||p>=h-_)&&Math.abs((t[0]-i.a[0])*u-(t[1]-i.a[1])*d)<=s+1e-9)return!0}return!1}(t.pointer,e.target,t.intervals,e.envelope,Math.max(1e-9,Math.min(t.baseTolerance,.04*t.gridStep)))),i=e.filter(e=>!!e.target.partitionHost&&t.renderedLength+2*e.target.physicalHalfWidth>e.length+1e-9).sort(r_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(r_);let n=s[0];if(!n)return{candidate:null,jambBlockedTarget:i[0]?.target||null};const o=s.filter(t=>Math.abs(t.distance-n.distance)<=1e-9&&Math.abs(t.perpendicular-n.perpendicular)<=1e-9),a=o.filter(t=>t.target.partitionHost);if(a.length){if(1!==new Set(a.map(t=>t.target.partitionHost.id)).size||a.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=a[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),r=e/s,l=i/s;if(!o.every(e=>{const i=e.target.b[0]-e.target.a[0],s=e.target.b[1]-e.target.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,c=Math.abs(r*a-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*r);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:r,length:l}=n,c=r.b[0]-r.a[0],h=r.b[1]-r.a[1],d=c/l,u=h/l,p=r.partitionHost?r.physicalHalfWidth:0,_=Math.min(Math.max(0,t.renderedLength)/2+p,l/2);let g=n.along;const m=Math.max(t.gridStep,1e-9),f=l/2;g=Math.abs(g-f)<=m/2?f:Math.round(g/m)*m,g=Math.max(_,Math.min(l-_,g));const v=r.a[0]+d*g,y=r.a[1]+u*g,b=Math.max(0,t.renderedLength)/2,w=g-b,k=g+b,x=Math.max(0,w),$=Math.max(0,l-k),S=[r.a[0]+d*(w-x/2),r.a[1]+u*(w-x/2)],M=[r.a[0]+d*(k+$/2),r.a[1]+u*(k+$/2)];let C=180*Math.atan2(h,c)/Math.PI;C>=90?C-=180:C<-90&&(C+=180);const D=Math.abs(g-f)<=1e-9;return{candidate:{presetRevision:t.preset.revision,geometryRevision:t.geometryRevision,pointer:[t.pointer[0],t.pointer[1]],type:t.preset.type,lengthCm:t.preset.lengthCm,flipH:t.preset.flipH,flipV:t.preset.flipV,x:v,y:y,angle:C,renderedLength:t.renderedLength,target:r,...r.partitionHost?{host:{...r.partitionHost,t:l>0?g/l:0}}:{},measure:{labels:[{distance:x,midpoint:S},{distance:$,midpoint:M}],guide:D?{x:v,y:y,angle:C}:null}},jambBlockedTarget:null}}function c_(t,e,i,s,n=1e-6){return t.presetRevision===i&&t.geometryRevision===s&&Math.hypot(t.pointer[0]-e[0],t.pointer[1]-e[1])<=n}const h_="1.65.0-beta.7",d_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},u_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},p_=2e3,__=1e3,g_=1500,m_=t=>{const e=String(t??"").trim().replace(",",".");if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e))return null;const i=Number(e);return Number.isFinite(i)?i:null},f_=(t,e)=>{if(!t.has(e))return{hit:!1};const i=t.get(e);return t.delete(e),t.set(e,i),{hit:!0,value:i}},v_=(t,e,i,s)=>{for(t.delete(e),t.set(e,i);t.size>s;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},y_=new Map;let b_=0;const w_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let k_=1e4;const x_="houseplan_card_layout_v1",$_="houseplan_card_cfg_v1",S_="houseplan_card_zoom_v1",M_="houseplan_card_nav_v1",C_="houseplan_card_kiosk_v1",D_="houseplan_card_view_v1",T_=1e3,P_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],R_=(t,e)=>{const i=Math.min(t.x,e.x),s=Math.min(t.y,e.y);return{x:i,y:s,w:Math.max(t.x+t.w,e.x+e.w)-i,h:Math.max(t.y+t.h,e.y+e.h)-s}},A_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),I_=2e3,F_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},E_=t=>{history.pushState(null,"",t),F_(window,"location-changed",{replace:!1})},z_=(t,e)=>{let i,s=null;const n=(...n)=>{clearTimeout(i),s=n,i=window.setTimeout(()=>{i=void 0;const e=s;s=null,e&&t(...e)},e)};return n.flush=()=>{if(void 0===i)return;clearTimeout(i),i=void 0;const e=s;s=null,e&&t(...e)},n.cancel=()=>{clearTimeout(i),i=void 0,s=null},n.pending=()=>void 0!==i,n},O_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class N_ extends ht{constructor(){super(...arguments),this._space="f1",this._layout={},this._serverStorage=!1,this._loadOk=!1,this._serverCanWrite=null,this._loading=!1,this._loadTries=0,this._serverCfg=null,this._cfgRev=0,this._cfgContentFingerprint="",this._unsubCfg=null,this._unsubLayout=null,this._unsubVirtual=null,this._liveSyncAttempt=null,this._liveSyncGeneration=0,this._liveSyncConnection=null,this._layoutRev=0,this._layoutContentFingerprint="",this._virtualLights=_n(null),this._canOptimizeUndo=!1,this._undoKind=null,this._devices=[],this._regSignature="",this._defPos={},this._newSyncKey="",this._tip=null,this._hoverRoom=null,this._selId=null,this._toast="",this._mode="view",this._pendingNavMode=null,this._decorTool="select",this._decorStyle={...ir},this._decorDraft=null,this._decorMove=null,this._decorSel=null,this._decorEraseConfirm=null,this._decorTextDialog=null,this._decorShapeDialog=null,this._backdropDialog=null,this._decorTextSelection={start:0,end:0},this._furnPalette=null,this._dtBox=null,this._dtDrag=null,this._bdDrag=null,this._slide="",this._reducedMotion=!1,this._onMotionChange=t=>{this._reducedMotion=t.matches,t.matches&&this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:t.matches&&this._modeTransition.active&&this._cancelModeTransition(!0),this.requestUpdate()},this._editorChromeMode="plan",this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest=0,this._modeTransitionTargetZoom=1,this._modeTransitionEditorCamera=null,this._modeTransition=new yp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Wu({root:()=>this.renderRoot,requestUpdate:()=>this.requestUpdate(),updateComplete:()=>this.updateComplete,clearTip:()=>{this._tip=null}}),this._editorSecondaryCopy={groupActive:(t,e)=>this._t("editor.group_active",{group:t,item:e}),openGroup:t=>this._t("editor.open_group",{group:t}),disabledAction:(t,e)=>this._t("editor.disabled_action",{action:t,reason:e})},this._tool="draw",this._geometryHistory=new ap(50),this._wallDialog=null,this._drawWallField=null,this._activeDraftId=null,this._resumeDraftBySpace={},this._physicalSel=null,this._physicalDialog=null,this._partitionDeleteDialog=null,this._physicalDrag=null,this._physicalRotate=null,this._physicalLastTap=null,this._physicalPickCycle=null,this._wallUnionCache=null,this._isoGeometryCache=new Map,this._isoFallback=new Set,this._openingTunnelCache=null,this._openingWallIndexCache=new Map,this._openingPlacementIntervalsCache=null,this._planSnapGeometryCache=null,this._planStructuralGeometryCache=null,this._physicalBodiesCache=null,this._lightPhysicalBodiesCache=null,this._cleanFloorCache=new Map,this._glowClipCache=new Map,this._lightBarrierCache=null,this._glowFeatherUnits=null,this._glowRenderedSources=new Map,this._glowLastAppearance=new Map,this._glowEnteringSources=new Set,this._glowEnterRafs=new Map,this._glowFadeTimers=new Map,this._glowFeatherSuspendUntil=0,this._glowFeatherResumeTimer=0,this._glowSourceSeq=0,this._glowScreenBlend=!1,this._duplicateColumnId=null,this._duplicateColumnTimer=0,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._path=[],this._cursorPt=null,this._planSnapHover=null,this._mergeSel=null,this._openingPreset=null,this._openingRebindId=null,this._openingPresetRevision=0,this._openingHoverCandidate=null,this._openingJambBlockCm=null,this._openingDialog=null,this._openingInfo=null,this._opDrag=null,this._opMeasure=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryPointerType="mouse",this._boundaryRestoreGuard=null,this._boundaryTargetMemo=null,this._boundaryPreviewMemo=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._wallFaceGraphCache=[],this._areaSel="",this._nameSel="",this._roomDialog=!1,this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1,this._zoom=1,this._view=null,this._zoomBySpace={},this._viewModeSnap=null,this._pointers=new Map,this._panStart=null,this._panLock=null,this._pinchStart=null,this._suppressClick=!1,this._touchContacts=new Map,this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._connectedPath="",this._routeDepartureHandled=!1,this._onLocationChanged=()=>{this._connectedPath&&location.pathname!==this._connectedPath?this._leaveCardRoute():location.pathname===this._connectedPath&&(this._routeDepartureHandled=!1)},this._touchGestureGuard={capture:!0,handleEvent:t=>this._guardTouchGesture(t)},this._hdrH=118,this._booting=!0,this._bootFading=!1,this._bootSettling=!1,this._bootSettleRaf=0,this._bootLastH=-1,this._bootStart=0,this._bootLastChange=0,this._bootSoft=!1,this._tapConfirm=null,this._onboardingShown=!1,this._rulesDialog=null,this._alignDialog=null,this._settingsDialog=null,this._backupExportDialog=null,this._backupImportDialog=null,this._sunRaysCache=null,this._dayCycleTimer=0,this._dayCycleClockKey="",this._compassDrag=!1,this._importDialog=null,this._importQueue=[],this._importTotal=0,this._rulesCompiledSrc="",this._infoCard=null,this._nativeMoreInfoEntity=null,this._markerDialog=null,this._spaceDialog=null,this._keyHandler=t=>this._onKey(t),this._warmVp=null,this._warmVpArmed=!1,this._warmLongReturn=!1,this._warmRevivePending=!1,this._warmGen=++b_,this._warmKey=null,this._warmSlot=null,this._hashApplied=!1,this._navApplied=!1,this._labs={active:Object.freeze([]),space:""},this._viewPreference={},this._renderProjection="flat",this._kioskScale={icon:1,font:1},this._kioskDialog=!1,this._activityRt=new Map,this._vacRt=new Map,this._vacViewKey="",this._vacLastView=null,this._vacRaf=0,this._vacSrvTrails={},this._vacJumpOnce=!1,this._continuity=this._newContinuityController(),this._continuityHistory=[],this._continuityEpoch=0,this._continuityDataReady=!0,this._continuityPaintToken=-1,this._continuityDisposed=!1,this._renderSnapshotAt=Date.now(),this._hassSequence=0,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotSequence=-1,this._capturedSnapshotDevices=null,this._capturedSnapshotLayout=null,this._capturedSnapshotActivity="",this._capturedSnapshotConfigEpoch=-1,this._capturedSnapshotVirtual="",this._lastValidStageSize=null,this._pendingRefitSize=null,this._refitRaf=0,this._pageVisibility=t=>{if(this._continuity.visibility(t),this._dayCycleVisibility(t),"hidden"!==t.kind){if(this._vacJumpOnce=!0,!t.long){const t=Date.now();let e=!1;for(const i of this._activityRt.values())!i.flashKind||(i.expiresAt||i.flashTs+Fu)>t||(i.flashTs=0,i.flashKind=null,i.expiresAt=0,e=!0);return void(e&&this.requestUpdate())}Date.now()-this._renderSnapshotAt>1e3&&this._continuity.note("device-snapshot-stale"),this._continuityDataReady=!1,this._continuityPaintToken=-1,this._resumeSettling=!0,this._loading?this.requestUpdate():this._loadFromServer()}else this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0)},this._resumeSettling=!1,this._viewportInvalidAt=0,this._vacFit=null,this._vacAllCamerasFor=null,this._vacAllCameraCache=null,this._vacCalConfirm=null,this._kioskDots=!1,this._cyclePausedUntil=0,this._swipeStart=null,this._lastTap=0,this._onLabsSnapshot=t=>{const e=this._effectiveProjection();this._labs=t;const i=this._effectiveProjection();this._convertProjectionView(e,i),this.requestUpdate()},this._onHashChange=()=>{if(this._hasFixedFloor)return;const t=this._hashSpace();if(t&&this._model.find(e=>e.id===t)&&t!==this._space){if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._selId=null,this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),this.requestUpdate()}},this._drag=null,this._rlResize=null,this._holdFired=!1,this._retryContinuity=()=>{this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.retry(this._continuity.recoveryReason||"plan"),this._loading||this._loadFromServer()},this._cfgEpoch=0,this._modelCache=null,this._emptySpaceStateActive=!1,this._decorSnapCache=null,this._markerPreviewMemo=null,this._markerPreviewDevicesMemo=null,this._showHidden=!1,this._connHooked=null,this._connectionWasLost=!1,this._haRegistryConnection=null,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._onHaRegistryUpdate=()=>{const t=An(this.hass);t.revision===this._haRegistryRev&&this._devices.length||(this._haRegistryRev=t.revision,this._planHassMemo=null,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate())},this._onConnReady=()=>{if(this._loadTries=0,clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,function(t){const e=Mn(t);e&&(Tn(t,e),Pn(t,e))}(this.hass),this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(this._onConnReady,400));!this._connectionWasLost&&this._continuity.hasCompleteFrame?this._beginContinuityCandidate("connection-ready",!1,"plan"):(this._continuityDataReady=!1,this._continuityPaintToken=-1),this._loading||this._loadFromServer()},this._onConnLost=()=>{this._booting&&!this._continuity.hasCompleteFrame||(this._connectionWasLost=!0,this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.connectionLost())},this._signer=new ah(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=z_(()=>{if(this._serverStorage){const t=[...this._dirtyPos];this._dirtyPos.clear();for(const e of t){const t=this._layout[e];t&&(this._sentPos.set(e,t),this.hass.callWS({type:"houseplan/layout/update",device_id:e,pos:t}).then(t=>this._noteLayoutRev(t)).catch(t=>this._showToast(this._t("toast.pos_save_failed",{err:this._errText(t)}))).finally(()=>{this._sentPos.get(e)===t&&this._sentPos.delete(e)}))}this._cacheSnapshot()}else localStorage.setItem(x_,JSON.stringify(this._layout))},600),this._frame=null,this._showFar=!1,this._writesPending=0,this._writeChain=Promise.resolve(),this._undoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.undo();t&&(this._applyGeometryState(t.before)?this._showToast(this._t("history.undone",{name:t.name})):this._geometryHistory.clear())},this._redoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.redo();t&&(this._applyGeometryState(t.after)?this._showToast(this._t("history.redone",{name:t.name})):this._geometryHistory.clear())},this._saveConfigDebounced=z_(()=>{this._serverCfg&&this._writeConfig().catch(t=>{"conflict"===t?.code?(this._showToast(this._t("toast.conflict")),this._cancelPath(),this._reloadConfigOnly(!0)):this._showToast(this._t("toast.cfg_save_failed",{err:this._errText(t)}))})},500),this._draftSegmentCms=[],this._closingWallCm=null,this._savePhysicalDialog=()=>{const t=this._physicalDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=m_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?$l:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?$l:100;if(!Number.isFinite(n)||n<1||n>o)return void this._showPhysicalRange(o);if("column"===t.kind){const e=i.wall_columns.find(e=>e.id===t.id);if(!e)return;const s=m_(t.angle||"0");if("circle"!==t.shape&&(null==s||s<0||s>=90))return void this._showToast(this._t("toast.physical_angle"));const o="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:n}:{id:t.id,shape:"square",center:e.center,cm:n,angle:s};if(i.wall_columns.some(e=>e.id!==t.id&&Bl(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const a=this._geometrySnapshot();if("partition"===t.kind){const i=(e.partitions||[]).find(e=>e.id===t.id);i&&(i.cm=n)}else if("column"===t.kind){const i=(e.wall_columns||[]).find(e=>e.id===t.id);i&&(i.cm=Sl(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=m_(t.angle||"0"):delete i.angle)}else{const i=(e.room_drafts||[]).find(e=>e.id===t.id);i?.segments?.[t.segment||0]&&(i.segments[t.segment||0].cm=n)}this._recordGeometry(this._t("history.physical_edit"),a),this._physicalDialog=null,this._saveConfig()},this._deletePhysicalSelection=()=>{const t=this._physicalSel,e=this._curSpaceCfg;if(!t||!e)return;if("draft"===t.kind)return void this._deleteDraftWhole();const i=this._geometrySnapshot();if("partition"===t.kind){const i=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(i.length)return void(this._partitionDeleteDialog={id:t.id,openings:i.map(t=>JSON.parse(JSON.stringify(t)))})}const s="partition"===t.kind?"partitions":"column"===t.kind?"wall_columns":"room_drafts";e[s]=(e[s]||[]).filter(e=>e.id!==t.id),e[s].length||delete e[s],this._activeDraftId===t.id&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._confirmPartitionDelete=()=>{const t=this._partitionDeleteDialog,e=this._curSpaceCfg;if(!t||!e)return;const i=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this._partitionDeleteDialog=null,this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftWhole=()=>{const t="draft"===this._physicalDialog?.kind?this._physicalDialog.id:"draft"===this._physicalSel?.kind?this._physicalSel.id:null,e=this._curSpaceCfg;if(!t||!e||!confirm(this._t("confirm.delete_draft")))return;const i=this._geometrySnapshot();e.room_drafts=(e.room_drafts||[]).filter(e=>e.id!==t),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===t&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftSegment=()=>{const t=this._physicalDialog,e=this._curSpaceCfg;if(!t||"draft"!==t.kind||!e)return;if(!confirm(this._t("confirm.delete_draft_segment")))return;const i=(e.room_drafts||[]).findIndex(e=>e.id===t.id);if(i<0)return;const s=e.room_drafts[i],n=Math.max(0,Math.min(s.segments.length-1,t.segment||0)),o=[],a=s.points.slice(0,n+1),r=s.points.slice(n+1);if(a.length>=2&&o.push({id:s.id,points:a,segments:s.segments.slice(0,n)}),r.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:r,segments:s.segments.slice(n+1)}),2===o.length&&e.room_drafts.length>=200)return void this._showToast(this._t("toast.physical_limit"));const l=this._geometrySnapshot();e.room_drafts.splice(i,1,...o),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===s.id&&this._cancelPath(),this._physicalDialog=null,this._physicalSel=o.length?{kind:"draft",id:o[0].id}:null,this._recordGeometry(this._t("history.draft_segment_delete"),l),this._saveConfig()},this._rebindPartitionOpening=()=>{const t=this._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingRebindId=e,this._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this._openingPresetRevision},this._openingDialog=null,this._openingHoverCandidate=null)},this._keepClosedAsPartitions=()=>{if(this._wallFaceBatch)return void this._decideWallFace(!1);if(!this._contourClosed||this._pendingSplit||!this._curSpaceCfg)return;const t=this._curSpaceCfg,e=this._path.slice(0,-1);if((t.partitions||[]).length+e.length>I_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r];t.partitions||=[];const n=Date.now().toString(36);for(let i=0;it.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.contour_to_partitions"),i),this._saveConfig(),this._roomDialog=!1,this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null},this._toggleServerPlans=async()=>{const t=this._spaceDialog;if(t)if(t.pickSaved)this._spaceDialog={...t,pickSaved:!1};else{this._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.hass.callWS({type:"houseplan/plans/list"}),e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:[],savedBusy:!1}),this._showToast(this._t("toast.plans_list_failed",{err:this._errText(t)}))}}},this._aspectJob=null,this._dayCycleTick=()=>{if(!this.isConnected||"hidden"===this.ownerDocument.visibilityState)return;const t=this._dayCycleState();if(!t)return this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),void(this._dayCycleClockKey="");const e=La(t);e!==this._dayCycleClockKey&&(this._dayCycleClockKey=e,this.requestUpdate())},this._sunShown=!1,this._sunOut=!1,this._sunOutTimer=0,this._openSettingsDialog=()=>{if(!this._norm)return;const t=this._glowRadiusCm,e=this._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this._settingsDialog={colors:JSON.parse(JSON.stringify(this._fillColors)),glowRadius:e,bgColor:cs(this._settings,{bgColor:null})||null,northDeg:Ya(this._settings,{}),bgMode:Xa(this._settings,{}),sunRays:Ja(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=op(this._serverCfg,this._layout||{}),i=Math.ceil(10*e.report.maxShiftCm)/10,s=t.find(t=>null!=t?.id&&String(t.id)===e.report.maxSpace),n=t.length>1&&s?String(s.title||s.id):"";this._alignDialog={report:e.report,config:e.config,layout:e.layout,cm:i,where:n,changed:e.changed,busy:!1}},this._optimizeUndoBusy=!1,this._openBackupExport=()=>{this._settingsDialog=null,this._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._openRulesDialog=()=>{if(!this._norm)return;const t=this._settings.icon_rules,e=(t&&t.length?t:Xt).map(t=>({...t}));this._rulesDialog={rules:e,test:"",busy:!1}},this._climateCache=null,this._gearPtCache=new WeakMap}get _canEdit(){return!!this._norm&&(!0===this._serverCanWrite||!1!==this._serverCanWrite&&!0===this.hass?.user?.is_admin)}get _kiosk(){return!!this._config?.kiosk}_showKioskDots(){this._kioskDots=!0,clearTimeout(this._kioskDotsTimer),this._kioskDotsTimer=window.setTimeout(()=>this._kioskDots=!1,2500)}get _modeTransitionBusy(){return this._modeTransitionPreparing||this._modeTransition.active}_cssColor(t,e){const i=String(t||"").trim();if(!i)return e;const s=document.createElement("span");s.style.cssText=`position:absolute;visibility:hidden;color:${i}`,this.renderRoot.append(s);const n=getComputedStyle(s).color||e;return s.remove(),n}_currentModeVisual(t=this._mode){const e=this._modeTransition.presented||this._modeTransitionVisual;if(e)return{...e,viewport:{...e.viewport,viewBox:{...e.viewport.viewBox}}};const i=this._stageEl;if(!i||i.clientWidth<=0||i.clientHeight<=0)return null;const s=this.renderRoot.querySelector(".editorchrome"),n=this._viewOr(this._baseVb()),o=this.renderRoot.querySelector(".hp-paper"),a=this.renderRoot.querySelector(".hp-backdrop"),r=this.renderRoot.querySelector(".zoomwrap"),l=r?getComputedStyle(r).filter:"",c=Number(/brightness\(([^)]+)\)/.exec(l)?.[1]);return{presentedMode:t,editorChromeHeight:"view"===t?0:s?.getBoundingClientRect().height||0,stageWidth:i.clientWidth,stageHeight:i.clientHeight,viewport:_p(n,i.clientWidth),stageColor:getComputedStyle(i).backgroundColor||"rgb(255, 255, 255)",paperColor:o?getComputedStyle(o).fill:"rgb(255, 255, 255)",sceneBrightness:Number.isFinite(c)?c:1,architectureOpacity:"decor"===t?.35:1,backdropOpacity:a&&Number(getComputedStyle(a).opacity)||1,viewWeight:"view"===t?1:0,editorWeight:"view"===t?0:1,toolbarContentOpacity:"view"===t?0:1}}_viewForModeTarget(t,e,i,s,n){const o=zi(this._baseVb(),s/Math.max(1,n)),a=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),r=o.w/a,l=o.h/a,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-r/2,y:h-l/2,w:r,h:l},o)}_targetStageColor(t){return"view"!==t?"rgb(255, 255, 255)":this._cssColor(this._stageBg(this._spaceDisplayForRender()),this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"))}_targetPaperColor(t){return"view"===t&&this._spaceModel()?.bg?this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"):"rgb(255, 255, 255)"}_targetBrightness(t){return 1}_applyModeTransitionFrame(t){t.targetMode===this._mode&&(this._modeTransitionVisual=t.presented,this._view={...t.presented.viewport.viewBox},this.requestUpdate())}_settleModeTransition(t){if(t.targetMode!==this._mode)return;const e=this._modeTransitionRequest;this._view={...t.to.viewport.viewBox},this._zoom=this._modeTransitionTargetZoom,this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._lastValidStageSize=[t.to.stageWidth,t.to.stageHeight],"view"===this._mode&&(this._saveZoom(),this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate(),this.updateComplete.then(()=>{if(!this.isConnected||e!==this._modeTransitionRequest||this._modeTransitionBusy||t.targetMode!==this._mode)return;const i=this._stageEl;if(i&&i.clientWidth>0&&i.clientHeight>0&&(Math.abs(i.clientWidth-t.to.stageWidth)>.5||Math.abs(i.clientHeight-t.to.stageHeight)>.5)){const t=this._view;this._lastValidStageSize=[i.clientWidth,i.clientHeight],this._applyView(this._zoom,t?t.x+t.w/2:void 0,t?t.y+t.h/2:void 0),this.requestUpdate()}const s=this.renderRoot.activeElement;(!s||!s.isConnected||!!s.closest?.(".editorchrome, .stage"))&&this.renderRoot.querySelector(".modetab.active")?.focus?.({preventScroll:!0})})}_cancelModeTransition(t=!0){const e=!!this._modeTransition.state;this._modeTransitionRequest++,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransition.cancel(t),t&&e||(this._modeTransitionVisual=null)}_adoptMode(t){this._cancelModeTransition(!1),this._mode=t,"view"!==t&&(this._editorChromeMode=t)}_commitViewModeAtomic(t,e,i,s){if(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this._zoom=e,t){const n=this._stageEl?.clientWidth||t.stageWidth,o=Math.max(1,t.stageHeight+t.editorChromeHeight);this._view=this._viewForModeTarget(e,i,s,n,o),this._lastValidStageSize=[n,o]}else this._view=null;this._viewModeSnap=null,this._modeTransitionEditorCamera=null,this._saveZoom(),this.requestUpdate()}_prepareModeTransition(t,e,i,s,n,o){this.updateComplete.then(()=>{if(!this.isConnected||t!==this._modeTransitionRequest||this._mode!==i)return void(t===this._modeTransitionRequest&&(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this.requestUpdate()));const a=this.renderRoot.querySelector(".editorchrome"),r=a?.querySelector(".editorchrome-inner"),l="view"===i?0:r?.scrollHeight||r?.getBoundingClientRect().height||0,c=Math.max(1,e.stageHeight+e.editorChromeHeight),h=Math.max(1,c-l),d=this._stageEl?.clientWidth||e.stageWidth;if(d<=0||h<=0)return this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._applyView(s,n,o),void this.requestUpdate();const u=this._viewForModeTarget(s,n,o,d,h),p={presentedMode:i,editorChromeHeight:l,stageWidth:d,stageHeight:h,viewport:_p(u,d),stageColor:this._targetStageColor(i),paperColor:this._targetPaperColor(i),sceneBrightness:this._targetBrightness(i),architectureOpacity:"decor"===i?.35:1,backdropOpacity:"decor"===i&&"backdrop"!==this._decorTool?.5:1,viewWeight:"view"===i?1:0,editorWeight:"view"===i?0:1,toolbarContentOpacity:"view"===i?0:1};this._modeTransitionPreparing=!1;const _=this._modeTransitionForceAtomic;this._modeTransitionForceAtomic=!1,this._modeTransition.start(e,p,i,this._reducedMotion||_?0:220)})}get _hasFixedFloor(){return!!this._config&&Object.prototype.hasOwnProperty.call(this._config,"floor")}_fixedFloorState(t=this._model,e=this._loadOk){const i=this._config?.floor,s=function(t){if(!t.hasFloor)return{kind:"absent"};const e=t.floor;if("string"==typeof e)return e.length?t.spaceIds.includes(e)?{kind:"valid",id:e,source:"id"}:{kind:"invalid",reason:"unknown-id",value:e}:{kind:"invalid",reason:"empty-id",value:e};if("number"==typeof e){if(!Number.isFinite(e))return{kind:"invalid",reason:"non-finite-index",value:e};if(!Number.isInteger(e))return{kind:"invalid",reason:"fractional-index",value:e};if(e<0)return{kind:"invalid",reason:"negative-index",value:e};const i=t.spaceIds[e];return void 0===i?{kind:"invalid",reason:"out-of-range-index",value:e}:{kind:"valid",id:i,source:"index"}}return{kind:"invalid",reason:"invalid-type",value:e}}({spaceIds:t.map(t=>t.id),hasFloor:this._hasFixedFloor,floor:i});return!this._hasFixedFloor||e?s:"number"==typeof i?"valid"===s.kind||"invalid"===s.kind&&"out-of-range-index"===s.reason?{kind:"pending",value:i}:s:"valid"===s.kind||"invalid"===s.kind&&"unknown-id"!==s.reason?s:{kind:"pending",value:i}}_canCommitSpace(t,e=!1){if(e||!this._hasFixedFloor)return!0;const i=this._fixedFloorState();return"valid"===i.kind&&i.id===t}_commitSpace(t,e=!1){return!!this._canCommitSpace(t,e)&&(this._space=t,!0)}_slideTo(t,e){if(t===this._space)return!0;if(!this._canCommitSpace(t))return!1;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return!1;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;return this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._selId=null,this._physicalSel=null,this._editorSecondary.closeForNavigation(),this._physicalDialog=null,this._physicalDrag=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),i||(this._slide=e,clearTimeout(this._slideTimer),this._slideTimer=window.setTimeout(()=>{this._slideTimer=void 0,this._slide="",this.requestUpdate()},190),this.requestUpdate()),!0}_pickSpace(t){if(t===this._space)return;const e=this._model.map(t=>t.id),i=e.indexOf(this._space),s=e.indexOf(t);this._navApplied=!0,this._showFar=!1,this._frame=null,this._slideTo(t,i>=0&&s0&&Date.now()>=this._cyclePausedUntil&&this._model.length>1&&this._zoom<=1.001){const t=this._model.map(t=>t.id),e=t.indexOf(this._space);this._slideTo(t[(e+1)%t.length],"left"),this._showKioskDots()}}_syncCycleTimer(){clearInterval(this._cycleTimer),this._cycleTimer=void 0,this.isConnected&&!this._hasFixedFloor&&this._config?.kiosk&&Number(this._config.cycle)>0&&(this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle)))}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new ih(()=>{this._resumeSettling="steady"!==this._continuity.state,this._continuityEpoch++,this.isConnected&&this.requestUpdate()})}get _labsIso(){return this._labs.active.includes("iso")}get _desiredProjection(){return"view"===this._mode&&this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat"}_saveViewPreference(){try{localStorage.setItem(D_,JSON.stringify(this._viewPreference))}catch{}}_logicalViewCenter(t){const e=this._view;if(!e)return null;const i=[e.x+e.w/2,e.y+e.h/2],s="iso"===t?qp(i):i;return{x:s[0],y:s[1]}}_convertProjectionView(t,e){if(t===e)return;const i=this._logicalViewCenter(t);this._view=null;const s=i?"iso"===e?Bp([i.x,i.y],0):[i.x,i.y]:null;this._applyView(this._zoom,s?.[0],s?.[1]),this._warmPatch({vp:this._warmViewportState()}),this.requestUpdate()}_setProjection(t){if(!this._labsIso||"view"!==this._mode)return;const e=this._effectiveProjection();if(this._viewPreference={...this._viewPreference,[this._space]:t},"iso"===t){const t=this._isoSceneKey();t&&this._isoFallback.delete(t)}this._saveViewPreference();const i=this._effectiveProjection();this._convertProjectionView(e,i)}_hashSpace(){return Cp(window.location.hash||"")}connectedCallback(){this._connectedPath=location.pathname,this._routeDepartureHandled=!1,window.addEventListener("location-changed",this._onLocationChanged),window.addEventListener("popstate",this._onLocationChanged),this._continuityDisposed&&(this._continuity=this._newContinuityController(),this._continuityDisposed=!1,this._continuityPaintToken=-1);const t=(e=this.ownerDocument,rp.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=th(this.ownerDocument,this._pageVisibility),super.connectedCallback(),this._motionMedia=window.matchMedia?.("(prefers-reduced-motion: reduce)"),this._reducedMotion=!!this._motionMedia?.matches,this._motionMedia?.addEventListener?.("change",this._onMotionChange),function(t){const e=rp.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=cp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),rp.set(t,i),i.promise}(this.ownerDocument).then(t=>{t!==this._glowScreenBlend&&(this._glowScreenBlend=t,this.isConnected&&this.requestUpdate())}),this.hass&&this._ensureHaRegistryAuthority(),window.addEventListener("keydown",this._keyHandler),this._signer.start(()=>this.hass,()=>Rs(this._serverCfg)),this._syncCycleTimer(),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Fp.add(e);const i=Op(t);return"undefined"==typeof window&&e(i),()=>{Fp.delete(e)}}(h_,this._onLabsSnapshot),this._booting?this._bootWatch():this._bootFading&&(clearTimeout(this._bootTimer),this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220)),this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)),!this._loadOk&&this._serverCfg&&this.hass&&this._scheduleLoadRetry(),!this._warmSlot&&this._config&&this._warmAdopt(),this._loadOk&&this._ensureLiveSyncSubscriptions(),this._warmVp&&!this._warmRevivePending&&void 0===this._warmReviveTimer&&(this._warmRevivePending=!0,this._warmReviveTimer=window.setTimeout(()=>this._warmReviveDialog(),0)),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1,this.requestUpdate()}disconnectedCallback(){this._connectedPath&&location.pathname!==this._connectedPath&&this._leaveCardRoute(),window.removeEventListener("location-changed",this._onLocationChanged),window.removeEventListener("popstate",this._onLocationChanged),this._continuityUnsub?.(),this._continuityUnsub=void 0,this._motionMedia?.removeEventListener?.("change",this._onMotionChange),this._motionMedia=void 0,this._vacRaf&&(cancelAnimationFrame(this._vacRaf),this._vacRaf=0),this._refitRaf&&(cancelAnimationFrame(this._refitRaf),this._refitRaf=0),this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),this._dayCycleClockKey="",this._bootSettleRaf&&(cancelAnimationFrame(this._bootSettleRaf),this._bootSettleRaf=0),this._bootSettling=!1;for(const t of this._activityRt.values())clearTimeout(t.timer);window.removeEventListener("keydown",this._keyHandler),clearInterval(this._cycleTimer),clearTimeout(this._kioskDotsTimer),clearTimeout(this._kioskHoldTimer),clearTimeout(this._reloadRetry),clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),this._connHooked=null,this._haRegistryRelease?.(),this._haRegistryRelease=void 0,this._haRegistryConnection=null,this._signer.dispose(),clearTimeout(this._toastTimer),clearTimeout(this._slideTimer),this._modeTransition.dispose(),this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest++,this._slideTimer=void 0,this._slide="",clearTimeout(this._bootTimer),this._bootTimer=void 0,clearTimeout(this._bootSoftTimer),this._saveConfigDebounced.flush(),window.removeEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=void 0,clearTimeout(this._holdTimer),this._roViewport?.disconnect(),this._roViewport=void 0,this._roHdr?.disconnect(),this._roHdr=void 0,this._onWinResize&&(window.removeEventListener("resize",this._onWinResize),this._onWinResize=void 0),this._unsubCfg&&(this._unsubCfg(),this._unsubCfg=null),this._unsubLayout&&(this._unsubLayout(),this._unsubLayout=null),this._unsubVirtual&&(this._unsubVirtual(),this._unsubVirtual=null),this._unsubTrail&&(this._unsubTrail(),this._unsubTrail=void 0),this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=null,clearTimeout(this._layoutSyncTimer),clearTimeout(this._duplicateColumnTimer);for(const t of this._glowFadeTimers.values())clearTimeout(t);for(const t of this._glowEnterRafs.values())cancelAnimationFrame(t);clearTimeout(this._glowFeatherResumeTimer),this._glowFeatherResumeTimer=0,this._glowFeatherSuspendUntil=0,this._glowFadeTimers.clear(),this._glowEnterRafs.clear(),this._glowEnteringSources.clear(),this._glowRenderedSources.clear(),this._glowLastAppearance.clear(),this._glowSourceSeq=0,this._warmSnapshot(),this._warmRevivePending=!1,clearTimeout(this._warmReviveTimer),this._warmReviveTimer=void 0,this._warmRelease(),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._touchContacts.clear(),this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._editorSecondary.reset(),this._resumeSettling=!1,this._continuityHistory=[...this._continuityHistory,...this._continuity.trace].slice(-80),this._continuity.dispose(),this._continuityDisposed=!0,super.disconnectedCallback()}_onKey(t){if("Escape"===t.key&&this._vacFit)return this._vacFit=null,this._showToast(this._t("vac.cal_cancelled")),void t.stopPropagation();if("Escape"===t.key){if(this._tapConfirm)return void(this._tapConfirm=null);if(this._vacCalConfirm)return void(this._vacCalConfirm=null);if(this._decorEraseConfirm)return void(this._decorEraseConfirm=null);if(this._openingInfo)return void(this._openingInfo=null);if(this._infoCard)return void this._closeInfoCard();if(this._rulesDialog)return void(this._rulesDialog=null);if(this._alignDialog)return void(this._alignDialog=null);if(this._backupImportDialog)return void(this._backupImportDialog=null);if(this._backupExportDialog)return void(this._backupExportDialog=null);if(this._settingsDialog)return void(this._settingsDialog=null);if(this._markerDialog)return void(this._markerDialog=null);if(this._openingDialog)return void(this._openingDialog=null);if(this._physicalDialog)return void(this._physicalDialog=null);if(this._backdropDialog)return void(this._backdropDialog=null);if(this._decorShapeDialog)return void(this._decorShapeDialog=null);if(this._decorTextDialog)return void(this._decorTextDialog=null);if(this._spaceDialog&&!this._roomDialog)return this._spaceDialog=null,this._importQueue=[],void(this._importTotal=0);if(this._editorSecondary.hasOpenGroup)return t.preventDefault(),void this._editorSecondary.closeGroup(!0)}const e=t.composedPath?.()||[t.target],i=e.some(t=>t?.matches?.('input, textarea, select, [contenteditable="true"]')),s=e.some(t=>t?.classList?.contains?.("editor-secondary")),n=t.ctrlKey||t.metaKey,o=t.key.toLowerCase(),a=/^[a-z]$/.test(o),r="z"===o||!a&&"KeyZ"===t.code,l="y"===o||!a&&"KeyY"===t.code,c=n&&(r&&t.shiftKey||l),h=n&&r&&!t.shiftKey;if("decor"===this._mode){if((h||c)&&i)return;return c?(t.preventDefault(),void this._redoGeometry()):h?(t.preventDefault(),this._decorDraft?void(this._decorDraft=null):this._decorMove||this._dtDrag||this._bdDrag?void this._cancelDecorGesture():void this._undoGeometry()):"Delete"!==t.key&&"Backspace"!==t.key||!this._decorSel||i||s?void("Escape"===t.key&&(t.preventDefault(),this._decorDraft?this._decorDraft=null:this._decorMove||this._dtDrag||this._bdDrag?this._cancelDecorGesture():"furniture"===this._decorTool?(this._furnPalette=null,this._decorTool="select"):this._decorSel?this._decorSel=null:"select"!==this._decorTool?this._decorTool="select":this._setMode("view"))):(t.preventDefault(),void this._decorDeleteSel())}if(this._markup&&(!h&&!c||!i)){if(("Delete"===t.key||"Backspace"===t.key)&&this._physicalSel&&!i&&!s)return t.preventDefault(),void this._deletePhysicalSelection();if(c)return t.preventDefault(),void this._redoGeometry();if(h)return t.preventDefault(),this._rszDrag?void this._rszCancelDrag():this._wallFaceBatch?(this._roomDialogCancel(),void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint())):"draw"===this._tool&&this._path.length?void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint()):"split"===this._tool&&this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},void(this._splitSel.pts.length||(this._cursorPt=null))):void this._undoGeometry();if("Escape"===t.key)return this._physicalDrag||this._physicalRotate?(t.preventDefault(),void this._cancelPhysicalGesture()):this._roomDialog?(t.preventDefault(),void this._roomDialogCancel()):"draw"===this._tool&&this._path.length?(t.preventDefault(),void this._undoPoint()):this._physicalSel?(t.preventDefault(),void(this._physicalSel=null)):"resize"===this._tool?(t.preventDefault(),this._rszDrag?void this._rszCancelDrag():void(this._rszSel?this._rszSel=null:this._tool="draw")):"split"===this._tool?(t.preventDefault(),void(this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},this._splitSel.pts.length||(this._cursorPt=null)):this._splitSel?this._splitSel=null:this._tool="draw")):"merge"===this._tool?(t.preventDefault(),void(this._mergeSel?this._mergeSel=null:this._tool="draw")):this._wallDialog?(t.preventDefault(),void(this._wallDialog=null)):"boundary"===this._tool?(t.preventDefault(),void(this._openWallAnchor?this._cancelBoundaryAnchor():this._tool="draw")):void("opening"!==this._tool&&"wallthick"!==this._tool&&"delroom"!==this._tool&&"column"!==this._tool||(t.preventDefault(),"opening"===this._tool&&this._clearOpeningPlacement(!0),this._tool="draw"))}}_undoPoint(){if(this._path.length){if(this._contourClosed)return this._path=this._path.slice(0,-1),void(this._closingWallCm=null);if(this._activeDraftId&&this._path.length>1&&this._curSpaceCfg){const t=this._geometrySnapshot();this._path=this._path.slice(0,-1),this._draftSegmentCms=this._draftSegmentCms.slice(0,-1);const e=this._curSpaceCfg,i=(e.room_drafts||[]).findIndex(t=>t.id===this._activeDraftId);return void(i>=0&&(this._path.length<2?(e.room_drafts.splice(i,1),e.room_drafts.length||delete e.room_drafts,this._activeDraftId=null):e.room_drafts[i]={id:this._activeDraftId,points:this._path.map(t=>[t[0]/T_,t[1]/T_]),segments:this._draftSegmentCms.map(t=>({cm:t}))},this._recordGeometry(this._t("history.draft_segment_delete"),t),this._saveConfig()))}this._path=this._path.slice(0,-1)}}_undoActiveDraftPoint(){const t=this._activeDraftId,e=this._path[0]?[...this._path[0]]:null,i=this._geometryHistory.undo();if(!i)return void this._undoPoint();if(!this._applyGeometryState(i.before))return void this._geometryHistory.clear();const s=t?this._spaceModel()?.room_drafts.find(e=>e.id===t):null;s?(this._activeDraftId=s.id,this._path=s.points.map(t=>[...t]),this._draftSegmentCms=s.segments.map(t=>t.cm),this._resumeDraftBySpace[this._space]=s.id):(this._activeDraftId=null,this._path=e?[e]:[],this._draftSegmentCms=[],t&&this._resumeDraftBySpace[this._space]===t&&delete this._resumeDraftBySpace[this._space]),this._clearPlanSnapHover(),this._showToast(this._t("history.undone",{name:i.name}))}static getConfigElement(){return document.createElement("houseplan-card-editor")}static getStubConfig(){return{type:"custom:houseplan-card"}}static _warmBootReset(t){for(const t of y_.values())for(const e of t)clearTimeout(e.evict);y_.clear(),k_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of y_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:y_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){const e=this._config,i=!!e&&Object.prototype.hasOwnProperty.call(e,"floor");this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t};(i!==this._hasFixedFloor||e?.floor!==this._config.floor)&&(this._hashApplied=!1,this._navApplied=!1,this._warmVpArmed=!1),this._config.kiosk&&(this._booting=!1,this._bootFading=!1),!this._hasFixedFloor&&t.default_floor&&this._commitSpace(t.default_floor,!0);try{this._zoomBySpace=JSON.parse(localStorage.getItem(S_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(D_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Op(h_);try{const t=JSON.parse(localStorage.getItem(C_)||"null");this._kioskScale={icon:Es(t?.icon),font:Es(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem($_)||"null");t&&t.config&&Array.isArray(t.config.spaces)&&(this._serverCfg=t.config,this._cfgEpoch++,this._cfgRev=t.rev||0,this._cfgContentFingerprint=t.config_fingerprint||sh(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||sh(this._layout),this._virtualLights=_n(t.virtual_lights,this._cfgRev),this._serverStorage=!0)}catch{}this._adoptInitialSpace(this._model,this._loadOk),"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._syncCycleTimer(),this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=w_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=y_.get(t);if(!s||!s.length)return;const n=s.find(t=>t.owner===this._warmGen);if(n)return this._warmLongReturn=!!n.freed&&Date.now()-n.freed>=Jc,clearTimeout(n.evict),n.evict=0,n.freed=0,n.live=!0,this._warmSlot=n,this._warmKey=t,n.frameFingerprint&&this._continuity.adoptCompleteFrame(n.frameFingerprint),void(!this._devices.length&&n.devices?.length&&(this._devices=[...n.devices]));const{slot:o,sure:a}=((t,e,i,s)=>{const n=t=>{const e=!!i&&t.place?.deref()===i;return e&&t.idx===s?4:t.live?0:e?3:2};let o=null,a=0,r=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>a?(o=i,a=t,r=1):t===a&&r++)}return!o||r>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Jc,this._booting=!1,this._bootFading=!1,this._hdrH=o.hdrH,this._bootSoft=!0,this.isConnected&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)),this._warmKey=t,a?(clearTimeout(o.evict),o.evict=0,o.owner=this._warmGen,o.place=e?new WeakRef(e):null,o.idx=i,o.live=!0,this._warmSlot=o,this._warmVp=o.vp,o.frameFingerprint&&this._continuity.adoptCompleteFrame(o.frameFingerprint),!this._devices.length&&o.devices?.length&&(this._devices=[...o.devices]),this._warmAdoptViewport(this._config)):(this._warmSlot={owner:this._warmGen,path:location.pathname,place:e?new WeakRef(e):null,idx:i,live:!0,hdrH:o.hdrH,stageH:o.stageH,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0},s.push(this._warmSlot),this._warmTrim(s)))}_warmIdx(t){const e=t?.children;if(!e)return-1;for(let t=0;t4;){const e=t.findIndex(t=>!t.live);if(e<0)break;clearTimeout(t[e].evict),t.splice(e,1)}}_warmScheduleEvict(t,e){if(clearTimeout(t.evict),!(t.dlg||t.vp&&"view"!==t.vp.mode))return;const i=t.freed,s=t.owner;t.evict=window.setTimeout(()=>{if(t.evict=0,t.freed!==i||t.owner!==s)return;var n;t.dlg=null,t.vp=(n=t.vp)&&"view"!==n.mode?{...n,mode:"view",zoom:n.snap?.space===n.space?n.snap.zoom:n.zoom,view:null,snap:null,tool:"draw",decorTool:"select",showHidden:!1,selId:null,rszSel:null,decorSel:null}:n,t.frameFingerprint="";const o=y_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},k_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);const i=this._fixedFloorState();if(this._hashApplied||!this._model.find(t=>t.id===e.space)||"valid"===i.kind&&i.id!==e.space||this._hasFixedFloor&&"valid"!==i.kind)return void(this._warmVp=null);this._commitSpace(e.space,!0),this._navApplied=!0,this._adoptMode("view"!==e.mode&&this._canEdit&&!t.kiosk?e.mode:"view"),this._pendingNavMode="view"===e.mode||this._canEdit||t.kiosk?null:e.mode,this._zoom=e.zoom;const s=this._effectiveProjection(),n=s===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=n&&e.view?{...e.view}:null,this._viewModeSnap=n&&e.snap?{...e.snap}:null,!n&&e.logicalCenter){const t="iso"===s?Bp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var o;this._tool="openwall"===(o=e.tool)||"closewall"===o?"boundary":"opening"===(o=function(t){return"partition"===t?"draw":t}(o))?"draw":"string"==typeof o&&A_.has(o)?o:"draw",this._decorTool=e.decorTool,this._showHidden=e.showHidden,this._showFar!==e.showFar&&(this._showFar=e.showFar,this._frame=null),this._selId=e.selId,this._rszSel=e.rszSel,this._decorSel=e.decorSel,this._warmVpArmed=!0}_warmPatch(t,e=!1){if(this._config?.kiosk)return;const i=w_(this._config);if(!this._warmSlot||this._warmKey===i){if(!this._warmSlot){if(!e)return;const t=this.parentNode;this._warmKey=i,this._warmSlot={owner:this._warmGen,path:location.pathname,place:t?new WeakRef(t):null,idx:this._warmIdx(t),live:!0,hdrH:this._hdrH,stageH:0,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0};const s=y_.get(i)||[];for(s.push(this._warmSlot),y_.set(i,s),this._warmTrim(s);y_.size>8;){const t=y_.keys().next().value;if(void 0===t||t===i)break;for(const e of y_.get(t)||[])clearTimeout(e.evict);y_.delete(t)}}Object.assign(this._warmSlot,t)}}_warmViewportState(){const t=this._effectiveProjection();return{space:this._space,mode:this._mode,projection:t,activeLabsIso:this._labsIso,logicalCenter:this._logicalViewCenter(t),zoom:this._zoom,view:this._view?{...this._view}:null,snap:this._viewModeSnap?{...this._viewModeSnap}:null,tool:this._tool,decorTool:this._decorTool,showHidden:this._showHidden,showFar:this._showFar,selId:this._selId,rszSel:this._rszSel,decorSel:this._decorSel}}_warmDialogState(){const t=(t,e)=>({kind:t,space:this._space,mode:this._mode,data:e});return this._tapConfirm||this._alignDialog||this._mergeDialog||this._importDialog||this._backupExportDialog||this._backupImportDialog?null:this._openingInfo?t("openingInfo",this._openingInfo.id):this._infoCard?t("info",this._infoCard.id):this._rulesDialog?this._rulesDialog.busy?null:t("rules",this._rulesDialog):this._settingsDialog?this._settingsDialog.busy?null:t("settings",this._settingsDialog):this._markerDialog?this._markerDialog.busy?null:t("marker",this._markerDialog):this._openingDialog?t("opening",this._openingDialog):this._backdropDialog?t("backdrop",this._backdropDialog):this._decorShapeDialog?t("decorShape",this._decorShapeDialog):this._decorTextDialog?t("decorText",this._decorTextDialog):this._roomDialog?t("room",{editId:this._roomEditId,fill:this._roomFill,customFill:this._roomCustomFill,tempSrc:this._roomTempSrc,humSrc:this._roomHumSrc,srcOpen:this._roomSrcOpen,srcFilter:this._roomSrcFilter,nameScale:this._roomNameScale,labelScale:this._roomLabelScale,areaSel:this._areaSel,nameSel:this._nameSel,pendingSplit:this._pendingSplit,wallFaceBatch:this._wallFaceBatch,path:this._path}):this._spaceDialog?this._spaceDialog.busy?null:t("space",this._spaceDialog):null}_warmSnapshot(){if(this._booting||this._config?.kiosk||"steady"!==this._continuity.state)return;const t={vp:this._warmViewportState(),frameFingerprint:this._continuity.frameFingerprint,devices:this._devices};if(this._warmRevivePending||(t.dlg=this._warmDialogState()),this.isConnected&&this._warmSlot?.owner===this._warmGen){const e=this.parentNode;t.place=e?new WeakRef(e):null,t.idx=this._warmIdx(e)}this._warmPatch(t)}_warmReviveDialog(){this._warmRevivePending=!1;const t=this._warmSlot;if(this._warmReviveTimer=void 0,!t||!t.dlg)return;const e=t.dlg,i=t.freed;if(t.dlg=null,t.freed=0,clearTimeout(t.evict),t.evict=0,i&&!(Date.now()-i>k_)&&e.space===this._space&&e.mode===this._mode){switch(e.kind){case"space":this._spaceDialog={...e.data,busy:!1,savedBusy:!1};break;case"marker":this._markerDialog={...e.data,busy:!1};break;case"settings":this._settingsDialog={...e.data,busy:!1};break;case"rules":this._rulesDialog={...e.data,busy:!1};break;case"opening":this._openingDialog={...e.data};break;case"backdrop":this._backdropDialog={...e.data};break;case"decorShape":this._decorShapeDialog={...e.data};break;case"decorText":{this._decorTextDialog={...e.data};const t=String(this._decorTextDialog?.text??"").length;this._decorTextSelection={start:t,end:t};break}case"room":{const t=e.data;this._roomEditId=t.editId,this._roomFill=t.fill,this._roomCustomFill=t.customFill||null,this._roomTempSrc=t.tempSrc,this._roomHumSrc=t.humSrc,this._roomSrcOpen=t.srcOpen,this._roomSrcFilter=t.srcFilter,this._roomNameScale=t.nameScale,this._roomLabelScale=t.labelScale,this._areaSel=t.areaSel,this._nameSel=t.nameSel,this._pendingSplit=t.pendingSplit,this._wallFaceBatch=t.wallFaceBatch||null,this._path=t.path,this._wallFaceBatch&&(this._activeDraftId=this._wallFaceBatch.activeDraftId,this._draftSegmentCms=[...this._wallFaceBatch.activeCms]),this._roomDialog=!0;break}case"info":{const t=this._devices.find(t=>t.id===e.data);t&&(this._infoCard=t);break}case"openingInfo":{const t=(this._curSpaceCfg?.openings||[]).find(t=>t.id===e.data);t&&(this._openingInfo=t);break}}this.requestUpdate()}}_cacheSnapshot(){if(this._serverCfg)try{this._cfgContentFingerprint=sh(this._serverCfg),this._layoutContentFingerprint=sh(this._layout),this._virtualLights=function(t,e,i){if(t.configRev===i)return t;const s=new Set((Array.isArray(e?.markers)?e.markers:[]).filter(vn).map(t=>t.id));return{...t,configRev:i,off:new Set([...t.off].filter(t=>s.has(t)))}}(this._virtualLights,this._serverCfg,this._cfgRev),localStorage.setItem($_,JSON.stringify({config:this._serverCfg,rev:this._cfgRev,config_fingerprint:this._cfgContentFingerprint,layout:this._layout,layout_rev:this._layoutRev,layout_fingerprint:this._layoutContentFingerprint,virtual_lights:mn(this._virtualLights)}))}catch{}}_beginContinuityCandidate(t,e,i="plan"){return this._booting&&!this._continuity.hasCompleteFrame?this._continuity.token:(this._continuityDataReady=e,this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._resumeSettling=!0,this._continuity.beginCandidate(t,i))}_continuityStageValid(){const t=this._stageEl;return!!t&&t.clientWidth>0&&t.clientHeight>0}_continuityAssetsReady(){if(!this._model.length)return!1;const t=this._model.length?this._spaceModel():null;return!t?.bg?.href||this._signer.isReady(this.hass,t.bg.href)}_initialSpaceSelection(t,e=this._loadOk){const i=this._fixedFloorState(t,e);return"valid"===i.kind?{id:i.id,source:"fixed"}:this._hasFixedFloor?{id:null,source:"none"}:function(t){const e=new Set(t.spaceIds.filter(t=>!!t));if(!e.size)return{id:null,source:"none"};const i=[["hash",!1===t.acceptHash?null:t.hashSpace],["current",t.preserveCurrent?t.currentSpace:null],["saved",t.savedSpace],["default",t.defaultSpace],["first",t.spaceIds[0]]];for(const[t,s]of i)if(s&&e.has(s))return{id:s,source:t};return{id:null,source:"none"}}({spaceIds:t.map(t=>t.id),hashSpace:this._hashSpace(),acceptHash:!this._hashApplied,currentSpace:this._space,preserveCurrent:this._hashApplied||this._navApplied||this._warmVpArmed,savedSpace:this._savedNav()?.space,defaultSpace:this._config?.default_floor})}_adoptInitialSpace(t,e=this._loadOk){const i=this._initialSpaceSelection(t,e);return i.id?(this._commitSpace(i.id,!0),"hash"===i.source&&(this._hashApplied=!0),"saved"===i.source&&(this._navApplied=!0),i):i}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._fixedFloorState(i,!0);if(this._hasFixedFloor&&"valid"!==s.kind)return"";const n=this._initialSpaceSelection(i,!0).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===n)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return nh([this._cfgRev,this._cfgContentFingerprint||sh(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||sh(this._layout),this._space,this._mode,this._view,e,this._glowScreenBlend?"screen":"normal",this.hass?.themes?.darkMode??this.hass?.themes?.default_theme??""])}_settleContinuityFrame(){if(this._booting||!this._continuityStageValid())return;if(!this._continuity.hasCompleteFrame&&"steady"===this._continuity.state)return void(this._continuityAssetsReady()&&(this._renderSnapshotAt=Date.now(),this._continuity.markCompleteFrame(this._visualFrameFingerprint())));if(!this._continuityDataReady)return;if(!["holding","offline-stale","overlay-pending","overlay-visible","candidate-ready"].includes(this._continuity.state))return;const t=this._continuity.token;if(this._candidateDeviceSnapshot&&this._candidateDeviceSnapshot!==this._visibleDeviceSnapshot&&this._stagedDeviceSnapshotToken!==t)return this._stagedDeviceSnapshotToken=t,void this.requestUpdate();this._continuityPaintToken!==t&&(this._continuityPaintToken=t,this._continuity.candidateReady(t)&&this._continuity.commitAfterPaint(t,{updateComplete:()=>this.updateComplete,stageValid:()=>this.isConnected&&this._continuityStageValid(),assetsReady:()=>this._continuityAssetsReady(),frameFingerprint:()=>this._visualFrameFingerprint()}).then(e=>{e&&t===this._continuity.token?(this._resumeSettling=!1,this._renderSnapshotAt=Date.now(),this._candidateDeviceSnapshot&&(this._visibleDeviceSnapshot=this._candidateDeviceSnapshot),this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._warmSnapshot()):t===this._continuity.token&&(this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._candidateDeviceSnapshot=null,this.requestUpdate())}))}_onBackdropLoaded(t,e){this._signer.markLoaded(this.hass,t,e),this._continuity.note("asset-ready"),this._continuityPaintToken=-1,"steady"!==this._continuity.state&&this.requestUpdate()}_renderRecoveryOverlay(){if(!this._continuity.overlayVisible&&"recovery-error"!==this._continuity.state)return G;const t="connection"===this._continuity.recoveryReason;return j`
`}afterRender(){const t=this.host.root();this._blocked&&(this._openGroupId?this.closeGroup(!1):"palette"===this._currentModel?.kind&&this._currentModel.dismiss?.()),this._syncGlobalDismissListener();const e=t.querySelector(".editor-secondary"),i=this._renderedContext,s=e?.dataset.contextId||"";if(s&&i&&s!==i&&!window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches&&(this._contentAnimation?.cancel(),this._contentAnimation=e?.querySelector(".editor-secondary-content")?.animate([{opacity:.35,transform:"translateY(-4px)"},{opacity:1,transform:"translateY(0)"}],{duration:100,easing:"ease-out"})),this._renderedContext=s,i&&s!==i&&this._focusOwned){const i=s?e?.querySelector('[tabindex="0"], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled])'):t.querySelector(".editbar-tools");i?.focus?.(),this._focusOwned=!!s}if("palette"===this._currentModel?.kind&&this._currentModel.launcherId){const e=[...t.querySelectorAll("[data-editor-palette]")].find(t=>t.dataset.editorPalette===this._currentModel?.launcherId);e&&null!==e.offsetParent||this._currentModel.dismiss?.()}if(!this._openGroupId)return;const n=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===this._openGroupId);n&&null!==n.offsetParent||this.closeGroup(!0)}handleOutsideDismiss(t){if(Wu(t,t=>t.hasAttribute("data-editor-navigation")))return"pointerdown"===t.type?this.closeForNavigation():"click"===t.type&&this._dismissPointerTarget&&this._clearDismissClick(),!1;if("click"===t.type&&this._dismissPointerTarget){return!!(t.composedPath?.()||[t.target]).includes(this._dismissPointerTarget)&&(this._clearDismissClick(),t.preventDefault(),t.stopImmediatePropagation(),!0)}const e=this._openGroupId||this._blocked||"palette"!==this._currentModel?.kind?null:this._currentModel;if("pointerdown"===t.type&&(this._openGroupId||e)){const i=Wu(t,t=>t.classList.contains("editor-secondary")),s=Wu(t,t=>!!t.dataset.editorGroup),n=Wu(t,t=>!!t.dataset.editorPalette),o=Wu(t,t=>t.classList.contains("stage"));if(!(i||s||n||"stay-open-on-canvas"===e?.dismissPolicy&&o))return t.preventDefault(),t.stopImmediatePropagation(),this._dismissPointerTarget=t.target,clearTimeout(this._dismissTimer),this._dismissTimer=window.setTimeout(()=>{this._clearDismissClick()},800),this._openGroupId?this.closeGroup(!1):e?.dismiss?.(),this._syncGlobalDismissListener(),!0}return!1}_activateGroupItem(t,e,i){if(t.id!==this._openGroupId)return;const s=t.items.find(t=>t.id===e);if(!s||s.disabled)return;const n="toggle"===s.role&&"stay-open"===s.closePolicy,o=0===i.detail;n||(this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener()),s.invoke(),!n&&o&&this.host.updateComplete().then(()=>{const e=[...this.host.root().querySelectorAll("[data-editor-group]")].find(e=>e.dataset.editorGroup===t.id&&null!==e.offsetParent);e?.focus()})}_groupKeydown(t){if(!["ArrowLeft","ArrowRight","Home","End"].includes(t.key))return;const e=[...t.currentTarget.querySelectorAll(".editor-group-item:not([disabled])")];if(!e.length)return;t.preventDefault();const i=e.indexOf(this.host.root().activeElement),s="Home"===t.key?0:"End"===t.key?e.length-1:"ArrowLeft"===t.key?i<=0?e.length-1:i-1:(i+1)%e.length;e[s]?.focus()}_clearDismissClick(){this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}_syncGlobalDismissListener(){const t=!this._blocked&&"palette"===this._currentModel?.kind,e=!!this._openGroupId||t||!!this._dismissPointerTarget;e!==this._globalDismissListening&&(this._globalDismissListening=e,e?(window.addEventListener("pointerdown",this._globalDismissGuard,!0),window.addEventListener("click",this._globalDismissGuard,!0)):(window.removeEventListener("pointerdown",this._globalDismissGuard,!0),window.removeEventListener("click",this._globalDismissGuard,!0)))}}const Gu=t=>t.stopPropagation(),Vu=4.166666666666667e-9;function Ku(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Vu?t:e}const Yu=(t,e,i,s)=>Math.hypot(i-t,s-e),Xu=(t,e,i,s,n,o,a,r)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+a-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+r-(e+s)))),Ju=(t,e,i,s,n,o,a)=>{const r=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*r,h=Math.sin(i*l)*r,d=Math.cos(a*l)*r,u=Math.sin(a*l)*r,p=Math.max(Yu(t+c,e+h,n+d,o+u),Yu(t-c,e-h,n-d,o-u)),_=Math.max(Yu(t+c,e+h,n-d,o-u),Yu(t-c,e-h,n+d,o+u));return Math.min(p,_)},Zu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Qu=t=>JSON.parse(JSON.stringify(t)),tp=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),ep=(t,e,i)=>Math.min(i,Math.max(e,t)),ip=t=>Kl({spaces:[t]})[0],sp=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),a=n(e);return o0?a:1,l=Math.max(s*r*.02,1e-9),c=[];for(const e of t||[])for(const t of ci(e)||[])c.push([t[0],t[1]]);for(const t of i||[])Array.isArray(t)&&t.length>=4&&t.slice(0,4).every(Number.isFinite)&&c.push([t[0],t[1]],[t[2],t[3]]);const h=t=>c.some(e=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l),d=new Map;for(const a of t||[]){if(!a?.id)continue;const c=Qr(t,a.id,e,i,s,n,o,r);if(c)for(let t=0;t0&&u>0&&a===p&&u!==a))continue;const _=c.poly[s],g=c.poly[(s+1)%c.poly.length],m=Math.hypot(g[0]-_[0],g[1]-_[1]);if(!(m>l&&m<.5*o-1e-9*o))continue;if(h(_)||h(g))continue;const f=sp(_,g,r),v=d.get(f);v?v.targets.add(a):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([a])})}}}let u=e.slice();const p=(t,e)=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l,_=(t,e)=>{if(!Array.isArray(t.a)||!Array.isArray(t.b)||t.a.length<2||t.b.length<2)return!1;const i=[Number(t.a[0])*r,Number(t.a[1])*r],s=[Number(t.b[0])*r,Number(t.b[1])*r];return!![...i,...s].every(Number.isFinite)&&(p(i,e.a)&&p(s,e.b)||p(i,e.b)&&p(s,e.a))};for(const t of[...d.values()].filter(t=>1===t.targets.size).sort((t,e)=>sp(t.a,t.b,r).localeCompare(sp(e.a,e.b,r)))){const e=[...t.targets][0],i=u.filter(e=>_(e,t));if(new Set(i.map(t=>t.cm)).size>1)continue;let n=!1;u=u.map(i=>_(i,t)?(n=!0,i.cm===e?i:{...i,cm:e}):i),n||(u=Ir(u,t.a,t.b,e,s,r))}return u}const op=t=>{const e=[];for(const i of t||[]){const t=ci(i);if(t?.length)for(let i=0;i{let e=0,i=0,s=0;for(const i of t.markers||[]){if("ripple"===i.display&&(i.display="icon_ripple",e++),Array.isArray(i.controls)){const t="string"==typeof i.binding&&i.binding.startsWith("entity:")?i.binding.slice(7):"",s=t?i.controls.filter(e=>e!==t):i.controls;JSON.stringify(s)!==JSON.stringify(i.controls)&&(i.controls=s.length?s:null,e++)}const t=i.vacuum;t&&tp(t,"trail")&&(["never","cleaning","always"].includes(t.trail_mode)||(t.trail_mode=!1===t.trail?"never":"cleaning"),delete t.trail,e++)}for(const n of t.spaces||[]){const t=n.settings;"glow"===t?.fill_mode&&("boolean"!=typeof t.glow_enabled&&(t.glow_enabled=!0),t.fill_mode="none",e++,i++);for(const t of n.rooms||[]){const i=t.settings;"glow"===i?.fill_mode&&("boolean"!=typeof i.glow&&(i.glow=!0),delete i.fill_mode,e++,s++)}if(tp(n,"segments")&&(delete n.segments,e++),tp(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(tp(n,"plan_scale_x")||(n.plan_scale_x=t),tp(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);tp(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?ep(o,.1,1e3):5,e++);const a=Number(n.cell_cm),r=Number.isFinite(a)&&a>0?a:5;for(const t of n.wall_columns||[])if("circle"===t.shape)tp(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&tp(t,"angle")){const i=((Number(t.angle)||0)%90+90)%90;t.angle!==i&&(t.angle=i,e++)}for(const t of n.decor||[]){if(tp(t,"width")){const i=Number(t.width);(tp(t,"width_cm")||Number.isFinite(i))&&(tp(t,"width_cm")||(t.width_cm=Number(ep(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(tp(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),tp(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(ep(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(tp(t,"scale")||tp(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1]));if(!(tp(t,"entity")||tp(t,"attr")||tp(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,a=s||n?"":Yi(t.entity,o);if(s||a){if(a){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+a+i.slice(e+2):`${i}${i?" ":""}${a}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let r=a.total;for(const t of i.spaces||[]){const e=ip(t);if(!e)continue;if(!zc(t.open_spans).length){const i=Bc(e.rooms,null,ql,.02*Zl,!0);i.length&&(t.open_spans=qc(i,ql),r++)}}const l=Qu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,a=0,r=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Zu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Vu||s))return;n++,t>a&&(a=t);const o=t*Jl*e;o>r&&(r=o,l=i)};for(const t of i){const e=Zu(t),i=null!=t?.id?String(t.id):"";for(const s of t.rooms||[]){o++;let t=0;if(s.poly?.length)s.poly=s.poly.map(e=>{const i=[Ku(e[0]),Ku(e[1])];return t=Math.max(t,Yu(e[0],e[1],i[0],i[1])),i});else if(null!=s.x&&null!=s.y){const e=s.x,i=s.y,n=s.w||0,o=s.h||0,a=Ku(e+n),r=Ku(i+o),l=Ku(e),c=Ku(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Xu(e,i,n,o,l,c,h,d),s.x=l,s.y=c,s.w=h,s.h=d}p(t,e,i)}for(const s of t.room_drafts||[]){o++;let t=0;const n=(s.points||[]).map(e=>{const i=[Ku(e[0]),Ku(e[1])];return t=Math.max(t,Yu(e[0],e[1],i[0],i[1])),i}),a=n.length?[n[0]]:[],r=[];for(let t=0;t+1t.points?.length>=2),h+=e-t.room_drafts.length,t.room_drafts.length||delete t.room_drafts}for(const s of t.partitions||[]){o++;const n=[Ku(s.a[0]),Ku(s.a[1])],a=[Ku(s.b[0]),Ku(s.b[1])];let r=Math.max(Yu(s.a[0],s.a[1],n[0],n[1]),Yu(s.b[0],s.b[1],a[0],a[1]));const l=Yu(n[0],n[1],a[0],a[1]),c=(t.openings||[]).filter(t=>"partition"===t.host?.kind&&t.host.id===s.id).every(t=>{const e=Number(t.length),i=Number(t.host.t),s=i*l;return Number.isFinite(e)&&e>0&&Number.isFinite(i)&&i>=0&&i<=1&&s-e/2>=-Vu&&s+e/2<=l+Vu});l>Vu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Ku(s.center[0]),Ku(s.center[1])],n=Yu(s.center[0],s.center[1],t[0],t[1]);s.center=t,p(n,e,i)}for(const s of t.decor||[]){o++;let t=0;if("line"===s.kind){const e=[Ku(s.x1),Ku(s.y1)],i=[Ku(s.x2),Ku(s.y2)];t=Math.max(Yu(s.x1,s.y1,e[0],e[1]),Yu(s.x2,s.y2,i[0],i[1])),s.x1=e[0],s.y1=e[1],s.x2=i[0],s.y2=i[1]}else{const e=Ku(s.x),i=Ku(s.y);if(null!=s.w&&null!=s.h){const n=Ku(s.x+s.w),o=Ku(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Xu(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Yu(s.x,s.y,e,i);s.x=e,s.y=i}p(t,e,i)}for(const s of t.openings||[]){if(o++,"partition"===s.host?.kind){const n=(t.partitions||[]).find(t=>t.id===s.host.id),o=Number(s.host.t);if(!n||!Number.isFinite(o)||o<0||o>1)continue;const a=n.b[0]-n.a[0],r=n.b[1]-n.a[1];if(Math.hypot(a,r)<=Vu)continue;const l=n.a[0]+a*o,h=n.a[1]+r*o;let d=180*Math.atan2(r,a)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Ju(s.x,s.y,Number.isFinite(u)?u:d,Number(s.length)||0,l,h,d);s.x=l,s.y=h,s.angle=d,_&&c++,p(g,e,i,_);continue}const n=ui([s.x,s.y],t.rooms||[],.025,{step:Ql,length:Number(s.length)||0});if(!n)continue;const a=Number(s.angle),r=!(Number.isFinite(a)&&a===n.angle),l=Ju(s.x,s.y,Number.isFinite(a)?a:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,r&&c++,p(l,e,i,r)}}for(const[t,e]of Object.entries(s)){if(!e||"object"!=typeof e)continue;const i=e;if("number"!=typeof i.x||"number"!=typeof i.y)continue;o++;const n=Ku(i.x),a=Ku(i.y),r=Yu(i.x,i.y,n,a);s[t]={...i,x:n,y:a};const l="string"==typeof i.s?i.s:"";p(r,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:a,maxShiftCm:r,maxSpace:l,rotated:c,removedDrafts:h},changed:n>0}}(i.spaces||[],e||{});i.spaces=c.spaces;const h={...c.report};let d=0,u=0,p=0;for(let t=0;t[t.id,t.open_to||[]]),walls:e.walls||[]}),o=ip(e),a=ip(s);if(!o||!a)continue;const r=op(o.rooms),c=op(a.rooms),_=.02*Zl;let g=Xc(zc(e.open_spans),r,c,ql);const m=g.length;g=Yc(g,a.rooms,ql,_),g=g.map(t=>{const e=Fc(t,ql),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=e[2]-e[0],r=e[3]-e[1],l=Math.hypot(a,r)||1,d=c.map(([t,e])=>[t[0],t[1],e[0],e[1]]).filter(t=>{const e=t[2]-t[0],s=t[3]-t[1],c=Math.hypot(e,s)||1;return Math.abs(a*s-r*e)/(l*c)<=1e-6&&Oc(o,t).d<=4*_&&Oc(i,t).d<=4*_&&Oc(n,t).d<=4*_}).sort((t,e)=>Math.hypot(e[2]-e[0],e[3]-e[1])-Math.hypot(t[2]-t[0],t[3]-t[1]))[0];if(h.total++,!d)return t;const u=[[d[0],d[1]],[d[2],d[3]]],p=Nc(i,d,u,Zl,2*_),g=Nc(n,d,u,Zl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Zl)return t;const m=Math.max(Math.hypot(p[0]-i[0],p[1]-i[1]),Math.hypot(g[0]-n[0],g[1]-n[1]));if(m>1e-6*Zl){h.moved++;const t=m/ql;t>h.maxShift&&(h.maxShift=t);const e=m/Zl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ic(p,g,ql)}),g=Yc(g,a.rooms,ql,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Fc(t,ql));g.length?s.open_spans=g:delete s.open_spans,jc(s.rooms||[],a.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ar(e.walls,r,c,Ql,ql);y=np(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=il(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=Pr(y,s.rooms||[],Ql,1,f.map(t=>[t[0]/ql,t[1]/ql,t[2]/ql,t[3]/ql])),d+=Math.max(0,v-y.length),y.length?s.walls=y:delete s.walls;const b=JSON.stringify({spans:s.open_spans||[],links:(s.rooms||[]).map(t=>[t.id,t.open_to||[]]),walls:s.walls||[]});b!==n&&p++}const _=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n;o<6&&_&&(i.model_version=6);const g=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n,m=Number.isInteger(Number(i.model_version))?Number(i.model_version):o;return{config:i,layout:c.layout,report:{...h,modelFrom:o,modelTo:m,migrated:r,glowSpacesMigrated:a.glowSpaces,glowRoomsMigrated:a.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class rp{constructor(t=50){this._undo=[],this._redo=[],this._limit=Math.max(30,Math.floor(t))}get canUndo(){return this._undo.length>0}get canRedo(){return this._redo.length>0}get undoName(){return this._undo[this._undo.length-1]?.name??null}get redoName(){return this._redo[this._redo.length-1]?.name??null}get size(){return this._undo.length}push(t){this._undo.push(t),this._undo.length>this._limit&&this._undo.splice(0,this._undo.length-this._limit),this._redo=[]}undo(){const t=this._undo.pop()??null;return t&&this._redo.push(t),t}redo(){const t=this._redo.pop()??null;return t&&this._undo.push(t),t}clear(){this._undo=[],this._redo=[]}}const lp=new WeakMap;const cp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function hp(t){const e=t.defaultView;if(!e||!e.CSS?.supports?.("mix-blend-mode","screen"))return!1;const i=[128,32,16],s=[16,64,128],n=[9,19,29],o=`\n \n \n \n \n \n `,a=e.URL.createObjectURL(new Blob([o],{type:"image/svg+xml"}));try{const o=await new Promise((t,i)=>{const s=new e.Image,n=e.setTimeout(()=>i(new Error("SVG blend probe timeout")),1e3);s.onload=()=>{e.clearTimeout(n),t(s)},s.onerror=()=>{e.clearTimeout(n),i(new Error("SVG blend probe failed"))},s.src=a}),r=t.createElement("canvas");r.width=4,r.height=1;const l=r.getContext("2d",{willReadFrequently:!0});if(!l)return!1;l.drawImage(o,0,0,4,1);const c=l.getImageData(0,0,4,1).data;return cp(c,i,0)&&cp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&cp(c,s,8)&&cp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const dp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},up=t=>Math.max(0,Math.min(1,t)),pp=(t,e,i)=>t+(e-t)*i,_p=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function gp(t,e){return{centerX:t.x+t.w/2,centerY:t.y+t.h/2,pixelsPerUnit:e>0&&t.w>0?e/t.w:1,viewBox:{...t}}}function mp(t,e,i){const s=Math.max(1e-9,t.pixelsPerUnit),n=Math.max(1e-9,e/s),o=Math.max(1e-9,i/s);return{x:t.centerX-n/2,y:t.centerY-o/2,w:n,h:o}}function fp(t){const e=t.trim(),i=/^rgba?\(\s*([\d.]+)[, ]+([\d.]+)[, ]+([\d.]+)(?:\s*[,/]\s*([\d.]+))?\s*\)$/i.exec(e);if(i)return[Number(i[1]),Number(i[2]),Number(i[3]),null==i[4]?1:Number(i[4])];const s=/^#([0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];return s?[parseInt(s.slice(0,2),16),parseInt(s.slice(2,4),16),parseInt(s.slice(4,6),16),8===s.length?parseInt(s.slice(6,8),16)/255:1]:null}function vp(t,e,i){const s=fp(t),n=fp(e);if(!s||!n)return i<.5?t:e;const o=up(i);return`rgba(${Math.round(pp(s[0],n[0],o))}, ${Math.round(pp(s[1],n[1],o))}, ${Math.round(pp(s[2],n[2],o))}, ${pp(s[3],n[3],o).toFixed(3)})`}function yp(t,e,i){const s=(t=>{const e=up(t);if(0===e||1===e)return e;let i=0,s=1,n=e;for(let t=0;t<12;t++)n=(i+s)/2,_p(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=up((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:yp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(a):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(a),n}cancel(t=!0){this._raf&&this._clock.cancelFrame(this._raf),this._raf=0;const e=this._state;this._state=null,this._token++,e&&t&&(e.phase="settling",e.presented=e.to,this._hooks.frame(e),this._hooks.settled(e))}dispose(){this.cancel(!1)}}const wp="houseplan_card_labs_v1",kp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function xp(t){const e=/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/.exec(String(t||"").trim());if(!e)return null;const i=e.slice(1).map(Number);return i.every(t=>Number.isSafeInteger(t))?i:null}function $p(t,e){for(let i=0;i<3;i++)if(t[i]!==e[i])return t[i]t.split(",")).map(t=>t.trim()).filter(Boolean)}function Pp(t,e,i,s=kp){const n=function(t,e=kp){const i=xp(t),s=new Map;if(!i||!Mp(e))return s;for(const t of e){const e=xp(t.since),n=xp(t.expires);$p(i,e)>=0&&$p(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(Mp(s)?s.map(t=>t.id):[]),a=new Set(function(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e.filter(t=>"string"==typeof t):[]}catch{return[]}}(e).filter(t=>n.has(t)));let r=!1;const l=t=>{if("off"===t)return a.clear(),void(r=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(r=!0,e||!n.has(i)?a.delete(i):a.add(i))};for(const e of Tp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Tp(Cp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Dp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Rp={active:Object.freeze([]),space:""},Ap="",Ip=!1,Fp="";const Ep=new Set;function zp(){if("undefined"==typeof window)return Rp;const t=Pp(window.location,function(){try{return window.localStorage.getItem(wp)}catch{return null}}(),Ap);void 0!==t.persist&&function(t){try{window.localStorage.setItem(wp,t)}catch{}}(t.persist),Rp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Ep)t(Rp);return Rp}function Op(){zp()}function Hp(t){return Ap=t,"undefined"==typeof window?Rp:(Ip||(Ip=!0,window.addEventListener("hashchange",Op),window.addEventListener("popstate",Op)),zp())}const Np=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Lp=64;function Bp(t){return[t.rotDeg,t.tiltDeg,t.xyScale,t.zScale,t.origin[0],t.origin[1]].every(Number.isFinite)&&Math.abs(t.xyScale)>1e-12&&Math.abs(Math.cos(t.tiltDeg*Math.PI/180))>1e-12}function qp(t,e,i=Np){if(!(Bp(i)&&Number.isFinite(t[0])&&Number.isFinite(t[1])&&Number.isFinite(e)))throw new Error("invalid isometric projection input");const s=i.rotDeg*Math.PI/180,n=i.tiltDeg*Math.PI/180,o=t[0]-i.origin[0],a=t[1]-i.origin[1],r=(o*Math.cos(s)-a*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+a*Math.cos(s))*i.xyScale;return[i.origin[0]+r,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function jp(t,e=Np){if(!Bp(e)||!Number.isFinite(t[0])||!Number.isFinite(t[1]))throw new Error("invalid isometric projection input");const i=e.rotDeg*Math.PI/180,s=e.tiltDeg*Math.PI/180,n=(t[0]-e.origin[0])/e.xyScale,o=(t[1]-e.origin[1])/(e.xyScale*Math.cos(s));return[e.origin[0]+n*Math.cos(i)+o*Math.sin(i),e.origin[1]-n*Math.sin(i)+o*Math.cos(i)]}function Wp(t=Np){return`matrix(${function(t=Np){if(!Bp(t))throw new Error("invalid isometric camera");const e=t.rotDeg*Math.PI/180,i=t.tiltDeg*Math.PI/180,s=t.xyScale*Math.cos(e),n=-t.xyScale*Math.sin(e),o=t.xyScale*Math.sin(e)*Math.cos(i),a=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,a,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-a*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Up(t,e=Np){const{rect:i,wallHeight:s}=t,n=t.openingHeight??s,o=t.floorDepth??0;if(!(i.w>=0)||!(i.h>=0)||!Number.isFinite(s)||!Number.isFinite(n)||!Number.isFinite(o)||s<0||n<0||o<0)throw new Error("invalid isometric frame");const a=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],r=Math.max(s,n),l=a.flatMap(t=>[qp(t,-o,e),qp(t,r,e)]),c=l.map(t=>t[0]),h=l.map(t=>t[1]),d=Math.min(...c),u=Math.min(...h);return{x:d,y:u,w:Math.max(...c)-d,h:Math.max(...h)-u}}const Gp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Vp(t){let e=0;for(let i=0;iArray.isArray(t)&&Number.isFinite(t[0])&&Number.isFinite(t[1])).map(t=>[Number(t[0]),Number(t[1])]),i=e[e.length-1];return e.length>1&&e[0][0]===i[0]&&e[0][1]===i[1]&&e.pop(),e}(t);if(i.length<3)return[];const s=!e;return Vp(i)>0===s?i:[...i].reverse()}function Yp(t,e,i){return t.length?`M ${t.map(t=>Gp(qp(t,i,e))).join(" L ")} Z`:""}function Xp(t,e,i){const s=e[1]-t[1],n=-(e[0]-t[0]),o=i.rotDeg*Math.PI/180;return s*Math.sin(o)+n*Math.cos(o)}function Jp(t,e,i=Np){if(!Number.isFinite(e)||e<0)throw new Error("invalid floor edge height");const s=(t||[]).map(t=>(t||[]).map((t,e)=>function(t,e){const i=Kp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Vp(t))>=1e-9)).filter(t=>t.length&&Vp(t[0])>0);s.sort((t,e)=>{const i=t[0][0],s=e[0][0];return i[0]-s[0]||i[1]-s[1]||Math.abs(Vp(e[0]))-Math.abs(Vp(t[0]))});const n=[],o=[];let a=0;for(let t=0;tt.depth-e.depth||t.component-e.component||t.edge-e.edge),{footprintPath:n.join(" "),sides:o,componentCount:s.length,edgeCount:a}}function Zp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Qp=t=>t.every(Number.isFinite);function t_(t,e,i,s){const n=t[0]*i,o=t[1]*s,a=e*Math.PI/180;return[n*Math.cos(a)-o*Math.sin(a),n*Math.sin(a)+o*Math.cos(a)]}function e_(t,e,i,s,n,o,a){const r=t.flipH?-1:1,l=t.flipV?-1:1,c=function(t,e){return[t[0]+e[0],t[1]+e[1]]}([t.x+t.face.ox,t.y+t.face.oy],t_(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:t_(s,t.angle,r,l),quarterVector:t_([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const i_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function s_(t,e,i=Np){const s=Math.max(0,Math.min(1,Number.isFinite(e)?e:0));return t.leaves.map(e=>{const n=function(t,e){const i=t.turnDeg*e*Math.PI/180;return[t.hinge[0]+t.closedVector[0]*Math.cos(i)+t.quarterVector[0]*Math.sin(i),t.hinge[1]+t.closedVector[1]*Math.cos(i)+t.quarterVector[1]*Math.sin(i)]}(e,s),o=qp(e.hinge,e.bottom,i),a=qp(n,e.bottom,i),r=qp(n,e.top,i),l=qp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${i_(o)} L ${i_(a)} L ${i_(r)} L ${i_(l)} Z`,shadowD:`M ${i_(qp(e.hinge,0,i))} L ${i_(qp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const n_={window:120,door:90,passage:90,gate:300};function o_(t){return n_[t]}function a_(t,e){const i=[t[0],t[1]],s=[e[0],e[1]];return function(t,e){return t[0]-e[0]||t[1]-e[1]}(i,s)<=0?{a:i,b:s}:{a:s,b:i}}function r_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=a_(t.a,t.b);if(Math.hypot(s.b[0]-s.a[0],s.b[1]-s.a[1])<=1e-9)return;const n=function(t,e){const i=t=>(Math.abs(t)<=5e-10?0:Math.round(1e6*t)/1e6).toFixed(6);return`${i(t[0])},${i(t[1])}>${i(e[0])},${i(e[1])}`}(s.a,s.b),o=e.get(n);if(o)return o.physicalHalfWidth=Math.max(o.physicalHalfWidth,t.half||0),o.sourceOrder=Math.min(o.sourceOrder,i),void(t.partitionHost&&(o.partitionHost&&o.partitionHost.id!==t.partitionHost.id?o.ambiguousPartitionHost=!0:o.partitionHost=t.partitionHost));e.set(n,{segmentKey:n,a:s.a,b:s.b,physicalHalfWidth:Math.max(0,t.half||0),sourceOrder:i,...t.partitionHost?{partitionHost:t.partitionHost}:{}})}),[...e.values()]}function l_(t,e){if(Math.abs(t.distance-e.distance)>1e-9)return t.distance-e.distance;if(Math.abs(t.perpendicular-e.perpendicular)>1e-9)return t.perpendicular-e.perpendicular;return(t.target.segmentKeye.target.segmentKey?1:0)||t.target.sourceOrder-e.target.sourceOrder}function c_(t){const e=r_(t.intervals).map(e=>{const i=function(t,e){const i=e.b[0]-e.a[0],s=e.b[1]-e.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,r=(t[0]-e.a[0])*o+(t[1]-e.a[1])*a,l=Math.max(0,Math.min(n,r)),c=e.a[0]+l*o,h=e.a[1]+l*a;return{along:l,length:n,x:c,y:h,distance:Math.hypot(t[0]-c,t[1]-h),perpendicular:Math.abs((t[0]-e.a[0])*a-(t[1]-e.a[1])*o)}}(t.pointer,e);return{target:e,...i,envelope:Math.max(t.baseTolerance,e.physicalHalfWidth+t.bodyPointerPadding)}}).filter(t=>t.distance<=t.envelope+1e-9).filter(e=>!function(t,e,i,s,n){const o=e.b[0]-e.a[0],a=e.b[1]-e.a[1],r=Math.hypot(o,a);if(!(r>1e-9))return!1;const l=o/r,c=a/r;for(const o of i){if(!o.open&&o.kind)continue;const i=a_(o.a,o.b),a=i.b[0]-i.a[0],r=i.b[1]-i.a[1],h=Math.hypot(a,r);if(!(h>1e-9))continue;const d=a/h,u=r/h;if(Math.abs(l*u-c*d)>1e-6)continue;if(Math.abs((i.a[0]-e.a[0])*c-(i.a[1]-e.a[1])*l)>n)continue;const p=(t[0]-i.a[0])*d+(t[1]-i.a[1])*u,_=1e-9;if(!(p<=_||p>=h-_)&&Math.abs((t[0]-i.a[0])*u-(t[1]-i.a[1])*d)<=s+1e-9)return!0}return!1}(t.pointer,e.target,t.intervals,e.envelope,Math.max(1e-9,Math.min(t.baseTolerance,.04*t.gridStep)))),i=e.filter(e=>!!e.target.partitionHost&&t.renderedLength+2*e.target.physicalHalfWidth>e.length+1e-9).sort(l_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(l_);let n=s[0];if(!n)return{candidate:null,jambBlockedTarget:i[0]?.target||null};const o=s.filter(t=>Math.abs(t.distance-n.distance)<=1e-9&&Math.abs(t.perpendicular-n.perpendicular)<=1e-9),a=o.filter(t=>t.target.partitionHost);if(a.length){if(1!==new Set(a.map(t=>t.target.partitionHost.id)).size||a.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=a[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),r=e/s,l=i/s;if(!o.every(e=>{const i=e.target.b[0]-e.target.a[0],s=e.target.b[1]-e.target.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,c=Math.abs(r*a-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*r);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:r,length:l}=n,c=r.b[0]-r.a[0],h=r.b[1]-r.a[1],d=c/l,u=h/l,p=r.partitionHost?r.physicalHalfWidth:0,_=Math.min(Math.max(0,t.renderedLength)/2+p,l/2);let g=n.along;const m=Math.max(t.gridStep,1e-9),f=l/2;g=Math.abs(g-f)<=m/2?f:Math.round(g/m)*m,g=Math.max(_,Math.min(l-_,g));const v=r.a[0]+d*g,y=r.a[1]+u*g,b=Math.max(0,t.renderedLength)/2,w=g-b,k=g+b,x=Math.max(0,w),$=Math.max(0,l-k),S=[r.a[0]+d*(w-x/2),r.a[1]+u*(w-x/2)],M=[r.a[0]+d*(k+$/2),r.a[1]+u*(k+$/2)];let C=180*Math.atan2(h,c)/Math.PI;C>=90?C-=180:C<-90&&(C+=180);const D=Math.abs(g-f)<=1e-9;return{candidate:{presetRevision:t.preset.revision,geometryRevision:t.geometryRevision,pointer:[t.pointer[0],t.pointer[1]],type:t.preset.type,lengthCm:t.preset.lengthCm,flipH:t.preset.flipH,flipV:t.preset.flipV,x:v,y:y,angle:C,renderedLength:t.renderedLength,target:r,...r.partitionHost?{host:{...r.partitionHost,t:l>0?g/l:0}}:{},measure:{labels:[{distance:x,midpoint:S},{distance:$,midpoint:M}],guide:D?{x:v,y:y,angle:C}:null}},jambBlockedTarget:null}}function h_(t,e,i,s,n=1e-6){return t.presetRevision===i&&t.geometryRevision===s&&Math.hypot(t.pointer[0]-e[0],t.pointer[1]-e[1])<=n}const d_="1.65.0-beta.7",u_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},p_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},__=2e3,g_=1e3,m_=1500,f_=t=>{const e=String(t??"").trim().replace(",",".");if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e))return null;const i=Number(e);return Number.isFinite(i)?i:null},v_=(t,e)=>{if(!t.has(e))return{hit:!1};const i=t.get(e);return t.delete(e),t.set(e,i),{hit:!0,value:i}},y_=(t,e,i,s)=>{for(t.delete(e),t.set(e,i);t.size>s;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},b_=new Map;let w_=0;const k_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let x_=1e4;const $_="houseplan_card_layout_v1",S_="houseplan_card_cfg_v1",M_="houseplan_card_zoom_v1",C_="houseplan_card_nav_v1",D_="houseplan_card_kiosk_v1",T_="houseplan_card_view_v1",P_=1e3,R_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],A_=(t,e)=>{const i=Math.min(t.x,e.x),s=Math.min(t.y,e.y);return{x:i,y:s,w:Math.max(t.x+t.w,e.x+e.w)-i,h:Math.max(t.y+t.h,e.y+e.h)-s}},I_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),F_=2e3,E_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},z_=t=>{history.pushState(null,"",t),E_(window,"location-changed",{replace:!1})},O_=(t,e)=>{let i,s=null;const n=(...n)=>{clearTimeout(i),s=n,i=window.setTimeout(()=>{i=void 0;const e=s;s=null,e&&t(...e)},e)};return n.flush=()=>{if(void 0===i)return;clearTimeout(i),i=void 0;const e=s;s=null,e&&t(...e)},n.cancel=()=>{clearTimeout(i),i=void 0,s=null},n.pending=()=>void 0!==i,n},H_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class N_ extends ht{constructor(){super(...arguments),this._space="f1",this._layout={},this._serverStorage=!1,this._loadOk=!1,this._serverCanWrite=null,this._loading=!1,this._loadTries=0,this._serverCfg=null,this._cfgRev=0,this._cfgContentFingerprint="",this._unsubCfg=null,this._unsubLayout=null,this._unsubVirtual=null,this._liveSyncAttempt=null,this._liveSyncGeneration=0,this._liveSyncConnection=null,this._layoutRev=0,this._layoutContentFingerprint="",this._virtualLights=_n(null),this._canOptimizeUndo=!1,this._undoKind=null,this._devices=[],this._regSignature="",this._defPos={},this._newSyncKey="",this._tip=null,this._hoverRoom=null,this._pointerModality=new Nu(this,()=>this._syncPointerHoverTargets()),this._devicePressAnimations=new Map,this._selId=null,this._toast="",this._mode="view",this._pendingNavMode=null,this._decorTool="select",this._decorStyle={...ir},this._decorDraft=null,this._decorMove=null,this._decorSel=null,this._decorEraseConfirm=null,this._decorTextDialog=null,this._decorShapeDialog=null,this._backdropDialog=null,this._decorTextSelection={start:0,end:0},this._furnPalette=null,this._dtBox=null,this._dtDrag=null,this._bdDrag=null,this._slide="",this._reducedMotion=!1,this._onMotionChange=t=>{this._reducedMotion=t.matches,this._cancelDevicePressFeedback(),t.matches&&this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:t.matches&&this._modeTransition.active&&this._cancelModeTransition(!0),this.requestUpdate()},this._editorChromeMode="plan",this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest=0,this._modeTransitionTargetZoom=1,this._modeTransitionEditorCamera=null,this._modeTransition=new bp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Uu({root:()=>this.renderRoot,requestUpdate:()=>this.requestUpdate(),updateComplete:()=>this.updateComplete,clearTip:()=>{this._tip=null}}),this._editorSecondaryCopy={groupActive:(t,e)=>this._t("editor.group_active",{group:t,item:e}),openGroup:t=>this._t("editor.open_group",{group:t}),disabledAction:(t,e)=>this._t("editor.disabled_action",{action:t,reason:e})},this._tool="draw",this._geometryHistory=new rp(50),this._wallDialog=null,this._drawWallField=null,this._activeDraftId=null,this._resumeDraftBySpace={},this._physicalSel=null,this._physicalDialog=null,this._partitionDeleteDialog=null,this._physicalDrag=null,this._physicalRotate=null,this._physicalLastTap=null,this._physicalPickCycle=null,this._wallUnionCache=null,this._isoGeometryCache=new Map,this._isoFallback=new Set,this._openingTunnelCache=null,this._openingWallIndexCache=new Map,this._openingPlacementIntervalsCache=null,this._planSnapGeometryCache=null,this._planStructuralGeometryCache=null,this._physicalBodiesCache=null,this._lightPhysicalBodiesCache=null,this._cleanFloorCache=new Map,this._glowClipCache=new Map,this._lightBarrierCache=null,this._glowFeatherUnits=null,this._glowRenderedSources=new Map,this._glowLastAppearance=new Map,this._glowEnteringSources=new Set,this._glowEnterRafs=new Map,this._glowFadeTimers=new Map,this._glowFeatherSuspendUntil=0,this._glowFeatherResumeTimer=0,this._glowSourceSeq=0,this._glowScreenBlend=!1,this._duplicateColumnId=null,this._duplicateColumnTimer=0,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._path=[],this._cursorPt=null,this._planSnapHover=null,this._mergeSel=null,this._openingPreset=null,this._openingRebindId=null,this._openingPresetRevision=0,this._openingHoverCandidate=null,this._openingJambBlockCm=null,this._openingDialog=null,this._openingInfo=null,this._opDrag=null,this._opMeasure=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryPointerType="mouse",this._boundaryRestoreGuard=null,this._boundaryTargetMemo=null,this._boundaryPreviewMemo=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._wallFaceGraphCache=[],this._areaSel="",this._nameSel="",this._roomDialog=!1,this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1,this._zoom=1,this._view=null,this._zoomBySpace={},this._viewModeSnap=null,this._pointers=new Map,this._panStart=null,this._panLock=null,this._pinchStart=null,this._suppressClick=!1,this._touchContacts=new Map,this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._connectedPath="",this._routeDepartureHandled=!1,this._onLocationChanged=()=>{this._connectedPath&&location.pathname!==this._connectedPath?this._leaveCardRoute():location.pathname===this._connectedPath&&(this._routeDepartureHandled=!1)},this._touchGestureGuard={capture:!0,handleEvent:t=>this._guardTouchGesture(t)},this._hdrH=118,this._booting=!0,this._bootFading=!1,this._bootSettling=!1,this._bootSettleRaf=0,this._bootLastH=-1,this._bootStart=0,this._bootLastChange=0,this._bootSoft=!1,this._tapConfirm=null,this._onboardingShown=!1,this._rulesDialog=null,this._alignDialog=null,this._settingsDialog=null,this._backupExportDialog=null,this._backupImportDialog=null,this._sunRaysCache=null,this._dayCycleTimer=0,this._dayCycleClockKey="",this._compassDrag=!1,this._importDialog=null,this._importQueue=[],this._importTotal=0,this._rulesCompiledSrc="",this._infoCard=null,this._nativeMoreInfoEntity=null,this._markerDialog=null,this._spaceDialog=null,this._keyHandler=t=>this._onKey(t),this._warmVp=null,this._warmVpArmed=!1,this._warmLongReturn=!1,this._warmRevivePending=!1,this._warmGen=++w_,this._warmKey=null,this._warmSlot=null,this._hashApplied=!1,this._navApplied=!1,this._labs={active:Object.freeze([]),space:""},this._viewPreference={},this._renderProjection="flat",this._kioskScale={icon:1,font:1},this._kioskDialog=!1,this._activityRt=new Map,this._vacRt=new Map,this._vacViewKey="",this._vacLastView=null,this._vacRaf=0,this._vacSrvTrails={},this._vacJumpOnce=!1,this._continuity=this._newContinuityController(),this._continuityHistory=[],this._continuityEpoch=0,this._continuityDataReady=!0,this._continuityPaintToken=-1,this._continuityDisposed=!1,this._renderSnapshotAt=Date.now(),this._hassSequence=0,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotSequence=-1,this._capturedSnapshotDevices=null,this._capturedSnapshotLayout=null,this._capturedSnapshotActivity="",this._capturedSnapshotConfigEpoch=-1,this._capturedSnapshotVirtual="",this._lastValidStageSize=null,this._pendingRefitSize=null,this._refitRaf=0,this._pageVisibility=t=>{if(this._continuity.visibility(t),this._dayCycleVisibility(t),"hidden"===t.kind)return this._clearTransientHover(!0),this._cancelDevicePressFeedback(),void(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0));if(this._vacJumpOnce=!0,!t.long){const t=Date.now();let e=!1;for(const i of this._activityRt.values())!i.flashKind||(i.expiresAt||i.flashTs+Fu)>t||(i.flashTs=0,i.flashKind=null,i.expiresAt=0,e=!0);return void(e&&this.requestUpdate())}Date.now()-this._renderSnapshotAt>1e3&&this._continuity.note("device-snapshot-stale"),this._continuityDataReady=!1,this._continuityPaintToken=-1,this._resumeSettling=!0,this._loading?this.requestUpdate():this._loadFromServer()},this._resumeSettling=!1,this._viewportInvalidAt=0,this._vacFit=null,this._vacAllCamerasFor=null,this._vacAllCameraCache=null,this._vacCalConfirm=null,this._kioskDots=!1,this._cyclePausedUntil=0,this._swipeStart=null,this._lastTap=0,this._onLabsSnapshot=t=>{const e=this._effectiveProjection();this._labs=t;const i=this._effectiveProjection();this._convertProjectionView(e,i),this.requestUpdate()},this._onHashChange=()=>{if(this._hasFixedFloor)return;const t=this._hashSpace();if(t&&this._model.find(e=>e.id===t)&&t!==this._space){if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._selId=null,this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),this.requestUpdate()}},this._drag=null,this._rlResize=null,this._holdFired=!1,this._retryContinuity=()=>{this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.retry(this._continuity.recoveryReason||"plan"),this._loading||this._loadFromServer()},this._cfgEpoch=0,this._modelCache=null,this._emptySpaceStateActive=!1,this._decorSnapCache=null,this._markerPreviewMemo=null,this._markerPreviewDevicesMemo=null,this._showHidden=!1,this._connHooked=null,this._connectionWasLost=!1,this._haRegistryConnection=null,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._onHaRegistryUpdate=()=>{const t=An(this.hass);t.revision===this._haRegistryRev&&this._devices.length||(this._haRegistryRev=t.revision,this._planHassMemo=null,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate())},this._onConnReady=()=>{if(this._loadTries=0,clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,function(t){const e=Mn(t);e&&(Tn(t,e),Pn(t,e))}(this.hass),this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(this._onConnReady,400));!this._connectionWasLost&&this._continuity.hasCompleteFrame?this._beginContinuityCandidate("connection-ready",!1,"plan"):(this._continuityDataReady=!1,this._continuityPaintToken=-1),this._loading||this._loadFromServer()},this._onConnLost=()=>{this._booting&&!this._continuity.hasCompleteFrame||(this._connectionWasLost=!0,this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.connectionLost())},this._signer=new ah(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=O_(()=>{if(this._serverStorage){const t=[...this._dirtyPos];this._dirtyPos.clear();for(const e of t){const t=this._layout[e];t&&(this._sentPos.set(e,t),this.hass.callWS({type:"houseplan/layout/update",device_id:e,pos:t}).then(t=>this._noteLayoutRev(t)).catch(t=>this._showToast(this._t("toast.pos_save_failed",{err:this._errText(t)}))).finally(()=>{this._sentPos.get(e)===t&&this._sentPos.delete(e)}))}this._cacheSnapshot()}else localStorage.setItem($_,JSON.stringify(this._layout))},600),this._frame=null,this._showFar=!1,this._writesPending=0,this._writeChain=Promise.resolve(),this._undoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.undo();t&&(this._applyGeometryState(t.before)?this._showToast(this._t("history.undone",{name:t.name})):this._geometryHistory.clear())},this._redoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.redo();t&&(this._applyGeometryState(t.after)?this._showToast(this._t("history.redone",{name:t.name})):this._geometryHistory.clear())},this._saveConfigDebounced=O_(()=>{this._serverCfg&&this._writeConfig().catch(t=>{"conflict"===t?.code?(this._showToast(this._t("toast.conflict")),this._cancelPath(),this._reloadConfigOnly(!0)):this._showToast(this._t("toast.cfg_save_failed",{err:this._errText(t)}))})},500),this._draftSegmentCms=[],this._closingWallCm=null,this._savePhysicalDialog=()=>{const t=this._physicalDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=f_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?$l:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?$l:100;if(!Number.isFinite(n)||n<1||n>o)return void this._showPhysicalRange(o);if("column"===t.kind){const e=i.wall_columns.find(e=>e.id===t.id);if(!e)return;const s=f_(t.angle||"0");if("circle"!==t.shape&&(null==s||s<0||s>=90))return void this._showToast(this._t("toast.physical_angle"));const o="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:n}:{id:t.id,shape:"square",center:e.center,cm:n,angle:s};if(i.wall_columns.some(e=>e.id!==t.id&&Bl(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const a=this._geometrySnapshot();if("partition"===t.kind){const i=(e.partitions||[]).find(e=>e.id===t.id);i&&(i.cm=n)}else if("column"===t.kind){const i=(e.wall_columns||[]).find(e=>e.id===t.id);i&&(i.cm=Sl(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=f_(t.angle||"0"):delete i.angle)}else{const i=(e.room_drafts||[]).find(e=>e.id===t.id);i?.segments?.[t.segment||0]&&(i.segments[t.segment||0].cm=n)}this._recordGeometry(this._t("history.physical_edit"),a),this._physicalDialog=null,this._saveConfig()},this._deletePhysicalSelection=()=>{const t=this._physicalSel,e=this._curSpaceCfg;if(!t||!e)return;if("draft"===t.kind)return void this._deleteDraftWhole();const i=this._geometrySnapshot();if("partition"===t.kind){const i=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(i.length)return void(this._partitionDeleteDialog={id:t.id,openings:i.map(t=>JSON.parse(JSON.stringify(t)))})}const s="partition"===t.kind?"partitions":"column"===t.kind?"wall_columns":"room_drafts";e[s]=(e[s]||[]).filter(e=>e.id!==t.id),e[s].length||delete e[s],this._activeDraftId===t.id&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._confirmPartitionDelete=()=>{const t=this._partitionDeleteDialog,e=this._curSpaceCfg;if(!t||!e)return;const i=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this._partitionDeleteDialog=null,this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftWhole=()=>{const t="draft"===this._physicalDialog?.kind?this._physicalDialog.id:"draft"===this._physicalSel?.kind?this._physicalSel.id:null,e=this._curSpaceCfg;if(!t||!e||!confirm(this._t("confirm.delete_draft")))return;const i=this._geometrySnapshot();e.room_drafts=(e.room_drafts||[]).filter(e=>e.id!==t),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===t&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftSegment=()=>{const t=this._physicalDialog,e=this._curSpaceCfg;if(!t||"draft"!==t.kind||!e)return;if(!confirm(this._t("confirm.delete_draft_segment")))return;const i=(e.room_drafts||[]).findIndex(e=>e.id===t.id);if(i<0)return;const s=e.room_drafts[i],n=Math.max(0,Math.min(s.segments.length-1,t.segment||0)),o=[],a=s.points.slice(0,n+1),r=s.points.slice(n+1);if(a.length>=2&&o.push({id:s.id,points:a,segments:s.segments.slice(0,n)}),r.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:r,segments:s.segments.slice(n+1)}),2===o.length&&e.room_drafts.length>=200)return void this._showToast(this._t("toast.physical_limit"));const l=this._geometrySnapshot();e.room_drafts.splice(i,1,...o),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===s.id&&this._cancelPath(),this._physicalDialog=null,this._physicalSel=o.length?{kind:"draft",id:o[0].id}:null,this._recordGeometry(this._t("history.draft_segment_delete"),l),this._saveConfig()},this._rebindPartitionOpening=()=>{const t=this._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingRebindId=e,this._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this._openingPresetRevision},this._openingDialog=null,this._openingHoverCandidate=null)},this._keepClosedAsPartitions=()=>{if(this._wallFaceBatch)return void this._decideWallFace(!1);if(!this._contourClosed||this._pendingSplit||!this._curSpaceCfg)return;const t=this._curSpaceCfg,e=this._path.slice(0,-1);if((t.partitions||[]).length+e.length>F_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r];t.partitions||=[];const n=Date.now().toString(36);for(let i=0;it.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.contour_to_partitions"),i),this._saveConfig(),this._roomDialog=!1,this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null},this._toggleServerPlans=async()=>{const t=this._spaceDialog;if(t)if(t.pickSaved)this._spaceDialog={...t,pickSaved:!1};else{this._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.hass.callWS({type:"houseplan/plans/list"}),e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:[],savedBusy:!1}),this._showToast(this._t("toast.plans_list_failed",{err:this._errText(t)}))}}},this._aspectJob=null,this._dayCycleTick=()=>{if(!this.isConnected||"hidden"===this.ownerDocument.visibilityState)return;const t=this._dayCycleState();if(!t)return this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),void(this._dayCycleClockKey="");const e=La(t);e!==this._dayCycleClockKey&&(this._dayCycleClockKey=e,this.requestUpdate())},this._sunShown=!1,this._sunOut=!1,this._sunOutTimer=0,this._openSettingsDialog=()=>{if(!this._norm)return;const t=this._glowRadiusCm,e=this._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this._settingsDialog={colors:JSON.parse(JSON.stringify(this._fillColors)),glowRadius:e,bgColor:cs(this._settings,{bgColor:null})||null,northDeg:Ya(this._settings,{}),bgMode:Xa(this._settings,{}),sunRays:Ja(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=ap(this._serverCfg,this._layout||{}),i=Math.ceil(10*e.report.maxShiftCm)/10,s=t.find(t=>null!=t?.id&&String(t.id)===e.report.maxSpace),n=t.length>1&&s?String(s.title||s.id):"";this._alignDialog={report:e.report,config:e.config,layout:e.layout,cm:i,where:n,changed:e.changed,busy:!1}},this._optimizeUndoBusy=!1,this._openBackupExport=()=>{this._settingsDialog=null,this._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._openRulesDialog=()=>{if(!this._norm)return;const t=this._settings.icon_rules,e=(t&&t.length?t:Xt).map(t=>({...t}));this._rulesDialog={rules:e,test:"",busy:!1}},this._climateCache=null,this._gearPtCache=new WeakMap}get _canEdit(){return!!this._norm&&(!0===this._serverCanWrite||!1!==this._serverCanWrite&&!0===this.hass?.user?.is_admin)}get _kiosk(){return!!this._config?.kiosk}_showKioskDots(){this._kioskDots=!0,clearTimeout(this._kioskDotsTimer),this._kioskDotsTimer=window.setTimeout(()=>this._kioskDots=!1,2500)}get _modeTransitionBusy(){return this._modeTransitionPreparing||this._modeTransition.active}_cssColor(t,e){const i=String(t||"").trim();if(!i)return e;const s=document.createElement("span");s.style.cssText=`position:absolute;visibility:hidden;color:${i}`,this.renderRoot.append(s);const n=getComputedStyle(s).color||e;return s.remove(),n}_currentModeVisual(t=this._mode){const e=this._modeTransition.presented||this._modeTransitionVisual;if(e)return{...e,viewport:{...e.viewport,viewBox:{...e.viewport.viewBox}}};const i=this._stageEl;if(!i||i.clientWidth<=0||i.clientHeight<=0)return null;const s=this.renderRoot.querySelector(".editorchrome"),n=this._viewOr(this._baseVb()),o=this.renderRoot.querySelector(".hp-paper"),a=this.renderRoot.querySelector(".hp-backdrop"),r=this.renderRoot.querySelector(".zoomwrap"),l=r?getComputedStyle(r).filter:"",c=Number(/brightness\(([^)]+)\)/.exec(l)?.[1]);return{presentedMode:t,editorChromeHeight:"view"===t?0:s?.getBoundingClientRect().height||0,stageWidth:i.clientWidth,stageHeight:i.clientHeight,viewport:gp(n,i.clientWidth),stageColor:getComputedStyle(i).backgroundColor||"rgb(255, 255, 255)",paperColor:o?getComputedStyle(o).fill:"rgb(255, 255, 255)",sceneBrightness:Number.isFinite(c)?c:1,architectureOpacity:"decor"===t?.35:1,backdropOpacity:a&&Number(getComputedStyle(a).opacity)||1,viewWeight:"view"===t?1:0,editorWeight:"view"===t?0:1,toolbarContentOpacity:"view"===t?0:1}}_viewForModeTarget(t,e,i,s,n){const o=zi(this._baseVb(),s/Math.max(1,n)),a=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),r=o.w/a,l=o.h/a,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-r/2,y:h-l/2,w:r,h:l},o)}_targetStageColor(t){return"view"!==t?"rgb(255, 255, 255)":this._cssColor(this._stageBg(this._spaceDisplayForRender()),this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"))}_targetPaperColor(t){return"view"===t&&this._spaceModel()?.bg?this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"):"rgb(255, 255, 255)"}_targetBrightness(t){return 1}_applyModeTransitionFrame(t){t.targetMode===this._mode&&(this._modeTransitionVisual=t.presented,this._view={...t.presented.viewport.viewBox},this.requestUpdate())}_settleModeTransition(t){if(t.targetMode!==this._mode)return;const e=this._modeTransitionRequest;this._view={...t.to.viewport.viewBox},this._zoom=this._modeTransitionTargetZoom,this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._lastValidStageSize=[t.to.stageWidth,t.to.stageHeight],"view"===this._mode&&(this._saveZoom(),this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate(),this.updateComplete.then(()=>{if(!this.isConnected||e!==this._modeTransitionRequest||this._modeTransitionBusy||t.targetMode!==this._mode)return;const i=this._stageEl;if(i&&i.clientWidth>0&&i.clientHeight>0&&(Math.abs(i.clientWidth-t.to.stageWidth)>.5||Math.abs(i.clientHeight-t.to.stageHeight)>.5)){const t=this._view;this._lastValidStageSize=[i.clientWidth,i.clientHeight],this._applyView(this._zoom,t?t.x+t.w/2:void 0,t?t.y+t.h/2:void 0),this.requestUpdate()}const s=this.renderRoot.activeElement;(!s||!s.isConnected||!!s.closest?.(".editorchrome, .stage"))&&this.renderRoot.querySelector(".modetab.active")?.focus?.({preventScroll:!0})})}_cancelModeTransition(t=!0){const e=!!this._modeTransition.state;this._modeTransitionRequest++,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransition.cancel(t),t&&e||(this._modeTransitionVisual=null)}_adoptMode(t){this._cancelModeTransition(!1),this._mode=t,"view"!==t&&(this._editorChromeMode=t)}_commitViewModeAtomic(t,e,i,s){if(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this._zoom=e,t){const n=this._stageEl?.clientWidth||t.stageWidth,o=Math.max(1,t.stageHeight+t.editorChromeHeight);this._view=this._viewForModeTarget(e,i,s,n,o),this._lastValidStageSize=[n,o]}else this._view=null;this._viewModeSnap=null,this._modeTransitionEditorCamera=null,this._saveZoom(),this.requestUpdate()}_prepareModeTransition(t,e,i,s,n,o){this.updateComplete.then(()=>{if(!this.isConnected||t!==this._modeTransitionRequest||this._mode!==i)return void(t===this._modeTransitionRequest&&(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this.requestUpdate()));const a=this.renderRoot.querySelector(".editorchrome"),r=a?.querySelector(".editorchrome-inner"),l="view"===i?0:r?.scrollHeight||r?.getBoundingClientRect().height||0,c=Math.max(1,e.stageHeight+e.editorChromeHeight),h=Math.max(1,c-l),d=this._stageEl?.clientWidth||e.stageWidth;if(d<=0||h<=0)return this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._applyView(s,n,o),void this.requestUpdate();const u=this._viewForModeTarget(s,n,o,d,h),p={presentedMode:i,editorChromeHeight:l,stageWidth:d,stageHeight:h,viewport:gp(u,d),stageColor:this._targetStageColor(i),paperColor:this._targetPaperColor(i),sceneBrightness:this._targetBrightness(i),architectureOpacity:"decor"===i?.35:1,backdropOpacity:"decor"===i&&"backdrop"!==this._decorTool?.5:1,viewWeight:"view"===i?1:0,editorWeight:"view"===i?0:1,toolbarContentOpacity:"view"===i?0:1};this._modeTransitionPreparing=!1;const _=this._modeTransitionForceAtomic;this._modeTransitionForceAtomic=!1,this._modeTransition.start(e,p,i,this._reducedMotion||_?0:220)})}get _hasFixedFloor(){return!!this._config&&Object.prototype.hasOwnProperty.call(this._config,"floor")}_fixedFloorState(t=this._model,e=this._loadOk){const i=this._config?.floor,s=function(t){if(!t.hasFloor)return{kind:"absent"};const e=t.floor;if("string"==typeof e)return e.length?t.spaceIds.includes(e)?{kind:"valid",id:e,source:"id"}:{kind:"invalid",reason:"unknown-id",value:e}:{kind:"invalid",reason:"empty-id",value:e};if("number"==typeof e){if(!Number.isFinite(e))return{kind:"invalid",reason:"non-finite-index",value:e};if(!Number.isInteger(e))return{kind:"invalid",reason:"fractional-index",value:e};if(e<0)return{kind:"invalid",reason:"negative-index",value:e};const i=t.spaceIds[e];return void 0===i?{kind:"invalid",reason:"out-of-range-index",value:e}:{kind:"valid",id:i,source:"index"}}return{kind:"invalid",reason:"invalid-type",value:e}}({spaceIds:t.map(t=>t.id),hasFloor:this._hasFixedFloor,floor:i});return!this._hasFixedFloor||e?s:"number"==typeof i?"valid"===s.kind||"invalid"===s.kind&&"out-of-range-index"===s.reason?{kind:"pending",value:i}:s:"valid"===s.kind||"invalid"===s.kind&&"unknown-id"!==s.reason?s:{kind:"pending",value:i}}_canCommitSpace(t,e=!1){if(e||!this._hasFixedFloor)return!0;const i=this._fixedFloorState();return"valid"===i.kind&&i.id===t}_commitSpace(t,e=!1){return!!this._canCommitSpace(t,e)&&(t!==this._space&&(this._clearTransientHover(!0),this._cancelDevicePressFeedback()),this._space=t,!0)}_slideTo(t,e){if(t===this._space)return!0;if(!this._canCommitSpace(t))return!1;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return!1;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;return this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._selId=null,this._physicalSel=null,this._editorSecondary.closeForNavigation(),this._physicalDialog=null,this._physicalDrag=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),i||(this._slide=e,clearTimeout(this._slideTimer),this._slideTimer=window.setTimeout(()=>{this._slideTimer=void 0,this._slide="",this.requestUpdate()},190),this.requestUpdate()),!0}_pickSpace(t){if(t===this._space)return;const e=this._model.map(t=>t.id),i=e.indexOf(this._space),s=e.indexOf(t);this._navApplied=!0,this._showFar=!1,this._frame=null,this._slideTo(t,i>=0&&s0&&Date.now()>=this._cyclePausedUntil&&this._model.length>1&&this._zoom<=1.001){const t=this._model.map(t=>t.id),e=t.indexOf(this._space);this._slideTo(t[(e+1)%t.length],"left"),this._showKioskDots()}}_syncCycleTimer(){clearInterval(this._cycleTimer),this._cycleTimer=void 0,this.isConnected&&!this._hasFixedFloor&&this._config?.kiosk&&Number(this._config.cycle)>0&&(this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle)))}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new ih(()=>{this._resumeSettling="steady"!==this._continuity.state,this._continuityEpoch++,this.isConnected&&this.requestUpdate()})}get _labsIso(){return this._labs.active.includes("iso")}get _desiredProjection(){return"view"===this._mode&&this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat"}_saveViewPreference(){try{localStorage.setItem(T_,JSON.stringify(this._viewPreference))}catch{}}_logicalViewCenter(t){const e=this._view;if(!e)return null;const i=[e.x+e.w/2,e.y+e.h/2],s="iso"===t?jp(i):i;return{x:s[0],y:s[1]}}_convertProjectionView(t,e){if(t===e)return;const i=this._logicalViewCenter(t);this._view=null;const s=i?"iso"===e?qp([i.x,i.y],0):[i.x,i.y]:null;this._applyView(this._zoom,s?.[0],s?.[1]),this._warmPatch({vp:this._warmViewportState()}),this.requestUpdate()}_setProjection(t){if(!this._labsIso||"view"!==this._mode)return;const e=this._effectiveProjection();if(this._viewPreference={...this._viewPreference,[this._space]:t},"iso"===t){const t=this._isoSceneKey();t&&this._isoFallback.delete(t)}this._saveViewPreference();const i=this._effectiveProjection();this._convertProjectionView(e,i)}_hashSpace(){return Dp(window.location.hash||"")}connectedCallback(){this._connectedPath=location.pathname,this._routeDepartureHandled=!1,window.addEventListener("location-changed",this._onLocationChanged),window.addEventListener("popstate",this._onLocationChanged),this._continuityDisposed&&(this._continuity=this._newContinuityController(),this._continuityDisposed=!1,this._continuityPaintToken=-1);const t=(e=this.ownerDocument,lp.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=th(this.ownerDocument,this._pageVisibility),super.connectedCallback(),this._pointerModality.connect(this.ownerDocument.defaultView);const i=this.ownerDocument.defaultView?.MutationObserver;i&&(this._pointerHoverObserver=new i(t=>{for(const e of t)for(const t of e.addedNodes)this._syncPointerHoverSubtree(t)}),this._pointerHoverObserver.observe(this.renderRoot,{childList:!0,subtree:!0})),this._motionMedia=window.matchMedia?.("(prefers-reduced-motion: reduce)"),this._reducedMotion=!!this._motionMedia?.matches,this._motionMedia?.addEventListener?.("change",this._onMotionChange),function(t){const e=lp.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=hp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),lp.set(t,i),i.promise}(this.ownerDocument).then(t=>{t!==this._glowScreenBlend&&(this._glowScreenBlend=t,this.isConnected&&this.requestUpdate())}),this.hass&&this._ensureHaRegistryAuthority(),window.addEventListener("keydown",this._keyHandler),this._signer.start(()=>this.hass,()=>Rs(this._serverCfg)),this._syncCycleTimer(),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Ep.add(e);const i=Hp(t);return"undefined"==typeof window&&e(i),()=>{Ep.delete(e)}}(d_,this._onLabsSnapshot),this._booting?this._bootWatch():this._bootFading&&(clearTimeout(this._bootTimer),this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220)),this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)),!this._loadOk&&this._serverCfg&&this.hass&&this._scheduleLoadRetry(),!this._warmSlot&&this._config&&this._warmAdopt(),this._loadOk&&this._ensureLiveSyncSubscriptions(),this._warmVp&&!this._warmRevivePending&&void 0===this._warmReviveTimer&&(this._warmRevivePending=!0,this._warmReviveTimer=window.setTimeout(()=>this._warmReviveDialog(),0)),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1,this.requestUpdate()}disconnectedCallback(){this._connectedPath&&location.pathname!==this._connectedPath&&this._leaveCardRoute(),window.removeEventListener("location-changed",this._onLocationChanged),window.removeEventListener("popstate",this._onLocationChanged),this._continuityUnsub?.(),this._continuityUnsub=void 0,this._motionMedia?.removeEventListener?.("change",this._onMotionChange),this._motionMedia=void 0,this._vacRaf&&(cancelAnimationFrame(this._vacRaf),this._vacRaf=0),this._refitRaf&&(cancelAnimationFrame(this._refitRaf),this._refitRaf=0),this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),this._dayCycleClockKey="",this._bootSettleRaf&&(cancelAnimationFrame(this._bootSettleRaf),this._bootSettleRaf=0),this._bootSettling=!1;for(const t of this._activityRt.values())clearTimeout(t.timer);window.removeEventListener("keydown",this._keyHandler),clearInterval(this._cycleTimer),clearTimeout(this._kioskDotsTimer),clearTimeout(this._kioskHoldTimer),clearTimeout(this._reloadRetry),clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),this._connHooked=null,this._haRegistryRelease?.(),this._haRegistryRelease=void 0,this._haRegistryConnection=null,this._signer.dispose(),clearTimeout(this._toastTimer),clearTimeout(this._slideTimer),this._modeTransition.dispose(),this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest++,this._slideTimer=void 0,this._slide="",clearTimeout(this._bootTimer),this._bootTimer=void 0,clearTimeout(this._bootSoftTimer),this._saveConfigDebounced.flush(),window.removeEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=void 0,clearTimeout(this._holdTimer),this._roViewport?.disconnect(),this._roViewport=void 0,this._roHdr?.disconnect(),this._roHdr=void 0,this._onWinResize&&(window.removeEventListener("resize",this._onWinResize),this._onWinResize=void 0),this._unsubCfg&&(this._unsubCfg(),this._unsubCfg=null),this._unsubLayout&&(this._unsubLayout(),this._unsubLayout=null),this._unsubVirtual&&(this._unsubVirtual(),this._unsubVirtual=null),this._unsubTrail&&(this._unsubTrail(),this._unsubTrail=void 0),this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=null,clearTimeout(this._layoutSyncTimer),clearTimeout(this._duplicateColumnTimer);for(const t of this._glowFadeTimers.values())clearTimeout(t);for(const t of this._glowEnterRafs.values())cancelAnimationFrame(t);clearTimeout(this._glowFeatherResumeTimer),this._glowFeatherResumeTimer=0,this._glowFeatherSuspendUntil=0,this._glowFadeTimers.clear(),this._glowEnterRafs.clear(),this._glowEnteringSources.clear(),this._glowRenderedSources.clear(),this._glowLastAppearance.clear(),this._glowSourceSeq=0,this._warmSnapshot(),this._warmRevivePending=!1,clearTimeout(this._warmReviveTimer),this._warmReviveTimer=void 0,this._warmRelease(),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._touchContacts.clear(),this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._clearTransientHover(!0),this._cancelDevicePressFeedback(),this._pointerHoverObserver?.disconnect(),this._pointerHoverObserver=void 0,this._pointerModality.disconnect(),this._editorSecondary.reset(),this._resumeSettling=!1,this._continuityHistory=[...this._continuityHistory,...this._continuity.trace].slice(-80),this._continuity.dispose(),this._continuityDisposed=!0,super.disconnectedCallback()}_onKey(t){if("Escape"===t.key&&this._vacFit)return this._vacFit=null,this._showToast(this._t("vac.cal_cancelled")),void t.stopPropagation();if("Escape"===t.key){if(this._tapConfirm)return void(this._tapConfirm=null);if(this._vacCalConfirm)return void(this._vacCalConfirm=null);if(this._decorEraseConfirm)return void(this._decorEraseConfirm=null);if(this._openingInfo)return void(this._openingInfo=null);if(this._infoCard)return void this._closeInfoCard();if(this._rulesDialog)return void(this._rulesDialog=null);if(this._alignDialog)return void(this._alignDialog=null);if(this._backupImportDialog)return void(this._backupImportDialog=null);if(this._backupExportDialog)return void(this._backupExportDialog=null);if(this._settingsDialog)return void(this._settingsDialog=null);if(this._markerDialog)return void(this._markerDialog=null);if(this._openingDialog)return void(this._openingDialog=null);if(this._physicalDialog)return void(this._physicalDialog=null);if(this._backdropDialog)return void(this._backdropDialog=null);if(this._decorShapeDialog)return void(this._decorShapeDialog=null);if(this._decorTextDialog)return void(this._decorTextDialog=null);if(this._spaceDialog&&!this._roomDialog)return this._spaceDialog=null,this._importQueue=[],void(this._importTotal=0);if(this._editorSecondary.hasOpenGroup)return t.preventDefault(),void this._editorSecondary.closeGroup(!0)}const e=t.composedPath?.()||[t.target],i=e.some(t=>t?.matches?.('input, textarea, select, [contenteditable="true"]')),s=e.some(t=>t?.classList?.contains?.("editor-secondary")),n=t.ctrlKey||t.metaKey,o=t.key.toLowerCase(),a=/^[a-z]$/.test(o),r="z"===o||!a&&"KeyZ"===t.code,l="y"===o||!a&&"KeyY"===t.code,c=n&&(r&&t.shiftKey||l),h=n&&r&&!t.shiftKey;if("decor"===this._mode){if((h||c)&&i)return;return c?(t.preventDefault(),void this._redoGeometry()):h?(t.preventDefault(),this._decorDraft?void(this._decorDraft=null):this._decorMove||this._dtDrag||this._bdDrag?void this._cancelDecorGesture():void this._undoGeometry()):"Delete"!==t.key&&"Backspace"!==t.key||!this._decorSel||i||s?void("Escape"===t.key&&(t.preventDefault(),this._decorDraft?this._decorDraft=null:this._decorMove||this._dtDrag||this._bdDrag?this._cancelDecorGesture():"furniture"===this._decorTool?(this._furnPalette=null,this._decorTool="select"):this._decorSel?this._decorSel=null:"select"!==this._decorTool?this._decorTool="select":this._setMode("view"))):(t.preventDefault(),void this._decorDeleteSel())}if(this._markup&&(!h&&!c||!i)){if(("Delete"===t.key||"Backspace"===t.key)&&this._physicalSel&&!i&&!s)return t.preventDefault(),void this._deletePhysicalSelection();if(c)return t.preventDefault(),void this._redoGeometry();if(h)return t.preventDefault(),this._rszDrag?void this._rszCancelDrag():this._wallFaceBatch?(this._roomDialogCancel(),void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint())):"draw"===this._tool&&this._path.length?void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint()):"split"===this._tool&&this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},void(this._splitSel.pts.length||(this._cursorPt=null))):void this._undoGeometry();if("Escape"===t.key)return this._physicalDrag||this._physicalRotate?(t.preventDefault(),void this._cancelPhysicalGesture()):this._roomDialog?(t.preventDefault(),void this._roomDialogCancel()):"draw"===this._tool&&this._path.length?(t.preventDefault(),void this._undoPoint()):this._physicalSel?(t.preventDefault(),void(this._physicalSel=null)):"resize"===this._tool?(t.preventDefault(),this._rszDrag?void this._rszCancelDrag():void(this._rszSel?this._rszSel=null:this._tool="draw")):"split"===this._tool?(t.preventDefault(),void(this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},this._splitSel.pts.length||(this._cursorPt=null)):this._splitSel?this._splitSel=null:this._tool="draw")):"merge"===this._tool?(t.preventDefault(),void(this._mergeSel?this._mergeSel=null:this._tool="draw")):this._wallDialog?(t.preventDefault(),void(this._wallDialog=null)):"boundary"===this._tool?(t.preventDefault(),void(this._openWallAnchor?this._cancelBoundaryAnchor():this._tool="draw")):void("opening"!==this._tool&&"wallthick"!==this._tool&&"delroom"!==this._tool&&"column"!==this._tool||(t.preventDefault(),"opening"===this._tool&&this._clearOpeningPlacement(!0),this._tool="draw"))}}_undoPoint(){if(this._path.length){if(this._contourClosed)return this._path=this._path.slice(0,-1),void(this._closingWallCm=null);if(this._activeDraftId&&this._path.length>1&&this._curSpaceCfg){const t=this._geometrySnapshot();this._path=this._path.slice(0,-1),this._draftSegmentCms=this._draftSegmentCms.slice(0,-1);const e=this._curSpaceCfg,i=(e.room_drafts||[]).findIndex(t=>t.id===this._activeDraftId);return void(i>=0&&(this._path.length<2?(e.room_drafts.splice(i,1),e.room_drafts.length||delete e.room_drafts,this._activeDraftId=null):e.room_drafts[i]={id:this._activeDraftId,points:this._path.map(t=>[t[0]/P_,t[1]/P_]),segments:this._draftSegmentCms.map(t=>({cm:t}))},this._recordGeometry(this._t("history.draft_segment_delete"),t),this._saveConfig()))}this._path=this._path.slice(0,-1)}}_undoActiveDraftPoint(){const t=this._activeDraftId,e=this._path[0]?[...this._path[0]]:null,i=this._geometryHistory.undo();if(!i)return void this._undoPoint();if(!this._applyGeometryState(i.before))return void this._geometryHistory.clear();const s=t?this._spaceModel()?.room_drafts.find(e=>e.id===t):null;s?(this._activeDraftId=s.id,this._path=s.points.map(t=>[...t]),this._draftSegmentCms=s.segments.map(t=>t.cm),this._resumeDraftBySpace[this._space]=s.id):(this._activeDraftId=null,this._path=e?[e]:[],this._draftSegmentCms=[],t&&this._resumeDraftBySpace[this._space]===t&&delete this._resumeDraftBySpace[this._space]),this._clearPlanSnapHover(),this._showToast(this._t("history.undone",{name:i.name}))}static getConfigElement(){return document.createElement("houseplan-card-editor")}static getStubConfig(){return{type:"custom:houseplan-card"}}static _warmBootReset(t){for(const t of b_.values())for(const e of t)clearTimeout(e.evict);b_.clear(),x_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of b_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:b_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){const e=this._config,i=!!e&&Object.prototype.hasOwnProperty.call(e,"floor");this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t};(i!==this._hasFixedFloor||e?.floor!==this._config.floor)&&(this._hashApplied=!1,this._navApplied=!1,this._warmVpArmed=!1),this._config.kiosk&&(this._booting=!1,this._bootFading=!1),!this._hasFixedFloor&&t.default_floor&&this._commitSpace(t.default_floor,!0);try{this._zoomBySpace=JSON.parse(localStorage.getItem(M_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(T_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Hp(d_);try{const t=JSON.parse(localStorage.getItem(D_)||"null");this._kioskScale={icon:Es(t?.icon),font:Es(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(S_)||"null");t&&t.config&&Array.isArray(t.config.spaces)&&(this._serverCfg=t.config,this._cfgEpoch++,this._cfgRev=t.rev||0,this._cfgContentFingerprint=t.config_fingerprint||sh(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||sh(this._layout),this._virtualLights=_n(t.virtual_lights,this._cfgRev),this._serverStorage=!0)}catch{}this._adoptInitialSpace(this._model,this._loadOk),"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._syncCycleTimer(),this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=k_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=b_.get(t);if(!s||!s.length)return;const n=s.find(t=>t.owner===this._warmGen);if(n)return this._warmLongReturn=!!n.freed&&Date.now()-n.freed>=Jc,clearTimeout(n.evict),n.evict=0,n.freed=0,n.live=!0,this._warmSlot=n,this._warmKey=t,n.frameFingerprint&&this._continuity.adoptCompleteFrame(n.frameFingerprint),void(!this._devices.length&&n.devices?.length&&(this._devices=[...n.devices]));const{slot:o,sure:a}=((t,e,i,s)=>{const n=t=>{const e=!!i&&t.place?.deref()===i;return e&&t.idx===s?4:t.live?0:e?3:2};let o=null,a=0,r=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>a?(o=i,a=t,r=1):t===a&&r++)}return!o||r>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Jc,this._booting=!1,this._bootFading=!1,this._hdrH=o.hdrH,this._bootSoft=!0,this.isConnected&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)),this._warmKey=t,a?(clearTimeout(o.evict),o.evict=0,o.owner=this._warmGen,o.place=e?new WeakRef(e):null,o.idx=i,o.live=!0,this._warmSlot=o,this._warmVp=o.vp,o.frameFingerprint&&this._continuity.adoptCompleteFrame(o.frameFingerprint),!this._devices.length&&o.devices?.length&&(this._devices=[...o.devices]),this._warmAdoptViewport(this._config)):(this._warmSlot={owner:this._warmGen,path:location.pathname,place:e?new WeakRef(e):null,idx:i,live:!0,hdrH:o.hdrH,stageH:o.stageH,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0},s.push(this._warmSlot),this._warmTrim(s)))}_warmIdx(t){const e=t?.children;if(!e)return-1;for(let t=0;t4;){const e=t.findIndex(t=>!t.live);if(e<0)break;clearTimeout(t[e].evict),t.splice(e,1)}}_warmScheduleEvict(t,e){if(clearTimeout(t.evict),!(t.dlg||t.vp&&"view"!==t.vp.mode))return;const i=t.freed,s=t.owner;t.evict=window.setTimeout(()=>{if(t.evict=0,t.freed!==i||t.owner!==s)return;var n;t.dlg=null,t.vp=(n=t.vp)&&"view"!==n.mode?{...n,mode:"view",zoom:n.snap?.space===n.space?n.snap.zoom:n.zoom,view:null,snap:null,tool:"draw",decorTool:"select",showHidden:!1,selId:null,rszSel:null,decorSel:null}:n,t.frameFingerprint="";const o=b_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},x_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);const i=this._fixedFloorState();if(this._hashApplied||!this._model.find(t=>t.id===e.space)||"valid"===i.kind&&i.id!==e.space||this._hasFixedFloor&&"valid"!==i.kind)return void(this._warmVp=null);this._commitSpace(e.space,!0),this._navApplied=!0,this._adoptMode("view"!==e.mode&&this._canEdit&&!t.kiosk?e.mode:"view"),this._pendingNavMode="view"===e.mode||this._canEdit||t.kiosk?null:e.mode,this._zoom=e.zoom;const s=this._effectiveProjection(),n=s===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=n&&e.view?{...e.view}:null,this._viewModeSnap=n&&e.snap?{...e.snap}:null,!n&&e.logicalCenter){const t="iso"===s?qp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var o;this._tool="openwall"===(o=e.tool)||"closewall"===o?"boundary":"opening"===(o=function(t){return"partition"===t?"draw":t}(o))?"draw":"string"==typeof o&&I_.has(o)?o:"draw",this._decorTool=e.decorTool,this._showHidden=e.showHidden,this._showFar!==e.showFar&&(this._showFar=e.showFar,this._frame=null),this._selId=e.selId,this._rszSel=e.rszSel,this._decorSel=e.decorSel,this._warmVpArmed=!0}_warmPatch(t,e=!1){if(this._config?.kiosk)return;const i=k_(this._config);if(!this._warmSlot||this._warmKey===i){if(!this._warmSlot){if(!e)return;const t=this.parentNode;this._warmKey=i,this._warmSlot={owner:this._warmGen,path:location.pathname,place:t?new WeakRef(t):null,idx:this._warmIdx(t),live:!0,hdrH:this._hdrH,stageH:0,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0};const s=b_.get(i)||[];for(s.push(this._warmSlot),b_.set(i,s),this._warmTrim(s);b_.size>8;){const t=b_.keys().next().value;if(void 0===t||t===i)break;for(const e of b_.get(t)||[])clearTimeout(e.evict);b_.delete(t)}}Object.assign(this._warmSlot,t)}}_warmViewportState(){const t=this._effectiveProjection();return{space:this._space,mode:this._mode,projection:t,activeLabsIso:this._labsIso,logicalCenter:this._logicalViewCenter(t),zoom:this._zoom,view:this._view?{...this._view}:null,snap:this._viewModeSnap?{...this._viewModeSnap}:null,tool:this._tool,decorTool:this._decorTool,showHidden:this._showHidden,showFar:this._showFar,selId:this._selId,rszSel:this._rszSel,decorSel:this._decorSel}}_warmDialogState(){const t=(t,e)=>({kind:t,space:this._space,mode:this._mode,data:e});return this._tapConfirm||this._alignDialog||this._mergeDialog||this._importDialog||this._backupExportDialog||this._backupImportDialog?null:this._openingInfo?t("openingInfo",this._openingInfo.id):this._infoCard?t("info",this._infoCard.id):this._rulesDialog?this._rulesDialog.busy?null:t("rules",this._rulesDialog):this._settingsDialog?this._settingsDialog.busy?null:t("settings",this._settingsDialog):this._markerDialog?this._markerDialog.busy?null:t("marker",this._markerDialog):this._openingDialog?t("opening",this._openingDialog):this._backdropDialog?t("backdrop",this._backdropDialog):this._decorShapeDialog?t("decorShape",this._decorShapeDialog):this._decorTextDialog?t("decorText",this._decorTextDialog):this._roomDialog?t("room",{editId:this._roomEditId,fill:this._roomFill,customFill:this._roomCustomFill,tempSrc:this._roomTempSrc,humSrc:this._roomHumSrc,srcOpen:this._roomSrcOpen,srcFilter:this._roomSrcFilter,nameScale:this._roomNameScale,labelScale:this._roomLabelScale,areaSel:this._areaSel,nameSel:this._nameSel,pendingSplit:this._pendingSplit,wallFaceBatch:this._wallFaceBatch,path:this._path}):this._spaceDialog?this._spaceDialog.busy?null:t("space",this._spaceDialog):null}_warmSnapshot(){if(this._booting||this._config?.kiosk||"steady"!==this._continuity.state)return;const t={vp:this._warmViewportState(),frameFingerprint:this._continuity.frameFingerprint,devices:this._devices};if(this._warmRevivePending||(t.dlg=this._warmDialogState()),this.isConnected&&this._warmSlot?.owner===this._warmGen){const e=this.parentNode;t.place=e?new WeakRef(e):null,t.idx=this._warmIdx(e)}this._warmPatch(t)}_warmReviveDialog(){this._warmRevivePending=!1;const t=this._warmSlot;if(this._warmReviveTimer=void 0,!t||!t.dlg)return;const e=t.dlg,i=t.freed;if(t.dlg=null,t.freed=0,clearTimeout(t.evict),t.evict=0,i&&!(Date.now()-i>x_)&&e.space===this._space&&e.mode===this._mode){switch(e.kind){case"space":this._spaceDialog={...e.data,busy:!1,savedBusy:!1};break;case"marker":this._markerDialog={...e.data,busy:!1};break;case"settings":this._settingsDialog={...e.data,busy:!1};break;case"rules":this._rulesDialog={...e.data,busy:!1};break;case"opening":this._openingDialog={...e.data};break;case"backdrop":this._backdropDialog={...e.data};break;case"decorShape":this._decorShapeDialog={...e.data};break;case"decorText":{this._decorTextDialog={...e.data};const t=String(this._decorTextDialog?.text??"").length;this._decorTextSelection={start:t,end:t};break}case"room":{const t=e.data;this._roomEditId=t.editId,this._roomFill=t.fill,this._roomCustomFill=t.customFill||null,this._roomTempSrc=t.tempSrc,this._roomHumSrc=t.humSrc,this._roomSrcOpen=t.srcOpen,this._roomSrcFilter=t.srcFilter,this._roomNameScale=t.nameScale,this._roomLabelScale=t.labelScale,this._areaSel=t.areaSel,this._nameSel=t.nameSel,this._pendingSplit=t.pendingSplit,this._wallFaceBatch=t.wallFaceBatch||null,this._path=t.path,this._wallFaceBatch&&(this._activeDraftId=this._wallFaceBatch.activeDraftId,this._draftSegmentCms=[...this._wallFaceBatch.activeCms]),this._roomDialog=!0;break}case"info":{const t=this._devices.find(t=>t.id===e.data);t&&(this._infoCard=t);break}case"openingInfo":{const t=(this._curSpaceCfg?.openings||[]).find(t=>t.id===e.data);t&&(this._openingInfo=t);break}}this.requestUpdate()}}_cacheSnapshot(){if(this._serverCfg)try{this._cfgContentFingerprint=sh(this._serverCfg),this._layoutContentFingerprint=sh(this._layout),this._virtualLights=function(t,e,i){if(t.configRev===i)return t;const s=new Set((Array.isArray(e?.markers)?e.markers:[]).filter(vn).map(t=>t.id));return{...t,configRev:i,off:new Set([...t.off].filter(t=>s.has(t)))}}(this._virtualLights,this._serverCfg,this._cfgRev),localStorage.setItem(S_,JSON.stringify({config:this._serverCfg,rev:this._cfgRev,config_fingerprint:this._cfgContentFingerprint,layout:this._layout,layout_rev:this._layoutRev,layout_fingerprint:this._layoutContentFingerprint,virtual_lights:mn(this._virtualLights)}))}catch{}}_beginContinuityCandidate(t,e,i="plan"){return this._booting&&!this._continuity.hasCompleteFrame?this._continuity.token:(this._continuityDataReady=e,this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._resumeSettling=!0,this._continuity.beginCandidate(t,i))}_continuityStageValid(){const t=this._stageEl;return!!t&&t.clientWidth>0&&t.clientHeight>0}_continuityAssetsReady(){if(!this._model.length)return!1;const t=this._model.length?this._spaceModel():null;return!t?.bg?.href||this._signer.isReady(this.hass,t.bg.href)}_initialSpaceSelection(t,e=this._loadOk){const i=this._fixedFloorState(t,e);return"valid"===i.kind?{id:i.id,source:"fixed"}:this._hasFixedFloor?{id:null,source:"none"}:function(t){const e=new Set(t.spaceIds.filter(t=>!!t));if(!e.size)return{id:null,source:"none"};const i=[["hash",!1===t.acceptHash?null:t.hashSpace],["current",t.preserveCurrent?t.currentSpace:null],["saved",t.savedSpace],["default",t.defaultSpace],["first",t.spaceIds[0]]];for(const[t,s]of i)if(s&&e.has(s))return{id:s,source:t};return{id:null,source:"none"}}({spaceIds:t.map(t=>t.id),hashSpace:this._hashSpace(),acceptHash:!this._hashApplied,currentSpace:this._space,preserveCurrent:this._hashApplied||this._navApplied||this._warmVpArmed,savedSpace:this._savedNav()?.space,defaultSpace:this._config?.default_floor})}_adoptInitialSpace(t,e=this._loadOk){const i=this._initialSpaceSelection(t,e);return i.id?(this._commitSpace(i.id,!0),"hash"===i.source&&(this._hashApplied=!0),"saved"===i.source&&(this._navApplied=!0),i):i}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._fixedFloorState(i,!0);if(this._hasFixedFloor&&"valid"!==s.kind)return"";const n=this._initialSpaceSelection(i,!0).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===n)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return nh([this._cfgRev,this._cfgContentFingerprint||sh(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||sh(this._layout),this._space,this._mode,this._view,e,this._glowScreenBlend?"screen":"normal",this.hass?.themes?.darkMode??this.hass?.themes?.default_theme??""])}_settleContinuityFrame(){if(this._booting||!this._continuityStageValid())return;if(!this._continuity.hasCompleteFrame&&"steady"===this._continuity.state)return void(this._continuityAssetsReady()&&(this._renderSnapshotAt=Date.now(),this._continuity.markCompleteFrame(this._visualFrameFingerprint())));if(!this._continuityDataReady)return;if(!["holding","offline-stale","overlay-pending","overlay-visible","candidate-ready"].includes(this._continuity.state))return;const t=this._continuity.token;if(this._candidateDeviceSnapshot&&this._candidateDeviceSnapshot!==this._visibleDeviceSnapshot&&this._stagedDeviceSnapshotToken!==t)return this._stagedDeviceSnapshotToken=t,void this.requestUpdate();this._continuityPaintToken!==t&&(this._continuityPaintToken=t,this._continuity.candidateReady(t)&&this._continuity.commitAfterPaint(t,{updateComplete:()=>this.updateComplete,stageValid:()=>this.isConnected&&this._continuityStageValid(),assetsReady:()=>this._continuityAssetsReady(),frameFingerprint:()=>this._visualFrameFingerprint()}).then(e=>{e&&t===this._continuity.token?(this._resumeSettling=!1,this._renderSnapshotAt=Date.now(),this._candidateDeviceSnapshot&&(this._visibleDeviceSnapshot=this._candidateDeviceSnapshot),this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._warmSnapshot()):t===this._continuity.token&&(this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._candidateDeviceSnapshot=null,this.requestUpdate())}))}_onBackdropLoaded(t,e){this._signer.markLoaded(this.hass,t,e),this._continuity.note("asset-ready"),this._continuityPaintToken=-1,"steady"!==this._continuity.state&&this.requestUpdate()}_renderRecoveryOverlay(){if(!this._continuity.overlayVisible&&"recovery-error"!==this._continuity.state)return G;const t="connection"===this._continuity.recoveryReason;return j`
t.stopPropagation()} @click=${t=>t.stopPropagation()} @@ -4737,8 +4754,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t(t?"continuity.restore_connection":"continuity.restore_plan")} ${"recovery-error"===this._continuity.state?j``:G} -
`}houseplanContinuityTrace(){return[...this._continuityHistory,...this._continuity.trace].slice(-80).map(t=>({...t,...t.stage?{stage:[...t.stage]}:{}}))}getCardSize(){return 12}get _norm(){return!(!this._serverCfg||!this._serverCfg.spaces.length)}_cfgFingerprint(){const t=this._serverCfg?.spaces||[];let e=t.length+":";for(const i of t){e+=(i.id||"")+","+(i.plan_aspect||"")+","+(i.plan_url||"").length+","+(i.plan_x??"")+","+(i.plan_y??"")+","+(i.plan_scale??"")+","+(i.plan_scale_x??"")+","+(i.plan_scale_y??"")+","+(i.plan_angle??"")+","+(i.rooms?.length||0)+","+(i.openings?.length||0)+","+(i.decor?.length||0)+";";for(const t of i.rooms||[]){const i=t.poly?.[0],s=t.poly?.[t.poly.length-1];e+=(t.poly?.length||0)+"."+(t.id||"")+"."+(t.open_to||[]).join("+")+"."+(t.area||"")+"."+JSON.stringify(t.settings||0)+"."+(t.x??"")+","+(t.y??"")+","+(t.w??"")+","+(t.h??"")+","+(i?i[0]+"/"+i[1]:"")+","+(s?s[0]+"/"+s[1]:"")+";"}}return e}get _model(){if(!this._serverCfg)return[];const t=this._cfgEpoch+"|"+this._cfgFingerprint();if(this._modelCache&&this._modelCache.key===t)return this._modelCache.model;const e=this._buildModel();return this._modelCache={key:t,model:e},e}_buildModel(){if(!this._serverCfg)return[];const t=this._renderCfg;return Kl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return this._hasFixedFloor?rh(this._model,this._space):(t=this._model,e=this._space,t.find(t=>t.id===e)??t[0]);var t,e}_spaceModelById(t){return rh(this._model,t)}_syncEmptySpaceState(){if(!!this._serverCfg&&0===this._serverCfg.spaces.length){if(!this._emptySpaceStateActive){this._emptySpaceStateActive=!0;for(const t of this._pointers.keys())for(const e of this.renderRoot.querySelectorAll("*"))try{e.hasPointerCapture?.(t)&&e.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null,this._drag=null,this._rlResize=null,this._vacFit=null,this._compassDrag=!1,this._cancelModeTransition(!1),this._mode="view",this._clearGeometryGesture(),this._geometryHistory.clear(),this._resumeDraftBySpace={},this._tip=null,this._hoverRoom=null,this._openingInfo=null,this._closeInfoCard(),this._markerDialog=null,this._physicalDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._roomDialog=!1,"edit"===this._spaceDialog?.mode&&(this._spaceDialog=null),this._editorSecondary.closeForNavigation(),this._saveConfigDebounced.cancel(),this._frame=null,this._planSnapGeometryCache=null,this._decorSnapCache=null,this._commitSpace("",!0)}}else this._emptySpaceStateActive=!1}get _areaToSpace(){const t={};for(const e of this._model)for(const i of e.rooms)i.area&&(t[i.area]={space:e.id,room:i});return t}get _settings(){return this._serverCfg?.settings||{}}get _showAll(){return this._settings.filter_seeded?this._showHidden:!!this._settings.show_all}_toggleShowAll(){if(this._serverCfg){if(this._settings.filter_seeded)return this._showHidden=!this._showHidden,void this.requestUpdate();this._serverCfg={...this._serverCfg,settings:{...this._serverCfg.settings,show_all:!this._settings.show_all}},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}}_seedHiddenDevices(){if(!this._serverCfg||!this._norm||!this._canEdit)return;const t=this._serverCfg,e=function(t){const e=t.hass,i=t.registry||An(e),s=zn(e,i),{areaToSpace:n,markers:o,settings:a,excluded:r,iconRules:l}=t,c=!1!==a.group_lights,h=vo(o),d=mo(s,c).filter(t=>!yo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=Bn(s),_=new Set(o.map(t=>t.binding)),g=[];for(const t of Object.values(s.devices)){const o=t.area_id;if(!o||!n[o])continue;if("service"===t.entry_type)continue;if(_.has("device:"+t.id))continue;if("active"!==Ln(e,"device:"+t.id,i).kind)continue;const a=p[t.id]||[],h=qn(s,t,a);let d=r.has(h)||"Group"===t.model||/scene/i.test(t.model||"")||/bridge/i.test((t.model||"")+(t.name||""))||"myheat"===h&&!!t.via_device_id;if(!d&&c&&u.has(o)){const e=(t.name_by_user||t.name||"").trim();"mdi:lightbulb"===fo(s,e,t.model,a,l)&&(d=!0)}d&&g.push("device:"+t.id)}return g}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,firstSpaceId:this._model[0]?.id||"",iconRules:this._iconRules});if(!e.length&&t.settings?.filter_seeded)return;t.markers=t.markers||[];const i=[];for(const s of e){const e="h"+s.slice(s.indexOf(":")+1);t.markers.push({id:e,binding:s,hidden:!0}),i.push(s.slice(s.indexOf(":")+1))}const s={...t.settings||{},filter_seeded:!0};delete s.show_all,i.length&&Array.isArray(s.new_device_ids)&&(s.new_device_ids=s.new_device_ids.filter(t=>!i.includes(t))),t.settings=s,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}get _iconRules(){const t=this._settings.icon_rules;if(!t||!Array.isArray(t)||!t.length)return;const e=JSON.stringify(t);return e!==this._rulesCompiledSrc&&(this._rulesCompiledSrc=e,this._rulesCompiled=Jt(t)),this._rulesCompiled}get _fillColors(){return ds(this._settings)}get _excluded(){const t=this._settings.exclude_integrations;return t?new Set(t):Yt}willUpdate(t){t.has("_serverCfg")&&this._cfgEpoch++,this._syncEmptySpaceState(),t.has("hass")&&this.hass&&(this._hassSequence++,this._renderSnapshotAt=Date.now(),this._continuity.note("hass-snapshot"),this._ensureHaRegistryAuthority(),this._planHassMemo=null,this._hookConnection(),!this._loadOk&&!this._loading&&this._loadTries<8&&this._loadFromServer(),this._maybeRebuildDevices(),this._vacTick(),this._activityTick()),this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._continuity.refreshCompleteFrame(this._visualFrameFingerprint()),this._captureRenderDeviceSnapshot()}updated(){this._syncDayCycleClock(),this._warmSnapshot(),this._dtMeasure();const t=this._stageEl;t&&!this._roViewport&&(this._roViewport=new ResizeObserver(()=>this._refitView()),this._roViewport.observe(t)),t&&this._booting&&!this._bootTimer&&this._bootWatch();const e=this.renderRoot.querySelector(".hdr");if(e&&t&&!this._roHdr){const i=()=>{const e=this.renderRoot.querySelector("ha-card");if(!e)return;const i=t.getBoundingClientRect().top-e.getBoundingClientRect().top,s=Math.min(Math.max(e.getBoundingClientRect().top,0),120),n=Math.round(i+s);n>=0&&n!==this._hdrH&&(this._hdrH=n),n>=0&&!this._booting&&!this._config?.kiosk&&t.clientHeight>0&&this._warmPatch({hdrH:n,stageH:t.clientHeight})};this._roHdr=new ResizeObserver(()=>requestAnimationFrame(i)),this._roHdr.observe(e),this._onWinResize=()=>requestAnimationFrame(i),window.addEventListener("resize",this._onWinResize),i()}if(t&&!this._view&&this._refitView(),this._editorSecondary.afterRender(),this._settleContinuityFrame(),this._serverStorage&&this._loadOk&&0===this._model.length&&!this._spaceDialog&&!this._importDialog&&!this._onboardingShown){this._onboardingShown=!0;const t=function(t){const e=t?.floors;if(!e||"object"!=typeof e)return[];const i=[];for(const t of Object.values(e))t&&t.floor_id&&i.push({id:t.floor_id,name:t.name||t.floor_id,level:t.level??null});return i.sort((t,e)=>{const i=t.level??1e9,s=e.level??1e9;return i!==s?i-s:t.name.localeCompare(e.name)}),i}(this.hass);t.length?this._importDialog={floors:t.map(t=>({...t,checked:!0}))}:this._openSpaceDialog("create")}}_adoptStructuralResponses(t,e,i){const s=t?.config,n=s&&Array.isArray(s.spaces)?s:null,o=sh(n),a=o!==(this._cfgContentFingerprint||sh(this._serverCfg));if(a&&(this._geometryHistory.clear(),this._serverCfg&&this._clearGeometryGesture(),this._serverCfg=n,this._cfgContentFingerprint=o),this._cfgRev=t?.rev??this._cfgRev,t&&("virtual_lights"in t||"config"in t)){const e=gn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);fn(e)!==fn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let r=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=sh(t);r=s!==(this._layoutContentFingerprint||sh(this._layout)),r&&(this._layout=t,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev}return this._canOptimizeUndo=!(!t?.can_optimize_undo&&!e?.can_optimize_undo),this._undoKind=t?.undo_kind||e?.undo_kind||null,"boolean"==typeof t?.can_write&&(this._serverCanWrite=t.can_write),a&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),r&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:a,layoutChanged:r}}_resumePendingNavMode(){if(!this._pendingNavMode||!this._canEdit||this._config?.kiosk)return!1;const t=this._pendingNavMode;return this._pendingNavMode=null,this._setMode(t,!1),!0}async _loadFromServer(){this._loading=!0,this._loadTries++;const t=this._space,e=!!this._view;try{const[i,s]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]),n=i?.config&&Array.isArray(i.config.spaces)?i.config:null,o=sh(n)!==(this._cfgContentFingerprint||sh(this._serverCfg))||sh(s?.layout??{})!==(this._layoutContentFingerprint||sh(this._layout));if(o){if(!await this._signer.prepareImage(this.hass,this._candidateBackdrop(n)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0)}o&&this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._beginContinuityCandidate("structural-response",!0),this._connectionWasLost=!1,this._serverStorage=!0,"boolean"==typeof i?.can_write&&(this._serverCanWrite=i.can_write),this._canOptimizeUndo=!(!i?.can_optimize_undo&&!s?.can_optimize_undo),this._adoptStructuralResponses(i,s),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._warmVpArmed&&this._space===this._warmVp?.space?this._warmVpArmed=!1:e&&this._space===t||this._restoreZoom(),this._loadOk=!0,this.hass.callWS({type:"houseplan/trail/get"}).then(t=>{this._vacSrvTrails=t?.trails||{},this.requestUpdate()}).catch(()=>{}),this._ensureLiveSyncSubscriptions()}catch(t){if(this._serverCfg)this._scheduleLoadRetry(!0);else if(this._loadTries>=8){this._serverStorage=!1;try{this._layout=JSON.parse(localStorage.getItem(x_)||"{}")||{}}catch{this._layout={}}}}finally{this._loading=!1,this._continuityDataReady=!0,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}}_ensureLiveSyncSubscriptions(){const t=this.hass?.connection;if(!t)return;if(t!==this._liveSyncConnection&&(this._unsubCfg?.(),this._unsubCfg=null,this._unsubLayout?.(),this._unsubLayout=null,this._unsubTrail?.(),this._unsubTrail=void 0,this._unsubVirtual?.(),this._unsubVirtual=null,this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=t),this._liveSyncAttempt)return;const e=this._liveSyncGeneration,i=[],s=(s,n,o,a)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(a,o);e===this._liveSyncGeneration&&this.isConnected&&this.hass?.connection===t&&!s()?n(i):i?.()})};if(s(()=>this._unsubCfg,t=>{this._unsubCfg=t},"houseplan_config_updated",t=>{const e=Number(t?.data?.rev??-1);e!==this._cfgRev&&this._reloadConfigOnly(!1,e)}),s(()=>this._unsubTrail,t=>{this._unsubTrail=t},"houseplan_trail_updated",async()=>{try{const t=await this.hass.callWS({type:"houseplan/trail/get"});this._vacSrvTrails=t?.trails||{},this.requestUpdate()}catch{}}),s(()=>this._unsubLayout,t=>{this._unsubLayout=t},"houseplan_layout_updated",t=>this._onLayoutEvent(Number(t?.data?.rev??-1))),s(()=>this._unsubVirtual,t=>{this._unsubVirtual=t},"houseplan_virtual_light_updated",t=>{const e=bn(this._virtualLights,t?.data);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}),!i.length)return;const n=function(t){return Promise.allSettled(t.map(t=>Promise.resolve().then(t)))}(i).then(()=>{});this._liveSyncAttempt=n,n.finally(()=>{this._liveSyncAttempt===n&&(this._liveSyncAttempt=null)})}async _reloadConfigOnly(t=!1,e){if(!t){if(void 0!==e&&e<=this._cfgRev)return;if(this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(()=>this._reloadConfigOnly(!1,e),400))}this._beginContinuityCandidate("config-reload",!1);try{const t=await this.hass.callWS({type:"houseplan/config/get"}),e=t?.config&&Array.isArray(t.config.spaces)?t.config:null;if(sh(e)!==(this._cfgContentFingerprint||sh(this._serverCfg))&&!await this._signer.prepareImage(this.hass,this._candidateBackdrop(e)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0);const i=this._space;this._adoptStructuralResponses(t),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._space!==i&&this._restoreZoom(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}catch(t){this._showToast(this._t("toast.cfg_reload_failed",{err:this._errText(t)}))}finally{this._continuityDataReady=!0,this.requestUpdate()}}_scheduleLoadRetry(t=!1){if(void 0!==this._loadRetryTimer)return;const e=Math.min(8e3,500*2**Math.min(4,Math.max(1,this._loadTries-7)));this._loadRetryTimer=window.setTimeout(()=>{this._loadRetryTimer=void 0,!t&&this._loadOk||this._loading||!this.hass||this._loadFromServer()},e)}_ensureHaRegistryAuthority(){const t=this.hass?.connection||null;t&&t!==this._haRegistryConnection&&(this._haRegistryRelease?.(),this._haRegistryConnection=t,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._haRegistryRelease=Rn(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return An(this.hass)}get _planHass(){const t=this._haRegistry,e=Fn(this.hass,t),i=this._planHassMemo;if(i&&i.hass===this.hass&&i.sig===e)return i.active;const s=zn(this.hass,t),n=On(this.hass,t);return this._planHassMemo={hass:this.hass,sig:e,active:s,full:n},s}_captureRenderDeviceSnapshot(){if(!this.hass)return;const t=Date.now(),e=[...this._activityRt.entries()].map(([e,i])=>`${e}:${i.gen}:${i.flashTs}:`+(i.flashKind&&(i.expiresAt||i.flashTs+Fu)>t?1:0)).join("|"),i=fn(this._virtualLights);if(this._capturedSnapshotSequence===this._hassSequence&&this._capturedSnapshotDevices===this._devices&&this._capturedSnapshotLayout===this._layout&&this._capturedSnapshotConfigEpoch===this._cfgEpoch&&this._capturedSnapshotVirtual===i&&this._capturedSnapshotActivity===e)return;const s=this._planHass,n=new Map,o=new Map,a=new Set(["sun.sun"]);this._vacFit?.source&&a.add(this._vacFit.source);const r=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void a.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?r.add(s):"entity"===i&&a.add(s)};for(const t of this._model)for(const e of t.rooms)e.area&&l.add(e.area),c(e.settings?.temp_source),c(e.settings?.hum_source);for(const t of this._serverCfg?.spaces||[])for(const e of t.openings||[])for(const t of gi(e))a.add(t);for(const t of this._serverCfg?.spaces||[])for(const e of t.decor||[])if("text"===e.kind){for(const t of String(e.text||"").matchAll(/\{([^{}\r\n]+)\}/g)){const e=Ki(t[1]);e?.entity&&a.add(e.entity)}e.entity&&a.add(e.entity),o.set(`decor:${t.id}:${e.id}`,Qi(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!yo(s,t,vo(this._markers))))}const h=ro(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(vu(t.id,e),_u(s,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._devices,lightSources:h,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}));if(this._isVacDev(t)){const e=this._vacSource(t,s),i=e?bh(s?.states?.[e]?.attributes):null,n=this._vacRt.get(t.id);o.set(`vacuum:${t.id}`,{source:e,telemetry:i,mapId:i?this._vacMapId(t,i,s):null,runtime:n?{trail:n.trail,lastTs:n.lastTs,moving:n.moving,jump:n.jump}:null,server:this._vacSrvTrails[t.id]||null})}}const d=fu({sourceSequence:this._hassSequence,hass:s,devices:this._devices,presentations:n,positions:(u=this._model.length>0,p=this._devices,_=t=>this._livePos(t),u?new Map(p.map(t=>[t.id,_(t)])):new Map),facts:o,entityIds:a,deviceIds:r,areaIds:l});var u,p,_;this._capturedSnapshotSequence=this._hassSequence,this._capturedSnapshotDevices=this._devices,this._capturedSnapshotLayout=this._layout,this._capturedSnapshotActivity=e,this._capturedSnapshotConfigEpoch=this._cfgEpoch,this._capturedSnapshotVirtual=i,this._visibleDeviceSnapshot&&"steady"!==this._continuity.state?this._candidateDeviceSnapshot=d:(this._visibleDeviceSnapshot=d,this._candidateDeviceSnapshot=null)}get _renderDeviceSnapshot(){return this._stagedDeviceSnapshotToken===this._continuity.token?this._candidateDeviceSnapshot||this._visibleDeviceSnapshot:this._visibleDeviceSnapshot||this._candidateDeviceSnapshot}get _renderPlanHass(){return this._renderDeviceSnapshot?.hass||this._planHass}get _renderDevices(){return this._renderDeviceSnapshot?.devices||this._devices}get _fullRegistryHass(){return this._planHass,this._planHassMemo?.full||this.hass}_bindingStatus(t){return Ln(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=An(t);return{access:e.access,authoritative:e.authoritative,revision:e.revision,lastSuccess:e.lastSuccess,error:e.error}}(this.hass),e={active:0,ha_disabled:0,orphaned:0,unverified:0};for(const t of this._markers)t.removed||"virtual"===t.binding||e[this._bindingStatus(t.binding).kind]++;return{registry:{...t,lastSuccessAgeMs:t.lastSuccess?Math.max(0,Date.now()-t.lastSuccess):null},bindings:e}}_openBindingInHa(t){const[e,i]=t.split(":");if(i)if("device"!==e){if("entity"===e){const t=this._fullRegistryHass.entities?.[i];t?.device_id&&E_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else E_("/config/devices/device/"+encodeURIComponent(i))}_bindingHasHaPage(t){const[e,i]=t.split(":");return!!i&&("device"===e||"entity"===e&&!!this._fullRegistryHass.entities?.[i]?.device_id)}_toggleMarkerDialogVisibility(){const t=this._markerDialog;if(!t)return;const e="ha"===t.bindingMode?this._bindingStatus(t.binding):null,i=t.hideFromPlan||"ha_disabled"===e?.kind;i&&"ha_disabled"===e?.kind?this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device")):i&&"unverified"===e?.kind?this._showToast(this._t("toast.ha_binding_unverified")):this._markerDialog={...t,hideFromPlan:!i}}_hookConnection(){const t=this.hass?.connection;t&&t!==this._connHooked&&(this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),t.addEventListener?.("ready",this._onConnReady),t.addEventListener?.("disconnected",this._onConnLost),t.addEventListener?.("reconnect-error",this._onConnLost),this._connHooked=t)}_display(t){return this._signer.display(this.hass,t)}_resign(){this._signer.resign(this.hass,Rs(this._serverCfg))}_onLayoutEvent(t){t<=this._layoutRev||(clearTimeout(this._layoutSyncTimer),this._layoutSyncTimer=window.setTimeout(()=>{t<=this._layoutRev||this._reloadLayoutOnly()},200))}_noteLayoutRev(t){const e=t?.rev;"number"==typeof e&&e>this._layoutRev&&(this._layoutRev=e)}async _reloadLayoutOnly(){if(!this._serverStorage||!this.hass?.callWS)return;this._beginContinuityCandidate("layout-reload",!1);const t=new Map;for(const e of this._dirtyPos)this._layout[e]&&t.set(e,this._layout[e]);this._persistLayout.pending()&&this._persistLayout.flush();for(const[e,i]of this._sentPos)t.set(e,i);try{const e=await this.hass.callWS({type:"houseplan/layout/get"}),i={...e?.layout||{}};for(const[e,s]of t)i[e]=s;const s=sh(i);s!==(this._layoutContentFingerprint||sh(this._layout))&&(this._layout=i,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev,this._canOptimizeUndo=!!e?.can_optimize_undo,this._undoKind=e?.undo_kind||null,this._cacheSnapshot(),this.requestUpdate()}catch{}finally{this._continuityDataReady=!0,this.requestUpdate()}}_maybeRebuildDevices(){const t=this.hass;if(!t?.devices||!t?.entities||!t?.areas)return;const e=this._haRegistry,i=Fn(t,e)+":"+Object.keys(t.areas).length+":"+(this._norm?"n":"l")+":"+na(t,this._config?.language);if(i===this._regSignature&&this._devices.length)return;this._regSignature=i;const s=new Map(this._devices.map(t=>[t.id,t.bindingStatus?.kind||"active"]));this._devices=ko({hass:t,registry:e,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||"",loc:t=>this._t(t),iconRules:this._iconRules});const n=this._markers.filter(t=>!t.removed&&"virtual"!==t.binding).map(t=>t.binding).sort(),o=e.revision+":"+n.join("|");if(e.authoritative&&o!==this._haBindingCacheKey){const i=new Map;for(const s of n)i.set(s,Ln(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Hn(),i=Date.now();for(const[s,n]of t)"active"===n.kind?e[s]={kind:"active",ts:i}:"ha_disabled"===n.kind&&(e[s]={kind:"ha_disabled",reason:n.reason,ts:i});const s=Object.fromEntries(Object.entries(e).sort((t,e)=>e[1].ts-t[1].ts).slice(0,1500));Sn=s;try{localStorage.setItem($n,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const a=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())a.has(t)||this._vacRt.delete(t);if(this._infoCard){const t=this._devices.find(t=>t.id===this._infoCard.id);this._infoCard=t&&"ha_disabled"!==t.bindingStatus?.kind?t:null}const r=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));r&&("ha_disabled"!==this._infoCard?.bindingStatus?.kind&&"ha_disabled"!==this._devices.find(t=>t.id===this._infoCard?.id)?.bindingStatus?.kind||this._closeInfoCard(),this._drag&&"ha_disabled"===this._devices.find(t=>t.id===this._drag.id)?.bindingStatus?.kind&&(this._drag=null),clearTimeout(this._holdTimer),this._holdFired=!1,this._tip=null,this._tapConfirm=null),this._nativeMoreInfoEntity&&!this._planEntityAvailable(this._nativeMoreInfoEntity)&&(F_(this,"hass-more-info",{entityId:null}),this._nativeMoreInfoEntity=null)}_syncNewDevices(){if(!this._norm||!this._loadOk||!this._serverCfg)return;const t=this._devices.filter(t=>!t.marker&&!t.virtual).map(t=>t.id).sort(),e=t.join(",");if(e===this._newSyncKey)return;this._newSyncKey=e;const i=this._settings,{fresh:s,known:n}=function(t,e){if(!Array.isArray(e))return{fresh:[],known:[...t]};const i=new Set(e),s=t.filter(t=>!i.has(t));return{fresh:s,known:s.length?[...e,...s]:e}}(t,i.known_devices);if(!Array.isArray(i.known_devices)||s.length){const t=[...new Set([...i.new_device_ids||[],...s])];this._serverCfg={...this._serverCfg,settings:{...i,known_devices:n,new_device_ids:t}},this._saveConfig()}}get _newIds(){const t=this._settings.new_device_ids;return new Set(Array.isArray(t)?t:[])}_ackNewDevice(t){if(!this._newIds.has(t)||!this._serverCfg)return;const e=this._settings;this._serverCfg={...this._serverCfg,settings:{...e,new_device_ids:(e.new_device_ids||[]).filter(e=>e!==t)}},this._saveConfig(),this.requestUpdate()}get _markers(){return this._serverCfg?.markers||[]}_roomLqi(t){if(!t)return null;const e=[];for(const i of this._renderDevices){if(i.area!==t||i.virtual)continue;const s=ho(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return Ei(e)}_roomBounds(t){if(t.poly&&t.poly.length){const e=t.poly.map(t=>t[0]),i=t.poly.map(t=>t[1]),s=Math.min(...e),n=Math.min(...i);return{x:s,y:n,w:Math.max(...e)-s,h:Math.max(...i)-n}}return{x:t.x??0,y:t.y??0,w:t.w??0,h:t.h??0}}_defaultPositions(){const t={},e=this._config?.icon_size??2.5;for(const i of this._model){const s=e/100*gc(i)*1.3;for(const e of i.rooms){if(!e.area)continue;const n=this._devices.filter(t=>t.area===e.area&&t.space===i.id);if(!n.length)continue;const o=this._roomBounds(e),a=.1*Math.min(o.w,o.h),r=o.w-2*a,l=o.h-2*a,c=Math.max(1,Math.round(Math.sqrt(n.length*r/Math.max(l,1)))),h=Math.ceil(n.length/c),d=r/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+a+d*(e%c+.5),y:o.y+a+u*(Math.floor(e/c)+.5)}));Oi(p,o,s,.5*a),n.forEach((e,i)=>t[e.id]=ec(p[i]))}}return t}_pos(t){const e=this._renderDeviceSnapshot?.positions.get(t.id);return e?{x:e.x,y:e.y}:this._livePos(t)}_livePos(t){const e=this._spaceModelById(t.space),i=this._layout[t.id];if(i)if(this._norm){if(i.s===t.space)return{x:i.x*T_,y:i.y*T_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?ec(_c(e)):{x:500,y:500}}_savePos(t,e,i){if(this._spaceModelById(t.space)){if(this._norm){const s=this._gridPitch,n=Math.round(e/s)*s,o=Math.round(i/s)*s,a=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:sc(n/T_),y:sc(o/T_),...a?{k:a}:{}}}}else this._layout={...this._layout,[t.id]:{x:Math.round(e),y:Math.round(i)}};this._dirtyPos.add(t.id),this._persistLayout()}}_visualSamples(t){return cu(this._renderPlanHass,t,this._renderDevices,void 0,this._fullRegistryHass).samples}_devicePresentation(t,e=!1!==this._config?.show_signal,i=!1){const s=i?null:this._renderDeviceSnapshot?.presentations.get(vu(t.id,e));return s||_u(this._renderPlanHass,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,designPreview:i,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._renderDevices,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion})}_deviceVisual(t){return this._devicePresentation(t).visual}_stateClass(t,e=this._deviceVisual(t)){const i=this._devicePresentation(t);return i.effectiveHidden?"":("icon_ripple"!==i.display||!1===this._config?.live_states||"alarm"===e.status||e.activity,pu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=po(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:uo(this._renderPlanHass,t.entities)}_bindingEntities(t){if("virtual"===t||!t)return[];const e=this._bindingStatus(t);return"active"===e.kind?e.enabledEntityIds:e.allEntityIds}_bindingHasClimate(t){return this._bindingEntities(t).some(t=>t.startsWith("climate."))}_bindingHasAlarm(t){return this._bindingEntities(t).some(t=>{const e=this._planHass?.states?.[t]||this.hass?.states?.[t],i=this._fullRegistryHass.entities[t]||this.hass?.entities?.[t];return Ls(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&_o(this.hass,t.primary)?go(this.hass,t.entities):null}_deviceBindingActive(t,e=!0){if(t.virtual||"virtual"===t.bindingKind)return!0;if(!t.bindingKind||!t.bindingRef)return!1;const i=this._bindingStatus(`${t.bindingKind}:${t.bindingRef}`);return"active"===i.kind||(e&&this._showToast(this._t("ha_disabled"===i.kind?"toast.ha_disabled_action":"toast.ha_binding_unverified")),!1)}_openMoreInfo(t){t?this._planEntityAvailable(t)?(this._nativeMoreInfoEntity=t,F_(this,"hass-more-info",{entityId:t})):this._showToast(this._t("toast.ha_disabled_action")):this._showToast(this._t("toast.no_entity"))}_interruptViewGesture(t,e){if(clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),void 0!==t)for(const i of[e,this._stageEl])try{i?.hasPointerCapture?.(t)&&i.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null}_closeInfoCard(){this._interruptViewGesture(),this._holdFired=!1,this._infoCard=null}_ctxDevice(t,e){"view"===this._mode&&(t.preventDefault(),t.stopPropagation(),this._deviceBindingActive(e)&&(e.primary?this._openMoreInfo(e.primary):this._infoCard=e))}_clickDevice(t,e){if(t.stopPropagation(),this._drag?.moved||this._suppressClick||this._holdFired)return;if("plan"===this._mode)return;if("devices"===this._mode)return void this._openMarkerDialog(e);const i=this._devices.find(t=>t.id===e.id);if(!i)return;const s=Yh(i.tapAction,i.primary?.split(".")[0]),n=(t,e)=>{i.marker?.tap_confirm?this._tapConfirm={kind:"run",text:t,exec:e}:e()};if("toggle"===s){const t=this._toggleIntent(i);if(!t||!ed(t))return;const e=t=>{const e=ed(t);if(!e)return;if("virtual-light"===e.kind)return void this.hass.callWS({type:"houseplan/virtual_light/toggle",marker_id:e.markerId}).then(t=>{const e=bn(this._virtualLights,t);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}).catch(t=>this._showToast(this._t("toast.virtual_light_toggle_failed",{err:this._errText(t)})));const{command:i}=e;this.hass.callService(i.domain,i.service,i.data).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))},s=((o=t).targets.length?o.targets:o.skippedTargets).map(t=>t.name||t.entityId||t.ref).join(", ")||i.name;if(i.marker?.tap_confirm){const n=this._toggleConfirmationLines(t);if(!n.length)return;this._tapConfirm={kind:"toggle",text:this._t("confirm.tap_toggle",{name:s}),lines:n,initialIntent:t,deviceId:i.id,exec:()=>{const s=this._devices.find(t=>t.id===i.id),n=s?this._toggleIntent(s):null;n&&id(t,n)?e(n):this._showToast(this._t("toast.tap_target_changed"))}}}else e(t);return}var o;if("info"===s)return this._interruptViewGesture(),void(this._infoCard=i);if(this._deviceBindingActive(i)){if("run"===s){const t=i.marker?.tap_target||"",e=function(t){const e=String(t||"").split(".")[0];return"automation"===e?{domain:"automation",service:"trigger"}:"script"===e?{domain:"script",service:"turn_on"}:"scene"===e?{domain:"scene",service:"turn_on"}:null}(t),s=this.hass.states[t];if(!e||!s)return void this._showToast(this._t("toast.run_target_missing"));const o=s.attributes?.friendly_name||t;return void n(this._t("confirm.tap_run",{name:o}),()=>{this._deviceBindingActive(i)&&this._planEntityAvailable(t)&&this.hass.callService(e.domain,e.service,{entity_id:t}).then(()=>{this._stampActivity(i.id,"event",this._activitySourceKey(i)),this.requestUpdate(),this._showToast(this._t("toast.run_started",{name:o}))}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))})}"more-info"===s&&i.primary?this._openMoreInfo(i.primary):this._infoCard=i}}_keyDevice(t,e){"Enter"!==t.key&&" "!==t.key||"view"!==this._mode&&"devices"!==this._mode||(t.preventDefault(),this._clickDevice(t,e))}_t(t,e){return oa(na(this.hass,this._config?.language),t,e)}get _colorPickerLabels(){return{title:this._t("color_picker.title"),hue:this._t("color_picker.hue"),saturation:this._t("color_picker.saturation"),value:this._t("color_picker.value"),hex:this._t("color_picker.hex"),invalidHex:this._t("color_picker.invalid_hex")}}_help(t){const e=`${t}.aria`,i=na(this.hass,this._config?.language);return aa(i,t)&&aa(i,e)?j``:G}get _stageEl(){return this.renderRoot.querySelector(".stage")}_contentItems(t){const e=[];for(const i of this._devices){if(i.space!==t.id||i.hidden)continue;const s=this._pos(i);e.push({minX:s.x,minY:s.y,maxX:s.x,maxY:s.y})}if(t.id===this._space){for(const t of this._openingsR){const i=Number(t.angle)*Math.PI/180,s=Math.cos(i)*t.rlen/2,n=Math.sin(i)*t.rlen/2,o=ac([[t.rx-s,t.ry-n],[t.rx+s,t.ry+n]]);o&&e.push(o)}const i=this._decorH;for(const t of this._decorList){const s=ac("line"===t.kind?[[t.x1*T_,t.y1*i],[t.x2*T_,t.y2*i]]:"text"===t.kind?[[t.x*T_,t.y*i]]:hr({x:t.x*T_,y:t.y*i,w:t.w*T_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=ac(i);t&&e.push(t)}}return lc(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:T_,h:T_};return{rect:t,all:t,outliers:0}}const e=this._frame,i="view"!==this._mode;if(e&&e.id===t.id&&this._bdDrag)return e;if(e&&e.id===t.id&&e.model===t&&e.layout===this._layout&&e.devs===this._devices&&e.far===this._showFar&&e.grow===i)return e;const s=uc(this._contentItems(t));let n=s.all||pc(t),o=this._showFar?n:s.core||pc(t);return e&&e.id===t.id&&i&&e.grow&&(o=R_(e.rect,o),n=R_(e.all,n)),this._frame={id:t.id,model:t,layout:this._layout,devs:this._devices,far:this._showFar,grow:i,rect:o,all:n,outliers:s.outliers},this._frame}_isoSource(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._openPairs().flatMap(t=>t.segs),s=this._openingsR.map((t,e)=>({id:String(t.id||e),sourceIndex:e,type:t.type,x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen>0?t.rlen:900,flipH:!!t.flip_h,flipV:!!t.flip_v}));return{key:`${t.id}|${function(t){let e=2166136261;const i=t=>{if("number"!=typeof t)if("string"!=typeof t)if("boolean"!=typeof t)if(Array.isArray(t)){e=Jp(e,t.length);for(const e of t)i(e)}else{if(t&&"object"==typeof t){const e=t;for(const t of Object.keys(e).sort())i(t),i(e[t]);return}e=Jp(e,-1)}else e=Jp(e,t?1:0);else for(const i of t)e=Jp(e,i.codePointAt(0)||0);else e=Jp(e,t)};return i(t),e.toString(36)}({rooms:t.rooms,walls:e,openCuts:i,openings:s,partitions:t.partitions,roomDrafts:t.room_drafts,columns:t.wall_columns,cellCm:this._cellCm,gridPitch:this._gridPitch,wallKeyPitch:this._wallKeyPitch,camera:Np,wallHeight:Hp,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),a=e.length||n.length?ul(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,n):null;if((e.length||n.length)&&!a)throw new Error("wall boolean geometry failed");const r=a?.paperGeom??function(t,e,i,s,n,o,a=1){try{const r=hl(t,e,i,s,n,o,a);return r?r.shell?.length?si(r.centre,r.shell):r.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?hd(i.partitionHost,s):e.length||"gate"===t.type?bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length,flip_v:s}):{ox:0,oy:0,cm:0,side:-1};return function(t,e=64){if(!(Zp([t.x,t.y,t.angle,t.length,t.face.ox,t.face.oy,e])&&t.length>0&&e>0))throw new Error("invalid isometric opening input");const i=t.length/2;let s;if("passage"===t.type)s=[];else if("gate"===t.type){const n=t.flipV?-1:1,o=t.face.side*n*10;s=[t_(t,0,[-i,0],[i,0],o,0,.88*e),t_(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[t_(t,0,[-i,0],[i,0],-90,.27*e,.78*e),t_(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[t_(t,0,[-i,0],[t.length,0],-90,0,.92*e)];return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaves:Object.freeze(s.map(t=>Object.freeze(t)))}}({...t,face:n})});return{walls:a?.geom||[],floor:r,openings:Object.freeze(c)}}}}_isoSceneKey(){if(!this._labsIso||"view"!==this._mode)return null;try{return this._isoSource()?.key??null}catch{return`${this._space}|invalid`}}_isoScene(){const t=this._isoSource();if(!t)return null;const e=this._isoGeometryCache.get(t.key);if(e)return{key:t.key,...e};const i=this._frameOf().rect,s=t.build(),n=function(t){let e=1/0,i=1/0,s=-1/0,n=-1/0;for(const o of t)for(const t of o.leaves){const o=Math.hypot(t.closedVector[0],t.closedVector[1]);e=Math.min(e,t.hinge[0]-o),i=Math.min(i,t.hinge[1]-o),s=Math.max(s,t.hinge[0]+o),n=Math.max(n,t.hinge[1]+o)}return Zp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Wp({rect:n?R_(i,n):i,wallHeight:Hp,openingHeight:Hp,floorDepth:10}),a=function(t,e=Np,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let a=0;for(let r=0;r<(t||[]).length;r++){const l=t[r];for(let t=0;t<(l||[]).length;t++){const c=Vp(l[t],t>0);if(!(c.length<3||Math.abs(Gp(c))<1e-9)){s.push(Kp(c,e,i)),a+=c.length;for(let s=0;st.depth-e.depth||t.polygon-e.polygon||t.ring-e.ring||t.edge-e.edge),{topPath:s.join(" "),sides:n,contactPath:o.join(" "),edgeCount:a}}(s.walls),r={geometry:a,floor:Xp(s.floor,10),openings:s.openings,frame:o};return v_(this._isoGeometryCache,t.key,r,8),{key:t.key,...r}}_effectiveProjection(){if("iso"!==this._desiredProjection||!this._model.length)return"flat";const t=this._isoSceneKey()||`${this._space}|invalid`;if(this._isoFallback.has(t))return"flat";try{const t=this._isoScene();return t?(e="iso",i=t.key,s=this._isoFallback,"iso"===e&&i&&!s.has(i)?"iso":"flat"):"flat"}catch(e){if(!this._isoFallback.has(t)){this._isoFallback.add(t);const i=t.split("|");console.warn(`HOUSEPLAN ISO FALLBACK: #89, space ${this._space}, fingerprint ${i[i.length-1]}, ${e instanceof Error?e.message:"renderer error"}`)}return"flat"}var e,i,s}_scenePoint(t){return"iso"===this._renderProjection?Bp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=qp([t.x,t.y]),i=qp([t.x+t.w,t.y+t.h]);return{x:e[0],y:e[1],w:i[0]-e[0],h:i[1]-e[1]}}_baseVb(){if("iso"===this._effectiveProjection()){if(!this._spaceDisplayForRender().showBorders){const t=Wp({rect:this._frameOf().rect,wallHeight:Hp});return[t.x,t.y,t.w,t.h]}const t=this._isoScene()?.frame??this._frameOf().rect;return[t.x,t.y,t.w,t.h]}const t=this._frameOf().rect;return[t.x,t.y,t.w,t.h]}get _outliers(){return this._showFar?0:this._frameOf().outliers}_fitFar(){this._showFar=!0,this._frame=null,this._resetZoom()}_fitAll(){this._showFar=!0,this._frame=null,this._resetZoom()}_renderFarHint(){return this._kiosk||"view"!==this._mode||this._booting||!this._outliers?G:j`
+
`}houseplanContinuityTrace(){return[...this._continuityHistory,...this._continuity.trace].slice(-80).map(t=>({...t,...t.stage?{stage:[...t.stage]}:{}}))}getCardSize(){return 12}get _norm(){return!(!this._serverCfg||!this._serverCfg.spaces.length)}_cfgFingerprint(){const t=this._serverCfg?.spaces||[];let e=t.length+":";for(const i of t){e+=(i.id||"")+","+(i.plan_aspect||"")+","+(i.plan_url||"").length+","+(i.plan_x??"")+","+(i.plan_y??"")+","+(i.plan_scale??"")+","+(i.plan_scale_x??"")+","+(i.plan_scale_y??"")+","+(i.plan_angle??"")+","+(i.rooms?.length||0)+","+(i.openings?.length||0)+","+(i.decor?.length||0)+";";for(const t of i.rooms||[]){const i=t.poly?.[0],s=t.poly?.[t.poly.length-1];e+=(t.poly?.length||0)+"."+(t.id||"")+"."+(t.open_to||[]).join("+")+"."+(t.area||"")+"."+JSON.stringify(t.settings||0)+"."+(t.x??"")+","+(t.y??"")+","+(t.w??"")+","+(t.h??"")+","+(i?i[0]+"/"+i[1]:"")+","+(s?s[0]+"/"+s[1]:"")+";"}}return e}get _model(){if(!this._serverCfg)return[];const t=this._cfgEpoch+"|"+this._cfgFingerprint();if(this._modelCache&&this._modelCache.key===t)return this._modelCache.model;const e=this._buildModel();return this._modelCache={key:t,model:e},e}_buildModel(){if(!this._serverCfg)return[];const t=this._renderCfg;return Kl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return this._hasFixedFloor?rh(this._model,this._space):(t=this._model,e=this._space,t.find(t=>t.id===e)??t[0]);var t,e}_spaceModelById(t){return rh(this._model,t)}_syncEmptySpaceState(){if(!!this._serverCfg&&0===this._serverCfg.spaces.length){if(!this._emptySpaceStateActive){this._emptySpaceStateActive=!0;for(const t of this._pointers.keys())for(const e of this.renderRoot.querySelectorAll("*"))try{e.hasPointerCapture?.(t)&&e.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null,this._drag=null,this._rlResize=null,this._vacFit=null,this._compassDrag=!1,this._cancelModeTransition(!1),this._mode="view",this._clearGeometryGesture(),this._geometryHistory.clear(),this._resumeDraftBySpace={},this._tip=null,this._hoverRoom=null,this._openingInfo=null,this._closeInfoCard(),this._markerDialog=null,this._physicalDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._roomDialog=!1,"edit"===this._spaceDialog?.mode&&(this._spaceDialog=null),this._editorSecondary.closeForNavigation(),this._saveConfigDebounced.cancel(),this._frame=null,this._planSnapGeometryCache=null,this._decorSnapCache=null,this._commitSpace("",!0)}}else this._emptySpaceStateActive=!1}get _areaToSpace(){const t={};for(const e of this._model)for(const i of e.rooms)i.area&&(t[i.area]={space:e.id,room:i});return t}get _settings(){return this._serverCfg?.settings||{}}get _showAll(){return this._settings.filter_seeded?this._showHidden:!!this._settings.show_all}_toggleShowAll(){if(this._serverCfg){if(this._settings.filter_seeded)return this._showHidden=!this._showHidden,void this.requestUpdate();this._serverCfg={...this._serverCfg,settings:{...this._serverCfg.settings,show_all:!this._settings.show_all}},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}}_seedHiddenDevices(){if(!this._serverCfg||!this._norm||!this._canEdit)return;const t=this._serverCfg,e=function(t){const e=t.hass,i=t.registry||An(e),s=zn(e,i),{areaToSpace:n,markers:o,settings:a,excluded:r,iconRules:l}=t,c=!1!==a.group_lights,h=vo(o),d=mo(s,c).filter(t=>!yo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=Bn(s),_=new Set(o.map(t=>t.binding)),g=[];for(const t of Object.values(s.devices)){const o=t.area_id;if(!o||!n[o])continue;if("service"===t.entry_type)continue;if(_.has("device:"+t.id))continue;if("active"!==Ln(e,"device:"+t.id,i).kind)continue;const a=p[t.id]||[],h=qn(s,t,a);let d=r.has(h)||"Group"===t.model||/scene/i.test(t.model||"")||/bridge/i.test((t.model||"")+(t.name||""))||"myheat"===h&&!!t.via_device_id;if(!d&&c&&u.has(o)){const e=(t.name_by_user||t.name||"").trim();"mdi:lightbulb"===fo(s,e,t.model,a,l)&&(d=!0)}d&&g.push("device:"+t.id)}return g}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,firstSpaceId:this._model[0]?.id||"",iconRules:this._iconRules});if(!e.length&&t.settings?.filter_seeded)return;t.markers=t.markers||[];const i=[];for(const s of e){const e="h"+s.slice(s.indexOf(":")+1);t.markers.push({id:e,binding:s,hidden:!0}),i.push(s.slice(s.indexOf(":")+1))}const s={...t.settings||{},filter_seeded:!0};delete s.show_all,i.length&&Array.isArray(s.new_device_ids)&&(s.new_device_ids=s.new_device_ids.filter(t=>!i.includes(t))),t.settings=s,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}get _iconRules(){const t=this._settings.icon_rules;if(!t||!Array.isArray(t)||!t.length)return;const e=JSON.stringify(t);return e!==this._rulesCompiledSrc&&(this._rulesCompiledSrc=e,this._rulesCompiled=Jt(t)),this._rulesCompiled}get _fillColors(){return ds(this._settings)}get _excluded(){const t=this._settings.exclude_integrations;return t?new Set(t):Yt}willUpdate(t){t.has("_serverCfg")&&this._cfgEpoch++,this._syncEmptySpaceState(),t.has("hass")&&this.hass&&(this._hassSequence++,this._renderSnapshotAt=Date.now(),this._continuity.note("hass-snapshot"),this._ensureHaRegistryAuthority(),this._planHassMemo=null,this._hookConnection(),!this._loadOk&&!this._loading&&this._loadTries<8&&this._loadFromServer(),this._maybeRebuildDevices(),this._vacTick(),this._activityTick()),this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._continuity.refreshCompleteFrame(this._visualFrameFingerprint()),this._captureRenderDeviceSnapshot()}updated(){this._pruneDevicePressFeedback(),this._syncDayCycleClock(),this._warmSnapshot(),this._dtMeasure();const t=this._stageEl;t&&!this._roViewport&&(this._roViewport=new ResizeObserver(()=>this._refitView()),this._roViewport.observe(t)),t&&this._booting&&!this._bootTimer&&this._bootWatch();const e=this.renderRoot.querySelector(".hdr");if(e&&t&&!this._roHdr){const i=()=>{const e=this.renderRoot.querySelector("ha-card");if(!e)return;const i=t.getBoundingClientRect().top-e.getBoundingClientRect().top,s=Math.min(Math.max(e.getBoundingClientRect().top,0),120),n=Math.round(i+s);n>=0&&n!==this._hdrH&&(this._hdrH=n),n>=0&&!this._booting&&!this._config?.kiosk&&t.clientHeight>0&&this._warmPatch({hdrH:n,stageH:t.clientHeight})};this._roHdr=new ResizeObserver(()=>requestAnimationFrame(i)),this._roHdr.observe(e),this._onWinResize=()=>requestAnimationFrame(i),window.addEventListener("resize",this._onWinResize),i()}if(t&&!this._view&&this._refitView(),this._editorSecondary.afterRender(),this._settleContinuityFrame(),this._serverStorage&&this._loadOk&&0===this._model.length&&!this._spaceDialog&&!this._importDialog&&!this._onboardingShown){this._onboardingShown=!0;const t=function(t){const e=t?.floors;if(!e||"object"!=typeof e)return[];const i=[];for(const t of Object.values(e))t&&t.floor_id&&i.push({id:t.floor_id,name:t.name||t.floor_id,level:t.level??null});return i.sort((t,e)=>{const i=t.level??1e9,s=e.level??1e9;return i!==s?i-s:t.name.localeCompare(e.name)}),i}(this.hass);t.length?this._importDialog={floors:t.map(t=>({...t,checked:!0}))}:this._openSpaceDialog("create")}}_adoptStructuralResponses(t,e,i){const s=t?.config,n=s&&Array.isArray(s.spaces)?s:null,o=sh(n),a=o!==(this._cfgContentFingerprint||sh(this._serverCfg));if(a&&(this._geometryHistory.clear(),this._serverCfg&&this._clearGeometryGesture(),this._serverCfg=n,this._cfgContentFingerprint=o),this._cfgRev=t?.rev??this._cfgRev,t&&("virtual_lights"in t||"config"in t)){const e=gn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);fn(e)!==fn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let r=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=sh(t);r=s!==(this._layoutContentFingerprint||sh(this._layout)),r&&(this._layout=t,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev}return this._canOptimizeUndo=!(!t?.can_optimize_undo&&!e?.can_optimize_undo),this._undoKind=t?.undo_kind||e?.undo_kind||null,"boolean"==typeof t?.can_write&&(this._serverCanWrite=t.can_write),a&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),r&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:a,layoutChanged:r}}_resumePendingNavMode(){if(!this._pendingNavMode||!this._canEdit||this._config?.kiosk)return!1;const t=this._pendingNavMode;return this._pendingNavMode=null,this._setMode(t,!1),!0}async _loadFromServer(){this._loading=!0,this._loadTries++;const t=this._space,e=!!this._view;try{const[i,s]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]),n=i?.config&&Array.isArray(i.config.spaces)?i.config:null,o=sh(n)!==(this._cfgContentFingerprint||sh(this._serverCfg))||sh(s?.layout??{})!==(this._layoutContentFingerprint||sh(this._layout));if(o){if(!await this._signer.prepareImage(this.hass,this._candidateBackdrop(n)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0)}o&&this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._beginContinuityCandidate("structural-response",!0),this._connectionWasLost=!1,this._serverStorage=!0,"boolean"==typeof i?.can_write&&(this._serverCanWrite=i.can_write),this._canOptimizeUndo=!(!i?.can_optimize_undo&&!s?.can_optimize_undo),this._adoptStructuralResponses(i,s),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._warmVpArmed&&this._space===this._warmVp?.space?this._warmVpArmed=!1:e&&this._space===t||this._restoreZoom(),this._loadOk=!0,this.hass.callWS({type:"houseplan/trail/get"}).then(t=>{this._vacSrvTrails=t?.trails||{},this.requestUpdate()}).catch(()=>{}),this._ensureLiveSyncSubscriptions()}catch(t){if(this._serverCfg)this._scheduleLoadRetry(!0);else if(this._loadTries>=8){this._serverStorage=!1;try{this._layout=JSON.parse(localStorage.getItem($_)||"{}")||{}}catch{this._layout={}}}}finally{this._loading=!1,this._continuityDataReady=!0,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}}_ensureLiveSyncSubscriptions(){const t=this.hass?.connection;if(!t)return;if(t!==this._liveSyncConnection&&(this._unsubCfg?.(),this._unsubCfg=null,this._unsubLayout?.(),this._unsubLayout=null,this._unsubTrail?.(),this._unsubTrail=void 0,this._unsubVirtual?.(),this._unsubVirtual=null,this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=t),this._liveSyncAttempt)return;const e=this._liveSyncGeneration,i=[],s=(s,n,o,a)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(a,o);e===this._liveSyncGeneration&&this.isConnected&&this.hass?.connection===t&&!s()?n(i):i?.()})};if(s(()=>this._unsubCfg,t=>{this._unsubCfg=t},"houseplan_config_updated",t=>{const e=Number(t?.data?.rev??-1);e!==this._cfgRev&&this._reloadConfigOnly(!1,e)}),s(()=>this._unsubTrail,t=>{this._unsubTrail=t},"houseplan_trail_updated",async()=>{try{const t=await this.hass.callWS({type:"houseplan/trail/get"});this._vacSrvTrails=t?.trails||{},this.requestUpdate()}catch{}}),s(()=>this._unsubLayout,t=>{this._unsubLayout=t},"houseplan_layout_updated",t=>this._onLayoutEvent(Number(t?.data?.rev??-1))),s(()=>this._unsubVirtual,t=>{this._unsubVirtual=t},"houseplan_virtual_light_updated",t=>{const e=bn(this._virtualLights,t?.data);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}),!i.length)return;const n=function(t){return Promise.allSettled(t.map(t=>Promise.resolve().then(t)))}(i).then(()=>{});this._liveSyncAttempt=n,n.finally(()=>{this._liveSyncAttempt===n&&(this._liveSyncAttempt=null)})}async _reloadConfigOnly(t=!1,e){if(!t){if(void 0!==e&&e<=this._cfgRev)return;if(this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(()=>this._reloadConfigOnly(!1,e),400))}this._beginContinuityCandidate("config-reload",!1);try{const t=await this.hass.callWS({type:"houseplan/config/get"}),e=t?.config&&Array.isArray(t.config.spaces)?t.config:null;if(sh(e)!==(this._cfgContentFingerprint||sh(this._serverCfg))&&!await this._signer.prepareImage(this.hass,this._candidateBackdrop(e)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0);const i=this._space;this._adoptStructuralResponses(t),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._space!==i&&this._restoreZoom(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}catch(t){this._showToast(this._t("toast.cfg_reload_failed",{err:this._errText(t)}))}finally{this._continuityDataReady=!0,this.requestUpdate()}}_scheduleLoadRetry(t=!1){if(void 0!==this._loadRetryTimer)return;const e=Math.min(8e3,500*2**Math.min(4,Math.max(1,this._loadTries-7)));this._loadRetryTimer=window.setTimeout(()=>{this._loadRetryTimer=void 0,!t&&this._loadOk||this._loading||!this.hass||this._loadFromServer()},e)}_ensureHaRegistryAuthority(){const t=this.hass?.connection||null;t&&t!==this._haRegistryConnection&&(this._haRegistryRelease?.(),this._haRegistryConnection=t,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._haRegistryRelease=Rn(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return An(this.hass)}get _planHass(){const t=this._haRegistry,e=Fn(this.hass,t),i=this._planHassMemo;if(i&&i.hass===this.hass&&i.sig===e)return i.active;const s=zn(this.hass,t),n=On(this.hass,t);return this._planHassMemo={hass:this.hass,sig:e,active:s,full:n},s}_captureRenderDeviceSnapshot(){if(!this.hass)return;const t=Date.now(),e=[...this._activityRt.entries()].map(([e,i])=>`${e}:${i.gen}:${i.flashTs}:`+(i.flashKind&&(i.expiresAt||i.flashTs+Fu)>t?1:0)).join("|"),i=fn(this._virtualLights);if(this._capturedSnapshotSequence===this._hassSequence&&this._capturedSnapshotDevices===this._devices&&this._capturedSnapshotLayout===this._layout&&this._capturedSnapshotConfigEpoch===this._cfgEpoch&&this._capturedSnapshotVirtual===i&&this._capturedSnapshotActivity===e)return;const s=this._planHass,n=new Map,o=new Map,a=new Set(["sun.sun"]);this._vacFit?.source&&a.add(this._vacFit.source);const r=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void a.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?r.add(s):"entity"===i&&a.add(s)};for(const t of this._model)for(const e of t.rooms)e.area&&l.add(e.area),c(e.settings?.temp_source),c(e.settings?.hum_source);for(const t of this._serverCfg?.spaces||[])for(const e of t.openings||[])for(const t of gi(e))a.add(t);for(const t of this._serverCfg?.spaces||[])for(const e of t.decor||[])if("text"===e.kind){for(const t of String(e.text||"").matchAll(/\{([^{}\r\n]+)\}/g)){const e=Ki(t[1]);e?.entity&&a.add(e.entity)}e.entity&&a.add(e.entity),o.set(`decor:${t.id}:${e.id}`,Qi(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!yo(s,t,vo(this._markers))))}const h=ro(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(vu(t.id,e),_u(s,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._devices,lightSources:h,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}));if(this._isVacDev(t)){const e=this._vacSource(t,s),i=e?bh(s?.states?.[e]?.attributes):null,n=this._vacRt.get(t.id);o.set(`vacuum:${t.id}`,{source:e,telemetry:i,mapId:i?this._vacMapId(t,i,s):null,runtime:n?{trail:n.trail,lastTs:n.lastTs,moving:n.moving,jump:n.jump}:null,server:this._vacSrvTrails[t.id]||null})}}const d=fu({sourceSequence:this._hassSequence,hass:s,devices:this._devices,presentations:n,positions:(u=this._model.length>0,p=this._devices,_=t=>this._livePos(t),u?new Map(p.map(t=>[t.id,_(t)])):new Map),facts:o,entityIds:a,deviceIds:r,areaIds:l});var u,p,_;this._capturedSnapshotSequence=this._hassSequence,this._capturedSnapshotDevices=this._devices,this._capturedSnapshotLayout=this._layout,this._capturedSnapshotActivity=e,this._capturedSnapshotConfigEpoch=this._cfgEpoch,this._capturedSnapshotVirtual=i,this._visibleDeviceSnapshot&&"steady"!==this._continuity.state?this._candidateDeviceSnapshot=d:(this._visibleDeviceSnapshot=d,this._candidateDeviceSnapshot=null)}get _renderDeviceSnapshot(){return this._stagedDeviceSnapshotToken===this._continuity.token?this._candidateDeviceSnapshot||this._visibleDeviceSnapshot:this._visibleDeviceSnapshot||this._candidateDeviceSnapshot}get _renderPlanHass(){return this._renderDeviceSnapshot?.hass||this._planHass}get _renderDevices(){return this._renderDeviceSnapshot?.devices||this._devices}get _fullRegistryHass(){return this._planHass,this._planHassMemo?.full||this.hass}_bindingStatus(t){return Ln(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=An(t);return{access:e.access,authoritative:e.authoritative,revision:e.revision,lastSuccess:e.lastSuccess,error:e.error}}(this.hass),e={active:0,ha_disabled:0,orphaned:0,unverified:0};for(const t of this._markers)t.removed||"virtual"===t.binding||e[this._bindingStatus(t.binding).kind]++;return{registry:{...t,lastSuccessAgeMs:t.lastSuccess?Math.max(0,Date.now()-t.lastSuccess):null},bindings:e}}_openBindingInHa(t){const[e,i]=t.split(":");if(i)if("device"!==e){if("entity"===e){const t=this._fullRegistryHass.entities?.[i];t?.device_id&&z_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else z_("/config/devices/device/"+encodeURIComponent(i))}_bindingHasHaPage(t){const[e,i]=t.split(":");return!!i&&("device"===e||"entity"===e&&!!this._fullRegistryHass.entities?.[i]?.device_id)}_toggleMarkerDialogVisibility(){const t=this._markerDialog;if(!t)return;const e="ha"===t.bindingMode?this._bindingStatus(t.binding):null,i=t.hideFromPlan||"ha_disabled"===e?.kind;i&&"ha_disabled"===e?.kind?this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device")):i&&"unverified"===e?.kind?this._showToast(this._t("toast.ha_binding_unverified")):this._markerDialog={...t,hideFromPlan:!i}}_hookConnection(){const t=this.hass?.connection;t&&t!==this._connHooked&&(this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),t.addEventListener?.("ready",this._onConnReady),t.addEventListener?.("disconnected",this._onConnLost),t.addEventListener?.("reconnect-error",this._onConnLost),this._connHooked=t)}_display(t){return this._signer.display(this.hass,t)}_resign(){this._signer.resign(this.hass,Rs(this._serverCfg))}_onLayoutEvent(t){t<=this._layoutRev||(clearTimeout(this._layoutSyncTimer),this._layoutSyncTimer=window.setTimeout(()=>{t<=this._layoutRev||this._reloadLayoutOnly()},200))}_noteLayoutRev(t){const e=t?.rev;"number"==typeof e&&e>this._layoutRev&&(this._layoutRev=e)}async _reloadLayoutOnly(){if(!this._serverStorage||!this.hass?.callWS)return;this._beginContinuityCandidate("layout-reload",!1);const t=new Map;for(const e of this._dirtyPos)this._layout[e]&&t.set(e,this._layout[e]);this._persistLayout.pending()&&this._persistLayout.flush();for(const[e,i]of this._sentPos)t.set(e,i);try{const e=await this.hass.callWS({type:"houseplan/layout/get"}),i={...e?.layout||{}};for(const[e,s]of t)i[e]=s;const s=sh(i);s!==(this._layoutContentFingerprint||sh(this._layout))&&(this._layout=i,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev,this._canOptimizeUndo=!!e?.can_optimize_undo,this._undoKind=e?.undo_kind||null,this._cacheSnapshot(),this.requestUpdate()}catch{}finally{this._continuityDataReady=!0,this.requestUpdate()}}_maybeRebuildDevices(){const t=this.hass;if(!t?.devices||!t?.entities||!t?.areas)return;const e=this._haRegistry,i=Fn(t,e)+":"+Object.keys(t.areas).length+":"+(this._norm?"n":"l")+":"+na(t,this._config?.language);if(i===this._regSignature&&this._devices.length)return;this._regSignature=i;const s=new Map(this._devices.map(t=>[t.id,t.bindingStatus?.kind||"active"]));this._devices=ko({hass:t,registry:e,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||"",loc:t=>this._t(t),iconRules:this._iconRules});const n=this._markers.filter(t=>!t.removed&&"virtual"!==t.binding).map(t=>t.binding).sort(),o=e.revision+":"+n.join("|");if(e.authoritative&&o!==this._haBindingCacheKey){const i=new Map;for(const s of n)i.set(s,Ln(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Nn(),i=Date.now();for(const[s,n]of t)"active"===n.kind?e[s]={kind:"active",ts:i}:"ha_disabled"===n.kind&&(e[s]={kind:"ha_disabled",reason:n.reason,ts:i});const s=Object.fromEntries(Object.entries(e).sort((t,e)=>e[1].ts-t[1].ts).slice(0,1500));Sn=s;try{localStorage.setItem($n,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const a=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())a.has(t)||this._vacRt.delete(t);if(this._infoCard){const t=this._devices.find(t=>t.id===this._infoCard.id);this._infoCard=t&&"ha_disabled"!==t.bindingStatus?.kind?t:null}const r=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));r&&("ha_disabled"!==this._infoCard?.bindingStatus?.kind&&"ha_disabled"!==this._devices.find(t=>t.id===this._infoCard?.id)?.bindingStatus?.kind||this._closeInfoCard(),this._drag&&"ha_disabled"===this._devices.find(t=>t.id===this._drag.id)?.bindingStatus?.kind&&(this._drag=null),clearTimeout(this._holdTimer),this._holdFired=!1,this._tip=null,this._tapConfirm=null),this._nativeMoreInfoEntity&&!this._planEntityAvailable(this._nativeMoreInfoEntity)&&(E_(this,"hass-more-info",{entityId:null}),this._nativeMoreInfoEntity=null)}_syncNewDevices(){if(!this._norm||!this._loadOk||!this._serverCfg)return;const t=this._devices.filter(t=>!t.marker&&!t.virtual).map(t=>t.id).sort(),e=t.join(",");if(e===this._newSyncKey)return;this._newSyncKey=e;const i=this._settings,{fresh:s,known:n}=function(t,e){if(!Array.isArray(e))return{fresh:[],known:[...t]};const i=new Set(e),s=t.filter(t=>!i.has(t));return{fresh:s,known:s.length?[...e,...s]:e}}(t,i.known_devices);if(!Array.isArray(i.known_devices)||s.length){const t=[...new Set([...i.new_device_ids||[],...s])];this._serverCfg={...this._serverCfg,settings:{...i,known_devices:n,new_device_ids:t}},this._saveConfig()}}get _newIds(){const t=this._settings.new_device_ids;return new Set(Array.isArray(t)?t:[])}_ackNewDevice(t){if(!this._newIds.has(t)||!this._serverCfg)return;const e=this._settings;this._serverCfg={...this._serverCfg,settings:{...e,new_device_ids:(e.new_device_ids||[]).filter(e=>e!==t)}},this._saveConfig(),this.requestUpdate()}get _markers(){return this._serverCfg?.markers||[]}_roomLqi(t){if(!t)return null;const e=[];for(const i of this._renderDevices){if(i.area!==t||i.virtual)continue;const s=ho(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return Ei(e)}_roomBounds(t){if(t.poly&&t.poly.length){const e=t.poly.map(t=>t[0]),i=t.poly.map(t=>t[1]),s=Math.min(...e),n=Math.min(...i);return{x:s,y:n,w:Math.max(...e)-s,h:Math.max(...i)-n}}return{x:t.x??0,y:t.y??0,w:t.w??0,h:t.h??0}}_defaultPositions(){const t={},e=this._config?.icon_size??2.5;for(const i of this._model){const s=e/100*gc(i)*1.3;for(const e of i.rooms){if(!e.area)continue;const n=this._devices.filter(t=>t.area===e.area&&t.space===i.id);if(!n.length)continue;const o=this._roomBounds(e),a=.1*Math.min(o.w,o.h),r=o.w-2*a,l=o.h-2*a,c=Math.max(1,Math.round(Math.sqrt(n.length*r/Math.max(l,1)))),h=Math.ceil(n.length/c),d=r/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+a+d*(e%c+.5),y:o.y+a+u*(Math.floor(e/c)+.5)}));Oi(p,o,s,.5*a),n.forEach((e,i)=>t[e.id]=ec(p[i]))}}return t}_pos(t){const e=this._renderDeviceSnapshot?.positions.get(t.id);return e?{x:e.x,y:e.y}:this._livePos(t)}_livePos(t){const e=this._spaceModelById(t.space),i=this._layout[t.id];if(i)if(this._norm){if(i.s===t.space)return{x:i.x*P_,y:i.y*P_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?ec(_c(e)):{x:500,y:500}}_savePos(t,e,i){if(this._spaceModelById(t.space)){if(this._norm){const s=this._gridPitch,n=Math.round(e/s)*s,o=Math.round(i/s)*s,a=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:sc(n/P_),y:sc(o/P_),...a?{k:a}:{}}}}else this._layout={...this._layout,[t.id]:{x:Math.round(e),y:Math.round(i)}};this._dirtyPos.add(t.id),this._persistLayout()}}_visualSamples(t){return cu(this._renderPlanHass,t,this._renderDevices,void 0,this._fullRegistryHass).samples}_devicePresentation(t,e=!1!==this._config?.show_signal,i=!1){const s=i?null:this._renderDeviceSnapshot?.presentations.get(vu(t.id,e));return s||_u(this._renderPlanHass,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,designPreview:i,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._renderDevices,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion})}_deviceVisual(t){return this._devicePresentation(t).visual}_stateClass(t,e=this._deviceVisual(t)){const i=this._devicePresentation(t);return i.effectiveHidden?"":("icon_ripple"!==i.display||!1===this._config?.live_states||"alarm"===e.status||e.activity,pu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=po(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:uo(this._renderPlanHass,t.entities)}_bindingEntities(t){if("virtual"===t||!t)return[];const e=this._bindingStatus(t);return"active"===e.kind?e.enabledEntityIds:e.allEntityIds}_bindingHasClimate(t){return this._bindingEntities(t).some(t=>t.startsWith("climate."))}_bindingHasAlarm(t){return this._bindingEntities(t).some(t=>{const e=this._planHass?.states?.[t]||this.hass?.states?.[t],i=this._fullRegistryHass.entities[t]||this.hass?.entities?.[t];return Ls(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&_o(this.hass,t.primary)?go(this.hass,t.entities):null}_deviceBindingActive(t,e=!0){if(t.virtual||"virtual"===t.bindingKind)return!0;if(!t.bindingKind||!t.bindingRef)return!1;const i=this._bindingStatus(`${t.bindingKind}:${t.bindingRef}`);return"active"===i.kind||(e&&this._showToast(this._t("ha_disabled"===i.kind?"toast.ha_disabled_action":"toast.ha_binding_unverified")),!1)}_openMoreInfo(t){t?this._planEntityAvailable(t)?(this._nativeMoreInfoEntity=t,E_(this,"hass-more-info",{entityId:t})):this._showToast(this._t("toast.ha_disabled_action")):this._showToast(this._t("toast.no_entity"))}_interruptViewGesture(t,e){if(clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),void 0!==t)for(const i of[e,this._stageEl])try{i?.hasPointerCapture?.(t)&&i.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null}_closeInfoCard(){this._interruptViewGesture(),this._holdFired=!1,this._infoCard=null}_ctxDevice(t,e){"view"===this._mode&&(t.preventDefault(),t.stopPropagation(),this._deviceBindingActive(e)&&(e.primary?this._openMoreInfo(e.primary):this._infoCard=e))}_clickDevice(t,e){if(t.stopPropagation(),this._drag?.moved||this._suppressClick||this._holdFired)return;if("plan"===this._mode)return;if("devices"===this._mode)return void this._openMarkerDialog(e);const i=this._devices.find(t=>t.id===e.id);if(!i)return;const s=Yh(i.tapAction,i.primary?.split(".")[0]),n=(t,e)=>{i.marker?.tap_confirm?this._tapConfirm={kind:"run",text:t,exec:e}:e()};if("toggle"===s){const t=this._toggleIntent(i);if(!t||!ed(t))return;const e=t=>{const e=ed(t);if(!e)return;if("virtual-light"===e.kind)return this._startDevicePressFeedback(i.id),void this.hass.callWS({type:"houseplan/virtual_light/toggle",marker_id:e.markerId}).then(t=>{const e=bn(this._virtualLights,t);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}).catch(t=>this._showToast(this._t("toast.virtual_light_toggle_failed",{err:this._errText(t)})));const{command:s}=e;this._startDevicePressFeedback(i.id),this.hass.callService(s.domain,s.service,s.data).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))},s=((o=t).targets.length?o.targets:o.skippedTargets).map(t=>t.name||t.entityId||t.ref).join(", ")||i.name;if(i.marker?.tap_confirm){const n=this._toggleConfirmationLines(t);if(!n.length)return;this._tapConfirm={kind:"toggle",text:this._t("confirm.tap_toggle",{name:s}),lines:n,initialIntent:t,deviceId:i.id,exec:()=>{const s=this._devices.find(t=>t.id===i.id),n=s?this._toggleIntent(s):null;n&&id(t,n)?e(n):this._showToast(this._t("toast.tap_target_changed"))}}}else e(t);return}var o;if("info"===s)return this._interruptViewGesture(),void(this._infoCard=i);if(this._deviceBindingActive(i)){if("run"===s){const t=i.marker?.tap_target||"",e=function(t){const e=String(t||"").split(".")[0];return"automation"===e?{domain:"automation",service:"trigger"}:"script"===e?{domain:"script",service:"turn_on"}:"scene"===e?{domain:"scene",service:"turn_on"}:null}(t),s=this.hass.states[t];if(!e||!s)return void this._showToast(this._t("toast.run_target_missing"));const o=s.attributes?.friendly_name||t;return void n(this._t("confirm.tap_run",{name:o}),()=>{this._deviceBindingActive(i)&&this._planEntityAvailable(t)&&(this._startDevicePressFeedback(i.id),this.hass.callService(e.domain,e.service,{entity_id:t}).then(()=>{this._stampActivity(i.id,"event",this._activitySourceKey(i)),this.requestUpdate(),this._showToast(this._t("toast.run_started",{name:o}))}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)}))))})}"more-info"===s&&i.primary?this._openMoreInfo(i.primary):this._infoCard=i}}_keyDevice(t,e){"Enter"!==t.key&&" "!==t.key||"view"!==this._mode&&"devices"!==this._mode||(t.preventDefault(),this._clickDevice(t,e))}_startDevicePressFeedback(t){const e=[...this.renderRoot.querySelectorAll(".dev[data-id]")].find(e=>e.dataset.id===t),i=e?.querySelector(".device-shell");if(!i||"function"!=typeof i.animate)return;const s=Number.parseFloat(this.ownerDocument.defaultView?.getComputedStyle(i).scale||""),n=Number.isFinite(s)?Math.max(.95,Math.min(1,s)):1;this._devicePressAnimations.get(t)?.cancel();const o=this._reducedMotion?[{outlineColor:"transparent",outlineStyle:"solid",outlineWidth:"0px"},{outlineColor:"var(--hp-accent, #3ea6ff)",outlineStyle:"solid",outlineWidth:"2px",outlineOffset:"2px",offset:.5},{outlineColor:"transparent",outlineStyle:"solid",outlineWidth:"0px"}]:[{scale:String(n)},{scale:"0.95",offset:.5},{scale:"1"}],a=i.animate(o,{duration:200,easing:"cubic-bezier(.22,.61,.36,1)"});this._devicePressAnimations.set(t,a);const r=()=>{this._devicePressAnimations.get(t)===a&&this._devicePressAnimations.delete(t)};a.addEventListener("finish",r,{once:!0}),a.addEventListener("cancel",r,{once:!0})}_cancelDevicePressFeedback(){for(const t of this._devicePressAnimations.values())t.cancel();this._devicePressAnimations.clear()}_pruneDevicePressFeedback(){if(!this._devicePressAnimations.size)return;const t=new Set([...this.renderRoot.querySelectorAll(".dev[data-id]")].map(t=>t.dataset.id||""));for(const[e,i]of this._devicePressAnimations)t.has(e)||(i.cancel(),this._devicePressAnimations.delete(e))}_t(t,e){return oa(na(this.hass,this._config?.language),t,e)}get _colorPickerLabels(){return{title:this._t("color_picker.title"),hue:this._t("color_picker.hue"),saturation:this._t("color_picker.saturation"),value:this._t("color_picker.value"),hex:this._t("color_picker.hex"),invalidHex:this._t("color_picker.invalid_hex")}}_help(t){const e=`${t}.aria`,i=na(this.hass,this._config?.language);return aa(i,t)&&aa(i,e)?j``:G}get _stageEl(){return this.renderRoot.querySelector(".stage")}_contentItems(t){const e=[];for(const i of this._devices){if(i.space!==t.id||i.hidden)continue;const s=this._pos(i);e.push({minX:s.x,minY:s.y,maxX:s.x,maxY:s.y})}if(t.id===this._space){for(const t of this._openingsR){const i=Number(t.angle)*Math.PI/180,s=Math.cos(i)*t.rlen/2,n=Math.sin(i)*t.rlen/2,o=ac([[t.rx-s,t.ry-n],[t.rx+s,t.ry+n]]);o&&e.push(o)}const i=this._decorH;for(const t of this._decorList){const s=ac("line"===t.kind?[[t.x1*P_,t.y1*i],[t.x2*P_,t.y2*i]]:"text"===t.kind?[[t.x*P_,t.y*i]]:hr({x:t.x*P_,y:t.y*i,w:t.w*P_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=ac(i);t&&e.push(t)}}return lc(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:P_,h:P_};return{rect:t,all:t,outliers:0}}const e=this._frame,i="view"!==this._mode;if(e&&e.id===t.id&&this._bdDrag)return e;if(e&&e.id===t.id&&e.model===t&&e.layout===this._layout&&e.devs===this._devices&&e.far===this._showFar&&e.grow===i)return e;const s=uc(this._contentItems(t));let n=s.all||pc(t),o=this._showFar?n:s.core||pc(t);return e&&e.id===t.id&&i&&e.grow&&(o=A_(e.rect,o),n=A_(e.all,n)),this._frame={id:t.id,model:t,layout:this._layout,devs:this._devices,far:this._showFar,grow:i,rect:o,all:n,outliers:s.outliers},this._frame}_isoSource(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._openPairs().flatMap(t=>t.segs),s=this._openingsR.map((t,e)=>({id:String(t.id||e),sourceIndex:e,type:t.type,x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen>0?t.rlen:900,flipH:!!t.flip_h,flipV:!!t.flip_v}));return{key:`${t.id}|${function(t){let e=2166136261;const i=t=>{if("number"!=typeof t)if("string"!=typeof t)if("boolean"!=typeof t)if(Array.isArray(t)){e=Zp(e,t.length);for(const e of t)i(e)}else{if(t&&"object"==typeof t){const e=t;for(const t of Object.keys(e).sort())i(t),i(e[t]);return}e=Zp(e,-1)}else e=Zp(e,t?1:0);else for(const i of t)e=Zp(e,i.codePointAt(0)||0);else e=Zp(e,t)};return i(t),e.toString(36)}({rooms:t.rooms,walls:e,openCuts:i,openings:s,partitions:t.partitions,roomDrafts:t.room_drafts,columns:t.wall_columns,cellCm:this._cellCm,gridPitch:this._gridPitch,wallKeyPitch:this._wallKeyPitch,camera:Np,wallHeight:Lp,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),a=e.length||n.length?ul(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,n):null;if((e.length||n.length)&&!a)throw new Error("wall boolean geometry failed");const r=a?.paperGeom??function(t,e,i,s,n,o,a=1){try{const r=hl(t,e,i,s,n,o,a);return r?r.shell?.length?si(r.centre,r.shell):r.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?hd(i.partitionHost,s):e.length||"gate"===t.type?bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length,flip_v:s}):{ox:0,oy:0,cm:0,side:-1};return function(t,e=64){if(!(Qp([t.x,t.y,t.angle,t.length,t.face.ox,t.face.oy,e])&&t.length>0&&e>0))throw new Error("invalid isometric opening input");const i=t.length/2;let s;if("passage"===t.type)s=[];else if("gate"===t.type){const n=t.flipV?-1:1,o=t.face.side*n*10;s=[e_(t,0,[-i,0],[i,0],o,0,.88*e),e_(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[e_(t,0,[-i,0],[i,0],-90,.27*e,.78*e),e_(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[e_(t,0,[-i,0],[t.length,0],-90,0,.92*e)];return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaves:Object.freeze(s.map(t=>Object.freeze(t)))}}({...t,face:n})});return{walls:a?.geom||[],floor:r,openings:Object.freeze(c)}}}}_isoSceneKey(){if(!this._labsIso||"view"!==this._mode)return null;try{return this._isoSource()?.key??null}catch{return`${this._space}|invalid`}}_isoScene(){const t=this._isoSource();if(!t)return null;const e=this._isoGeometryCache.get(t.key);if(e)return{key:t.key,...e};const i=this._frameOf().rect,s=t.build(),n=function(t){let e=1/0,i=1/0,s=-1/0,n=-1/0;for(const o of t)for(const t of o.leaves){const o=Math.hypot(t.closedVector[0],t.closedVector[1]);e=Math.min(e,t.hinge[0]-o),i=Math.min(i,t.hinge[1]-o),s=Math.max(s,t.hinge[0]+o),n=Math.max(n,t.hinge[1]+o)}return Qp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Up({rect:n?A_(i,n):i,wallHeight:Lp,openingHeight:Lp,floorDepth:10}),a=function(t,e=Np,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let a=0;for(let r=0;r<(t||[]).length;r++){const l=t[r];for(let t=0;t<(l||[]).length;t++){const c=Kp(l[t],t>0);if(!(c.length<3||Math.abs(Vp(c))<1e-9)){s.push(Yp(c,e,i)),a+=c.length;for(let s=0;st.depth-e.depth||t.polygon-e.polygon||t.ring-e.ring||t.edge-e.edge),{topPath:s.join(" "),sides:n,contactPath:o.join(" "),edgeCount:a}}(s.walls),r={geometry:a,floor:Jp(s.floor,10),openings:s.openings,frame:o};return y_(this._isoGeometryCache,t.key,r,8),{key:t.key,...r}}_effectiveProjection(){if("iso"!==this._desiredProjection||!this._model.length)return"flat";const t=this._isoSceneKey()||`${this._space}|invalid`;if(this._isoFallback.has(t))return"flat";try{const t=this._isoScene();return t?(e="iso",i=t.key,s=this._isoFallback,"iso"===e&&i&&!s.has(i)?"iso":"flat"):"flat"}catch(e){if(!this._isoFallback.has(t)){this._isoFallback.add(t);const i=t.split("|");console.warn(`HOUSEPLAN ISO FALLBACK: #89, space ${this._space}, fingerprint ${i[i.length-1]}, ${e instanceof Error?e.message:"renderer error"}`)}return"flat"}var e,i,s}_scenePoint(t){return"iso"===this._renderProjection?qp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=jp([t.x,t.y]),i=jp([t.x+t.w,t.y+t.h]);return{x:e[0],y:e[1],w:i[0]-e[0],h:i[1]-e[1]}}_baseVb(){if("iso"===this._effectiveProjection()){if(!this._spaceDisplayForRender().showBorders){const t=Up({rect:this._frameOf().rect,wallHeight:Lp});return[t.x,t.y,t.w,t.h]}const t=this._isoScene()?.frame??this._frameOf().rect;return[t.x,t.y,t.w,t.h]}const t=this._frameOf().rect;return[t.x,t.y,t.w,t.h]}get _outliers(){return this._showFar?0:this._frameOf().outliers}_fitFar(){this._showFar=!0,this._frame=null,this._resetZoom()}_fitAll(){this._showFar=!0,this._frame=null,this._resetZoom()}_renderFarHint(){return this._kiosk||"view"!==this._mode||this._booting||!this._outliers?G:j`
${this._t("canvas.far_objects",{n:this._outliers})} @@ -4746,7 +4763,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 style="left:${r.toFixed(1)}%;top:${l.toFixed(1)}%" @click=${t=>{t.stopPropagation(),this._fitAll()}}> - `}_stageAspect(){const t=this._stageEl,e=this._baseVb();return t&&t.clientHeight?t.clientWidth/t.clientHeight:e[2]/e[3]}_viewOr(t){return this._view&&this._view.w?this._view:zi(t,this._stageAspect())}_roomLabelReferenceViewWidth(t){if(!this._markup)return t.w;const e=this._stageEl,i=this.renderRoot.querySelector(".editorchrome");if(!e||e.clientWidth<=0||e.clientHeight<=0)return t.w;const s=e.clientHeight+(i?.getBoundingClientRect().height||0);return s<=0?t.w:this._viewForModeTarget(this._zoom,void 0,void 0,e.clientWidth,s).w}_screenToVb(t,e){const i=this._stageEl,s=this._viewOr(this._baseVb()),n=i?.clientWidth||1,o=i?.clientHeight||1;return[s.x+t/n*s.w,s.y+e/o*s.h]}_clampView(t,e){const i=(t,e,i,s)=>{const n=1*Math.max(e,s),o=i-n,a=i+s-e+n;return Math.max(Math.min(o,a),Math.min(Math.max(o,a),t))};return{w:t.w,h:t.h,x:i(t.x,t.w,e.x,e.w),y:i(t.y,t.h,e.y,e.h)}}_applyView(t,e,i){const s=this._baseVb(),n=zi(s,this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),a=n.w/o,r=n.h/o,l=this._viewOr(s),c=e??l.x+l.w/2,h=i??l.y+l.h/2,d=this._clampView({x:c-a/2,y:h-r/2,w:a,h:r},n);return!(this._view&&Math.abs(this._zoom-o)<1e-9&&Math.abs(this._view.x-d.x)<1e-6&&Math.abs(this._view.y-d.y)<1e-6&&Math.abs(this._view.w-d.w)<1e-6&&Math.abs(this._view.h-d.h)<1e-6)&&("opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=o,this._view=d,!0)}_bootWatch(){clearTimeout(this._bootTimer),this._bootStart=Date.now(),this._bootLastH=-1,this._bootLastChange=this._bootStart;const t=()=>{if(!this._booting)return;const e=Date.now(),i=this._stageEl?this._stageEl.clientHeight:0;i!==this._bootLastH&&(this._bootLastH=i,this._bootLastChange=e);const s=e-this._bootStart;s>=1200||s>=700&&i>0&&e-this._bootLastChange>=250?this._bootSettled():this._bootTimer=window.setTimeout(t,100)};this._bootTimer=window.setTimeout(t,100)}_bootSettled(){this._booting&&!this._bootSettling&&(this._bootSettling=!0,this._refitView(),this._bootSettleRaf=requestAnimationFrame(()=>{this._bootSettleRaf=0,this._finishBootSettled()}))}_finishBootSettled(){if(!this._booting)return;this._refitView(),this._booting=!1,this._bootSettling=!1;const t=this._stageEl?.clientHeight??0;!this._config?.kiosk&&t>0&&this._warmPatch({hdrH:this._hdrH,stageH:t,vp:this._warmViewportState()},!0),this._bootFading=!0,this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220),this._bootSoft=!0,clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)}_bootSoftCancel(){this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoft=!1)}_beginResumeSettle(){this._booting||this._resumeSettling||(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0),this._viewportInvalidAt=0,this._beginContinuityCandidate("warm-resume",!1),this._loading?this.requestUpdate():this._loadFromServer())}_refitView(){if(this._modeTransitionBusy)return;const t=this._stageEl;if(!t||"visible"!==document.visibilityState||t.clientWidth<=0||t.clientHeight<=0)return void(this._viewportInvalidAt||(this._viewportInvalidAt=Date.now()));const e=[t.clientWidth,t.clientHeight],i=this._lastValidStageSize,s=!!i&&Math.abs(i[0]-e[0])<=.5&&Math.abs(i[1]-e[1])<=.5,n=this._viewportInvalidAt?Date.now()-this._viewportInvalidAt:0;if(this._viewportInvalidAt=0,!i)return this._lastValidStageSize=e,void(this._view||this._applyView(this._zoom));s?this._pendingRefitSize=null:(this._pendingRefitSize=e,this._refitRaf||(this._refitRaf=requestAnimationFrame(()=>{this._refitRaf=0;const t=this._pendingRefitSize;this._pendingRefitSize=null;const e=this._stageEl;if(!t||!e||e.clientWidth<=0||e.clientHeight<=0)return;if(Math.abs(e.clientWidth-t[0])>.5||Math.abs(e.clientHeight-t[1])>.5)return void this._refitView();const i=this._lastValidStageSize;if(i&&Math.abs(i[0]-t[0])<=.5&&Math.abs(i[1]-t[1])<=.5)return;this._lastValidStageSize=t;const s=this._view;n>=Jc?this._beginContinuityCandidate("stage-size-restored",!0,"stage-size"):this._continuity.hasCompleteFrame&&this._beginContinuityCandidate("stage-resize",!0,"stage-size"),this._applyView(this._zoom,s?s.x+s.w/2:void 0,s?s.y+s.h/2:void 0)})))}_zoomAt(t,e,i){const s=this._stageEl;if(!s)return;const n=zi(this._baseVb(),this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const a=s.clientWidth,r=s.clientHeight,l=this._screenToVb(t,e),c=n.w/o,h=n.h/o;this._zoom=o,this._view=this._clampView({x:l[0]-t/a*c,y:l[1]-e/r*h,w:c,h:h},n)}_onWheel(t){const e=this._stageEl;if(!e)return;t.preventDefault();const i=e.getBoundingClientRect(),s=t.deltaY<0?1.15:1/1.15;this._zoomAt(t.clientX-i.left,t.clientY-i.top,this._zoom*s),this._saveZoom()}_stepZoom(t){const e=this._stageEl;e&&(this._zoomAt(e.clientWidth/2,e.clientHeight/2,this._zoom*(t>0?1.4:1/1.4)),this._saveZoom())}_resetZoom(){const t=this._baseVb();"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=1,this._view=zi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(S_,JSON.stringify(this._zoomBySpace))}catch{}}}_restoreZoom(){const t=this._zoomBySpace[this._space]||1;this._zoom=t;const e=this._stageEl;if(e&&e.clientHeight){const e=this._baseVb();return this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),void this.requestUpdate()}this._view=null,requestAnimationFrame(()=>{if(!this._stageEl)return;const e=this._baseVb();this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),this.requestUpdate()})}_stagePointerDown(t){if(this._vacFit)return;if(this._kiosk&&(this._cyclePausedUntil=Date.now()+6e4,0===this._pointers.size?(this._swipeStart={x:t.clientX,y:t.clientY,id:t.pointerId},t.target.closest?.(".dev, .roomlabel, .oplock")||(clearTimeout(this._kioskHoldTimer),this._kioskHoldTimer=window.setTimeout(()=>{this._kioskDialog=!0,this._swipeStart=null},3e3))):(this._swipeStart=null,clearTimeout(this._kioskHoldTimer))),this._drag)return;if(this._markup&&t.target.closest?.(".roomlabel, .rlhandle, .rszhandle, .dev, .oplock, .op-hit, button"))return;if("devices"===this._mode&&t.target.closest(".dev"))return;if("decor"===this._mode&&this._decorPointerDown(t))return;this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});const e=this._viewOr(this._baseVb());if(1===this._pointers.size)this._panStart={sx:t.clientX,sy:t.clientY,vx:e.x,vy:e.y},this._panLock=null,this._suppressClick=!1;else if(2===this._pointers.size){this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);this._pinchStart={dist:e,zoom:this._zoom},this._panStart=null,this._panLock=null}}get _swipeZone(){return!this._hasFixedFloor&&this._kiosk&&this._zoom<=1.001&&this._model.length>1}_stagePointerMove(t){if(this._physicalRotate?.pid!==t.pointerId)if(this._physicalDrag?.pid!==t.pointerId)if(this._dtDrag?.pid!==t.pointerId)if(this._bdDrag?.pid!==t.pointerId){if(this._decorDraft?.pid===t.pointerId){const e=this._decorDraft;let i=this._decorSnap(this._svgPoint(t),t.pointerType);if(t.shiftKey&&("rect"===e.kind||"ellipse"===e.kind)){const t=i[0]-e.a[0],s=i[1]-e.a[1],n=Math.max(Math.abs(t),Math.abs(s));i=this._snap([e.a[0]+(t<0?-n:n),e.a[1]+(s<0?-n:n)])}return void(this._decorDraft={...e,b:i})}if(this._decorMove?.pid!==t.pointerId)if(this._pointers.has(t.pointerId)){if(this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),this._markup&&1===this._pointers.size&&this._markupMove(t),this._pinchStart&&this._pointers.size>=2){"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)/(this._pinchStart.dist||1),i=this._stageEl.getBoundingClientRect(),s=(t[0].x+t[1].x)/2-i.left,n=(t[0].y+t[1].y)/2-i.top;this._zoomAt(s,n,this._pinchStart.zoom*e),this._suppressClick=!0,this._saveZoom()}else if(this._panStart){const e=t.clientX-this._panStart.sx,i=t.clientY-this._panStart.sy;Math.abs(e)+Math.abs(i)>4&&(this._suppressClick=!0,clearTimeout(this._holdTimer),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover()),null===this._panLock&&Math.abs(e)+Math.abs(i)>8&&(this._panLock=this._swipeZone&&Math.abs(e)>1.5*Math.abs(i)?"swipe":"pan");const s=this._stageEl;if("pan"===this._panLock&&s){const t=this._baseVb(),n=this._viewOr(t),o=zi(t,this._stageAspect());this._view=this._clampView({x:this._panStart.vx-e/(s.clientWidth||1)*n.w,y:this._panStart.vy-i/(s.clientHeight||1)*n.h,w:n.w,h:n.h},o)}}}else this._markupMove(t);else this._decorMoveUpdate(t)}else this._bdMove(t);else this._dtMove(t);else this._physicalMove(t);else this._physicalRotateMove(t)}_stagePointerLeave(t){this._markup&&("opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover())}_stagePointerUp(t){if(this._kiosk){clearTimeout(this._kioskHoldTimer);const e=this._swipeStart;if(this._swipeStart=null,e&&e.id===t.pointerId){const i=t.clientX-e.x,s=t.clientY-e.y;if(Math.abs(i)+Math.abs(s)<8){const t=Date.now();t-this._lastTap<350&&this._resetZoom(),this._lastTap=t}const n="pan"===this._panLock?null:function(t,e,i,s,n,o=60){if(i>1.001||s.length<2)return null;if(Math.abs(t)t.id),this._space);n&&this._slideTo(n,i<0?"left":"right")&&(this._saveNav(),this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._showKioskDots())}}if(this._physicalDrag?.pid===t.pointerId)return void this._physicalUp(t);if(this._physicalRotate?.pid===t.pointerId)return void this._physicalRotateUp(t);if(this._dtDrag?.pid===t.pointerId)return void this._dtUp();if(this._bdDrag?.pid===t.pointerId)return void this._bdUp();if(this._decorDraft?.pid===t.pointerId)return void this._decorCommitDraft();if(this._decorMove?.pid===t.pointerId)return this._decorMove.moved&&(this._recordGeometry(this._t("history.decor_move"),this._decorMove.before),this._saveConfig()),void(this._decorMove=null);const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null,setTimeout(()=>this._suppressClick=!1,0)),e&&0===this._pointers.size&&this.requestUpdate()}_clickRoom(t){!this._suppressClick&&t.area&&E_("/config/areas/area/"+t.area)}_pointerDown(t,e){if("plan"===this._mode)return;if("view"===this._mode){this._holdFired=!1,clearTimeout(this._holdTimer);const i=t.pointerId,s=t.currentTarget;return void(this._holdTimer=window.setTimeout(()=>{this._holdFired=!0,this._interruptViewGesture(i,s),this._infoCard=e},600))}if("ha_disabled"===e.bindingStatus?.kind)return;t.preventDefault();const i=this._pos(e);this._drag={id:e.id,sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},O_(t),this._tip=null}_pointerMove(t,e){if(!this._drag||this._drag.id!==e.id)return;const i=this.renderRoot.querySelector(".stage");if(!i)return;const s=this._baseVb(),n=i.getBoundingClientRect(),o=this._viewOr(s),a=(t.clientX-this._drag.sx)/n.width*o.w,r=(t.clientY-this._drag.sy)/n.height*o.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0,clearTimeout(this._holdTimer));const l=ic(this._drag.ox+a),c=ic(this._drag.oy+r);this._savePos(e,l,c)}_pointerUp(t,e){if(clearTimeout(this._holdTimer),!this._drag||this._drag.id!==e.id)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&(this._selId=e.id,window.setTimeout(()=>this._drag=null,0))}_showToast(t){for(const t of this.renderRoot.querySelectorAll("hp-dialog"))t.closeTransientOverlays("toast");this._toast=t,clearTimeout(this._toastTimer),this._toastTimer=window.setTimeout(()=>{this._toast=""},3500)}get _noHover(){return N_._noHoverMq||N_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(N_._touchSeen=!0,this._tip&&(this._tip=null))}_guardTouchGesture(t){if(this._editorSecondary.handleOutsideDismiss(t))return;if("click"===t.type){if(!this._suppressClick&&!this._touchSequenceMultitouch&&Date.now()>this._touchClickBlockUntil)return;return t.preventDefault(),void t.stopImmediatePropagation()}const e=t;if("touch"===e.pointerType)if(this._notePointer(e),"pointerdown"!==t.type){if("pointermove"===t.type){const t=this._touchContacts.get(e.pointerId);if(!t)return;const i={...t,x:e.clientX,y:e.clientY};if(this._touchContacts.set(e.pointerId,i),this._touchSequenceMultitouch&&"view"===this._mode&&!this._vacFit&&this._pinchStart&&[...this._touchContacts.values()].every(t=>t.inStage)){this._pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=[...this._touchContacts.values()];if(t.length>=2&&this._stageEl){const[e,i]=t,s=Math.hypot(e.x-i.x,e.y-i.y)/(this._pinchStart.dist||1),n=this._stageEl.getBoundingClientRect();this._zoomAt((e.x+i.x)/2-n.left,(e.y+i.y)/2-n.top,this._pinchStart.zoom*s),this._saveZoom()}}return}if("pointerup"===t.type||"pointercancel"===t.type){if(this._touchContacts.delete(e.pointerId),this._touchSequenceMultitouch){if(this._touchClickBlockUntil=Date.now()+500,this._pointers.delete(e.pointerId),!this._vacFit&&this._pointers.size>=2){const[t,e]=[...this._pointers.values()];this._pinchStart={dist:Math.hypot(t.x-e.x,t.y-e.y),zoom:this._zoom}}else this._pinchStart=null;0===this._pointers.size&&(this._panStart=null,this._panLock=null)}0===this._touchContacts.size&&(this._touchSequenceMultitouch=!1)}}else if(this._touchContacts.set(e.pointerId,{x:e.clientX,y:e.clientY,inStage:!!e.target?.closest?.(".stage")}),this._touchContacts.size>=2){this._touchSequenceMultitouch=!0,this._touchClickBlockUntil=Number.POSITIVE_INFINITY,clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),this._swipeStart=null;const t=[...this._touchContacts.values()];if("view"===this._mode&&!this._vacFit&&t.every(t=>t.inStage)){this._pointers=new Map([...this._touchContacts].map(([t,e])=>[t,{x:e.x,y:e.y}]));const[e,i]=t;this._pinchStart={dist:Math.hypot(e.x-i.x,e.y-i.y),zoom:this._zoom},this._panStart=null,this._panLock=null}else this._vacFit&&(this._pointers.clear(),this._pinchStart=null,this._panStart=null,this._panLock=null)}}_showTip(t,e,i,s,n,o){this._noHover||this._drag||(this._tip={x:t.clientX,y:t.clientY,title:e,meta:i,lqi:s,temp:n,hum:o})}get _gridPitch(){return Zl}get _cellCm(){const t=Number(this._curSpaceCfg?.cell_cm);return Number.isFinite(t)&&t>0?t:5}_fmtLen(t,e){const i=function(t,e,i,s){return Math.hypot(e[0]-t[0],e[1]-t[1])/i*s}(t,e,this._gridPitch,this._cellCm);return ri(i,"mi"===this.hass?.config?.unit_system?.length)}get _curSpaceCfg(){const t=this._rszPreview;return t&&t.space===this._space?t.sp:this._serverCfg?.spaces.find(t=>t.id===this._space)}get _renderCfg(){const t=this._rszPreview;return t&&this._serverCfg?{...this._serverCfg,spaces:this._serverCfg.spaces.map(e=>e.id===t.space?t.sp:e)}:this._serverCfg}get _spaceH(){return this._curSpaceCfg,T_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*T_,t[1]*e,t[2]*T_,t[3]*e])}_savedNav(){if(this._hasFixedFloor)return null;try{return JSON.parse(localStorage.getItem(M_)||"null")}catch{return null}}_saveNav(){if(!this._hasFixedFloor)try{localStorage.setItem(M_,JSON.stringify({space:this._space}))}catch{}}_leaveCardRoute(){if(this._routeDepartureHandled)return;this._routeDepartureHandled=!0,"view"!==this._mode&&this._setMode("view",!1),this._pendingNavMode=null,this._geometryHistory.clear(),this._activeDraftId=null,this._resumeDraftBySpace={},this._draftSegmentCms=[],this._closingWallCm=null,this._drawWallField=null,this._showHidden=!1,this._tapConfirm=null,this._vacCalConfirm=null,this._decorEraseConfirm=null,this._openingInfo=null,this._closeInfoCard(),this._rulesDialog=null,this._alignDialog=null,this._backupImportDialog=null,this._backupExportDialog=null,this._settingsDialog=null,this._markerDialog=null,this._openingDialog=null,this._physicalDialog=null,this._wallDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._mergeDialog=null,this._roomDialog=!1,this._spaceDialog=null,this._importDialog=null;const t=this._warmSlot;t?.owner===this._warmGen&&(t.vp=this._warmViewportState(),t.dlg=null,t.frameFingerprint="",clearTimeout(t.evict),t.evict=0),this._saveNav()}_setMode(t,e=!0){this._pendingNavMode=null;const i=this._spaceModel();if(!i)return this._cancelModeTransition(!1),void(this._mode="view");if(this._kiosk&&"view"!==t)return;if(this._mode===t){if(!e&&"view"===t&&this._modeTransitionBusy){const e=this._currentModeVisual(t),i=this._modeTransitionTargetZoom,s=this._modeTransitionTargetCenterX,n=this._modeTransitionTargetCenterY;this._cancelModeTransition(!1),this._commitViewModeAtomic(e,i,s,n)}return}if(this._bootSoftCancel(),("plan"===t||"decor"===t)&&!this._norm)return void this._showToast(this._t("toast.markup_needs_server"));if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;const s=this._mode,n=this._effectiveProjection(),o=this._currentModeVisual(s),a=this._modeTransitionBusy,r=o&&"view"!==s&&"view"!==t?{...o,toolbarContentOpacity:this._reducedMotion?1:.35}:o;this._cancelModeTransition(!1),this._editorSecondary.closeForNavigation(),(this._decorMove||this._dtDrag||this._bdDrag)&&this._cancelDecorGesture();const l=!i.bg&&"view"===t!=("view"===s),c=a&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(a?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:a?this._modeTransitionTargetCenterX:r?.viewport.centerX,u=c?c.centerY:a?this._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===s&&"view"!==t&&!a){const e=this._view;if(this._viewModeSnap={space:this._space,zoom:this._zoom,cx:e?this._logicalViewCenter(n)?.x:void 0,cy:e?this._logicalViewCenter(n)?.y:void 0},"iso"===n){const e=this._logicalViewCenter("iso");d=e?.x,u=e?.y,this._view=null,this._mode=t,this._applyView(this._zoom,e?.x,e?.y)}l&&(h=1,d=void 0,u=void 0)}if("plan"===s&&this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._mode=t,this._editorChromeMode="view"===t?s:t,"view"===t){"view"===s||a||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this._viewModeSnap;if(t&&t.space===this._space){h=t.zoom;const e=this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat",i=null!=t.cx&&null!=t.cy&&"iso"===e?Bp([t.cx,t.cy],0):null;d=i?.[0]??t.cx,u=i?.[1]??t.cy}else t&&(h=this._zoomBySpace[this._space]||1,d=void 0,u=void 0)}else this._modeTransitionEditorCamera={zoom:h,centerX:d,centerY:u};this._modeTransitionTargetZoom=h,this._modeTransitionTargetCenterX=d,this._modeTransitionTargetCenterY=u,("iso"===n||"view"===t&&this._labsIso&&"iso"===this._viewPreference[this._space])&&(this._modeTransitionForceAtomic=!0);const p=++this._modeTransitionRequest;e?r?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=r,this._prepareModeTransition(p,r,t,h,d,u)):(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._zoom=h,this._view=null,requestAnimationFrame(()=>{this.isConnected&&p===this._modeTransitionRequest&&this._mode===t&&(this._applyView(h,d,u),"view"===t&&(this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate())})):"view"===t&&this._commitViewModeAtomic(r,h,d,u),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._tool="draw",this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._selId=null,this._physicalSel=null,this._physicalDialog=null,this._physicalDrag=null,this._rszSel=null,this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._tip=null,this._hoverRoom=null,this._decorDraft=null,this._decorSel=null,this._decorMove=null,this._backdropDialog=null,this._decorTool="select",this._bdDrag=null,this._dtDrag=null,this._dtBox=null,"plan"===t&&(this._primeDrawWallField(),this._resumeLastDraft()),this._saveNav()}_primeDrawWallField(){null===this._drawWallField&&(this._drawWallField=fr(_r,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?fr(_r,this._imperial):this._drawWallField}get _drawWallCm(){const t=m_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?$l:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?$l:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:fr(t,this._imperial),unit:this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_draftSegmentCount(t=this._curSpaceCfg){return(t?.room_drafts||[]).reduce((t,e)=>t+(Array.isArray(e.segments)?e.segments.length:0),0)}_finishWallChain(){if("draw"!==this._tool||this._wallFaceBatch||this._roomDialog)return!0;const t=this._curSpaceCfg;if(!t||this._path.length<2)return this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0;const e=Sd(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>I_)return this._showToast(this._t("toast.physical_limit")),!1;const s=this._geometrySnapshot();t.partitions||=[];const n=Date.now().toString(36);for(let s=0;st.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.wall_chain_finish"),s),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0}_activateMarkupTool(t){t!==this._tool&&(this._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this._tool||this._finishWallChain())&&(this._cancelPath(),this._tool=t,"draw"===t&&this._resumeLastDraft(),"resize"===t&&(this._rszSel=null),"boundary"!==t&&"wallthick"!==t||(this._wallDialog=null)))}_limitReached(t){const e=this._curSpaceCfg;if(!e)return!0;const i="draft"===t?(e.room_drafts||[]).length>=200:"partition"===t?(e.partitions||[]).length>=I_:(e.wall_columns||[]).length>=500;return i&&this._showToast(this._t("toast.physical_limit")),i}_svgPoint(t){const e=this.renderRoot.querySelector(".stage").getBoundingClientRect();return this._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this._gridPitch;return[ic(ai(t[0],e)),ic(ai(t[1],e))]}_snapDrawPoint(t,e=!1){const i=this._path[this._path.length-1],s=e&&i?function(t,e,i,s=1/0){if(!(i>0&&t?.every(Number.isFinite)&&e?.every(Number.isFinite)))return[e[0],e[1]];const n=e[0]-t[0],o=e[1]-t[1];if(Math.abs(n)+Math.abs(o)<=1e-12)return[t[0],t[1]];const a=Math.PI/4;let r=Math.atan2(o,n);r<0&&(r+=2*Math.PI);const l=Math.floor(r/a+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((n*c+o*h)/(i*d)));if(Number.isFinite(s)&&s>=0){const e=(t,e)=>{if(!e)return 1/0;const n=e>0?s-t:t+s;return Math.max(0,Math.floor((n+1e-9*i)/i))};u=Math.min(u,e(t[0],c),e(t[1],h))}return[t[0]+c*u*i,t[1]+h*u*i]}(i,t,this._gridPitch,Xl):t;return this._snap(s)}_planSnapOpeningCuts(t,e){if(!this._openingsR.length)return[];const i=this._openingWallIndexFor(t,e).value,s=[];for(const e of this._roomWallOpeningInputs(this._openingsR,t)){const t=yl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,a=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-a,e.x+o,e.y+a])}return s}_planSnapGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planSnapGeometryCache?.key===e)return this._planSnapGeometryCache;const i=this._openCuts(),s=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:[...i,...this._planSnapOpeningCuts(t,i)],partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this._gridPitch});return this._planSnapGeometryCache={key:e,value:s},this._planSnapGeometryCache}_planStructuralGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planStructuralGeometryCache?.key===e)return this._planStructuralGeometryCache;const i=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:this._openCuts(),epsilon:2e-4*this._gridPitch});return this._planStructuralGeometryCache={key:e,value:i},this._planStructuralGeometryCache}_planSnapContextKey(t){const e=this._path[0],i=this._path[this._path.length-1];return[t,this._tool,this._path.length,e?`${e[0]},${e[1]}`:"",i?`${i[0]},${i[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const i=this._planSnapGeometrySnapshot(),s=this._path[this._path.length-1],n="draw"===this._tool&&this._path.length>=3?[{point:this._path[0],key:"closure:first-point"}]:[],o=function(t,e,i){if(!(pd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const a=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>pd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(wd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!kd(a,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:a})}if(o)return o;let r=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],a=Ns([e[0],e[1]],t);if(a>i.tolerance)continue;const l=xd(o,e,i.gridStep);!wd(l,n,s)&&kd(a,o.key,r)&&(r={kind:"line",point:l,key:o.key,distance:a,segment:o})}return r}(i.value,t,{tolerance:this._cssPxToRender(12),gridStep:this._gridPitch,excludePoints:s?[s]:[],extraEndpoints:n,epsilon:2e-4*this._gridPitch});return{point:o?[...o.point]:this._snapDrawPoint(t,e),candidate:o,contextKey:this._planSnapContextKey(i.key)}}get _activePlanSnapCandidate(){if(!this._markup||"draw"!==this._tool)return null;const t=this._planSnapHover;if(!t)return null;const e=this._planSnapGeometrySnapshot();return t.contextKey===this._planSnapContextKey(e.key)?t.candidate:null}_clearPlanSnapHover(t=!0){this._planSnapHover=null,this._syncPlanSnapActiveMarker(null),t&&(this._cursorPt=null)}_samePt(t,e){return mi(t,e)}_dropLegacySegments(){for(const t of this._serverCfg?.markers||[])"ripple"===t.display&&(t.display="icon_ripple");for(const t of this._serverCfg?.spaces||[]){delete t.segments;const e=new Set,i=t=>"string"==typeof t&&t.length>=1&&t.length<=64&&!e.has(t),s=t=>(e.add(t),!0),n=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=Yl);if(Array.isArray(t.partitions)&&(t.partitions=t.partitions.filter(t=>t&&i(t.id)&&n(t.a)&&n(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&s(t.id)).map(t=>({...t,cm:Math.max(1,Math.min(100,Number(t.cm)||15))})),t.partitions.length||delete t.partitions),Array.isArray(t.wall_columns)&&(t.wall_columns=t.wall_columns.filter(t=>t&&i(t.id)&&n(t.center)&&s(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Sl(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Ml(t.angle)}})),t.wall_columns.length||delete t.wall_columns),Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t&&i(t.id)&&Array.isArray(t.points)&&t.points.length>=2&&t.points.every(n)&&s(t.id)).map(t=>{const e=[[Number(t.points[0][0]),Number(t.points[0][1])]],i=[];for(let s=1;st.points.length>=2),t.room_drafts.length||delete t.room_drafts),Array.isArray(t.walls)){const e=zc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Pr(t.walls,t.rooms||[],Ql,1,e),t.walls.length||delete t.walls}}}get _cfgWriting(){return this._writesPending>0}_writeConfig(){this._writesPending++,this._writeChain=this._writeChain.catch(()=>{}).then(async()=>{if(!this._serverCfg)return;this._dropLegacySegments();const t=await this.hass.callWS({type:"houseplan/config/set",config:this._serverCfg,expected_rev:this._cfgRev});this._cfgRev=t?.rev??this._cfgRev+1});return this._writeChain.finally(()=>{this._writesPending--})}_saveConfig(){this._cfgEpoch++,this._saveConfigDebounced()}_geometrySnapshot(t=this._space){const e=this._serverCfg?.spaces.find(e=>e.id===t);if(!e)return null;const i=t=>JSON.parse(JSON.stringify(t)),s={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==e[t]&&(s[t]=e[t]);return{spaceId:t,rooms:i(e.rooms||[]),...Array.isArray(e.openings)?{openings:i(e.openings)}:{},...Array.isArray(e.walls)?{walls:i(e.walls)}:{},...Array.isArray(e.open_spans)?{open_spans:i(e.open_spans)}:{},...Array.isArray(e.room_drafts)?{room_drafts:i(e.room_drafts)}:{},...Array.isArray(e.partitions)?{partitions:i(e.partitions)}:{},...Array.isArray(e.wall_columns)?{wall_columns:i(e.wall_columns)}:{},...Array.isArray(e.decor)?{decor:i(e.decor)}:{},plan_transform:s}}_recordGeometry(t,e){if(!e)return;const i=this._geometrySnapshot(e.spaceId);i&&JSON.stringify(e)!==JSON.stringify(i)&&(this._geometryHistory.push({name:t,before:e,after:i}),this.requestUpdate())}_clearGeometryGesture(){this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._wallDialog=null,this._physicalDialog=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._openingDialog=null,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._decorDraft=null,this._decorMove=null,this._dtDrag=null,this._bdDrag=null}_cancelBoundaryAnchor(){return!("boundary"!==this._tool||!this._openWallAnchor)&&(this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this.requestUpdate(),!0)}_stagePointerCancel(t){if(clearTimeout(this._kioskHoldTimer),this._swipeStart?.id===t.pointerId&&(this._swipeStart=null),this._physicalDrag?.pid===t.pointerId||this._physicalRotate?.pid===t.pointerId)return void this._cancelPhysicalGesture();if(this._decorDraft?.pid===t.pointerId)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove?.pid===t.pointerId||this._dtDrag?.pid===t.pointerId||this._bdDrag?.pid===t.pointerId)return void this._cancelDecorGesture();this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null),e&&0===this._pointers.size&&this.requestUpdate()}_applyGeometryState(t){if(!this._canCommitSpace(t.spaceId))return!1;const e=this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(!e)return!1;const i=t=>JSON.parse(JSON.stringify(t));e.rooms=i(t.rooms),void 0!==t.openings?e.openings=i(t.openings):delete e.openings,void 0!==t.walls?e.walls=i(t.walls):delete e.walls,void 0!==t.open_spans?e.open_spans=i(t.open_spans):delete e.open_spans,void 0!==t.room_drafts?e.room_drafts=i(t.room_drafts):delete e.room_drafts,void 0!==t.partitions?e.partitions=i(t.partitions):delete e.partitions,void 0!==t.wall_columns?e.wall_columns=i(t.wall_columns):delete e.wall_columns,void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];return Object.assign(e,i(t.plan_transform||{})),this._clearGeometryGesture(),this._space!==t.spaceId&&(this._commitSpace(t.spaceId),this._saveNav(),this._restoreZoom()),this._modelCache=null,this._frame=null,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_roomAt(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&bi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&Ci(t,i)})}_pointInRoom(t,e){return e.poly?fi(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!ya(t))return!0;const e=t.length,i=.001;for(let s=0;s=500)return this._showToast(this._t("toast.physical_limit")),!1;const t=this._curSpaceCfg;return!(!this._activeDraftId&&(t?.room_drafts||[]).length>=200||this._draftSegmentCount(t)>=2e3||(t?.partitions||[]).length+this._path.length>I_)||(this._showToast(this._t("toast.physical_limit")),!1)}_markupClick(t){if(this._vacFit)return;if(!this._markup)return;const e=this._spaceModel();if(!e)return void this._clearGeometryGesture();if(this._suppressClick)return;if(this._drag||this._rlResize)return;const i=t.composedPath?.()||[];if(i.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(i.some(t=>t?.classList?.contains?.("physical-hit")))return void("boundary"===this._tool&&this._showToast(this._t("toast.boundary_blocked")));const s=this._svgPoint(t);if("select"===this._tool)return void(this._physicalSel=null);if("resize"===this._tool){if(this._rszDrag||i.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(s,t));return void(this._rszSel=t?.id||null)}if("delroom"===this._tool)return void this._deleteRoomClick(s);if("opening"===this._tool)return void this._openingClick(s);if("merge"===this._tool)return void this._mergeClick(s);if("wallthick"===this._tool)return void this._wallThickClick(s);if("boundary"===this._tool)return void this._boundaryClick(s);if("split"===this._tool)return void this._splitClick(s);if("column"===this._tool)return void this._columnClick(s);let n=this._resolvePlanDrawPoint(s,t.shiftKey).point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this._path.length<3)return;n=[...this._path[0]]}if(!this._path.length){const t=this._draftEndAt(n);return t?(this._activeDraftId=t.draft.id,this._resumeDraftBySpace[this._space]=t.draft.id,this._path=t.reverse?[...t.draft.points].reverse().map(t=>[...t]):t.draft.points.map(t=>[...t]),void(this._draftSegmentCms=t.reverse?[...t.draft.segments].reverse().map(t=>t.cm):t.draft.segments.map(t=>t.cm))):(this._activeDraftId=null,this._draftSegmentCms=[],void(this._path=[n]))}const o=this._path[this._path.length-1];if(this._samePt(n,o))return;const a=this._draftEndAt(n,this._activeDraftId||void 0);if(a)return void this._mergeDraftEndpoint(a);if(!this._canAppendRoomDraftPoint())return;const r=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(r)}_draftEndAt(t,e){const i=this._spaceModel();if(!i)return null;const s=this._viewOr(this._baseVb()),n=Math.max(.15*this._gridPitch,this._stageEl?.clientWidth?s.w/this._stageEl.clientWidth*12:0);for(const s of i.room_drafts||[]){if(s.id===e)continue;if(s.points.length<2)continue;const i=s.points[0],o=s.points[s.points.length-1];if(Math.hypot(t[0]-o[0],t[1]-o[1])<=n)return{draft:s,reverse:!1};if(Math.hypot(t[0]-i[0],t[1]-i[1])<=n)return{draft:s,reverse:!0}}return null}_mergeDraftEndpoint(t){const e=this._curSpaceCfg;if(!e||!this._path.length)return;const i=this._path.map(t=>[...t]),s=this._wallGraphSources(i),n=Array.isArray(e.room_drafts)?e.room_drafts:[],o=this._activeDraftId?n.find(t=>t.id===this._activeDraftId):null,a=n.find(e=>e.id===t.draft.id);if(!a)return;const r=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(a.segments||[]).map(t=>({...t})):[...a.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,r[0]),d=h?null:this._drawWallCm;if(!h&&null==d)return void this._showPhysicalRange(100);const u=this._draftSegmentCms.map((t,e)=>({...o?.segments?.[e]||{},cm:t})),p=[...this._path.map(t=>[...t]),...h?r.slice(1):r],_=[...u,...null==d?[]:[{cm:d}],...l],g=p.length>=4&&this._samePt(p[0],p[p.length-1]),m=p,f=_;if(m.length>500)return void this._showToast(this._t("toast.physical_limit"));const v=(o?.segments?.length||0)+(a.segments?.length||0);if(this._draftSegmentCount(e)-v+f.length>2e3)return void this._showToast(this._t("toast.physical_limit"));if(g){const t=m.slice(0,-1);if(this._contourSelfIntersects(t)||Ti(t)<=1e-6)return void this._showToast(this._t("toast.contour_cannot_close"));const e=this._overlapRoom(t);if(e)return void this._showToast(this._t("toast.room_overlap",{name:e.name||""}))}const y=this._geometrySnapshot(),b=this._activeDraftId||t.draft.id,w={...o||a,id:b,points:m.map(t=>[t[0]/T_,t[1]/T_]),segments:f};e.room_drafts=n.filter(e=>e.id!==t.draft.id&&(!this._activeDraftId||e.id!==this._activeDraftId)),e.room_drafts.push(w),this._activeDraftId=b,this._resumeDraftBySpace[this._space]=b,this._draftSegmentCms=f.map(t=>Number(t.cm)),this._path=m,this._physicalSel=null,this._recordGeometry(this._t("history.draft_merge"),y),this._saveConfig(),null!=d&&this._offerWallFaces(i,i.length-1,s)}_persistActiveDraftSegment(){if(this._path.length<2||!this._curSpaceCfg)return;const t=this._drawWallCm;if(null==t)return;this._draftSegmentCms=[...this._draftSegmentCms,t];const e=this._geometrySnapshot(),i=this._curSpaceCfg;i.room_drafts||=[],this._activeDraftId||(this._activeDraftId="draft-"+Date.now().toString(36)),this._resumeDraftBySpace[this._space]=this._activeDraftId;const s=i.room_drafts.findIndex(t=>t.id===this._activeDraftId),n={...s>=0?i.room_drafts[s]:{},id:this._activeDraftId,points:this._path.map(t=>[t[0]/T_,t[1]/T_]),segments:this._draftSegmentCms.map((t,e)=>({...s>=0?i.room_drafts[s]?.segments?.[e]:{},cm:t}))};s>=0?i.room_drafts[s]=n:i.room_drafts.push(n),this._recordGeometry(this._t("history.draft_segment"),e),this._saveConfig()}_activeWallSourceKey(t){return`active:${this._activeDraftId||"session"}:${t}`}_wallGraphSources(t){const e=this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}));for(let i=0;i+1t.key===i);if(s>=0){const[t]=this._wallFaceGraphCache.splice(s,1);return this._wallFaceGraphCache.push(t),t.value}const n=function(t,e=.001){const i=Number.isFinite(e)&&e>0?e:$d,s=Gd(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Pd(t.a,i),s=Pd(t.b,i);n.set(e,t.a),n.set(s,t.b),o.has(e)||o.set(e,new Set),o.has(s)||o.set(s,new Set),o.get(e).add(s),o.get(s).add(e)}const r=new Map;for(const[t,e]of o){const i=n.get(t);r.set(t,[...e].sort((t,e)=>{const s=n.get(t),o=n.get(e);return Math.atan2(s[1]-i[1],s[0]-i[0])-Math.atan2(o[1]-i[1],o[0]-i[0])||t.localeCompare(e)}))}const l=new Set,c=new Map,h=(t,e)=>`${t}>${e}`;for(const t of s){const e=[Pd(t.a,i),Pd(t.b,i)];for(const[t,o]of[e,[e[1],e[0]]]){if(l.has(h(t,o)))continue;const e=[],d=[];let u=t,p=o,_=!1;for(let i=0;i<=2*s.length+2;i++){const i=h(u,p);if(l.has(i)){_=u===t&&p===o;break}l.add(i),e.push(u),d.push(Rd(u,p));const s=r.get(p)||[],n=s.indexOf(u);if(n<0||!s.length)break;if(u=p,p=s[(n-1+s.length)%s.length],u===t&&p===o){_=!0;break}}if(!_||new Set(e).size<3||new Set(e).size!==e.length)continue;const g=e.map(t=>n.get(t)),m=Dd(g);if(!(m>i*i))continue;const f=Ad(Id(e,n,i)),v=new Set;for(const t of d)for(const e of a.get(t)?.sourceKeys||[])v.add(e);const y={ring:g,key:f,area:m,atomKeys:[...d],sourceKeys:[...v].sort((t,e)=>t.localeCompare(e))};c.has(f)||c.set(f,y)}}return{atoms:s,faces:[...c.values()].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key))}}(t,e);return this._wallFaceGraphCache.push({key:i,value:n}),this._wallFaceGraphCache.length>4&&this._wallFaceGraphCache.shift(),n}_offerWallFaces(t,e=this._path.length-2,i){if(this._path.length<2||this._wallFaceBatch||this._roomDialog)return;const s=this._spaceModel();if(!s)return;const n=this._activeWallSourceKey(e),o=2e-4*this._gridPitch;let a;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);a=function(t,e,i){const s=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!s.has(t.key)&&t.sourceKeys.includes(i))}(this._wallFaceGraph(e,o),this._wallFaceGraph(s,o),n)}catch{return}if(!a.length)return;for(const t of s.rooms){const e=ci(t);if(!t.id||!e)continue;const i=Ii(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Ti(s)>=Ti(n)?s:n,r=o===s?n:s,l=[...a].sort((t,e)=>Math.abs(t.area-Ti(r))-Math.abs(e.area-Ti(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:r},consumeAllActive:!0}])}const r=a.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));r.length&&this._beginWallFaceBatch(r)}_beginWallFaceBatch(t){this._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this._path.map(t=>[...t]),activeCms:[...this._draftSegmentCms],activeDraftId:this._activeDraftId},this._clearPlanSnapHover(),this._nameSel="",this._areaSel="",this._resetRoomDialogFields(),this._roomDialog=!0}_columnClick(t){const e=this._snap(t),i=this._drawWallCm;if(null==i)return void this._showPhysicalRange($l);if(!this._curSpaceCfg||this._limitReached("column"))return;const s=this._spaceModel();if(!s)return;const n={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Sl(i),angle:0},o=(s.wall_columns||[]).find(t=>Bl(t,n,.02*this._gridPitch));if(o)return clearTimeout(this._duplicateColumnTimer),this._duplicateColumnId=o.id,this._duplicateColumnTimer=window.setTimeout(()=>{this._duplicateColumnId=null},900),void this._showToast(this._t("toast.column_duplicate"));const a=this._geometrySnapshot(),r=this._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...n,center:[e[0]/T_,e[1]/T_]}),this._recordGeometry(this._t("history.column_add"),a),this._saveConfig()}_openPhysicalDialog(t,e,i){const s=this._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),length:this._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Ml(i.angle):0)})}else{const n=s.room_drafts.find(t=>t.id===e),o=Math.max(0,Math.min(n?.segments.length?n.segments.length-1:0,i||0));n?.segments[o]&&(this._physicalDialog={kind:t,id:e,segment:o,cm:fr(n.segments[o].cm,this._imperial),length:this._fmtLen(n.points[o],n.points[o+1])})}}_physicalDown(t,e,i){const s=this._spaceModel();if(!s)return;t.stopPropagation(),O_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Hl(n,Pl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);e&&Hl(n,e)&&o.push({kind:"partition",id:t.id})}o.some(t=>t.kind===e&&t.id===i)||o.unshift({kind:e,id:i});const a=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===a&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%o.length:Math.max(0,o.findIndex(t=>t.kind===e&&t.id===i));this._physicalPickCycle={signature:a,index:c,x:t.clientX,y:t.clientY,at:r},e=o[c].kind,i=o[c].id;const h="partition"===e?s.partitions.find(t=>t.id===i):s.wall_columns.find(t=>t.id===i);h&&(this._physicalSel={kind:e,id:i},this._physicalDrag={pid:t.pointerId,kind:e,id:i,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(h)),delta:[0,0]})}_clampPhysicalDelta(t,e,i){const s="partition"===t?[e.a,e.b]:[e.center],n=s.map(t=>t[0]),o=s.map(t=>t[1]);return[Math.max(-Yl*T_-Math.min(...n),Math.min(Yl*T_-Math.max(...n),i[0])),Math.max(-Yl*T_-Math.min(...o),Math.min(Yl*T_-Math.max(...o),i[1]))]}_physicalMove(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t),s="partition"===e.kind?e.base.a:e.base.center,n=this._snap([s[0]+i[0]-e.start[0],s[1]+i[1]-e.start[1]]),o=this._clampPhysicalDelta(e.kind,e.base,[n[0]-s[0],n[1]-s[1]]);this._physicalDrag={...e,delta:o,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const i=this._spaceModel();if(!this._curSpaceCfg||!i)return;const s=this._curSpaceCfg;if("partition"===e.kind){const t=(s.partitions||[]).find(t=>t.id===e.id),i=e.base;if(t){const n={...i,a:[i.a[0]+e.delta[0],i.a[1]+e.delta[1]],b:[i.b[0]+e.delta[0],i.b[1]+e.delta[1]]};t.a=[n.a[0]/T_,n.a[1]/T_],t.b=[n.b[0]/T_,n.b[1]/T_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=ad(t,[n],T_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,ud(t,i,T_))}}}else{const t=(s.wall_columns||[]).find(t=>t.id===e.id),n=e.base,o={...n,center:[n.center[0]+e.delta[0],n.center[1]+e.delta[1]]};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/T_,(n.center[1]+e.delta[1])/T_])}this._recordGeometry(this._t("history.physical_move"),e.before),this._saveConfig()}_registerPhysicalTap(t,e,i){const s=performance.now(),n=this._physicalLastTap?.kind===t&&this._physicalLastTap.id===e&&this._physicalLastTap.segment===i&&s-this._physicalLastTap.at<=360;this._physicalLastTap={kind:t,id:e,segment:i,at:s},n&&(this._physicalLastTap=null,this._openPhysicalDialog(t,e,i))}_cancelPhysicalGesture(){this._physicalDrag=null,this._physicalRotate=null,this.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this._spaceModel())return;t.preventDefault(),t.stopPropagation(),O_(t);const i=this._svgPoint(t);this._physicalSel={kind:"column",id:e.id},this._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,baseAngle:Ml(e.angle),angle:Ml(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const i=this._svgPoint(t),s=180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,n=e.baseAngle+s-e.startAngle,o=Ml(t.shiftKey?n:5*Math.round(n/5));this._physicalRotate={...e,angle:o,moved:e.moved||Math.abs(n-e.baseAngle)>=.5}}_physicalRotateUp(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this._physicalRotate=null;const i=this._spaceModel();if(!e.moved||!this._curSpaceCfg||!i)return;const s=i.wall_columns.find(t=>t.id===e.id);if(!s||"square"!==s.shape)return;const n={...s,angle:e.angle};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,n,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));const o=this._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);o&&(o.angle=e.angle,this._recordGeometry(this._t("history.physical_edit"),e.before),this._saveConfig())}_rszRooms(){const t=[],e=this._spaceModel();if(!e)return t;for(const i of e.rooms){const e=i.id?ci(i):null;e&&t.push({id:i.id,poly:e})}return t}_rszOpenings(){return this._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen}))}_rszOpts(){return{minDim:this._cmToUnits(30),eps:.05*this._gridPitch}}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszApplyPreview(t,e){const i=this._rszDrag,s=this._serverCfg?.spaces.find(t=>t.id===this._space);if(!i||!s)return;const n=JSON.parse(i.snap),o={...s,rooms:n.rooms,openings:n.openings,walls:n.walls,open_spans:n.open_spans};Array.isArray(n.open_spans)&&n.open_spans.length||delete o.open_spans;const a=this._spaceH;for(const[e,i]of Object.entries(t)){const t=o.rooms.find(t=>t.id===e);t&&(t.poly=i.map(t=>[t[0]/T_,t[1]/a]),delete t.x,delete t.y,delete t.w,delete t.h)}for(const[t,i]of Object.entries(e)){const e=(o.openings||[]).find(e=>e.id===t);e&&(e.x=i[0]/T_,e.y=i[1]/a)}const r=[],l=[];for(const t of i.changed){const e=i.rooms.find(e=>e.id===t),s=o.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const n=s.poly.map(t=>[t[0]*T_,t[1]*a]);if(e.poly.length===n.length)for(let t=0;tt.id===e);if(!s||!s.poly||s.poly.length<3)return null;if(i<0||i>=s.poly.length)return null;const n=[...s.poly[i]],o=[...s.poly[(i+1)%s.poly.length]];return{roomId:e,edge:i,a:n,b:o,n:_a(s.poly,i)}}(s,e,i);n&&(this._rszDrag={kind:"edge",pid:t.pointerId,roomId:e,plan:n,rooms:s,openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszCornerDown(t,e,i,s){"resize"!==this._tool||this._rszDrag||(t.stopPropagation(),t.preventDefault(),O_(t),this._rszDrag={kind:"scale",pid:t.pointerId,roomId:e,fixed:s,span0:Math.hypot(i[0]-s[0],i[1]-s[1])||1,rooms:this._rszRooms(),openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszMove(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t);if("edge"===e.kind){const t=e.plan,s=(i[0]-t.a[0])*t.n[0]+(i[1]-t.a[1])*t.n[1],n=this._snap([t.a[0]+t.n[0]*s,t.a[1]+t.n[1]*s]);let o=(n[0]-t.a[0])*t.n[0]+(n[1]-t.a[1])*t.n[1];if(o=function(t,e,i,s,n,o){if(!Number.isFinite(s)||Math.abs(s)<1e-9)return 0;const a=Math.sign(s);let r=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&r>1e-9;s++,r-=l){const s=a*r;if(Sa(t,e,i,s,o))return s}return 0}(e.rooms,e.openings,t,o,this._gridPitch,this._rszOpts()),o===e.d&&e.moved)return;e.d=o,e.moved=!0;const a=ka(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(a.polys),this._rszApplyPreview(a.polys,a.openings),this._rszLive=this._rszEdgeLabels(a,t)}else{const t=e.fixed,s=this._snap(i);let n=Math.hypot(s[0]-t[0],s[1]-t[1])/(e.span0||1);if(n=Math.max(.05,Math.min(20,n)),n=function(t,e,i,s,n,o){if(!Number.isFinite(n)||n<=0)return 1;if(Ca(t,e,i,s,n,o))return n;let a=1,r=n;for(let n=0;n<28;n++){const n=(a+r)/2;Ca(t,e,i,s,n,o)?a=n:r=n}return a}(e.rooms,e.openings,e.roomId,t,n,this._rszOpts()),n===e.k&&e.moved)return;e.k=n,e.moved=!0;const o=e.rooms.find(t=>t.id===e.roomId),a=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),r=Ma(o,e.openings,a,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:r.poly},r.openings),this._rszLive=this._rszScaleLabels(r.poly)}this.requestUpdate()}_rszUp(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._rszPreview;this._rszDrag=null,this._rszLive=null,this._rszPreview=null;if(!(e.moved&&("edge"===e.kind?Math.abs(e.d)>1e-9:Math.abs(e.k-1)>1e-9))||!i)return this._cfgEpoch++,void this.requestUpdate();const s=JSON.parse(e.snap),n=this._curSpaceCfg;if(n){n.rooms=i.sp.rooms,n.openings=i.sp.openings,Array.isArray(i.sp.walls)&&(i.sp.walls.length?n.walls=i.sp.walls:delete n.walls),Array.isArray(i.sp.open_spans)&&i.sp.open_spans.length?n.open_spans=i.sp.open_spans:delete n.open_spans;for(const t of e.changed){const e=n.rooms.find(e=>e.id===t);e?.poly&&(e.poly=va(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Pr(n.walls,n.rooms||[],Ql,1,this._cfgOpenCuts()),n.walls.length||delete n.walls)}this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._recordGeometry(this._t("history.resize_room"),s),this._saveConfig(),this.requestUpdate()}_rszCancelDrag(){this._rszDrag&&(this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._cfgEpoch++,this.requestUpdate())}_rszPointerCancel(t){const e=this._rszDrag;e&&e.pid===t.pointerId&&(t.stopPropagation(),this._rszCancelDrag())}_rszEdgeLabels(t,e){const i=this._rszDrag,s=[],n=t.polys[e.roomId]||i.rooms.find(t=>t.id===e.roomId).poly,o=n.length,a=e.edge,r=(a+1)%o;for(const[t,e]of[[n[(a-1+o)%o],n[a]],[n[a],n[r]],[n[r],n[(r+1)%o]]])s.push({x:(t[0]+e[0])/2,y:(t[1]+e[1])/2,text:this._fmtLen(t,e)});const l="mi"===this.hass?.config?.unit_system?.length,c=Object.keys(t.polys).length?Object.keys(t.polys):[e.roomId],h=this._spaceWalls,d=this._openPairs().flatMap(t=>t.segs),u=this._physicalBodiesR();for(const e of c){const n=t.polys[e]||i.rooms.find(t=>t.id===e).poly,o=h.length&&ol(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||n,a=xi(o),r=u.length?Ol(zl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(o,this._gridPitch,this._cellCm);s.push({x:a[0],y:a[1],text:Ta(r,l),area:!0})}return s}_rszScaleLabels(t){const e="mi"===this.hass?.config?.unit_system?.length,i=t.map(t=>t[0]),s=t.map(t=>t[1]),n=Math.max(...i)-Math.min(...i),o=Math.max(...s)-Math.min(...s),a=this._spaceWalls,r=a.length&&this._rszSel&&ol([{id:this._rszSel,poly:t}],this._rszSel,a,[],this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||t,l=xi(r),c=this._physicalBodiesR(),h=c.length?Ol(zl(r,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(r,this._gridPitch,this._cellCm);return[{x:Math.min(...i),y:Math.min(...s),text:`${this._fmtLen([0,0],[n,0])} × ${this._fmtLen([0,0],[o,0])}`},{x:l[0],y:l[1],text:Ta(h,e),area:!0}]}_renderResizeLayer(t){const e=Math.max(.013*t.w,5),i=e/2,s=t=>t.toFixed(1),n=`M ${s(-.7*i)} 0 H ${s(.7*i)} M 0 ${s(-.22*i)} V ${s(-i)} M ${s(-.32*i)} ${s(-.6*i)} L 0 ${s(-i)} L ${s(.32*i)} ${s(-.6*i)} M 0 ${s(.22*i)} V ${s(i)} M ${s(-.32*i)} ${s(.6*i)} L 0 ${s(i)} L ${s(.32*i)} ${s(.6*i)}`,o=[],a=this._rszRooms();for(const t of a)for(let i=0;i`}_stageAspect(){const t=this._stageEl,e=this._baseVb();return t&&t.clientHeight?t.clientWidth/t.clientHeight:e[2]/e[3]}_viewOr(t){return this._view&&this._view.w?this._view:zi(t,this._stageAspect())}_roomLabelReferenceViewWidth(t){if(!this._markup)return t.w;const e=this._stageEl,i=this.renderRoot.querySelector(".editorchrome");if(!e||e.clientWidth<=0||e.clientHeight<=0)return t.w;const s=e.clientHeight+(i?.getBoundingClientRect().height||0);return s<=0?t.w:this._viewForModeTarget(this._zoom,void 0,void 0,e.clientWidth,s).w}_screenToVb(t,e){const i=this._stageEl,s=this._viewOr(this._baseVb()),n=i?.clientWidth||1,o=i?.clientHeight||1;return[s.x+t/n*s.w,s.y+e/o*s.h]}_clampView(t,e){const i=(t,e,i,s)=>{const n=1*Math.max(e,s),o=i-n,a=i+s-e+n;return Math.max(Math.min(o,a),Math.min(Math.max(o,a),t))};return{w:t.w,h:t.h,x:i(t.x,t.w,e.x,e.w),y:i(t.y,t.h,e.y,e.h)}}_applyView(t,e,i){const s=this._baseVb(),n=zi(s,this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),a=n.w/o,r=n.h/o,l=this._viewOr(s),c=e??l.x+l.w/2,h=i??l.y+l.h/2,d=this._clampView({x:c-a/2,y:h-r/2,w:a,h:r},n);return!(this._view&&Math.abs(this._zoom-o)<1e-9&&Math.abs(this._view.x-d.x)<1e-6&&Math.abs(this._view.y-d.y)<1e-6&&Math.abs(this._view.w-d.w)<1e-6&&Math.abs(this._view.h-d.h)<1e-6)&&("opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=o,this._view=d,!0)}_bootWatch(){clearTimeout(this._bootTimer),this._bootStart=Date.now(),this._bootLastH=-1,this._bootLastChange=this._bootStart;const t=()=>{if(!this._booting)return;const e=Date.now(),i=this._stageEl?this._stageEl.clientHeight:0;i!==this._bootLastH&&(this._bootLastH=i,this._bootLastChange=e);const s=e-this._bootStart;s>=1200||s>=700&&i>0&&e-this._bootLastChange>=250?this._bootSettled():this._bootTimer=window.setTimeout(t,100)};this._bootTimer=window.setTimeout(t,100)}_bootSettled(){this._booting&&!this._bootSettling&&(this._bootSettling=!0,this._refitView(),this._bootSettleRaf=requestAnimationFrame(()=>{this._bootSettleRaf=0,this._finishBootSettled()}))}_finishBootSettled(){if(!this._booting)return;this._refitView(),this._booting=!1,this._bootSettling=!1;const t=this._stageEl?.clientHeight??0;!this._config?.kiosk&&t>0&&this._warmPatch({hdrH:this._hdrH,stageH:t,vp:this._warmViewportState()},!0),this._bootFading=!0,this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220),this._bootSoft=!0,clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)}_bootSoftCancel(){this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoft=!1)}_beginResumeSettle(){this._booting||this._resumeSettling||(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0),this._viewportInvalidAt=0,this._beginContinuityCandidate("warm-resume",!1),this._loading?this.requestUpdate():this._loadFromServer())}_refitView(){if(this._modeTransitionBusy)return;const t=this._stageEl;if(!t||"visible"!==document.visibilityState||t.clientWidth<=0||t.clientHeight<=0)return void(this._viewportInvalidAt||(this._viewportInvalidAt=Date.now()));const e=[t.clientWidth,t.clientHeight],i=this._lastValidStageSize,s=!!i&&Math.abs(i[0]-e[0])<=.5&&Math.abs(i[1]-e[1])<=.5,n=this._viewportInvalidAt?Date.now()-this._viewportInvalidAt:0;if(this._viewportInvalidAt=0,!i)return this._lastValidStageSize=e,void(this._view||this._applyView(this._zoom));s?this._pendingRefitSize=null:(this._pendingRefitSize=e,this._refitRaf||(this._refitRaf=requestAnimationFrame(()=>{this._refitRaf=0;const t=this._pendingRefitSize;this._pendingRefitSize=null;const e=this._stageEl;if(!t||!e||e.clientWidth<=0||e.clientHeight<=0)return;if(Math.abs(e.clientWidth-t[0])>.5||Math.abs(e.clientHeight-t[1])>.5)return void this._refitView();const i=this._lastValidStageSize;if(i&&Math.abs(i[0]-t[0])<=.5&&Math.abs(i[1]-t[1])<=.5)return;this._lastValidStageSize=t;const s=this._view;n>=Jc?this._beginContinuityCandidate("stage-size-restored",!0,"stage-size"):this._continuity.hasCompleteFrame&&this._beginContinuityCandidate("stage-resize",!0,"stage-size"),this._applyView(this._zoom,s?s.x+s.w/2:void 0,s?s.y+s.h/2:void 0)})))}_zoomAt(t,e,i){const s=this._stageEl;if(!s)return;const n=zi(this._baseVb(),this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const a=s.clientWidth,r=s.clientHeight,l=this._screenToVb(t,e),c=n.w/o,h=n.h/o;this._zoom=o,this._view=this._clampView({x:l[0]-t/a*c,y:l[1]-e/r*h,w:c,h:h},n)}_onWheel(t){const e=this._stageEl;if(!e)return;t.preventDefault();const i=e.getBoundingClientRect(),s=t.deltaY<0?1.15:1/1.15;this._zoomAt(t.clientX-i.left,t.clientY-i.top,this._zoom*s),this._saveZoom()}_stepZoom(t){const e=this._stageEl;e&&(this._zoomAt(e.clientWidth/2,e.clientHeight/2,this._zoom*(t>0?1.4:1/1.4)),this._saveZoom())}_resetZoom(){const t=this._baseVb();"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=1,this._view=zi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(M_,JSON.stringify(this._zoomBySpace))}catch{}}}_restoreZoom(){const t=this._zoomBySpace[this._space]||1;this._zoom=t;const e=this._stageEl;if(e&&e.clientHeight){const e=this._baseVb();return this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),void this.requestUpdate()}this._view=null,requestAnimationFrame(()=>{if(!this._stageEl)return;const e=this._baseVb();this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),this.requestUpdate()})}_stagePointerDown(t){if(this._vacFit)return;if(this._kiosk&&(this._cyclePausedUntil=Date.now()+6e4,0===this._pointers.size?(this._swipeStart={x:t.clientX,y:t.clientY,id:t.pointerId},t.target.closest?.(".dev, .roomlabel, .oplock")||(clearTimeout(this._kioskHoldTimer),this._kioskHoldTimer=window.setTimeout(()=>{this._kioskDialog=!0,this._swipeStart=null},3e3))):(this._swipeStart=null,clearTimeout(this._kioskHoldTimer))),this._drag)return;if(this._markup&&t.target.closest?.(".roomlabel, .rlhandle, .rszhandle, .dev, .oplock, .op-hit, button"))return;if("devices"===this._mode&&t.target.closest(".dev"))return;if("decor"===this._mode&&this._decorPointerDown(t))return;this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});const e=this._viewOr(this._baseVb());if(1===this._pointers.size)this._panStart={sx:t.clientX,sy:t.clientY,vx:e.x,vy:e.y},this._panLock=null,this._suppressClick=!1;else if(2===this._pointers.size){this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);this._pinchStart={dist:e,zoom:this._zoom},this._panStart=null,this._panLock=null}}get _swipeZone(){return!this._hasFixedFloor&&this._kiosk&&this._zoom<=1.001&&this._model.length>1}_stagePointerMove(t){if(this._physicalRotate?.pid!==t.pointerId)if(this._physicalDrag?.pid!==t.pointerId)if(this._dtDrag?.pid!==t.pointerId)if(this._bdDrag?.pid!==t.pointerId){if(this._decorDraft?.pid===t.pointerId){const e=this._decorDraft;let i=this._decorSnap(this._svgPoint(t),t.pointerType);if(t.shiftKey&&("rect"===e.kind||"ellipse"===e.kind)){const t=i[0]-e.a[0],s=i[1]-e.a[1],n=Math.max(Math.abs(t),Math.abs(s));i=this._snap([e.a[0]+(t<0?-n:n),e.a[1]+(s<0?-n:n)])}return void(this._decorDraft={...e,b:i})}if(this._decorMove?.pid!==t.pointerId)if(this._pointers.has(t.pointerId)){if(this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),this._markup&&1===this._pointers.size&&this._markupMove(t),this._pinchStart&&this._pointers.size>=2){"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)/(this._pinchStart.dist||1),i=this._stageEl.getBoundingClientRect(),s=(t[0].x+t[1].x)/2-i.left,n=(t[0].y+t[1].y)/2-i.top;this._zoomAt(s,n,this._pinchStart.zoom*e),this._suppressClick=!0,this._saveZoom()}else if(this._panStart){const e=t.clientX-this._panStart.sx,i=t.clientY-this._panStart.sy;Math.abs(e)+Math.abs(i)>4&&(this._suppressClick=!0,clearTimeout(this._holdTimer),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover()),null===this._panLock&&Math.abs(e)+Math.abs(i)>8&&(this._panLock=this._swipeZone&&Math.abs(e)>1.5*Math.abs(i)?"swipe":"pan");const s=this._stageEl;if("pan"===this._panLock&&s){const t=this._baseVb(),n=this._viewOr(t),o=zi(t,this._stageAspect());this._view=this._clampView({x:this._panStart.vx-e/(s.clientWidth||1)*n.w,y:this._panStart.vy-i/(s.clientHeight||1)*n.h,w:n.w,h:n.h},o)}}}else this._markupMove(t);else this._decorMoveUpdate(t)}else this._bdMove(t);else this._dtMove(t);else this._physicalMove(t);else this._physicalRotateMove(t)}_stagePointerLeave(t){this._markup&&("opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover())}_stagePointerUp(t){if(this._kiosk){clearTimeout(this._kioskHoldTimer);const e=this._swipeStart;if(this._swipeStart=null,e&&e.id===t.pointerId){const i=t.clientX-e.x,s=t.clientY-e.y;if(Math.abs(i)+Math.abs(s)<8){const t=Date.now();t-this._lastTap<350&&this._resetZoom(),this._lastTap=t}const n="pan"===this._panLock?null:function(t,e,i,s,n,o=60){if(i>1.001||s.length<2)return null;if(Math.abs(t)t.id),this._space);n&&this._slideTo(n,i<0?"left":"right")&&(this._saveNav(),this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._showKioskDots())}}if(this._physicalDrag?.pid===t.pointerId)return void this._physicalUp(t);if(this._physicalRotate?.pid===t.pointerId)return void this._physicalRotateUp(t);if(this._dtDrag?.pid===t.pointerId)return void this._dtUp();if(this._bdDrag?.pid===t.pointerId)return void this._bdUp();if(this._decorDraft?.pid===t.pointerId)return void this._decorCommitDraft();if(this._decorMove?.pid===t.pointerId)return this._decorMove.moved&&(this._recordGeometry(this._t("history.decor_move"),this._decorMove.before),this._saveConfig()),void(this._decorMove=null);const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null,setTimeout(()=>this._suppressClick=!1,0)),e&&0===this._pointers.size&&this.requestUpdate()}_clickRoom(t){!this._suppressClick&&t.area&&z_("/config/areas/area/"+t.area)}_pointerDown(t,e){if("plan"===this._mode)return;if("view"===this._mode){this._holdFired=!1,clearTimeout(this._holdTimer);const i=t.pointerId,s=t.currentTarget;return void(this._holdTimer=window.setTimeout(()=>{this._holdFired=!0,this._interruptViewGesture(i,s),this._infoCard=e},600))}if("ha_disabled"===e.bindingStatus?.kind)return;t.preventDefault();const i=this._pos(e);this._drag={id:e.id,sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},H_(t),this._tip=null}_pointerMove(t,e){if(!this._drag||this._drag.id!==e.id)return;const i=this.renderRoot.querySelector(".stage");if(!i)return;const s=this._baseVb(),n=i.getBoundingClientRect(),o=this._viewOr(s),a=(t.clientX-this._drag.sx)/n.width*o.w,r=(t.clientY-this._drag.sy)/n.height*o.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0,clearTimeout(this._holdTimer));const l=ic(this._drag.ox+a),c=ic(this._drag.oy+r);this._savePos(e,l,c)}_pointerUp(t,e){if(clearTimeout(this._holdTimer),!this._drag||this._drag.id!==e.id)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&(this._selId=e.id,window.setTimeout(()=>this._drag=null,0))}_showToast(t){for(const t of this.renderRoot.querySelectorAll("hp-dialog"))t.closeTransientOverlays("toast");this._toast=t,clearTimeout(this._toastTimer),this._toastTimer=window.setTimeout(()=>{this._toast=""},3500)}_syncPointerHoverTargets(){const t=this._pointerModality.hoverEnabled;for(const e of this.renderRoot.querySelectorAll("hp-dialog, hp-help, hp-color-opacity"))e.toggleAttribute("data-pointer-hover",t)}_syncPointerHoverSubtree(t){if(t.nodeType!==Node.ELEMENT_NODE)return;const e=t,i=this._pointerModality.hoverEnabled;e.matches("hp-dialog, hp-help, hp-color-opacity")&&e.toggleAttribute("data-pointer-hover",i);for(const t of e.querySelectorAll("hp-dialog, hp-help, hp-color-opacity"))t.toggleAttribute("data-pointer-hover",i)}_clearTransientHover(t=!1){t&&this._pointerModality.suspend(),this._tip&&(this._tip=null),this._hoverRoom&&(this._hoverRoom=null)}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse";const e=this._pointerModality.modality,i=this._pointerModality.note(t);"touch"!==i&&"pen"!==i||e===i&&!this._tip&&!this._hoverRoom||this._clearTransientHover()}_guardTouchGesture(t){if(this._editorSecondary.handleOutsideDismiss(t))return;if("click"===t.type){if(!this._suppressClick&&!this._touchSequenceMultitouch&&Date.now()>this._touchClickBlockUntil)return;return t.preventDefault(),void t.stopImmediatePropagation()}const e=t;if(this._notePointer(e),"touch"===e.pointerType)if("pointerdown"!==t.type){if("pointermove"===t.type){const t=this._touchContacts.get(e.pointerId);if(!t)return;const i={...t,x:e.clientX,y:e.clientY};if(this._touchContacts.set(e.pointerId,i),this._touchSequenceMultitouch&&"view"===this._mode&&!this._vacFit&&this._pinchStart&&[...this._touchContacts.values()].every(t=>t.inStage)){this._pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=[...this._touchContacts.values()];if(t.length>=2&&this._stageEl){const[e,i]=t,s=Math.hypot(e.x-i.x,e.y-i.y)/(this._pinchStart.dist||1),n=this._stageEl.getBoundingClientRect();this._zoomAt((e.x+i.x)/2-n.left,(e.y+i.y)/2-n.top,this._pinchStart.zoom*s),this._saveZoom()}}return}if("pointerup"===t.type||"pointercancel"===t.type||"lostpointercapture"===t.type){if(this._clearTransientHover(),this._touchContacts.delete(e.pointerId),this._touchSequenceMultitouch){if(this._touchClickBlockUntil=Date.now()+500,this._pointers.delete(e.pointerId),!this._vacFit&&this._pointers.size>=2){const[t,e]=[...this._pointers.values()];this._pinchStart={dist:Math.hypot(t.x-e.x,t.y-e.y),zoom:this._zoom}}else this._pinchStart=null;0===this._pointers.size&&(this._panStart=null,this._panLock=null)}0===this._touchContacts.size&&(this._touchSequenceMultitouch=!1)}}else if(this._touchContacts.set(e.pointerId,{x:e.clientX,y:e.clientY,inStage:!!e.target?.closest?.(".stage")}),this._touchContacts.size>=2){this._clearTransientHover(),this._touchSequenceMultitouch=!0,this._touchClickBlockUntil=Number.POSITIVE_INFINITY,clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),this._swipeStart=null;const t=[...this._touchContacts.values()];if("view"===this._mode&&!this._vacFit&&t.every(t=>t.inStage)){this._pointers=new Map([...this._touchContacts].map(([t,e])=>[t,{x:e.x,y:e.y}]));const[e,i]=t;this._pinchStart={dist:Math.hypot(e.x-i.x,e.y-i.y),zoom:this._zoom},this._panStart=null,this._panLock=null}else this._vacFit&&(this._pointers.clear(),this._pinchStart=null,this._panStart=null,this._panLock=null)}}_showTip(t,e,i,s,n,o){this._notePointer(t),this._pointerModality.hoverEnabled&&(this._drag||(this._tip={x:t.clientX,y:t.clientY,title:e,meta:i,lqi:s,temp:n,hum:o}))}get _gridPitch(){return Zl}get _cellCm(){const t=Number(this._curSpaceCfg?.cell_cm);return Number.isFinite(t)&&t>0?t:5}_fmtLen(t,e){const i=function(t,e,i,s){return Math.hypot(e[0]-t[0],e[1]-t[1])/i*s}(t,e,this._gridPitch,this._cellCm);return ri(i,"mi"===this.hass?.config?.unit_system?.length)}get _curSpaceCfg(){const t=this._rszPreview;return t&&t.space===this._space?t.sp:this._serverCfg?.spaces.find(t=>t.id===this._space)}get _renderCfg(){const t=this._rszPreview;return t&&this._serverCfg?{...this._serverCfg,spaces:this._serverCfg.spaces.map(e=>e.id===t.space?t.sp:e)}:this._serverCfg}get _spaceH(){return this._curSpaceCfg,P_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*P_,t[1]*e,t[2]*P_,t[3]*e])}_savedNav(){if(this._hasFixedFloor)return null;try{return JSON.parse(localStorage.getItem(C_)||"null")}catch{return null}}_saveNav(){if(!this._hasFixedFloor)try{localStorage.setItem(C_,JSON.stringify({space:this._space}))}catch{}}_leaveCardRoute(){if(this._routeDepartureHandled)return;this._routeDepartureHandled=!0,"view"!==this._mode&&this._setMode("view",!1),this._pendingNavMode=null,this._geometryHistory.clear(),this._activeDraftId=null,this._resumeDraftBySpace={},this._draftSegmentCms=[],this._closingWallCm=null,this._drawWallField=null,this._showHidden=!1,this._tapConfirm=null,this._vacCalConfirm=null,this._decorEraseConfirm=null,this._openingInfo=null,this._closeInfoCard(),this._rulesDialog=null,this._alignDialog=null,this._backupImportDialog=null,this._backupExportDialog=null,this._settingsDialog=null,this._markerDialog=null,this._openingDialog=null,this._physicalDialog=null,this._wallDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._mergeDialog=null,this._roomDialog=!1,this._spaceDialog=null,this._importDialog=null;const t=this._warmSlot;t?.owner===this._warmGen&&(t.vp=this._warmViewportState(),t.dlg=null,t.frameFingerprint="",clearTimeout(t.evict),t.evict=0),this._saveNav()}_setMode(t,e=!0){this._pendingNavMode=null;const i=this._spaceModel();if(!i)return this._cancelModeTransition(!1),void(this._mode="view");if(this._kiosk&&"view"!==t)return;if(this._mode===t){if(!e&&"view"===t&&this._modeTransitionBusy){const e=this._currentModeVisual(t),i=this._modeTransitionTargetZoom,s=this._modeTransitionTargetCenterX,n=this._modeTransitionTargetCenterY;this._cancelModeTransition(!1),this._commitViewModeAtomic(e,i,s,n)}return}if(this._bootSoftCancel(),("plan"===t||"decor"===t)&&!this._norm)return void this._showToast(this._t("toast.markup_needs_server"));if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._clearTransientHover(!0),this._cancelDevicePressFeedback();const s=this._mode,n=this._effectiveProjection(),o=this._currentModeVisual(s),a=this._modeTransitionBusy,r=o&&"view"!==s&&"view"!==t?{...o,toolbarContentOpacity:this._reducedMotion?1:.35}:o;this._cancelModeTransition(!1),this._editorSecondary.closeForNavigation(),(this._decorMove||this._dtDrag||this._bdDrag)&&this._cancelDecorGesture();const l=!i.bg&&"view"===t!=("view"===s),c=a&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(a?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:a?this._modeTransitionTargetCenterX:r?.viewport.centerX,u=c?c.centerY:a?this._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===s&&"view"!==t&&!a){const e=this._view;if(this._viewModeSnap={space:this._space,zoom:this._zoom,cx:e?this._logicalViewCenter(n)?.x:void 0,cy:e?this._logicalViewCenter(n)?.y:void 0},"iso"===n){const e=this._logicalViewCenter("iso");d=e?.x,u=e?.y,this._view=null,this._mode=t,this._applyView(this._zoom,e?.x,e?.y)}l&&(h=1,d=void 0,u=void 0)}if("plan"===s&&this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._mode=t,this._editorChromeMode="view"===t?s:t,"view"===t){"view"===s||a||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this._viewModeSnap;if(t&&t.space===this._space){h=t.zoom;const e=this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat",i=null!=t.cx&&null!=t.cy&&"iso"===e?qp([t.cx,t.cy],0):null;d=i?.[0]??t.cx,u=i?.[1]??t.cy}else t&&(h=this._zoomBySpace[this._space]||1,d=void 0,u=void 0)}else this._modeTransitionEditorCamera={zoom:h,centerX:d,centerY:u};this._modeTransitionTargetZoom=h,this._modeTransitionTargetCenterX=d,this._modeTransitionTargetCenterY=u,("iso"===n||"view"===t&&this._labsIso&&"iso"===this._viewPreference[this._space])&&(this._modeTransitionForceAtomic=!0);const p=++this._modeTransitionRequest;e?r?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=r,this._prepareModeTransition(p,r,t,h,d,u)):(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._zoom=h,this._view=null,requestAnimationFrame(()=>{this.isConnected&&p===this._modeTransitionRequest&&this._mode===t&&(this._applyView(h,d,u),"view"===t&&(this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate())})):"view"===t&&this._commitViewModeAtomic(r,h,d,u),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._tool="draw",this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._selId=null,this._physicalSel=null,this._physicalDialog=null,this._physicalDrag=null,this._rszSel=null,this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._tip=null,this._hoverRoom=null,this._decorDraft=null,this._decorSel=null,this._decorMove=null,this._backdropDialog=null,this._decorTool="select",this._bdDrag=null,this._dtDrag=null,this._dtBox=null,"plan"===t&&(this._primeDrawWallField(),this._resumeLastDraft()),this._saveNav()}_primeDrawWallField(){null===this._drawWallField&&(this._drawWallField=fr(_r,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?fr(_r,this._imperial):this._drawWallField}get _drawWallCm(){const t=f_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?$l:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?$l:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:fr(t,this._imperial),unit:this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_draftSegmentCount(t=this._curSpaceCfg){return(t?.room_drafts||[]).reduce((t,e)=>t+(Array.isArray(e.segments)?e.segments.length:0),0)}_finishWallChain(){if("draw"!==this._tool||this._wallFaceBatch||this._roomDialog)return!0;const t=this._curSpaceCfg;if(!t||this._path.length<2)return this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0;const e=Sd(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>F_)return this._showToast(this._t("toast.physical_limit")),!1;const s=this._geometrySnapshot();t.partitions||=[];const n=Date.now().toString(36);for(let s=0;st.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.wall_chain_finish"),s),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0}_activateMarkupTool(t){t!==this._tool&&(this._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this._tool||this._finishWallChain())&&(this._cancelPath(),this._tool=t,"draw"===t&&this._resumeLastDraft(),"resize"===t&&(this._rszSel=null),"boundary"!==t&&"wallthick"!==t||(this._wallDialog=null)))}_limitReached(t){const e=this._curSpaceCfg;if(!e)return!0;const i="draft"===t?(e.room_drafts||[]).length>=200:"partition"===t?(e.partitions||[]).length>=F_:(e.wall_columns||[]).length>=500;return i&&this._showToast(this._t("toast.physical_limit")),i}_svgPoint(t){const e=this.renderRoot.querySelector(".stage").getBoundingClientRect();return this._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this._gridPitch;return[ic(ai(t[0],e)),ic(ai(t[1],e))]}_snapDrawPoint(t,e=!1){const i=this._path[this._path.length-1],s=e&&i?function(t,e,i,s=1/0){if(!(i>0&&t?.every(Number.isFinite)&&e?.every(Number.isFinite)))return[e[0],e[1]];const n=e[0]-t[0],o=e[1]-t[1];if(Math.abs(n)+Math.abs(o)<=1e-12)return[t[0],t[1]];const a=Math.PI/4;let r=Math.atan2(o,n);r<0&&(r+=2*Math.PI);const l=Math.floor(r/a+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((n*c+o*h)/(i*d)));if(Number.isFinite(s)&&s>=0){const e=(t,e)=>{if(!e)return 1/0;const n=e>0?s-t:t+s;return Math.max(0,Math.floor((n+1e-9*i)/i))};u=Math.min(u,e(t[0],c),e(t[1],h))}return[t[0]+c*u*i,t[1]+h*u*i]}(i,t,this._gridPitch,Xl):t;return this._snap(s)}_planSnapOpeningCuts(t,e){if(!this._openingsR.length)return[];const i=this._openingWallIndexFor(t,e).value,s=[];for(const e of this._roomWallOpeningInputs(this._openingsR,t)){const t=yl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,a=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-a,e.x+o,e.y+a])}return s}_planSnapGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planSnapGeometryCache?.key===e)return this._planSnapGeometryCache;const i=this._openCuts(),s=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:[...i,...this._planSnapOpeningCuts(t,i)],partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this._gridPitch});return this._planSnapGeometryCache={key:e,value:s},this._planSnapGeometryCache}_planStructuralGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planStructuralGeometryCache?.key===e)return this._planStructuralGeometryCache;const i=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:this._openCuts(),epsilon:2e-4*this._gridPitch});return this._planStructuralGeometryCache={key:e,value:i},this._planStructuralGeometryCache}_planSnapContextKey(t){const e=this._path[0],i=this._path[this._path.length-1];return[t,this._tool,this._path.length,e?`${e[0]},${e[1]}`:"",i?`${i[0]},${i[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const i=this._planSnapGeometrySnapshot(),s=this._path[this._path.length-1],n="draw"===this._tool&&this._path.length>=3?[{point:this._path[0],key:"closure:first-point"}]:[],o=function(t,e,i){if(!(pd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const a=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>pd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(wd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!kd(a,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:a})}if(o)return o;let r=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],a=Hs([e[0],e[1]],t);if(a>i.tolerance)continue;const l=xd(o,e,i.gridStep);!wd(l,n,s)&&kd(a,o.key,r)&&(r={kind:"line",point:l,key:o.key,distance:a,segment:o})}return r}(i.value,t,{tolerance:this._cssPxToRender(12),gridStep:this._gridPitch,excludePoints:s?[s]:[],extraEndpoints:n,epsilon:2e-4*this._gridPitch});return{point:o?[...o.point]:this._snapDrawPoint(t,e),candidate:o,contextKey:this._planSnapContextKey(i.key)}}get _activePlanSnapCandidate(){if(!this._markup||"draw"!==this._tool)return null;const t=this._planSnapHover;if(!t)return null;const e=this._planSnapGeometrySnapshot();return t.contextKey===this._planSnapContextKey(e.key)?t.candidate:null}_clearPlanSnapHover(t=!0){this._planSnapHover=null,this._syncPlanSnapActiveMarker(null),t&&(this._cursorPt=null)}_samePt(t,e){return mi(t,e)}_dropLegacySegments(){for(const t of this._serverCfg?.markers||[])"ripple"===t.display&&(t.display="icon_ripple");for(const t of this._serverCfg?.spaces||[]){delete t.segments;const e=new Set,i=t=>"string"==typeof t&&t.length>=1&&t.length<=64&&!e.has(t),s=t=>(e.add(t),!0),n=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=Yl);if(Array.isArray(t.partitions)&&(t.partitions=t.partitions.filter(t=>t&&i(t.id)&&n(t.a)&&n(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&s(t.id)).map(t=>({...t,cm:Math.max(1,Math.min(100,Number(t.cm)||15))})),t.partitions.length||delete t.partitions),Array.isArray(t.wall_columns)&&(t.wall_columns=t.wall_columns.filter(t=>t&&i(t.id)&&n(t.center)&&s(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Sl(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Ml(t.angle)}})),t.wall_columns.length||delete t.wall_columns),Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t&&i(t.id)&&Array.isArray(t.points)&&t.points.length>=2&&t.points.every(n)&&s(t.id)).map(t=>{const e=[[Number(t.points[0][0]),Number(t.points[0][1])]],i=[];for(let s=1;st.points.length>=2),t.room_drafts.length||delete t.room_drafts),Array.isArray(t.walls)){const e=zc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Pr(t.walls,t.rooms||[],Ql,1,e),t.walls.length||delete t.walls}}}get _cfgWriting(){return this._writesPending>0}_writeConfig(){this._writesPending++,this._writeChain=this._writeChain.catch(()=>{}).then(async()=>{if(!this._serverCfg)return;this._dropLegacySegments();const t=await this.hass.callWS({type:"houseplan/config/set",config:this._serverCfg,expected_rev:this._cfgRev});this._cfgRev=t?.rev??this._cfgRev+1});return this._writeChain.finally(()=>{this._writesPending--})}_saveConfig(){this._cfgEpoch++,this._saveConfigDebounced()}_geometrySnapshot(t=this._space){const e=this._serverCfg?.spaces.find(e=>e.id===t);if(!e)return null;const i=t=>JSON.parse(JSON.stringify(t)),s={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==e[t]&&(s[t]=e[t]);return{spaceId:t,rooms:i(e.rooms||[]),...Array.isArray(e.openings)?{openings:i(e.openings)}:{},...Array.isArray(e.walls)?{walls:i(e.walls)}:{},...Array.isArray(e.open_spans)?{open_spans:i(e.open_spans)}:{},...Array.isArray(e.room_drafts)?{room_drafts:i(e.room_drafts)}:{},...Array.isArray(e.partitions)?{partitions:i(e.partitions)}:{},...Array.isArray(e.wall_columns)?{wall_columns:i(e.wall_columns)}:{},...Array.isArray(e.decor)?{decor:i(e.decor)}:{},plan_transform:s}}_recordGeometry(t,e){if(!e)return;const i=this._geometrySnapshot(e.spaceId);i&&JSON.stringify(e)!==JSON.stringify(i)&&(this._geometryHistory.push({name:t,before:e,after:i}),this.requestUpdate())}_clearGeometryGesture(){this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._wallDialog=null,this._physicalDialog=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._openingDialog=null,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._decorDraft=null,this._decorMove=null,this._dtDrag=null,this._bdDrag=null}_cancelBoundaryAnchor(){return!("boundary"!==this._tool||!this._openWallAnchor)&&(this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this.requestUpdate(),!0)}_stagePointerCancel(t){if(clearTimeout(this._kioskHoldTimer),this._swipeStart?.id===t.pointerId&&(this._swipeStart=null),this._physicalDrag?.pid===t.pointerId||this._physicalRotate?.pid===t.pointerId)return void this._cancelPhysicalGesture();if(this._decorDraft?.pid===t.pointerId)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove?.pid===t.pointerId||this._dtDrag?.pid===t.pointerId||this._bdDrag?.pid===t.pointerId)return void this._cancelDecorGesture();this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null),e&&0===this._pointers.size&&this.requestUpdate()}_applyGeometryState(t){if(!this._canCommitSpace(t.spaceId))return!1;const e=this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(!e)return!1;const i=t=>JSON.parse(JSON.stringify(t));e.rooms=i(t.rooms),void 0!==t.openings?e.openings=i(t.openings):delete e.openings,void 0!==t.walls?e.walls=i(t.walls):delete e.walls,void 0!==t.open_spans?e.open_spans=i(t.open_spans):delete e.open_spans,void 0!==t.room_drafts?e.room_drafts=i(t.room_drafts):delete e.room_drafts,void 0!==t.partitions?e.partitions=i(t.partitions):delete e.partitions,void 0!==t.wall_columns?e.wall_columns=i(t.wall_columns):delete e.wall_columns,void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];return Object.assign(e,i(t.plan_transform||{})),this._clearGeometryGesture(),this._space!==t.spaceId&&(this._commitSpace(t.spaceId),this._saveNav(),this._restoreZoom()),this._modelCache=null,this._frame=null,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_roomAt(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&bi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&Ci(t,i)})}_pointInRoom(t,e){return e.poly?fi(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!ya(t))return!0;const e=t.length,i=.001;for(let s=0;s=500)return this._showToast(this._t("toast.physical_limit")),!1;const t=this._curSpaceCfg;return!(!this._activeDraftId&&(t?.room_drafts||[]).length>=200||this._draftSegmentCount(t)>=2e3||(t?.partitions||[]).length+this._path.length>F_)||(this._showToast(this._t("toast.physical_limit")),!1)}_markupClick(t){if(this._vacFit)return;if(!this._markup)return;const e=this._spaceModel();if(!e)return void this._clearGeometryGesture();if(this._suppressClick)return;if(this._drag||this._rlResize)return;const i=t.composedPath?.()||[];if(i.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(i.some(t=>t?.classList?.contains?.("physical-hit")))return void("boundary"===this._tool&&this._showToast(this._t("toast.boundary_blocked")));const s=this._svgPoint(t);if("select"===this._tool)return void(this._physicalSel=null);if("resize"===this._tool){if(this._rszDrag||i.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(s,t));return void(this._rszSel=t?.id||null)}if("delroom"===this._tool)return void this._deleteRoomClick(s);if("opening"===this._tool)return void this._openingClick(s);if("merge"===this._tool)return void this._mergeClick(s);if("wallthick"===this._tool)return void this._wallThickClick(s);if("boundary"===this._tool)return void this._boundaryClick(s);if("split"===this._tool)return void this._splitClick(s);if("column"===this._tool)return void this._columnClick(s);let n=this._resolvePlanDrawPoint(s,t.shiftKey).point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this._path.length<3)return;n=[...this._path[0]]}if(!this._path.length){const t=this._draftEndAt(n);return t?(this._activeDraftId=t.draft.id,this._resumeDraftBySpace[this._space]=t.draft.id,this._path=t.reverse?[...t.draft.points].reverse().map(t=>[...t]):t.draft.points.map(t=>[...t]),void(this._draftSegmentCms=t.reverse?[...t.draft.segments].reverse().map(t=>t.cm):t.draft.segments.map(t=>t.cm))):(this._activeDraftId=null,this._draftSegmentCms=[],void(this._path=[n]))}const o=this._path[this._path.length-1];if(this._samePt(n,o))return;const a=this._draftEndAt(n,this._activeDraftId||void 0);if(a)return void this._mergeDraftEndpoint(a);if(!this._canAppendRoomDraftPoint())return;const r=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(r)}_draftEndAt(t,e){const i=this._spaceModel();if(!i)return null;const s=this._viewOr(this._baseVb()),n=Math.max(.15*this._gridPitch,this._stageEl?.clientWidth?s.w/this._stageEl.clientWidth*12:0);for(const s of i.room_drafts||[]){if(s.id===e)continue;if(s.points.length<2)continue;const i=s.points[0],o=s.points[s.points.length-1];if(Math.hypot(t[0]-o[0],t[1]-o[1])<=n)return{draft:s,reverse:!1};if(Math.hypot(t[0]-i[0],t[1]-i[1])<=n)return{draft:s,reverse:!0}}return null}_mergeDraftEndpoint(t){const e=this._curSpaceCfg;if(!e||!this._path.length)return;const i=this._path.map(t=>[...t]),s=this._wallGraphSources(i),n=Array.isArray(e.room_drafts)?e.room_drafts:[],o=this._activeDraftId?n.find(t=>t.id===this._activeDraftId):null,a=n.find(e=>e.id===t.draft.id);if(!a)return;const r=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(a.segments||[]).map(t=>({...t})):[...a.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,r[0]),d=h?null:this._drawWallCm;if(!h&&null==d)return void this._showPhysicalRange(100);const u=this._draftSegmentCms.map((t,e)=>({...o?.segments?.[e]||{},cm:t})),p=[...this._path.map(t=>[...t]),...h?r.slice(1):r],_=[...u,...null==d?[]:[{cm:d}],...l],g=p.length>=4&&this._samePt(p[0],p[p.length-1]),m=p,f=_;if(m.length>500)return void this._showToast(this._t("toast.physical_limit"));const v=(o?.segments?.length||0)+(a.segments?.length||0);if(this._draftSegmentCount(e)-v+f.length>2e3)return void this._showToast(this._t("toast.physical_limit"));if(g){const t=m.slice(0,-1);if(this._contourSelfIntersects(t)||Ti(t)<=1e-6)return void this._showToast(this._t("toast.contour_cannot_close"));const e=this._overlapRoom(t);if(e)return void this._showToast(this._t("toast.room_overlap",{name:e.name||""}))}const y=this._geometrySnapshot(),b=this._activeDraftId||t.draft.id,w={...o||a,id:b,points:m.map(t=>[t[0]/P_,t[1]/P_]),segments:f};e.room_drafts=n.filter(e=>e.id!==t.draft.id&&(!this._activeDraftId||e.id!==this._activeDraftId)),e.room_drafts.push(w),this._activeDraftId=b,this._resumeDraftBySpace[this._space]=b,this._draftSegmentCms=f.map(t=>Number(t.cm)),this._path=m,this._physicalSel=null,this._recordGeometry(this._t("history.draft_merge"),y),this._saveConfig(),null!=d&&this._offerWallFaces(i,i.length-1,s)}_persistActiveDraftSegment(){if(this._path.length<2||!this._curSpaceCfg)return;const t=this._drawWallCm;if(null==t)return;this._draftSegmentCms=[...this._draftSegmentCms,t];const e=this._geometrySnapshot(),i=this._curSpaceCfg;i.room_drafts||=[],this._activeDraftId||(this._activeDraftId="draft-"+Date.now().toString(36)),this._resumeDraftBySpace[this._space]=this._activeDraftId;const s=i.room_drafts.findIndex(t=>t.id===this._activeDraftId),n={...s>=0?i.room_drafts[s]:{},id:this._activeDraftId,points:this._path.map(t=>[t[0]/P_,t[1]/P_]),segments:this._draftSegmentCms.map((t,e)=>({...s>=0?i.room_drafts[s]?.segments?.[e]:{},cm:t}))};s>=0?i.room_drafts[s]=n:i.room_drafts.push(n),this._recordGeometry(this._t("history.draft_segment"),e),this._saveConfig()}_activeWallSourceKey(t){return`active:${this._activeDraftId||"session"}:${t}`}_wallGraphSources(t){const e=this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}));for(let i=0;i+1t.key===i);if(s>=0){const[t]=this._wallFaceGraphCache.splice(s,1);return this._wallFaceGraphCache.push(t),t.value}const n=function(t,e=.001){const i=Number.isFinite(e)&&e>0?e:$d,s=Gd(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Pd(t.a,i),s=Pd(t.b,i);n.set(e,t.a),n.set(s,t.b),o.has(e)||o.set(e,new Set),o.has(s)||o.set(s,new Set),o.get(e).add(s),o.get(s).add(e)}const r=new Map;for(const[t,e]of o){const i=n.get(t);r.set(t,[...e].sort((t,e)=>{const s=n.get(t),o=n.get(e);return Math.atan2(s[1]-i[1],s[0]-i[0])-Math.atan2(o[1]-i[1],o[0]-i[0])||t.localeCompare(e)}))}const l=new Set,c=new Map,h=(t,e)=>`${t}>${e}`;for(const t of s){const e=[Pd(t.a,i),Pd(t.b,i)];for(const[t,o]of[e,[e[1],e[0]]]){if(l.has(h(t,o)))continue;const e=[],d=[];let u=t,p=o,_=!1;for(let i=0;i<=2*s.length+2;i++){const i=h(u,p);if(l.has(i)){_=u===t&&p===o;break}l.add(i),e.push(u),d.push(Rd(u,p));const s=r.get(p)||[],n=s.indexOf(u);if(n<0||!s.length)break;if(u=p,p=s[(n-1+s.length)%s.length],u===t&&p===o){_=!0;break}}if(!_||new Set(e).size<3||new Set(e).size!==e.length)continue;const g=e.map(t=>n.get(t)),m=Dd(g);if(!(m>i*i))continue;const f=Ad(Id(e,n,i)),v=new Set;for(const t of d)for(const e of a.get(t)?.sourceKeys||[])v.add(e);const y={ring:g,key:f,area:m,atomKeys:[...d],sourceKeys:[...v].sort((t,e)=>t.localeCompare(e))};c.has(f)||c.set(f,y)}}return{atoms:s,faces:[...c.values()].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key))}}(t,e);return this._wallFaceGraphCache.push({key:i,value:n}),this._wallFaceGraphCache.length>4&&this._wallFaceGraphCache.shift(),n}_offerWallFaces(t,e=this._path.length-2,i){if(this._path.length<2||this._wallFaceBatch||this._roomDialog)return;const s=this._spaceModel();if(!s)return;const n=this._activeWallSourceKey(e),o=2e-4*this._gridPitch;let a;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);a=function(t,e,i){const s=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!s.has(t.key)&&t.sourceKeys.includes(i))}(this._wallFaceGraph(e,o),this._wallFaceGraph(s,o),n)}catch{return}if(!a.length)return;for(const t of s.rooms){const e=ci(t);if(!t.id||!e)continue;const i=Ii(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Ti(s)>=Ti(n)?s:n,r=o===s?n:s,l=[...a].sort((t,e)=>Math.abs(t.area-Ti(r))-Math.abs(e.area-Ti(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:r},consumeAllActive:!0}])}const r=a.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));r.length&&this._beginWallFaceBatch(r)}_beginWallFaceBatch(t){this._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this._path.map(t=>[...t]),activeCms:[...this._draftSegmentCms],activeDraftId:this._activeDraftId},this._clearPlanSnapHover(),this._nameSel="",this._areaSel="",this._resetRoomDialogFields(),this._roomDialog=!0}_columnClick(t){const e=this._snap(t),i=this._drawWallCm;if(null==i)return void this._showPhysicalRange($l);if(!this._curSpaceCfg||this._limitReached("column"))return;const s=this._spaceModel();if(!s)return;const n={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Sl(i),angle:0},o=(s.wall_columns||[]).find(t=>Bl(t,n,.02*this._gridPitch));if(o)return clearTimeout(this._duplicateColumnTimer),this._duplicateColumnId=o.id,this._duplicateColumnTimer=window.setTimeout(()=>{this._duplicateColumnId=null},900),void this._showToast(this._t("toast.column_duplicate"));const a=this._geometrySnapshot(),r=this._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...n,center:[e[0]/P_,e[1]/P_]}),this._recordGeometry(this._t("history.column_add"),a),this._saveConfig()}_openPhysicalDialog(t,e,i){const s=this._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),length:this._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Ml(i.angle):0)})}else{const n=s.room_drafts.find(t=>t.id===e),o=Math.max(0,Math.min(n?.segments.length?n.segments.length-1:0,i||0));n?.segments[o]&&(this._physicalDialog={kind:t,id:e,segment:o,cm:fr(n.segments[o].cm,this._imperial),length:this._fmtLen(n.points[o],n.points[o+1])})}}_physicalDown(t,e,i){const s=this._spaceModel();if(!s)return;t.stopPropagation(),H_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Nl(n,Pl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);e&&Nl(n,e)&&o.push({kind:"partition",id:t.id})}o.some(t=>t.kind===e&&t.id===i)||o.unshift({kind:e,id:i});const a=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===a&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%o.length:Math.max(0,o.findIndex(t=>t.kind===e&&t.id===i));this._physicalPickCycle={signature:a,index:c,x:t.clientX,y:t.clientY,at:r},e=o[c].kind,i=o[c].id;const h="partition"===e?s.partitions.find(t=>t.id===i):s.wall_columns.find(t=>t.id===i);h&&(this._physicalSel={kind:e,id:i},this._physicalDrag={pid:t.pointerId,kind:e,id:i,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(h)),delta:[0,0]})}_clampPhysicalDelta(t,e,i){const s="partition"===t?[e.a,e.b]:[e.center],n=s.map(t=>t[0]),o=s.map(t=>t[1]);return[Math.max(-Yl*P_-Math.min(...n),Math.min(Yl*P_-Math.max(...n),i[0])),Math.max(-Yl*P_-Math.min(...o),Math.min(Yl*P_-Math.max(...o),i[1]))]}_physicalMove(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t),s="partition"===e.kind?e.base.a:e.base.center,n=this._snap([s[0]+i[0]-e.start[0],s[1]+i[1]-e.start[1]]),o=this._clampPhysicalDelta(e.kind,e.base,[n[0]-s[0],n[1]-s[1]]);this._physicalDrag={...e,delta:o,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const i=this._spaceModel();if(!this._curSpaceCfg||!i)return;const s=this._curSpaceCfg;if("partition"===e.kind){const t=(s.partitions||[]).find(t=>t.id===e.id),i=e.base;if(t){const n={...i,a:[i.a[0]+e.delta[0],i.a[1]+e.delta[1]],b:[i.b[0]+e.delta[0],i.b[1]+e.delta[1]]};t.a=[n.a[0]/P_,n.a[1]/P_],t.b=[n.b[0]/P_,n.b[1]/P_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=ad(t,[n],P_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,ud(t,i,P_))}}}else{const t=(s.wall_columns||[]).find(t=>t.id===e.id),n=e.base,o={...n,center:[n.center[0]+e.delta[0],n.center[1]+e.delta[1]]};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/P_,(n.center[1]+e.delta[1])/P_])}this._recordGeometry(this._t("history.physical_move"),e.before),this._saveConfig()}_registerPhysicalTap(t,e,i){const s=performance.now(),n=this._physicalLastTap?.kind===t&&this._physicalLastTap.id===e&&this._physicalLastTap.segment===i&&s-this._physicalLastTap.at<=360;this._physicalLastTap={kind:t,id:e,segment:i,at:s},n&&(this._physicalLastTap=null,this._openPhysicalDialog(t,e,i))}_cancelPhysicalGesture(){this._physicalDrag=null,this._physicalRotate=null,this.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this._spaceModel())return;t.preventDefault(),t.stopPropagation(),H_(t);const i=this._svgPoint(t);this._physicalSel={kind:"column",id:e.id},this._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,baseAngle:Ml(e.angle),angle:Ml(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const i=this._svgPoint(t),s=180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,n=e.baseAngle+s-e.startAngle,o=Ml(t.shiftKey?n:5*Math.round(n/5));this._physicalRotate={...e,angle:o,moved:e.moved||Math.abs(n-e.baseAngle)>=.5}}_physicalRotateUp(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this._physicalRotate=null;const i=this._spaceModel();if(!e.moved||!this._curSpaceCfg||!i)return;const s=i.wall_columns.find(t=>t.id===e.id);if(!s||"square"!==s.shape)return;const n={...s,angle:e.angle};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,n,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));const o=this._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);o&&(o.angle=e.angle,this._recordGeometry(this._t("history.physical_edit"),e.before),this._saveConfig())}_rszRooms(){const t=[],e=this._spaceModel();if(!e)return t;for(const i of e.rooms){const e=i.id?ci(i):null;e&&t.push({id:i.id,poly:e})}return t}_rszOpenings(){return this._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen}))}_rszOpts(){return{minDim:this._cmToUnits(30),eps:.05*this._gridPitch}}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszApplyPreview(t,e){const i=this._rszDrag,s=this._serverCfg?.spaces.find(t=>t.id===this._space);if(!i||!s)return;const n=JSON.parse(i.snap),o={...s,rooms:n.rooms,openings:n.openings,walls:n.walls,open_spans:n.open_spans};Array.isArray(n.open_spans)&&n.open_spans.length||delete o.open_spans;const a=this._spaceH;for(const[e,i]of Object.entries(t)){const t=o.rooms.find(t=>t.id===e);t&&(t.poly=i.map(t=>[t[0]/P_,t[1]/a]),delete t.x,delete t.y,delete t.w,delete t.h)}for(const[t,i]of Object.entries(e)){const e=(o.openings||[]).find(e=>e.id===t);e&&(e.x=i[0]/P_,e.y=i[1]/a)}const r=[],l=[];for(const t of i.changed){const e=i.rooms.find(e=>e.id===t),s=o.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const n=s.poly.map(t=>[t[0]*P_,t[1]*a]);if(e.poly.length===n.length)for(let t=0;tt.id===e);if(!s||!s.poly||s.poly.length<3)return null;if(i<0||i>=s.poly.length)return null;const n=[...s.poly[i]],o=[...s.poly[(i+1)%s.poly.length]];return{roomId:e,edge:i,a:n,b:o,n:_a(s.poly,i)}}(s,e,i);n&&(this._rszDrag={kind:"edge",pid:t.pointerId,roomId:e,plan:n,rooms:s,openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszCornerDown(t,e,i,s){"resize"!==this._tool||this._rszDrag||(t.stopPropagation(),t.preventDefault(),H_(t),this._rszDrag={kind:"scale",pid:t.pointerId,roomId:e,fixed:s,span0:Math.hypot(i[0]-s[0],i[1]-s[1])||1,rooms:this._rszRooms(),openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszMove(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t);if("edge"===e.kind){const t=e.plan,s=(i[0]-t.a[0])*t.n[0]+(i[1]-t.a[1])*t.n[1],n=this._snap([t.a[0]+t.n[0]*s,t.a[1]+t.n[1]*s]);let o=(n[0]-t.a[0])*t.n[0]+(n[1]-t.a[1])*t.n[1];if(o=function(t,e,i,s,n,o){if(!Number.isFinite(s)||Math.abs(s)<1e-9)return 0;const a=Math.sign(s);let r=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&r>1e-9;s++,r-=l){const s=a*r;if(Sa(t,e,i,s,o))return s}return 0}(e.rooms,e.openings,t,o,this._gridPitch,this._rszOpts()),o===e.d&&e.moved)return;e.d=o,e.moved=!0;const a=ka(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(a.polys),this._rszApplyPreview(a.polys,a.openings),this._rszLive=this._rszEdgeLabels(a,t)}else{const t=e.fixed,s=this._snap(i);let n=Math.hypot(s[0]-t[0],s[1]-t[1])/(e.span0||1);if(n=Math.max(.05,Math.min(20,n)),n=function(t,e,i,s,n,o){if(!Number.isFinite(n)||n<=0)return 1;if(Ca(t,e,i,s,n,o))return n;let a=1,r=n;for(let n=0;n<28;n++){const n=(a+r)/2;Ca(t,e,i,s,n,o)?a=n:r=n}return a}(e.rooms,e.openings,e.roomId,t,n,this._rszOpts()),n===e.k&&e.moved)return;e.k=n,e.moved=!0;const o=e.rooms.find(t=>t.id===e.roomId),a=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),r=Ma(o,e.openings,a,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:r.poly},r.openings),this._rszLive=this._rszScaleLabels(r.poly)}this.requestUpdate()}_rszUp(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._rszPreview;this._rszDrag=null,this._rszLive=null,this._rszPreview=null;if(!(e.moved&&("edge"===e.kind?Math.abs(e.d)>1e-9:Math.abs(e.k-1)>1e-9))||!i)return this._cfgEpoch++,void this.requestUpdate();const s=JSON.parse(e.snap),n=this._curSpaceCfg;if(n){n.rooms=i.sp.rooms,n.openings=i.sp.openings,Array.isArray(i.sp.walls)&&(i.sp.walls.length?n.walls=i.sp.walls:delete n.walls),Array.isArray(i.sp.open_spans)&&i.sp.open_spans.length?n.open_spans=i.sp.open_spans:delete n.open_spans;for(const t of e.changed){const e=n.rooms.find(e=>e.id===t);e?.poly&&(e.poly=va(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Pr(n.walls,n.rooms||[],Ql,1,this._cfgOpenCuts()),n.walls.length||delete n.walls)}this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._recordGeometry(this._t("history.resize_room"),s),this._saveConfig(),this.requestUpdate()}_rszCancelDrag(){this._rszDrag&&(this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._cfgEpoch++,this.requestUpdate())}_rszPointerCancel(t){const e=this._rszDrag;e&&e.pid===t.pointerId&&(t.stopPropagation(),this._rszCancelDrag())}_rszEdgeLabels(t,e){const i=this._rszDrag,s=[],n=t.polys[e.roomId]||i.rooms.find(t=>t.id===e.roomId).poly,o=n.length,a=e.edge,r=(a+1)%o;for(const[t,e]of[[n[(a-1+o)%o],n[a]],[n[a],n[r]],[n[r],n[(r+1)%o]]])s.push({x:(t[0]+e[0])/2,y:(t[1]+e[1])/2,text:this._fmtLen(t,e)});const l="mi"===this.hass?.config?.unit_system?.length,c=Object.keys(t.polys).length?Object.keys(t.polys):[e.roomId],h=this._spaceWalls,d=this._openPairs().flatMap(t=>t.segs),u=this._physicalBodiesR();for(const e of c){const n=t.polys[e]||i.rooms.find(t=>t.id===e).poly,o=h.length&&ol(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||n,a=xi(o),r=u.length?Ol(zl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(o,this._gridPitch,this._cellCm);s.push({x:a[0],y:a[1],text:Ta(r,l),area:!0})}return s}_rszScaleLabels(t){const e="mi"===this.hass?.config?.unit_system?.length,i=t.map(t=>t[0]),s=t.map(t=>t[1]),n=Math.max(...i)-Math.min(...i),o=Math.max(...s)-Math.min(...s),a=this._spaceWalls,r=a.length&&this._rszSel&&ol([{id:this._rszSel,poly:t}],this._rszSel,a,[],this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||t,l=xi(r),c=this._physicalBodiesR(),h=c.length?Ol(zl(r,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(r,this._gridPitch,this._cellCm);return[{x:Math.min(...i),y:Math.min(...s),text:`${this._fmtLen([0,0],[n,0])} × ${this._fmtLen([0,0],[o,0])}`},{x:l[0],y:l[1],text:Ta(h,e),area:!0}]}_renderResizeLayer(t){const e=Math.max(.013*t.w,5),i=e/2,s=t=>t.toFixed(1),n=`M ${s(-.7*i)} 0 H ${s(.7*i)} M 0 ${s(-.22*i)} V ${s(-i)} M ${s(-.32*i)} ${s(-.6*i)} L 0 ${s(-i)} L ${s(.32*i)} ${s(-.6*i)} M 0 ${s(.22*i)} V ${s(i)} M ${s(-.32*i)} ${s(.6*i)} L 0 ${s(i)} L ${s(.32*i)} ${s(.6*i)}`,o=[],a=this._rszRooms();for(const t of a)for(let i=0;ithis._rszEdgeDown(e,t.id,i)} @pointermove=${t=>this._rszMove(t)} @pointerup=${t=>this._rszUp(t)} @@ -4756,7 +4773,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 @pointermove=${t=>this._rszMove(t)} @pointerup=${t=>this._rszUp(t)} @pointercancel=${t=>this._rszPointerCancel(t)} - @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}return W`${o}`}get _openingsR(){const t=this._curSpaceCfg,e=this._spaceH,i=this._spaceModel();return i?(t?.openings||[]).flatMap(t=>{const s={...t,rx:t.x*T_,ry:t.y*e,rlen:t.length*T_};if(!t.host)return[s];const n=ad(t,i.partitions,T_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,a]=n.resolved.center;const r=this._physicalDrag;return r?.moved&&"partition"===r.kind&&r.id===t.host.id&&(o+=r.delta[0],a+=r.delta[1]),[{...t,rx:o,ry:a,rlen:n.resolved.length,angle:n.resolved.angle,partitionHost:n.resolved}]}):[]}_partitionOpeningCuts(t=this._spaceModel(),e=()=>!0){if(!t)return[];const i=this._curSpaceCfg?.id===t.id&&this._curSpaceCfg?.openings||[],s=[];for(const n of i){if(!n.host||!e(n))continue;const i=ad(n,t.partitions,T_,this._cellCm,this._gridPitch);i.resolved&&s.push(cd(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=tl(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);return t.flatMap(t=>{const e={x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen};return t.host?t.partitionHost&&dd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?hd(t.partitionHost,i):bl(e,{x:t.rx,y:t.ry,angle:t.angle,length:t.rlen,flip_v:i})}_cmToUnits(t){return t/this._cellCm*this._gridPitch}get _decorList(){const t=this._curSpaceCfg;return Array.isArray(t?.decor)?t.decor:[]}get _decorH(){return T_}_decorResolvedStyle(t){return function(t,e,i,s=ir){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,a=Rt(o?.color,s.color);return{color:a,opacity:sr(o?.opacity,s.opacity),widthCm:lr(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?a:s.fillColor),fillOpacity:n&&o?.fill?sr(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ir)}_decorWidthUnits(t){return((t,e,i,s=ir.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return ar(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:ar(s,e,i)})(t,this._cellCm,this._gridPitch,ir.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:rr(ts*es(t),this._cellCm,this._gridPitch)}return rr(ts,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return ts;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?ar(e,this._cellCm,this._gridPitch):ts*es(t)}_decorSmallField(t){return Math.round(100*(this._imperial?t/2.54:t))/100}_decorSmallCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(100,e)):.1}_decorTextCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(p_,e)):.1}_decorLargeField(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_decorLargeCm(t){const e=this._imperial?30.48*t:100*t;return Number.isFinite(e)?Math.max(.1,Math.min(Yl*this._cellCm,e)):.1}_angleField(t){const e=Number(t);return Number.isFinite(e)?String(Number(e.toFixed(3))):"0"}_decorBoxOf(t){return"rect"!==t.kind&&"ellipse"!==t.kind&&"furniture"!==t.kind?null:{x:t.x*T_,y:t.y*this._decorH,w:t.w*T_,h:t.h*this._decorH,angle:nr(t.angle)||void 0}}_decorSnapGeometry(t){const e=this._spaceModel();if(!e)return{points:[],segments:[]};const i=t||"",s=this._decorSnapCache;if(s&&s.epoch===this._cfgEpoch&&s.space===this._space&&s.height===this._decorH&&s.exclude===i)return s.geometry;const n=[];for(const e of this._decorList)if(e.id!==t)if("line"===e.kind){const t=[e.x1*T_,e.y1*this._decorH],i=[e.x2*T_,e.y2*this._decorH];n.push({points:[t,i,[(t[0]+i[0])/2,(t[1]+i[1])/2]],segments:[{a:t,b:i}]})}else if("text"===e.kind)n.push({points:[[e.x*T_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(dr(t))}for(const t of e.rooms){const e=ci(t);e?.length&&n.push({points:e.flatMap((t,i)=>{const s=e[(i+1)%e.length];return[t,[(t[0]+s[0])/2,(t[1]+s[1])/2]]}),segments:e.map((t,i)=>({a:t,b:e[(i+1)%e.length]}))})}const o=function(t){return{points:t.flatMap(t=>t.points),segments:t.flatMap(t=>t.segments)}}(n);return this._decorSnapCache={epoch:this._cfgEpoch,space:this._space,height:this._decorH,exclude:i,geometry:o},o}_decorSnap(t,e="mouse",i){const s=this._stageEl,n=this._viewOr(this._baseVb()),o="touch"===e||"pen"===e?14:8,a=s?n.w/Math.max(1,s.clientWidth)*o:this._gridPitch;return function(t,e,i,s){const n=s(t);let o=null;for(const n of e.points){const e=s(n),a=Math.hypot(e[0]-t[0],e[1]-t[1]);a<=i&&(!o||athis._snap(t)).point}_replaceDecor(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>i.id===t?{...i,...e}:i),this.requestUpdate())}_cancelDecorGesture(){const t=this._decorMove?.before||this._dtDrag?.before||this._bdDrag?.before,e=t&&this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(t&&e){const i=t=>JSON.parse(JSON.stringify(t));void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];Object.assign(e,i(t.plan_transform||{})),this._cfgEpoch++}this._decorMove=null,this._dtDrag=null,this._bdDrag=null,this.requestUpdate()}_decorPointerDown(t){const e=this._decorTool;if("select"===e||"erase"===e?t.target.closest?.(".dshape"):null)return!0;if("line"===e||"rect"===e||"ellipse"===e){t.preventDefault();const i=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorDraft={kind:e,a:i,b:i,pid:t.pointerId},O_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/T_),y:sc(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:rr(ts,this._cellCm,this._gridPitch)},this._decorTextSelection={start:0,end:0},!0}if("furniture"===e)return!!this._furnPalette&&(t.preventDefault(),this._furnPlace(this._svgPoint(t),t.shiftKey),!0);if("select"===e&&(this._decorSel=null),this._bdMovable){const e=this._bdRect,i=this._svgPoint(t),s=e.x+e.w/2,n=e.y+e.h/2,o=-nr(e.angle)*Math.PI/180,a=i[0]-s,r=i[1]-n,l=[s+a*Math.cos(o)-r*Math.sin(o),n+a*Math.sin(o)+r*Math.cos(o)];if(l[0]>=e.x&&l[0]<=e.x+e.w&&l[1]>=e.y&&l[1]<=e.y+e.h)return t.preventDefault(),this._bdStart(t)}return!1}_decorCommitDraft(){const t=this._decorDraft;if(this._decorDraft=null,!t)return;const e=.5*this._gridPitch;if(!function(t,e,i,s){const n=Math.abs(i[0]-e[0]),o=Math.abs(i[1]-e[1]);return"line"===t?Math.hypot(n,o)>=s:n>=s&&o>=s}(t.kind,t.a,t.b,e))return;const i=T_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),a="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),r=sc;let l;if("line"===t.kind)l={id:a,kind:"line",x1:r(t.a[0]/i),y1:r(t.a[1]/s),x2:r(t.b[0]/i),y2:r(t.b[1]/s),...cr(n,!1)};else{const e=r(Math.min(t.a[0],t.b[0])/i),o=r(Math.min(t.a[1],t.b[1])/s),c=Math.abs(t.b[0]-t.a[0])/i,h=Math.abs(t.b[1]-t.a[1])/s;l={id:a,kind:t.kind,x:e,y:o,w:c,h:h,...cr(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=a,this._recordGeometry(this._t("history.decor_add"),o),this._saveConfig(),this.requestUpdate()}_decorShapeDown(t,e){if("decor"!==this._mode)return;const i=this._decorTool;if("text"===i){if("text"!==e.kind)return;return t.stopPropagation(),t.preventDefault(),void this._decorOpenText(e)}"select"!==i&&"erase"!==i||(t.stopPropagation(),t.preventDefault(),"erase"!==i?(this._decorSel=e.id,this._decorMove={id:e.id,start:this._svgPoint(t),orig:JSON.parse(JSON.stringify(e)),pid:t.pointerId,moved:!1,before:this._geometrySnapshot()},O_(t)):this._decorEraseConfirm={id:e.id,kind:e.kind})}_decorMoveUpdate(t){const e=this._decorMove;if("furniture"===e.orig?.kind)return void this._furnMoveUpdate(t);const i=this._svgPoint(t),s=e.orig,n=("line"===s.kind?s.x1:s.x)*T_,o=("line"===s.kind?s.y1:s.y)*this._decorH,a=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let r=(a[0]-n)/T_,l=(a[1]-o)/this._decorH;const c=e.orig,h="line"===c.kind?Math.min(c.x1,c.x2):c.x,d="line"===c.kind?Math.min(c.y1,c.y2):c.y,u="line"===c.kind?Math.abs(c.x2-c.x1):c.w||0,p="line"===c.kind?Math.abs(c.y2-c.y1):c.h||0,_=Yl;r=Math.max(-_-h,Math.min(_-h-u,r)),l=Math.max(-_-d,Math.min(_-d-p,l)),(r||l)&&(e.moved=!0);this._curSpaceCfg.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i=e.orig;return"line"===t.kind?{...t,x1:i.x1+r,y1:i.y1+l,x2:i.x2+r,y2:i.y2+l}:{...t,x:i.x+r,y:i.y+l}}),this.requestUpdate()}_decorShapeDbl(t,e){"decor"===this._mode&&"select"===this._decorTool&&(t.preventDefault(),t.stopPropagation(),this._decorMove=null,this._decorSel=e.id,this._openDecorProperties(e))}_openDecorProperties(t){if("decor"!==this._mode||"select"!==this._decorTool)return;if("text"===t.kind)return void this._decorOpenText(t);if(!["line","rect","ellipse","furniture"].includes(t.kind))return;const e=this._decorResolvedStyle(t),i="line"===t.kind?t:null,s=this._decorBoxOf(t);this._decorShapeDialog={id:t.id,kind:t.kind,color:e.color,opacity:e.opacity,widthCm:e.widthCm,angle:this._angleField(nr(i?zs([i.x1*T_,i.y1*this._decorH],[i.x2*T_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*T_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:rr(s.w,this._cellCm,this._gridPitch),sizeHCm:rr(s.h,this._cellCm,this._gridPitch)}:{},..."furniture"===t.kind?{symbol:t.symbol}:{},..."rect"===t.kind||"ellipse"===t.kind?{fill:e.fill,fillColor:e.fillColor,fillOpacity:e.fillOpacity}:{}}}_decorOpenText(t){if("text"!==t.kind)return;let e=String(t.text??"");const i=[...e.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Yi(t.entity,n),a=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!a){const t=e.indexOf("{}");e=t>=0?e.slice(0,t)+o+e.slice(t+2):`${e}${e?" ":""}${o}`}this._decorTextDialog={id:t.id,x:t.x,y:t.y,text:e,color:Rt(t.color,this._decorStyle.color),opacity:sr(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:a||void 0},this._decorTextSelection={start:e.length,end:e.length}}_decorRememberTextSelection(t){this._decorTextSelection={start:t.selectionStart??t.value.length,end:t.selectionEnd??t.value.length}}_decorInsertLiveVariable(t){const e=this._decorTextDialog;if(!e)return;const i=Yi(e.pickerEntity,t);if(!i)return;const s=e.text,n=Math.max(0,Math.min(s.length,this._decorTextSelection.start)),o=Math.max(n,Math.min(s.length,this._decorTextSelection.end));if(s.length-(o-n)+i.length>200)return;const a=s.slice(0,n)+i+s.slice(o),r=n+i.length;this._decorTextSelection={start:r,end:r},this._decorTextDialog={...e,text:a,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(r,r))})}_decorSaveText(){const t=this._decorTextDialog,e=String(t?.text??"").replace(/\r\n?/g,"\n").trim();if(!t||!e)return void(this._decorTextDialog=null);const i=this._geometrySnapshot(),s=this._curSpaceCfg,n={color:t.color,opacity:sr(t.opacity),size_cm:Number(Math.max(.1,Math.min(p_,t.sizeCm)).toFixed(4)),...nr(t.angle)?{angle:nr(t.angle)}:{}};if(t.id)s.decor=this._decorList.map(i=>{if(i.id!==t.id)return i;if("text"!==i.kind)return i;if(t.preserveLegacy){const{angle:t,size:s,scale:o,...a}=i;return{...a,text:e,...n}}const{entity:s,attr:o,unit:a,...r}=i,{angle:l,size:c,scale:h,...d}=r;return{...d,text:e,...n}});else{const i="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5);s.decor=[...this._decorList,{id:i,kind:"text",x:t.x,y:t.y,text:e,...n}],this._decorSel=i}this._decorTextDialog=null,this._recordGeometry(this._t(t.id?"history.decor_edit":"history.decor_add"),i),this._saveConfig(),this.requestUpdate()}_decorSaveShape(){const t=this._decorShapeDialog;if(!t)return;const e=this._geometrySnapshot(),i={color:t.color,opacity:sr(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:sr(t.fillOpacity,.25)};this._curSpaceCfg.decor=this._decorList.map(e=>{if(e.id!==t.id)return e;const s="rect"===t.kind||"ellipse"===t.kind,n=cr(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*T_,s=(e.y1+e.y2)/2*this._decorH,o=ar(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),a=nr(t.angle)*Math.PI/180,r=Math.cos(a)*o/2,l=Math.sin(a)*o/2,c=this._snap([i-r,s-l]),h=this._snap([i+r,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:sc(c[0]/T_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/T_),y2:sc(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*T_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(ar(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),a=Math.max(this._gridPitch,ai(ar(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),r=e.x*T_+i/2,l=e.y*this._decorH+s/2,c=nr(t.angle),h=or({x:r-o/2,y:l-a/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:sc(h[0]/T_),y:sc(h[1]/this._decorH),w:o/T_,h:a/this._decorH,..."furniture"===e.kind&&t.symbol?{symbol:t.symbol}:{},...c?{angle:c}:{}}}return e}),this._decorStyle={...i,fill:"rect"===t.kind||"ellipse"===t.kind?i.fill:this._decorStyle.fill,fillColor:"rect"===t.kind||"ellipse"===t.kind?i.fillColor:this._decorStyle.fillColor,fillOpacity:"rect"===t.kind||"ellipse"===t.kind?i.fillOpacity:this._decorStyle.fillOpacity},this._decorShapeDialog=null,this._recordGeometry(this._t("history.decor_edit"),e),this._saveConfig(),this.requestUpdate()}get _dtSel(){return"decor"===this._mode&&"select"===this._decorTool&&this._decorSel&&this._decorList.find(t=>t.id===this._decorSel)||null}_dtPivot(t){return"line"===t.kind?[(t.x1+t.x2)/2*T_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*T_,(t.y+t.h/2)*this._decorH]:[t.x*T_,t.y*this._decorH]}_dtApply(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const s={...i};"text"===i.kind&&void 0!==e.textSizeCm&&(delete s.size,delete s.scale);const n={...s};return void 0!==e.textSizeCm&&(n.size_cm=Number(Math.max(.1,Math.min(p_,e.textSizeCm)).toFixed(4))),void 0!==e.angle&&(e.angle?n.angle=Number(e.angle.toFixed(2)):delete n.angle),n}),this._cfgEpoch++,this.requestUpdate())}_dtStart(t,e,i,s){const n=this._dtSel;if(!n)return;t.stopPropagation(),t.preventDefault();const[o,a]=this._dtPivot(n),r=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:a,r0:Math.hypot(r[0]-o,r[1]-a),a0:180*Math.atan2(r[1]-a,r[0]-o)/Math.PI,textSizeCm0:"text"===n.kind?this._decorTextSizeCm(n):1,angle0:"line"===n.kind?0:Number(n.angle)||0,sgx:i?.[0],sgy:i?.[1],orig:l||void 0,origShape:JSON.parse(JSON.stringify(n)),before:this._geometrySnapshot(),lineEnd:s,moved:!1},O_(t)}_dtMove(t){const e=this._dtDrag;if(!e)return;const i=this._svgPoint(t);if(void 0!==e.lineEnd&&"line"===e.origShape.kind){const s=this._decorSnap(i,t.pointerType,e.id),n=sc(s[0]/T_),o=sc(s[1]/this._decorH),a=e.origShape,r=0===e.lineEnd?a.x1:a.x2,l=0===e.lineEnd?a.y1:a.y2;return(Math.abs(n-r)>1e-9||Math.abs(o-l)>1e-9)&&(e.moved=!0),void this._replaceDecor(e.id,0===e.lineEnd?{x1:n,y1:o}:{x2:n,y2:o})}if("scale"===e.kind&&e.orig){const s=ur(e.orig,e.sgx??1,e.sgy??1,i[0],i[1],!t.shiftKey,this._gridPitch,this._gridPitch),n=Math.abs(s.x-e.orig.x)>1e-6||Math.abs(s.y-e.orig.y)>1e-6||Math.abs(s.w-e.orig.w)>1e-6||Math.abs(s.h-e.orig.h)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._decorApplyBox(e.id,s)}if("scale"===e.kind){const t=Math.hypot(i[0]-e.ax,i[1]-e.ay);if(e.r0<1e-6)return;const s=Math.max(.1,Math.min(p_,e.textSizeCm0*(t/e.r0))),n=Math.abs(s-e.textSizeCm0)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._dtApply(e.id,{textSizeCm:s})}const s=180*Math.atan2(i[1]-e.ay,i[0]-e.ax)/Math.PI;let n=e.angle0+(s-e.a0);t.shiftKey||(n=5*Math.round(n/5)),n=(n%360+360)%360,n>180&&(n-=360);const o=Math.abs(n-e.angle0)>1e-6;(o||e.moved)&&(e.moved||=o,this._dtApply(e.id,{angle:n}))}_dtUp(){const t=this._dtDrag;this._dtDrag=null,t?.moved&&(this._recordGeometry(this._t("history.decor_transform"),t.before),this._saveConfig()),this.requestUpdate()}_dtMeasure(){const t=this._dtSel;if(!t)return void(this._dtBox&&(this._dtBox=null,this.requestUpdate()));let e;if("line"===t.kind){const i=t.x1*T_,s=t.y1*this._decorH,n=t.x2*T_,o=t.y2*this._decorH;e={id:t.id,x:Math.min(i,n),y:Math.min(s,o),w:Math.abs(n-i),h:Math.abs(o-s)}}else if("furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind)e={id:t.id,x:t.x*T_,y:t.y*this._decorH,w:t.w*T_,h:t.h*this._decorH};else{const i=this.renderRoot.querySelector(`text.dtext[data-id="${t.id}"]`);if(!i||"function"!=typeof i.getBBox)return;let s;try{s=i.getBBox()}catch{return}if(!s||!s.width&&!s.height)return;e={id:t.id,x:s.x,y:s.y,w:s.width,h:s.height}}const i=this._dtBox;i&&i.id===e.id&&Math.abs(i.x-e.x)<.01&&Math.abs(i.y-e.y)<.01&&Math.abs(i.w-e.w)<.01&&Math.abs(i.h-e.h)<.01||(this._dtBox=e,this.requestUpdate())}_deleteDecor(t){if(!this._decorList.some(e=>e.id===t))return;const e=this._geometrySnapshot();this._curSpaceCfg.decor=this._decorList.filter(e=>e.id!==t),this._decorSel===t&&(this._decorSel=null),this._recordGeometry(this._t("history.decor_delete"),e),this._saveConfig(),this.requestUpdate()}_decorDeleteSel(){this._decorSel&&this._deleteDecor(this._decorSel)}_confirmDecorErase(){const t=this._decorEraseConfirm;this._decorEraseConfirm=null,t&&this._deleteDecor(t.id)}get _furnWalls(){const t=this._rawPhysicalBodiesR().flatMap(t=>t.map((e,i)=>{const s=t[(i+1)%t.length];return[e[0],e[1],s[0],s[1]]}));return[...this._segments,...t]}get _furnWallReach(){return 6*this._gridPitch}_furnFieldValue(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_furnFieldToCm(t){return e=this._imperial?30.48*t:100*t,Number.isFinite(e)?Math.max(1,Math.min(1e4,e)):1;var e}_furnPick(t){const e=function(t){const e=xc(t);return e?{w:e.w,h:e.h}:{w:60,h:60}}(t);this._furnPalette={symbol:t,w:e.w,h:e.h}}_furnPlace(t,e=!1){const i=this._furnPalette,s=this._curSpaceCfg;if(!i||!s)return;const n=T_,o=this._decorH,a=Dc(Sc(i.w,this._cellCm,this._gridPitch,n)),r=Dc(Sc(i.h,this._cellCm,this._gridPitch,n)),l=this._geometrySnapshot(),c=this._decorSnap(t);let h=c[0],d=c[1],u=0;const p=e?null:Ac(h,d,r*o,this._furnWalls,this._furnWallReach,this._gridPitch);p&&(h=p.cx,d=p.cy,u=p.angle);const _="df"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),g={id:_,kind:"furniture",symbol:i.symbol,x:sc(h/n-a/2),y:sc(d/o-r/2),w:a,h:r,...cr(this._decorStyle,!1)};u&&(g.angle=Number(u.toFixed(2))),s.decor=[...this._decorList,g],this._decorSel=_,this._decorTool="select",this._furnPalette=null,this._recordGeometry(this._t("history.decor_add"),l),this._saveConfig(),this.requestUpdate()}_furnMoveUpdate(t){const e=this._decorMove;if("furniture"!==e.orig.kind)return;const i=e.orig,s=this._curSpaceCfg;if(!s)return;const n=T_,o=this._decorH,a=this._svgPoint(t),r=(i.x+i.w/2)*n+(a[0]-e.start[0]),l=(i.y+i.h/2)*o+(a[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Ac(r,l,i.h*o,this._furnWalls,this._furnWallReach,this._gridPitch);if(u)c=u.cx/n-i.w/2,h=u.cy/o-i.h/2,d=u.angle;else{const s=this._decorSnap([r-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=sc(c),h=sc(h),(Math.abs(c-i.x)>1e-9||Math.abs(h-i.y)>1e-9||Math.abs(d-(Number(i.angle)||0))>1e-9)&&(e.moved=!0),s.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i={...t,x:c,y:h};return d?i.angle=Number(d.toFixed(2)):delete i.angle,i}),this.requestUpdate()}_decorApplyBox(t,e){const i=this._curSpaceCfg;if(!i)return;const s=T_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=or(e,i.angle,t=>this._snap(t));return{...i,x:sc(o[0]/s),y:sc(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Yl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Yl,e.h/n))}}),this._cfgEpoch++,this.requestUpdate()}get _furnLive(){const t=this._dtDrag;if(!t||"scale"!==t.kind||!t.orig)return null;const e=this._decorList.find(e=>e.id===t.id);if(!e||"furniture"!==e.kind)return null;const i=T_,s=this._decorH,n=e.w*i,o=e.h*s,a=function(t,e,i,s,n){const o=t+i/2,a=e+s/2,r=(Number(n)||0)*Math.PI/180,l=Math.cos(r),c=Math.sin(r),h=(t,e)=>{const i=t-o,s=e-a;return[o+i*l-s*c,a+i*c+s*l]};return[h(t,e),h(t+i,e),h(t+i,e+s),h(t,e+s)]}(e.x*i,e.y*s,n,o,Number(e.angle)||0),r=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=r(a[0],a[1]),c=r(a[0],a[3]);return[{x:l[0],y:l[1],text:this._fmtLen([0,0],[n,0])},{x:c[0],y:c[1],text:this._fmtLen([0,0],[0,o])}]}_renderFurnPalette(){const t=this._furnPalette,e=this._t(this._imperial?"gs.unit_ft":"gs.unit_m");return j`
t.stopPropagation()}> + @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}return W`${o}`}get _openingsR(){const t=this._curSpaceCfg,e=this._spaceH,i=this._spaceModel();return i?(t?.openings||[]).flatMap(t=>{const s={...t,rx:t.x*P_,ry:t.y*e,rlen:t.length*P_};if(!t.host)return[s];const n=ad(t,i.partitions,P_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,a]=n.resolved.center;const r=this._physicalDrag;return r?.moved&&"partition"===r.kind&&r.id===t.host.id&&(o+=r.delta[0],a+=r.delta[1]),[{...t,rx:o,ry:a,rlen:n.resolved.length,angle:n.resolved.angle,partitionHost:n.resolved}]}):[]}_partitionOpeningCuts(t=this._spaceModel(),e=()=>!0){if(!t)return[];const i=this._curSpaceCfg?.id===t.id&&this._curSpaceCfg?.openings||[],s=[];for(const n of i){if(!n.host||!e(n))continue;const i=ad(n,t.partitions,P_,this._cellCm,this._gridPitch);i.resolved&&s.push(cd(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=tl(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);return t.flatMap(t=>{const e={x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen};return t.host?t.partitionHost&&dd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?hd(t.partitionHost,i):bl(e,{x:t.rx,y:t.ry,angle:t.angle,length:t.rlen,flip_v:i})}_cmToUnits(t){return t/this._cellCm*this._gridPitch}get _decorList(){const t=this._curSpaceCfg;return Array.isArray(t?.decor)?t.decor:[]}get _decorH(){return P_}_decorResolvedStyle(t){return function(t,e,i,s=ir){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,a=Rt(o?.color,s.color);return{color:a,opacity:sr(o?.opacity,s.opacity),widthCm:lr(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?a:s.fillColor),fillOpacity:n&&o?.fill?sr(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ir)}_decorWidthUnits(t){return((t,e,i,s=ir.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return ar(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:ar(s,e,i)})(t,this._cellCm,this._gridPitch,ir.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:rr(ts*es(t),this._cellCm,this._gridPitch)}return rr(ts,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return ts;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?ar(e,this._cellCm,this._gridPitch):ts*es(t)}_decorSmallField(t){return Math.round(100*(this._imperial?t/2.54:t))/100}_decorSmallCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(100,e)):.1}_decorTextCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(__,e)):.1}_decorLargeField(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_decorLargeCm(t){const e=this._imperial?30.48*t:100*t;return Number.isFinite(e)?Math.max(.1,Math.min(Yl*this._cellCm,e)):.1}_angleField(t){const e=Number(t);return Number.isFinite(e)?String(Number(e.toFixed(3))):"0"}_decorBoxOf(t){return"rect"!==t.kind&&"ellipse"!==t.kind&&"furniture"!==t.kind?null:{x:t.x*P_,y:t.y*this._decorH,w:t.w*P_,h:t.h*this._decorH,angle:nr(t.angle)||void 0}}_decorSnapGeometry(t){const e=this._spaceModel();if(!e)return{points:[],segments:[]};const i=t||"",s=this._decorSnapCache;if(s&&s.epoch===this._cfgEpoch&&s.space===this._space&&s.height===this._decorH&&s.exclude===i)return s.geometry;const n=[];for(const e of this._decorList)if(e.id!==t)if("line"===e.kind){const t=[e.x1*P_,e.y1*this._decorH],i=[e.x2*P_,e.y2*this._decorH];n.push({points:[t,i,[(t[0]+i[0])/2,(t[1]+i[1])/2]],segments:[{a:t,b:i}]})}else if("text"===e.kind)n.push({points:[[e.x*P_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(dr(t))}for(const t of e.rooms){const e=ci(t);e?.length&&n.push({points:e.flatMap((t,i)=>{const s=e[(i+1)%e.length];return[t,[(t[0]+s[0])/2,(t[1]+s[1])/2]]}),segments:e.map((t,i)=>({a:t,b:e[(i+1)%e.length]}))})}const o=function(t){return{points:t.flatMap(t=>t.points),segments:t.flatMap(t=>t.segments)}}(n);return this._decorSnapCache={epoch:this._cfgEpoch,space:this._space,height:this._decorH,exclude:i,geometry:o},o}_decorSnap(t,e="mouse",i){const s=this._stageEl,n=this._viewOr(this._baseVb()),o="touch"===e||"pen"===e?14:8,a=s?n.w/Math.max(1,s.clientWidth)*o:this._gridPitch;return function(t,e,i,s){const n=s(t);let o=null;for(const n of e.points){const e=s(n),a=Math.hypot(e[0]-t[0],e[1]-t[1]);a<=i&&(!o||athis._snap(t)).point}_replaceDecor(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>i.id===t?{...i,...e}:i),this.requestUpdate())}_cancelDecorGesture(){const t=this._decorMove?.before||this._dtDrag?.before||this._bdDrag?.before,e=t&&this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(t&&e){const i=t=>JSON.parse(JSON.stringify(t));void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];Object.assign(e,i(t.plan_transform||{})),this._cfgEpoch++}this._decorMove=null,this._dtDrag=null,this._bdDrag=null,this.requestUpdate()}_decorPointerDown(t){const e=this._decorTool;if("select"===e||"erase"===e?t.target.closest?.(".dshape"):null)return!0;if("line"===e||"rect"===e||"ellipse"===e){t.preventDefault();const i=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorDraft={kind:e,a:i,b:i,pid:t.pointerId},H_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/P_),y:sc(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:rr(ts,this._cellCm,this._gridPitch)},this._decorTextSelection={start:0,end:0},!0}if("furniture"===e)return!!this._furnPalette&&(t.preventDefault(),this._furnPlace(this._svgPoint(t),t.shiftKey),!0);if("select"===e&&(this._decorSel=null),this._bdMovable){const e=this._bdRect,i=this._svgPoint(t),s=e.x+e.w/2,n=e.y+e.h/2,o=-nr(e.angle)*Math.PI/180,a=i[0]-s,r=i[1]-n,l=[s+a*Math.cos(o)-r*Math.sin(o),n+a*Math.sin(o)+r*Math.cos(o)];if(l[0]>=e.x&&l[0]<=e.x+e.w&&l[1]>=e.y&&l[1]<=e.y+e.h)return t.preventDefault(),this._bdStart(t)}return!1}_decorCommitDraft(){const t=this._decorDraft;if(this._decorDraft=null,!t)return;const e=.5*this._gridPitch;if(!function(t,e,i,s){const n=Math.abs(i[0]-e[0]),o=Math.abs(i[1]-e[1]);return"line"===t?Math.hypot(n,o)>=s:n>=s&&o>=s}(t.kind,t.a,t.b,e))return;const i=P_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),a="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),r=sc;let l;if("line"===t.kind)l={id:a,kind:"line",x1:r(t.a[0]/i),y1:r(t.a[1]/s),x2:r(t.b[0]/i),y2:r(t.b[1]/s),...cr(n,!1)};else{const e=r(Math.min(t.a[0],t.b[0])/i),o=r(Math.min(t.a[1],t.b[1])/s),c=Math.abs(t.b[0]-t.a[0])/i,h=Math.abs(t.b[1]-t.a[1])/s;l={id:a,kind:t.kind,x:e,y:o,w:c,h:h,...cr(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=a,this._recordGeometry(this._t("history.decor_add"),o),this._saveConfig(),this.requestUpdate()}_decorShapeDown(t,e){if("decor"!==this._mode)return;const i=this._decorTool;if("text"===i){if("text"!==e.kind)return;return t.stopPropagation(),t.preventDefault(),void this._decorOpenText(e)}"select"!==i&&"erase"!==i||(t.stopPropagation(),t.preventDefault(),"erase"!==i?(this._decorSel=e.id,this._decorMove={id:e.id,start:this._svgPoint(t),orig:JSON.parse(JSON.stringify(e)),pid:t.pointerId,moved:!1,before:this._geometrySnapshot()},H_(t)):this._decorEraseConfirm={id:e.id,kind:e.kind})}_decorMoveUpdate(t){const e=this._decorMove;if("furniture"===e.orig?.kind)return void this._furnMoveUpdate(t);const i=this._svgPoint(t),s=e.orig,n=("line"===s.kind?s.x1:s.x)*P_,o=("line"===s.kind?s.y1:s.y)*this._decorH,a=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let r=(a[0]-n)/P_,l=(a[1]-o)/this._decorH;const c=e.orig,h="line"===c.kind?Math.min(c.x1,c.x2):c.x,d="line"===c.kind?Math.min(c.y1,c.y2):c.y,u="line"===c.kind?Math.abs(c.x2-c.x1):c.w||0,p="line"===c.kind?Math.abs(c.y2-c.y1):c.h||0,_=Yl;r=Math.max(-_-h,Math.min(_-h-u,r)),l=Math.max(-_-d,Math.min(_-d-p,l)),(r||l)&&(e.moved=!0);this._curSpaceCfg.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i=e.orig;return"line"===t.kind?{...t,x1:i.x1+r,y1:i.y1+l,x2:i.x2+r,y2:i.y2+l}:{...t,x:i.x+r,y:i.y+l}}),this.requestUpdate()}_decorShapeDbl(t,e){"decor"===this._mode&&"select"===this._decorTool&&(t.preventDefault(),t.stopPropagation(),this._decorMove=null,this._decorSel=e.id,this._openDecorProperties(e))}_openDecorProperties(t){if("decor"!==this._mode||"select"!==this._decorTool)return;if("text"===t.kind)return void this._decorOpenText(t);if(!["line","rect","ellipse","furniture"].includes(t.kind))return;const e=this._decorResolvedStyle(t),i="line"===t.kind?t:null,s=this._decorBoxOf(t);this._decorShapeDialog={id:t.id,kind:t.kind,color:e.color,opacity:e.opacity,widthCm:e.widthCm,angle:this._angleField(nr(i?zs([i.x1*P_,i.y1*this._decorH],[i.x2*P_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*P_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:rr(s.w,this._cellCm,this._gridPitch),sizeHCm:rr(s.h,this._cellCm,this._gridPitch)}:{},..."furniture"===t.kind?{symbol:t.symbol}:{},..."rect"===t.kind||"ellipse"===t.kind?{fill:e.fill,fillColor:e.fillColor,fillOpacity:e.fillOpacity}:{}}}_decorOpenText(t){if("text"!==t.kind)return;let e=String(t.text??"");const i=[...e.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Yi(t.entity,n),a=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!a){const t=e.indexOf("{}");e=t>=0?e.slice(0,t)+o+e.slice(t+2):`${e}${e?" ":""}${o}`}this._decorTextDialog={id:t.id,x:t.x,y:t.y,text:e,color:Rt(t.color,this._decorStyle.color),opacity:sr(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:a||void 0},this._decorTextSelection={start:e.length,end:e.length}}_decorRememberTextSelection(t){this._decorTextSelection={start:t.selectionStart??t.value.length,end:t.selectionEnd??t.value.length}}_decorInsertLiveVariable(t){const e=this._decorTextDialog;if(!e)return;const i=Yi(e.pickerEntity,t);if(!i)return;const s=e.text,n=Math.max(0,Math.min(s.length,this._decorTextSelection.start)),o=Math.max(n,Math.min(s.length,this._decorTextSelection.end));if(s.length-(o-n)+i.length>200)return;const a=s.slice(0,n)+i+s.slice(o),r=n+i.length;this._decorTextSelection={start:r,end:r},this._decorTextDialog={...e,text:a,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(r,r))})}_decorSaveText(){const t=this._decorTextDialog,e=String(t?.text??"").replace(/\r\n?/g,"\n").trim();if(!t||!e)return void(this._decorTextDialog=null);const i=this._geometrySnapshot(),s=this._curSpaceCfg,n={color:t.color,opacity:sr(t.opacity),size_cm:Number(Math.max(.1,Math.min(__,t.sizeCm)).toFixed(4)),...nr(t.angle)?{angle:nr(t.angle)}:{}};if(t.id)s.decor=this._decorList.map(i=>{if(i.id!==t.id)return i;if("text"!==i.kind)return i;if(t.preserveLegacy){const{angle:t,size:s,scale:o,...a}=i;return{...a,text:e,...n}}const{entity:s,attr:o,unit:a,...r}=i,{angle:l,size:c,scale:h,...d}=r;return{...d,text:e,...n}});else{const i="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5);s.decor=[...this._decorList,{id:i,kind:"text",x:t.x,y:t.y,text:e,...n}],this._decorSel=i}this._decorTextDialog=null,this._recordGeometry(this._t(t.id?"history.decor_edit":"history.decor_add"),i),this._saveConfig(),this.requestUpdate()}_decorSaveShape(){const t=this._decorShapeDialog;if(!t)return;const e=this._geometrySnapshot(),i={color:t.color,opacity:sr(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:sr(t.fillOpacity,.25)};this._curSpaceCfg.decor=this._decorList.map(e=>{if(e.id!==t.id)return e;const s="rect"===t.kind||"ellipse"===t.kind,n=cr(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*P_,s=(e.y1+e.y2)/2*this._decorH,o=ar(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),a=nr(t.angle)*Math.PI/180,r=Math.cos(a)*o/2,l=Math.sin(a)*o/2,c=this._snap([i-r,s-l]),h=this._snap([i+r,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:sc(c[0]/P_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/P_),y2:sc(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*P_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(ar(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),a=Math.max(this._gridPitch,ai(ar(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),r=e.x*P_+i/2,l=e.y*this._decorH+s/2,c=nr(t.angle),h=or({x:r-o/2,y:l-a/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:sc(h[0]/P_),y:sc(h[1]/this._decorH),w:o/P_,h:a/this._decorH,..."furniture"===e.kind&&t.symbol?{symbol:t.symbol}:{},...c?{angle:c}:{}}}return e}),this._decorStyle={...i,fill:"rect"===t.kind||"ellipse"===t.kind?i.fill:this._decorStyle.fill,fillColor:"rect"===t.kind||"ellipse"===t.kind?i.fillColor:this._decorStyle.fillColor,fillOpacity:"rect"===t.kind||"ellipse"===t.kind?i.fillOpacity:this._decorStyle.fillOpacity},this._decorShapeDialog=null,this._recordGeometry(this._t("history.decor_edit"),e),this._saveConfig(),this.requestUpdate()}get _dtSel(){return"decor"===this._mode&&"select"===this._decorTool&&this._decorSel&&this._decorList.find(t=>t.id===this._decorSel)||null}_dtPivot(t){return"line"===t.kind?[(t.x1+t.x2)/2*P_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*P_,(t.y+t.h/2)*this._decorH]:[t.x*P_,t.y*this._decorH]}_dtApply(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const s={...i};"text"===i.kind&&void 0!==e.textSizeCm&&(delete s.size,delete s.scale);const n={...s};return void 0!==e.textSizeCm&&(n.size_cm=Number(Math.max(.1,Math.min(__,e.textSizeCm)).toFixed(4))),void 0!==e.angle&&(e.angle?n.angle=Number(e.angle.toFixed(2)):delete n.angle),n}),this._cfgEpoch++,this.requestUpdate())}_dtStart(t,e,i,s){const n=this._dtSel;if(!n)return;t.stopPropagation(),t.preventDefault();const[o,a]=this._dtPivot(n),r=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:a,r0:Math.hypot(r[0]-o,r[1]-a),a0:180*Math.atan2(r[1]-a,r[0]-o)/Math.PI,textSizeCm0:"text"===n.kind?this._decorTextSizeCm(n):1,angle0:"line"===n.kind?0:Number(n.angle)||0,sgx:i?.[0],sgy:i?.[1],orig:l||void 0,origShape:JSON.parse(JSON.stringify(n)),before:this._geometrySnapshot(),lineEnd:s,moved:!1},H_(t)}_dtMove(t){const e=this._dtDrag;if(!e)return;const i=this._svgPoint(t);if(void 0!==e.lineEnd&&"line"===e.origShape.kind){const s=this._decorSnap(i,t.pointerType,e.id),n=sc(s[0]/P_),o=sc(s[1]/this._decorH),a=e.origShape,r=0===e.lineEnd?a.x1:a.x2,l=0===e.lineEnd?a.y1:a.y2;return(Math.abs(n-r)>1e-9||Math.abs(o-l)>1e-9)&&(e.moved=!0),void this._replaceDecor(e.id,0===e.lineEnd?{x1:n,y1:o}:{x2:n,y2:o})}if("scale"===e.kind&&e.orig){const s=ur(e.orig,e.sgx??1,e.sgy??1,i[0],i[1],!t.shiftKey,this._gridPitch,this._gridPitch),n=Math.abs(s.x-e.orig.x)>1e-6||Math.abs(s.y-e.orig.y)>1e-6||Math.abs(s.w-e.orig.w)>1e-6||Math.abs(s.h-e.orig.h)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._decorApplyBox(e.id,s)}if("scale"===e.kind){const t=Math.hypot(i[0]-e.ax,i[1]-e.ay);if(e.r0<1e-6)return;const s=Math.max(.1,Math.min(__,e.textSizeCm0*(t/e.r0))),n=Math.abs(s-e.textSizeCm0)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._dtApply(e.id,{textSizeCm:s})}const s=180*Math.atan2(i[1]-e.ay,i[0]-e.ax)/Math.PI;let n=e.angle0+(s-e.a0);t.shiftKey||(n=5*Math.round(n/5)),n=(n%360+360)%360,n>180&&(n-=360);const o=Math.abs(n-e.angle0)>1e-6;(o||e.moved)&&(e.moved||=o,this._dtApply(e.id,{angle:n}))}_dtUp(){const t=this._dtDrag;this._dtDrag=null,t?.moved&&(this._recordGeometry(this._t("history.decor_transform"),t.before),this._saveConfig()),this.requestUpdate()}_dtMeasure(){const t=this._dtSel;if(!t)return void(this._dtBox&&(this._dtBox=null,this.requestUpdate()));let e;if("line"===t.kind){const i=t.x1*P_,s=t.y1*this._decorH,n=t.x2*P_,o=t.y2*this._decorH;e={id:t.id,x:Math.min(i,n),y:Math.min(s,o),w:Math.abs(n-i),h:Math.abs(o-s)}}else if("furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind)e={id:t.id,x:t.x*P_,y:t.y*this._decorH,w:t.w*P_,h:t.h*this._decorH};else{const i=this.renderRoot.querySelector(`text.dtext[data-id="${t.id}"]`);if(!i||"function"!=typeof i.getBBox)return;let s;try{s=i.getBBox()}catch{return}if(!s||!s.width&&!s.height)return;e={id:t.id,x:s.x,y:s.y,w:s.width,h:s.height}}const i=this._dtBox;i&&i.id===e.id&&Math.abs(i.x-e.x)<.01&&Math.abs(i.y-e.y)<.01&&Math.abs(i.w-e.w)<.01&&Math.abs(i.h-e.h)<.01||(this._dtBox=e,this.requestUpdate())}_deleteDecor(t){if(!this._decorList.some(e=>e.id===t))return;const e=this._geometrySnapshot();this._curSpaceCfg.decor=this._decorList.filter(e=>e.id!==t),this._decorSel===t&&(this._decorSel=null),this._recordGeometry(this._t("history.decor_delete"),e),this._saveConfig(),this.requestUpdate()}_decorDeleteSel(){this._decorSel&&this._deleteDecor(this._decorSel)}_confirmDecorErase(){const t=this._decorEraseConfirm;this._decorEraseConfirm=null,t&&this._deleteDecor(t.id)}get _furnWalls(){const t=this._rawPhysicalBodiesR().flatMap(t=>t.map((e,i)=>{const s=t[(i+1)%t.length];return[e[0],e[1],s[0],s[1]]}));return[...this._segments,...t]}get _furnWallReach(){return 6*this._gridPitch}_furnFieldValue(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_furnFieldToCm(t){return e=this._imperial?30.48*t:100*t,Number.isFinite(e)?Math.max(1,Math.min(1e4,e)):1;var e}_furnPick(t){const e=function(t){const e=xc(t);return e?{w:e.w,h:e.h}:{w:60,h:60}}(t);this._furnPalette={symbol:t,w:e.w,h:e.h}}_furnPlace(t,e=!1){const i=this._furnPalette,s=this._curSpaceCfg;if(!i||!s)return;const n=P_,o=this._decorH,a=Dc(Sc(i.w,this._cellCm,this._gridPitch,n)),r=Dc(Sc(i.h,this._cellCm,this._gridPitch,n)),l=this._geometrySnapshot(),c=this._decorSnap(t);let h=c[0],d=c[1],u=0;const p=e?null:Ac(h,d,r*o,this._furnWalls,this._furnWallReach,this._gridPitch);p&&(h=p.cx,d=p.cy,u=p.angle);const _="df"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),g={id:_,kind:"furniture",symbol:i.symbol,x:sc(h/n-a/2),y:sc(d/o-r/2),w:a,h:r,...cr(this._decorStyle,!1)};u&&(g.angle=Number(u.toFixed(2))),s.decor=[...this._decorList,g],this._decorSel=_,this._decorTool="select",this._furnPalette=null,this._recordGeometry(this._t("history.decor_add"),l),this._saveConfig(),this.requestUpdate()}_furnMoveUpdate(t){const e=this._decorMove;if("furniture"!==e.orig.kind)return;const i=e.orig,s=this._curSpaceCfg;if(!s)return;const n=P_,o=this._decorH,a=this._svgPoint(t),r=(i.x+i.w/2)*n+(a[0]-e.start[0]),l=(i.y+i.h/2)*o+(a[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Ac(r,l,i.h*o,this._furnWalls,this._furnWallReach,this._gridPitch);if(u)c=u.cx/n-i.w/2,h=u.cy/o-i.h/2,d=u.angle;else{const s=this._decorSnap([r-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=sc(c),h=sc(h),(Math.abs(c-i.x)>1e-9||Math.abs(h-i.y)>1e-9||Math.abs(d-(Number(i.angle)||0))>1e-9)&&(e.moved=!0),s.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i={...t,x:c,y:h};return d?i.angle=Number(d.toFixed(2)):delete i.angle,i}),this.requestUpdate()}_decorApplyBox(t,e){const i=this._curSpaceCfg;if(!i)return;const s=P_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=or(e,i.angle,t=>this._snap(t));return{...i,x:sc(o[0]/s),y:sc(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Yl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Yl,e.h/n))}}),this._cfgEpoch++,this.requestUpdate()}get _furnLive(){const t=this._dtDrag;if(!t||"scale"!==t.kind||!t.orig)return null;const e=this._decorList.find(e=>e.id===t.id);if(!e||"furniture"!==e.kind)return null;const i=P_,s=this._decorH,n=e.w*i,o=e.h*s,a=function(t,e,i,s,n){const o=t+i/2,a=e+s/2,r=(Number(n)||0)*Math.PI/180,l=Math.cos(r),c=Math.sin(r),h=(t,e)=>{const i=t-o,s=e-a;return[o+i*l-s*c,a+i*c+s*l]};return[h(t,e),h(t+i,e),h(t+i,e+s),h(t,e+s)]}(e.x*i,e.y*s,n,o,Number(e.angle)||0),r=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=r(a[0],a[1]),c=r(a[0],a[3]);return[{x:l[0],y:l[1],text:this._fmtLen([0,0],[n,0])},{x:c[0],y:c[1],text:this._fmtLen([0,0],[0,o])}]}_renderFurnPalette(){const t=this._furnPalette,e=this._t(this._imperial?"gs.unit_ft":"gs.unit_m");return j`
t.stopPropagation()}>
${this._t("furn.title")} @@ -4791,7 +4808,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 @input=${e=>this._furnPalette={...t,h:this._furnFieldToCm(Number(e.target.value))}} /> ${this._t("furn.place_hint")}
`:j`
${this._t("furn.pick_hint")}
`} -
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,T_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,T_):null}get _bdParams(){const t=this._curSpaceCfg,e=Number(t?.plan_x),i=Number(t?.plan_y),s=Number(t?.plan_scale),n=Number(t?.plan_scale_x),o=Number(t?.plan_scale_y),a=Number.isFinite(s)&&s>0?s:1;return{dx:Number.isFinite(e)?e:0,dy:Number.isFinite(i)?i:0,sx:Number.isFinite(n)&&n>0?n:a,sy:Number.isFinite(o)&&o>0?o:a,angle:nr(t?.plan_angle)}}_openBackdropDialog(t){if(!this._bdMovable||!this._bdRect)return;t?.preventDefault(),t?.stopPropagation(),this._bdDrag=null;const e=this._bdRect;this._backdropDialog={widthCm:rr(e.w,this._cellCm,this._gridPitch),heightCm:rr(e.h,this._cellCm,this._gridPitch),angle:this._angleField(e.angle)}}_saveBackdropDialog(){const t=this._backdropDialog,e=this._bdBase,i=this._bdRect;if(!t||!e||!i)return;const s=nr(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Ul,Math.max(e.w*Wl,ai(ar(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),a=Math.min(e.h*Ul,Math.max(e.h*Wl,ai(ar(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),r=or({x:i.x+i.w/2-o/2,y:i.y+i.h/2-a/2},s,t=>this._snap(t));this._bdApply((r[0]-e.x)/T_,(r[1]-e.y)/T_,o/e.w,a/e.h,s),this._backdropDialog=null,this._recordGeometry(this._t("history.backdrop_transform"),n),this._saveConfig()}get _bdActive(){return"decor"===this._mode&&!!this._bdRect&&"backdrop"===this._decorTool}get _bdMovable(){return"decor"===this._mode&&"backdrop"===this._decorTool&&!!this._bdRect}_bdApply(t,e,i,s,n){const o=this._curSpaceCfg;if(!o)return;o.plan_x=Number(sc(t).toFixed(6)),o.plan_y=Number(sc(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Ul,Math.max(Wl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Ul,Math.max(Wl,s)).toFixed(6));const a=nr(n);a?o.plan_angle=Number(a.toFixed(2)):delete o.plan_angle,this._cfgEpoch++,this.requestUpdate()}_bdStart(t,e,i=!1){const s=this._bdBase,n=this._bdRect;if(!s||!n)return!1;const o=this._svgPoint(t),a=e?e[0]:0,r=e?e[1]:0,l=a>0?n.x:n.x+n.w,c=r>0?n.y:n.y+n.h;return this._bdDrag={kind:i?"rotate":e?"scale":"move",pid:t.pointerId,sx:o[0],sy:o[1],base:s,p0:this._bdParams,fx:l,fy:c,sgx:a,sgy:r,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},O_(t),!0}_bdMove(t){const e=this._bdDrag;if(!e)return;const i=this._svgPoint(t),s=e.base;if("move"===e.kind){const t=e.rect0.x,n=e.rect0.y,o=this._snap([t+(i[0]-e.sx),n+(i[1]-e.sy)]),a=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply((o[0]-s.x)/T_,(o[1]-s.y)/T_,e.p0.sx,e.p0.sy,e.p0.angle)}if("rotate"===e.kind){const s=e.rect0.x+e.rect0.w/2,n=e.rect0.y+e.rect0.h/2,o=180*Math.atan2(e.sy-n,e.sx-s)/Math.PI;let a=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(a=5*Math.round(a/5)),a=nr(a);const r=Math.abs(a-e.p0.angle)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,a)}const n=ur(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*Wl),o=n.w/Math.max(1e-9,s.w),a=n.h/Math.max(1e-9,s.h),r=Math.abs(o-e.p0.sx)>1e-9||Math.abs(a-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!r&&!e.moved)return;e.moved||=r;const l=or(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/T_,(l[1]-s.y)/T_,o,a,e.p0.angle)}get _bdMoved(){if("decor"!==this._mode||!this._bdRect)return!1;const t=this._bdParams;return 0!==t.dx||0!==t.dy||1!==t.sx||1!==t.sy||0!==t.angle}_bdReset(){const t=this._curSpaceCfg;if(!t)return;const e=this._geometrySnapshot();delete t.plan_x,delete t.plan_y,delete t.plan_scale,delete t.plan_scale_x,delete t.plan_scale_y,delete t.plan_angle,this._bdDrag=null,this._recordGeometry(this._t("history.backdrop_transform"),e),this._saveConfig(),this._showToast(this._t("decor.backdrop_reset_done")),this.requestUpdate()}_bdUp(){const t=this._bdDrag;this._bdDrag=null,t?.moved&&(this._recordGeometry(this._t("history.backdrop_transform"),t.before),this._saveConfig()),this.requestUpdate()}get _bdLive(){if(!this._bdDrag)return null;const t=this._bdRect;return t?{x:t.x+t.w/2,y:t.y+t.h/2,text:`${this._fmtLen([0,0],[t.w,0])} × ${this._fmtLen([0,0],[0,t.h])}`}:null}_renderBackdropFrame(t){const e=this._bdRect;if(!this._bdActive||!e)return G;const i=.02*Math.max(t.w,t.h),s=i/4,n=e.x+e.w/2,o=e.y+e.h/2,a=nr(e.angle),r=2.2*i;return W` +
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,P_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,P_):null}get _bdParams(){const t=this._curSpaceCfg,e=Number(t?.plan_x),i=Number(t?.plan_y),s=Number(t?.plan_scale),n=Number(t?.plan_scale_x),o=Number(t?.plan_scale_y),a=Number.isFinite(s)&&s>0?s:1;return{dx:Number.isFinite(e)?e:0,dy:Number.isFinite(i)?i:0,sx:Number.isFinite(n)&&n>0?n:a,sy:Number.isFinite(o)&&o>0?o:a,angle:nr(t?.plan_angle)}}_openBackdropDialog(t){if(!this._bdMovable||!this._bdRect)return;t?.preventDefault(),t?.stopPropagation(),this._bdDrag=null;const e=this._bdRect;this._backdropDialog={widthCm:rr(e.w,this._cellCm,this._gridPitch),heightCm:rr(e.h,this._cellCm,this._gridPitch),angle:this._angleField(e.angle)}}_saveBackdropDialog(){const t=this._backdropDialog,e=this._bdBase,i=this._bdRect;if(!t||!e||!i)return;const s=nr(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Ul,Math.max(e.w*Wl,ai(ar(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),a=Math.min(e.h*Ul,Math.max(e.h*Wl,ai(ar(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),r=or({x:i.x+i.w/2-o/2,y:i.y+i.h/2-a/2},s,t=>this._snap(t));this._bdApply((r[0]-e.x)/P_,(r[1]-e.y)/P_,o/e.w,a/e.h,s),this._backdropDialog=null,this._recordGeometry(this._t("history.backdrop_transform"),n),this._saveConfig()}get _bdActive(){return"decor"===this._mode&&!!this._bdRect&&"backdrop"===this._decorTool}get _bdMovable(){return"decor"===this._mode&&"backdrop"===this._decorTool&&!!this._bdRect}_bdApply(t,e,i,s,n){const o=this._curSpaceCfg;if(!o)return;o.plan_x=Number(sc(t).toFixed(6)),o.plan_y=Number(sc(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Ul,Math.max(Wl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Ul,Math.max(Wl,s)).toFixed(6));const a=nr(n);a?o.plan_angle=Number(a.toFixed(2)):delete o.plan_angle,this._cfgEpoch++,this.requestUpdate()}_bdStart(t,e,i=!1){const s=this._bdBase,n=this._bdRect;if(!s||!n)return!1;const o=this._svgPoint(t),a=e?e[0]:0,r=e?e[1]:0,l=a>0?n.x:n.x+n.w,c=r>0?n.y:n.y+n.h;return this._bdDrag={kind:i?"rotate":e?"scale":"move",pid:t.pointerId,sx:o[0],sy:o[1],base:s,p0:this._bdParams,fx:l,fy:c,sgx:a,sgy:r,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},H_(t),!0}_bdMove(t){const e=this._bdDrag;if(!e)return;const i=this._svgPoint(t),s=e.base;if("move"===e.kind){const t=e.rect0.x,n=e.rect0.y,o=this._snap([t+(i[0]-e.sx),n+(i[1]-e.sy)]),a=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply((o[0]-s.x)/P_,(o[1]-s.y)/P_,e.p0.sx,e.p0.sy,e.p0.angle)}if("rotate"===e.kind){const s=e.rect0.x+e.rect0.w/2,n=e.rect0.y+e.rect0.h/2,o=180*Math.atan2(e.sy-n,e.sx-s)/Math.PI;let a=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(a=5*Math.round(a/5)),a=nr(a);const r=Math.abs(a-e.p0.angle)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,a)}const n=ur(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*Wl),o=n.w/Math.max(1e-9,s.w),a=n.h/Math.max(1e-9,s.h),r=Math.abs(o-e.p0.sx)>1e-9||Math.abs(a-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!r&&!e.moved)return;e.moved||=r;const l=or(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/P_,(l[1]-s.y)/P_,o,a,e.p0.angle)}get _bdMoved(){if("decor"!==this._mode||!this._bdRect)return!1;const t=this._bdParams;return 0!==t.dx||0!==t.dy||1!==t.sx||1!==t.sy||0!==t.angle}_bdReset(){const t=this._curSpaceCfg;if(!t)return;const e=this._geometrySnapshot();delete t.plan_x,delete t.plan_y,delete t.plan_scale,delete t.plan_scale_x,delete t.plan_scale_y,delete t.plan_angle,this._bdDrag=null,this._recordGeometry(this._t("history.backdrop_transform"),e),this._saveConfig(),this._showToast(this._t("decor.backdrop_reset_done")),this.requestUpdate()}_bdUp(){const t=this._bdDrag;this._bdDrag=null,t?.moved&&(this._recordGeometry(this._t("history.backdrop_transform"),t.before),this._saveConfig()),this.requestUpdate()}get _bdLive(){if(!this._bdDrag)return null;const t=this._bdRect;return t?{x:t.x+t.w/2,y:t.y+t.h/2,text:`${this._fmtLen([0,0],[t.w,0])} × ${this._fmtLen([0,0],[0,t.h])}`}:null}_renderBackdropFrame(t){const e=this._bdRect;if(!this._bdActive||!e)return G;const i=.02*Math.max(t.w,t.h),s=i/4,n=e.x+e.w/2,o=e.y+e.h/2,a=nr(e.angle),r=2.2*i;return W` {e.stopPropagation(),e.preventDefault(),this._bdStart(e,[t,n])}}>`})} - `}_renderTextFrame(t){const e=this._dtSel,i=this._dtBox;if(!e||!i||i.id!==e.id)return G;const s=.018*Math.max(t.w,t.h),n=s/4;if("line"===e.kind){const t=[e.x1*T_,e.y1*this._decorH],i=[e.x2*T_,e.y2*this._decorH];return W` + `}_renderTextFrame(t){const e=this._dtSel,i=this._dtBox;if(!e||!i||i.id!==e.id)return G;const s=.018*Math.max(t.w,t.h),n=s/4;if("line"===e.kind){const t=[e.x1*P_,e.y1*this._decorH],i=[e.x2*P_,e.y2*this._decorH];return W` ${[t,i].map((t,e)=>W`this._dtStart(t,"scale",void 0,e)}> @@ -4816,7 +4833,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 cx="${t<0?i.x:i.x+i.w}" cy="${e<0?i.y:i.y+i.h}" r="${s.toFixed(1)}" @pointerdown=${i=>this._dtStart(i,"scale",[t,e])}>`)} - `}_renderDecorLayer(){const t=T_,e=this._decorH,i="decor"===this._mode,s=i&&"erase"===this._decorTool,n=this._decorList.map(n=>{const o="dshape"+(i&&this._decorSel===n.id?" dsel":""),a=this._decorResolvedStyle(n),r=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W``}_renderDecorLayer(){const t=P_,e=this._decorH,i="decor"===this._mode,s=i&&"erase"===this._decorTool,n=this._decorList.map(n=>{const o="dshape"+(i&&this._decorSel===n.id?" dsel":""),a=this._decorResolvedStyle(n),r=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W`
this._decorTextDialog={...t,sizeCm:this._decorTextCm(Number(e.target.value))}} /> ${this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}
@@ -5071,7 +5088,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
- `}_cssPxToRender(t){const e=this._stageEl,i=this._viewOr(this._baseVb());return e?.clientWidth&&e.clientHeight?Math.max(i.w/e.clientWidth,i.h/e.clientHeight)*t:this._gridPitch/8*t}get _boundaryCoarse(){return"touch"===this._boundaryPointerType||"pen"===this._boundaryPointerType}_boundaryTolerances(){return{hit:this._cssPxToRender(this._boundaryCoarse?22:12),cap:this._cssPxToRender(this._boundaryCoarse?10:6),ambiguity:this._cssPxToRender(6)}}_boundaryBlocked(t,e){const i=this._spaceModel();if(!i)return!1;const s=i=>Hl(t,i)||i.some((s,n)=>{const o=i[(n+1)%i.length];return Ns(t,[s[0],s[1],o[0],o[1]])<=e});for(const t of i.wall_columns||[])if(s(Pl(t,this._cellCm,this._gridPitch)))return!0;for(const s of i.partitions||[]){const i=vr(s.cm,this._cellCm,this._gridPitch)/2;if(Ns(t,[s.a[0],s.a[1],s.b[0],s.b[1]])<=Math.max(e,i))return!0}for(const s of i.room_drafts||[])for(let i=0;i+10?vr(n,this._cellCm,this._gridPitch)/2:0)}_boundaryTargetAt(t){const e=this._viewOr(this._baseVb()),i=this._stageEl,s=[this._space,this._cfgEpoch,t[0],t[1],this._boundaryPointerType,e.x,e.y,e.w,e.h,i?.clientWidth||0,i?.clientHeight||0].join("|");if(this._boundaryTargetMemo?.key===s)return this._boundaryTargetMemo.value;const n=this._boundaryTolerances(),o=this._openCuts(),a=this._spaceModel();if(!a)return{kind:"none"};let r=function(t,e,i,s){const{openPull:n,openEndCap:o,solidPull:a,ambiguity:r,eps:l}=s,c=Lc(e,l),h=[];for(const e of i||[]){const i=Wc(t,e,n,o);if(null==i)continue;const s=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=c.find(t=>Ns(s,t.seg)<=4*l);h.push({value:e,seg:e,semantic:a?.pair||`open:${e.join(",")}`,distance:i})}const d=Gc(h,r,l);if("ambiguous"===d)return{kind:"ambiguous",group:"open"};if(d)return{kind:"open",seg:d.value,distance:d.distance};const u=[];for(const e of c){const i=Wc(t,e.seg,a(e.seg));null!=i&&u.push({value:e,seg:e.seg,semantic:e.pair,distance:i})}const p=Gc(u,r,l);if("ambiguous"===p)return{kind:"ambiguous",group:"shared"};if(p)return{kind:"shared",a:p.value.a,b:p.value.b,edge:p.value.seg,distance:p.distance};const _=[];for(const i of e||[]){if(!i?.id)continue;const e=ci(i);if(e)for(let s=0;sNs(d,t.seg)<=4*l)||_.push({value:{room:i,edge:r},seg:r,semantic:String(i.id),distance:h})}}const g=Gc(_,r,l);return"ambiguous"===g?{kind:"ambiguous",group:"outer"}:g?{kind:"outer",...g.value,distance:g.distance}:{kind:"none"}}(t,a.rooms,o,{openPull:n.hit,openEndCap:n.cap,ambiguity:n.ambiguity,eps:.02*this._gridPitch,solidPull:t=>this._solidBoundaryPull(t,o)});return"shared"!==r.kind&&"open"!==r.kind||!this._boundaryBlocked(t,n.hit)||(r={kind:"blocked"}),this._boundaryTargetMemo={key:s,value:r},r}get _boundaryTarget(){return this._markup&&"boundary"===this._tool&&this._cursorPt?this._boundaryTargetAt(this._cursorPt):null}get _boundaryPreview(){const t=this._viewOr(this._baseVb()),e=this._stageEl,i=this._cursorPt,s=this._openWallAnchor,n=[this._markup,this._tool,this._space,this._cfgEpoch,this._boundaryPointerType,i?.[0]??"none",i?.[1]??"none",s?.p?.[0]??"none",s?.p?.[1]??"none",s?.edge?.join(",")??"none",s?.aId??"none",s?.bId??"none",t.x,t.y,t.w,t.h,e?.clientWidth||0,e?.clientHeight||0].join("|");if(this._boundaryPreviewMemo?.key===n)return this._boundaryPreviewMemo.value;const o=t=>(this._boundaryPreviewMemo={key:n,value:t},t);if(!this._markup||"boundary"!==this._tool)return o(null);if(s&&!i)return o({kind:"anchor",point:[...s.p]});if(!i)return o(null);const a=this._openCuts(),r=.02*this._gridPitch;if(s){const{p:t,edge:e}=s,n=Nc(Hc(i,e,Kc(e,a,r),this._gridPitch,1.5*this._gridPitch),e),l=this._boundaryBlocked(i,this._boundaryTolerances().hit)||Ns(i,e)>this._solidBoundaryPull(e,a);return o({kind:"range",seg:[t[0],t[1],n[0],n[1]],invalid:l})}const l=this._boundaryTargetAt(i);if("shared"===l.kind){return o({kind:"anchor",point:Hc(i,l.edge,Kc(l.edge,a,r),this._gridPitch,1.5*this._gridPitch)})}if("open"===l.kind){const t=this._planClosedOpenSpan(l.seg),e=t?Tl([l.seg[0],l.seg[1]],[l.seg[2],l.seg[3]],t.cm,this._cellCm,this._gridPitch):null;return o({kind:"restore",seg:l.seg,body:e})}return"blocked"===l.kind||"ambiguous"===l.kind||"outer"===l.kind?o({kind:"invalid",point:i}):o(null)}get _boundaryHintKey(){if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?"markup.boundary_hint_retry":"markup.boundary_hint_second"}const t=this._boundaryTarget;return t&&"none"!==t.kind?"open"===t.kind?"markup.boundary_hint_restore":"shared"===t.kind?"markup.boundary_hint_open":"outer"===t.kind?"markup.boundary_hint_outer":"blocked"===t.kind?"markup.boundary_hint_blocked":"markup.boundary_hint_ambiguous":"markup.boundary_hint"}get _boundaryStageClass(){if(!this._markup||"boundary"!==this._tool)return"";if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?" boundary-invalid":" boundary-solid"}const t=this._boundaryTarget;return"open"===t?.kind?" boundary-open":"shared"===t?.kind?" boundary-solid":t&&"none"!==t.kind?" boundary-invalid":""}_renderOpenWalls(t){if(t&&!t.showBorders&&!this._editing)return W``;const e=this._openCuts(),i=this._boundaryPreview;if(!e.length&&!i)return W``;const s=(t,e=!1)=>e?W` + `}_cssPxToRender(t){const e=this._stageEl,i=this._viewOr(this._baseVb());return e?.clientWidth&&e.clientHeight?Math.max(i.w/e.clientWidth,i.h/e.clientHeight)*t:this._gridPitch/8*t}get _boundaryCoarse(){return"touch"===this._boundaryPointerType||"pen"===this._boundaryPointerType}_boundaryTolerances(){return{hit:this._cssPxToRender(this._boundaryCoarse?22:12),cap:this._cssPxToRender(this._boundaryCoarse?10:6),ambiguity:this._cssPxToRender(6)}}_boundaryBlocked(t,e){const i=this._spaceModel();if(!i)return!1;const s=i=>Nl(t,i)||i.some((s,n)=>{const o=i[(n+1)%i.length];return Hs(t,[s[0],s[1],o[0],o[1]])<=e});for(const t of i.wall_columns||[])if(s(Pl(t,this._cellCm,this._gridPitch)))return!0;for(const s of i.partitions||[]){const i=vr(s.cm,this._cellCm,this._gridPitch)/2;if(Hs(t,[s.a[0],s.a[1],s.b[0],s.b[1]])<=Math.max(e,i))return!0}for(const s of i.room_drafts||[])for(let i=0;i+10?vr(n,this._cellCm,this._gridPitch)/2:0)}_boundaryTargetAt(t){const e=this._viewOr(this._baseVb()),i=this._stageEl,s=[this._space,this._cfgEpoch,t[0],t[1],this._boundaryPointerType,e.x,e.y,e.w,e.h,i?.clientWidth||0,i?.clientHeight||0].join("|");if(this._boundaryTargetMemo?.key===s)return this._boundaryTargetMemo.value;const n=this._boundaryTolerances(),o=this._openCuts(),a=this._spaceModel();if(!a)return{kind:"none"};let r=function(t,e,i,s){const{openPull:n,openEndCap:o,solidPull:a,ambiguity:r,eps:l}=s,c=Lc(e,l),h=[];for(const e of i||[]){const i=Wc(t,e,n,o);if(null==i)continue;const s=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=c.find(t=>Hs(s,t.seg)<=4*l);h.push({value:e,seg:e,semantic:a?.pair||`open:${e.join(",")}`,distance:i})}const d=Gc(h,r,l);if("ambiguous"===d)return{kind:"ambiguous",group:"open"};if(d)return{kind:"open",seg:d.value,distance:d.distance};const u=[];for(const e of c){const i=Wc(t,e.seg,a(e.seg));null!=i&&u.push({value:e,seg:e.seg,semantic:e.pair,distance:i})}const p=Gc(u,r,l);if("ambiguous"===p)return{kind:"ambiguous",group:"shared"};if(p)return{kind:"shared",a:p.value.a,b:p.value.b,edge:p.value.seg,distance:p.distance};const _=[];for(const i of e||[]){if(!i?.id)continue;const e=ci(i);if(e)for(let s=0;sHs(d,t.seg)<=4*l)||_.push({value:{room:i,edge:r},seg:r,semantic:String(i.id),distance:h})}}const g=Gc(_,r,l);return"ambiguous"===g?{kind:"ambiguous",group:"outer"}:g?{kind:"outer",...g.value,distance:g.distance}:{kind:"none"}}(t,a.rooms,o,{openPull:n.hit,openEndCap:n.cap,ambiguity:n.ambiguity,eps:.02*this._gridPitch,solidPull:t=>this._solidBoundaryPull(t,o)});return"shared"!==r.kind&&"open"!==r.kind||!this._boundaryBlocked(t,n.hit)||(r={kind:"blocked"}),this._boundaryTargetMemo={key:s,value:r},r}get _boundaryTarget(){return this._markup&&"boundary"===this._tool&&this._cursorPt?this._boundaryTargetAt(this._cursorPt):null}get _boundaryPreview(){const t=this._viewOr(this._baseVb()),e=this._stageEl,i=this._cursorPt,s=this._openWallAnchor,n=[this._markup,this._tool,this._space,this._cfgEpoch,this._boundaryPointerType,i?.[0]??"none",i?.[1]??"none",s?.p?.[0]??"none",s?.p?.[1]??"none",s?.edge?.join(",")??"none",s?.aId??"none",s?.bId??"none",t.x,t.y,t.w,t.h,e?.clientWidth||0,e?.clientHeight||0].join("|");if(this._boundaryPreviewMemo?.key===n)return this._boundaryPreviewMemo.value;const o=t=>(this._boundaryPreviewMemo={key:n,value:t},t);if(!this._markup||"boundary"!==this._tool)return o(null);if(s&&!i)return o({kind:"anchor",point:[...s.p]});if(!i)return o(null);const a=this._openCuts(),r=.02*this._gridPitch;if(s){const{p:t,edge:e}=s,n=Hc(Nc(i,e,Kc(e,a,r),this._gridPitch,1.5*this._gridPitch),e),l=this._boundaryBlocked(i,this._boundaryTolerances().hit)||Hs(i,e)>this._solidBoundaryPull(e,a);return o({kind:"range",seg:[t[0],t[1],n[0],n[1]],invalid:l})}const l=this._boundaryTargetAt(i);if("shared"===l.kind){return o({kind:"anchor",point:Nc(i,l.edge,Kc(l.edge,a,r),this._gridPitch,1.5*this._gridPitch)})}if("open"===l.kind){const t=this._planClosedOpenSpan(l.seg),e=t?Tl([l.seg[0],l.seg[1]],[l.seg[2],l.seg[3]],t.cm,this._cellCm,this._gridPitch):null;return o({kind:"restore",seg:l.seg,body:e})}return"blocked"===l.kind||"ambiguous"===l.kind||"outer"===l.kind?o({kind:"invalid",point:i}):o(null)}get _boundaryHintKey(){if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?"markup.boundary_hint_retry":"markup.boundary_hint_second"}const t=this._boundaryTarget;return t&&"none"!==t.kind?"open"===t.kind?"markup.boundary_hint_restore":"shared"===t.kind?"markup.boundary_hint_open":"outer"===t.kind?"markup.boundary_hint_outer":"blocked"===t.kind?"markup.boundary_hint_blocked":"markup.boundary_hint_ambiguous":"markup.boundary_hint"}get _boundaryStageClass(){if(!this._markup||"boundary"!==this._tool)return"";if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?" boundary-invalid":" boundary-solid"}const t=this._boundaryTarget;return"open"===t?.kind?" boundary-open":"shared"===t?.kind?" boundary-solid":t&&"none"!==t.kind?" boundary-invalid":""}_renderOpenWalls(t){if(t&&!t.showBorders&&!this._editing)return W``;const e=this._openCuts(),i=this._boundaryPreview;if(!e.length&&!i)return W``;const s=(t,e=!1)=>e?W` `${t[0]} ${t[1]}`).join(" L ")} Z`}>`:G} ${"anchor"===i?.kind?s(i.point):"invalid"===i?.kind?s(i.point,!0):G} - `;var n}_openCuts(){const t=this._curSpaceCfg,e=this._spaceModel();return e?Bc(e.rooms,t?.open_spans,T_,.02*this._gridPitch):[]}_openPairs(){const t=this._openCuts();if(!t.length)return[];const e=(this._spaceModel()?.rooms||[]).filter(t=>t.id),i=.02*this._gridPitch,s=[];for(let n=0;n{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return l.some(t=>Ns(e,t)<4*i)});c.length&&s.push({a:e[n],b:e[o],segs:c})}return s}_commitOpenSpans(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch;this._cfgEpoch++;const n=i.rooms;let o=zc(e.open_spans);o.length&&t?.old.length?o=Xc(o,t.old,t.next,T_):o.length||(o=qc(Bc(n,null,T_,s),T_)),o=Yc(o,n,T_,s),this._persistOpenCuts(o.map(t=>Fc(t,T_)))}_persistOpenCuts(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch,n=Yc(qc(t,T_),i.rooms,T_,s),o=n.map(t=>Fc(t,T_));n.length?e.open_spans=n:delete e.open_spans,jc(e.rooms||[],i.rooms,o,s)}_planClosedOpenSpan(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return null;const s=.02*this._gridPitch,n=this._openCuts();let o=Array.isArray(e.walls)?e.walls.slice():[];for(const t of tl(i.rooms,o,n,this._wallKeyPitch,this._cellCm,this._gridPitch,T_))!t.open&&t.cm>0&&(o=Ir(o,t.a,t.b,t.cm,this._wallKeyPitch,T_));const a=function(t,e,i){const s=[(e[0]+e[2])/2,(e[1]+e[3])/2];return t.filter(t=>{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return Math.hypot(e[0]-s[0],e[1]-s[1])>4*i})}(n,t,s);let r=this._normalizeWalls(o,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);if(!(l>0)){const e=[];for(const t of tl(i.rooms,r,a,this._wallKeyPitch,this._cellCm,this._gridPitch,T_))t.open||e.push([t.a[0],t.a[1],t.b[0],t.b[1]]);r=Vc(r,t,e,this._wallKeyPitch,T_,_r),r=this._normalizeWalls(r,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)}return{cuts:a,walls:r,cm:l>0?l:_r}}_closeOpenSpan(t){const e=this._curSpaceCfg;if(!e)return;const i=this._geometrySnapshot(),s=this._planClosedOpenSpan(t);s&&(s.walls.length?e.walls=s.walls:delete e.walls,this._persistOpenCuts(s.cuts),this._showToast(this._t("toast.boundary_restored")),this._recordGeometry(this._t("history.close_boundary"),i),this._saveConfig(),this.requestUpdate())}_boundaryClick(t){const e=this._boundaryRestoreGuard;if(e&&Date.now()>e.until&&(this._boundaryRestoreGuard=null),e&&Date.now()<=e.until&&Math.hypot(t[0]-e.point[0],t[1]-e.point[1])<=this._boundaryTolerances().hit)return;const i=.02*this._gridPitch,s=this._openCuts();if(this._openWallAnchor){const{p:e,edge:l}=this._openWallAnchor;if(Ns(t,l)>this._solidBoundaryPull(l,s))return void this._showToast(this._t("toast.boundary_same_edge"));if(this._boundaryBlocked(t,this._boundaryTolerances().hit))return void this._showToast(this._t("toast.boundary_blocked"));const c=Nc(Hc(t,l,Kc(l,s,i),this._gridPitch,1.5*this._gridPitch),l),h=Math.hypot(c[0]-e[0],c[1]-e[1]);if(this._openWallAnchor=null,this._cursorPt=null,h<.5*this._gridPitch)return void this._showToast(this._t("toast.openwall_short"));const d=[e[0],e[1],c[0],c[1]],u=[...s,d],p=this._curSpaceCfg;if(!p)return;const _=this._geometrySnapshot(),g=this._normalizeWalls(p.walls,u);g.length?p.walls=g:delete p.walls;const m=(p.openings||[]).length;return p.openings=(n=p.openings,o=d,a=T_,r=6*this._gridPitch,n?.length?n.filter(t=>Ns([Number(t.x)*a,Number(t.y)*a],o)>r||!Rr([o[0],o[1]],[o[2],o[3]],Number(t.angle)||0)):n?n.slice():[]),(p.openings||[]).lengththis._pointInRoom(t,e));if(!i)return void this._showToast(this._t("toast.delete_room_pick"));if(!confirm(this._t("confirm.delete_room",{name:i.name})))return;const s=this._curSpaceCfg;if(!s)return;const n=this._geometrySnapshot();s.rooms=s.rooms.filter(t=>t.id!==i.id),this._commitOpenSpans(),this._recordGeometry(this._t("history.delete_room"),n),this._saveConfig(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}get _wallKeyPitch(){return Ql}get _spaceWalls(){const t=this._curSpaceCfg?.walls;return Array.isArray(t)?t:[]}_cfgOpenCuts(){return zc(this._curSpaceCfg?.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_intervalCm(t){const e=this._spaceModel();return e?sl(e.rooms,this._spaceWalls,this._openCuts(),t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_):0}_normalizeWalls(t,e){const i=this._spaceModel();if(!i)return[];return Pr(il(i.rooms,t,e,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),this._curSpaceCfg?.rooms||[],Ql,1,e.map(t=>[t[0]/T_,t[1]/T_,t[2]/T_,t[3]/T_]))}_paperShapes(t){if(!this._spaceWalls.length)return hi(t);const e=this._wallUnionGeometry();return e?.paperD?[{path:e.paperD}]:hi(t)}_wallUnionGeometry(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._physicalBodiesR();if(!e.length&&!i.length)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._roomWallOpeningInputs(),o=`${this._space}|${this._cfgEpoch}|${t.rooms.length}`;return this._wallUnionCache&&this._wallUnionCache.key===o||(this._wallUnionCache={key:o,value:pl(t.rooms,e,s,n,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,i)}),this._wallUnionCache.value}_thickWallCuts(){const t=this._spaceModel();if(!t)return[];const e=this._spaceWalls;if(!e.length)return[];const i=this._openPairs().flatMap(t=>t.segs);return _l(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_wallThickHit(t){const e=this._spaceModel();if(!e)return null;const i=6*this._gridPitch,s=this._openCuts();let n=null;for(const o of tl(e.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){const e=Ns(t,[o.a[0],o.a[1],o.b[0],o.b[1]]);e<=i&&(!n||e0?vr(e,this._cellCm,this._gridPitch):3*this._gridPitch,s=Math.max(i/2,1.25*this._gridPitch);let n="";for(const e of t.segs)n+=(n?" ":"")+Br([[e[0],e[1]],[e[2],e[3]]],s,!1);return{segs:t.segs,open:t.open,d:n}}_wallThickClick(t){const e=this._wallThickHit(t);if(!e)return void this._showToast(this._t("toast.wallthick_pick"));if(e.open)return void this._showToast(this._t("toast.wallthick_open"));const i=e.cm,s=this._viewOr(this._baseVb()),n=(e.a[0]+e.b[0])/2,o=(e.a[1]+e.b[1])/2;this._wallDialog={a:e.a,b:e.b,value:fr(i,this._imperial),roomId:e.roomId,sx:(n-s.x)/s.w*100,sy:(o-s.y)/s.h*100}}_wallThickApply(t){const e=this._wallDialog;if(!e)return;const i=this._curSpaceCfg,s=this._spaceModel();if(!i||!s)return;const n=e.value.trim(),o=n?m_(n):0;if(null==o)return void this._showPhysicalRange(100);const a=this._imperial?2.54*o:o;if(n&&(!Number.isFinite(a)||a<0||a>0&&a<1||a>100))return void this._showPhysicalRange(100);const r=this._geometrySnapshot(),l=n&&a>0?a:null,c=this._openCuts();let h;h=t&&e.roomId?Fr(i.walls,s.rooms,e.roomId,l,this._wallKeyPitch,c,T_):Ir(i.walls,e.a,e.b,l,this._wallKeyPitch,T_),h=this._normalizeWalls(h,c),h.length?i.walls=h:delete i.walls,this._wallDialog=null,this._showToast(this._t(null==l?"toast.wallthick_cleared":"toast.wallthick_set")),this._recordGeometry(this._t("history.wall_thickness"),r),this._saveConfig(),this.requestUpdate()}_wallHatchDefs(t){if(!this._spaceWalls.length&&!this._physicalBodiesR().length&&!this._markup)return W``;const e=Math.max(.4,1/Math.max(this._zoom,.4)),i=t||"#607d8b";return W` + `;var n}_openCuts(){const t=this._curSpaceCfg,e=this._spaceModel();return e?Bc(e.rooms,t?.open_spans,P_,.02*this._gridPitch):[]}_openPairs(){const t=this._openCuts();if(!t.length)return[];const e=(this._spaceModel()?.rooms||[]).filter(t=>t.id),i=.02*this._gridPitch,s=[];for(let n=0;n{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return l.some(t=>Hs(e,t)<4*i)});c.length&&s.push({a:e[n],b:e[o],segs:c})}return s}_commitOpenSpans(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch;this._cfgEpoch++;const n=i.rooms;let o=zc(e.open_spans);o.length&&t?.old.length?o=Xc(o,t.old,t.next,P_):o.length||(o=qc(Bc(n,null,P_,s),P_)),o=Yc(o,n,P_,s),this._persistOpenCuts(o.map(t=>Fc(t,P_)))}_persistOpenCuts(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch,n=Yc(qc(t,P_),i.rooms,P_,s),o=n.map(t=>Fc(t,P_));n.length?e.open_spans=n:delete e.open_spans,jc(e.rooms||[],i.rooms,o,s)}_planClosedOpenSpan(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return null;const s=.02*this._gridPitch,n=this._openCuts();let o=Array.isArray(e.walls)?e.walls.slice():[];for(const t of tl(i.rooms,o,n,this._wallKeyPitch,this._cellCm,this._gridPitch,P_))!t.open&&t.cm>0&&(o=Ir(o,t.a,t.b,t.cm,this._wallKeyPitch,P_));const a=function(t,e,i){const s=[(e[0]+e[2])/2,(e[1]+e[3])/2];return t.filter(t=>{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return Math.hypot(e[0]-s[0],e[1]-s[1])>4*i})}(n,t,s);let r=this._normalizeWalls(o,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);if(!(l>0)){const e=[];for(const t of tl(i.rooms,r,a,this._wallKeyPitch,this._cellCm,this._gridPitch,P_))t.open||e.push([t.a[0],t.a[1],t.b[0],t.b[1]]);r=Vc(r,t,e,this._wallKeyPitch,P_,_r),r=this._normalizeWalls(r,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)}return{cuts:a,walls:r,cm:l>0?l:_r}}_closeOpenSpan(t){const e=this._curSpaceCfg;if(!e)return;const i=this._geometrySnapshot(),s=this._planClosedOpenSpan(t);s&&(s.walls.length?e.walls=s.walls:delete e.walls,this._persistOpenCuts(s.cuts),this._showToast(this._t("toast.boundary_restored")),this._recordGeometry(this._t("history.close_boundary"),i),this._saveConfig(),this.requestUpdate())}_boundaryClick(t){const e=this._boundaryRestoreGuard;if(e&&Date.now()>e.until&&(this._boundaryRestoreGuard=null),e&&Date.now()<=e.until&&Math.hypot(t[0]-e.point[0],t[1]-e.point[1])<=this._boundaryTolerances().hit)return;const i=.02*this._gridPitch,s=this._openCuts();if(this._openWallAnchor){const{p:e,edge:l}=this._openWallAnchor;if(Hs(t,l)>this._solidBoundaryPull(l,s))return void this._showToast(this._t("toast.boundary_same_edge"));if(this._boundaryBlocked(t,this._boundaryTolerances().hit))return void this._showToast(this._t("toast.boundary_blocked"));const c=Hc(Nc(t,l,Kc(l,s,i),this._gridPitch,1.5*this._gridPitch),l),h=Math.hypot(c[0]-e[0],c[1]-e[1]);if(this._openWallAnchor=null,this._cursorPt=null,h<.5*this._gridPitch)return void this._showToast(this._t("toast.openwall_short"));const d=[e[0],e[1],c[0],c[1]],u=[...s,d],p=this._curSpaceCfg;if(!p)return;const _=this._geometrySnapshot(),g=this._normalizeWalls(p.walls,u);g.length?p.walls=g:delete p.walls;const m=(p.openings||[]).length;return p.openings=(n=p.openings,o=d,a=P_,r=6*this._gridPitch,n?.length?n.filter(t=>Hs([Number(t.x)*a,Number(t.y)*a],o)>r||!Rr([o[0],o[1]],[o[2],o[3]],Number(t.angle)||0)):n?n.slice():[]),(p.openings||[]).lengththis._pointInRoom(t,e));if(!i)return void this._showToast(this._t("toast.delete_room_pick"));if(!confirm(this._t("confirm.delete_room",{name:i.name})))return;const s=this._curSpaceCfg;if(!s)return;const n=this._geometrySnapshot();s.rooms=s.rooms.filter(t=>t.id!==i.id),this._commitOpenSpans(),this._recordGeometry(this._t("history.delete_room"),n),this._saveConfig(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}get _wallKeyPitch(){return Ql}get _spaceWalls(){const t=this._curSpaceCfg?.walls;return Array.isArray(t)?t:[]}_cfgOpenCuts(){return zc(this._curSpaceCfg?.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_intervalCm(t){const e=this._spaceModel();return e?sl(e.rooms,this._spaceWalls,this._openCuts(),t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_):0}_normalizeWalls(t,e){const i=this._spaceModel();if(!i)return[];return Pr(il(i.rooms,t,e,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),this._curSpaceCfg?.rooms||[],Ql,1,e.map(t=>[t[0]/P_,t[1]/P_,t[2]/P_,t[3]/P_]))}_paperShapes(t){if(!this._spaceWalls.length)return hi(t);const e=this._wallUnionGeometry();return e?.paperD?[{path:e.paperD}]:hi(t)}_wallUnionGeometry(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._physicalBodiesR();if(!e.length&&!i.length)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._roomWallOpeningInputs(),o=`${this._space}|${this._cfgEpoch}|${t.rooms.length}`;return this._wallUnionCache&&this._wallUnionCache.key===o||(this._wallUnionCache={key:o,value:pl(t.rooms,e,s,n,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,i)}),this._wallUnionCache.value}_thickWallCuts(){const t=this._spaceModel();if(!t)return[];const e=this._spaceWalls;if(!e.length)return[];const i=this._openPairs().flatMap(t=>t.segs);return _l(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_wallThickHit(t){const e=this._spaceModel();if(!e)return null;const i=6*this._gridPitch,s=this._openCuts();let n=null;for(const o of tl(e.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){const e=Hs(t,[o.a[0],o.a[1],o.b[0],o.b[1]]);e<=i&&(!n||e0?vr(e,this._cellCm,this._gridPitch):3*this._gridPitch,s=Math.max(i/2,1.25*this._gridPitch);let n="";for(const e of t.segs)n+=(n?" ":"")+Br([[e[0],e[1]],[e[2],e[3]]],s,!1);return{segs:t.segs,open:t.open,d:n}}_wallThickClick(t){const e=this._wallThickHit(t);if(!e)return void this._showToast(this._t("toast.wallthick_pick"));if(e.open)return void this._showToast(this._t("toast.wallthick_open"));const i=e.cm,s=this._viewOr(this._baseVb()),n=(e.a[0]+e.b[0])/2,o=(e.a[1]+e.b[1])/2;this._wallDialog={a:e.a,b:e.b,value:fr(i,this._imperial),roomId:e.roomId,sx:(n-s.x)/s.w*100,sy:(o-s.y)/s.h*100}}_wallThickApply(t){const e=this._wallDialog;if(!e)return;const i=this._curSpaceCfg,s=this._spaceModel();if(!i||!s)return;const n=e.value.trim(),o=n?f_(n):0;if(null==o)return void this._showPhysicalRange(100);const a=this._imperial?2.54*o:o;if(n&&(!Number.isFinite(a)||a<0||a>0&&a<1||a>100))return void this._showPhysicalRange(100);const r=this._geometrySnapshot(),l=n&&a>0?a:null,c=this._openCuts();let h;h=t&&e.roomId?Fr(i.walls,s.rooms,e.roomId,l,this._wallKeyPitch,c,P_):Ir(i.walls,e.a,e.b,l,this._wallKeyPitch,P_),h=this._normalizeWalls(h,c),h.length?i.walls=h:delete i.walls,this._wallDialog=null,this._showToast(this._t(null==l?"toast.wallthick_cleared":"toast.wallthick_set")),this._recordGeometry(this._t("history.wall_thickness"),r),this._saveConfig(),this.requestUpdate()}_wallHatchDefs(t){if(!this._spaceWalls.length&&!this._physicalBodiesR().length&&!this._markup)return W``;const e=Math.max(.4,1/Math.max(this._zoom,.4)),i=t||"#607d8b";return W` - `}_resolvedRoomFills(t,e){const i=new Map,s=new Map;for(const n of t.rooms){const t=this._roomDialog&&n.id===this._roomEditId?this._roomFill||e.fill:Is(e.fill,n),o=this._roomDialog&&n.id===this._roomEditId?this._roomCustomFill||e.customFill:rs(e.customFill,n),a=ps(t,"lqi"===t&&n.area?this._roomLqi(n.area):null,"light"===t?co(ro(this._renderPlanHass,this._renderDevices,n,this._virtualLights)):"none","temp"===t?this._roomTemp(n):null,e.tempMin,e.tempMax,this._fillColors,o);i.set(n,a),n.id&&s.set(n.id,a)}return{byRoom:i,byId:s}}_spaceDisplayForRender(){const t=ls(this._curSpaceCfg),e=this._spaceDialog;return e&&"edit"===e.mode&&e.spaceId===this._space?{...t,showBorders:e.showBorders,showNames:e.showNames,hideDecor:e.hideDecor,hideOpenings:e.hideOpenings,color:e.roomColor,opacity:e.roomOpacity,fill:e.fillMode,customFill:e.customFill?as(e.customFill):os,glow:e.glowEnabled,tempMin:e.tempMin,tempMax:e.tempMax,showLqi:e.showLqi,cardFontScale:e.cardFontScale,labelTemp:e.labelTemp,labelHum:e.labelHum,labelLqi:e.labelLqi,labelLight:e.labelLight}:t}_openingWallIndexFor(t,e){const i=t.rooms.map(t=>`${t.id}:${t.poly?.map(t=>t.join(",")).join("/")||`${t.x},${t.y},${t.w},${t.h}`}`).join(";"),s=this._spaceWalls.map(t=>`${t.key}:${t.a?.join(",")||""}:${t.b?.join(",")||""}:${t.cm}`).join(";"),n=e.map(t=>t.join(",")).join(";"),o=[t.id,this._cfgEpoch,this._wallKeyPitch,this._cellCm,this._gridPitch,i,s,n].join("|");let a=this._openingWallIndexCache.get(o);return a||(a=ml(t.rooms,this._spaceWalls,e,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)),v_(this._openingWallIndexCache,o,a,4),{key:o,value:a}}_renderOpeningTunnelFills(t,e,i="data"){if(this._markup||!this._spaceWalls.length||!this._openingsR.length)return W``;if("glow-base"===i&&![...e.byRoom.values()].some(Boolean))return W``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingsR.map(t=>({x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=n.map(t=>`${t.x},${t.y},${t.angle},${t.length}`).join(";"),a=this._openingWallIndexFor(t,s),r=`${a.key}|${o}`;return this._openingTunnelCache&&this._openingTunnelCache.key===r||(this._openingTunnelCache={key:r,value:xl(a.value,n)}),yu({openings:this._openingsR,geometries:this._openingTunnelCache.value,fillsByRoomId:e.byId,idPrefix:`${t.id}-${i}`,groupClass:"data"===i?"opening-tunnels":"opening-tunnels glow-base-tunnels",dataLayer:i})}_resolvedGlowBase(t,e,i){const s=new Map,n=new Map,o=this._fillColors.glow_base;for(const a of t.rooms){const t=i.byRoom.get(a),r=Fs(e.glow,a)&&(!t||t.opacity<=0)?{color:o.c,opacity:o.a,mode:"glow"}:null;s.set(a,r),a.id&&n.set(a.id,r)}return{byRoom:s,byId:n}}_renderGlowBaseRooms(t,e){if(this._markup||![...e.byRoom.values()].some(Boolean))return W``;const i=new Map(t.rooms.map(t=>[t,ci(t)])),s=this._openPairs().flatMap(t=>t.segs),n=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",o=t.rooms.map(o=>{const a=e.byRoom.get(o)||null,r=i.get(o)||null;if(!a||!r)return G;const l=this._spaceWalls.length&&o.id&&ol(t.rooms,o.id,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||r,c=Di(l,t.rooms.filter(t=>t!==o).map(t=>i.get(t)).filter(t=>!!t)),h=this._cleanFloor(o,l,t).path;return h||c.length?W``}_resolvedRoomFills(t,e){const i=new Map,s=new Map;for(const n of t.rooms){const t=this._roomDialog&&n.id===this._roomEditId?this._roomFill||e.fill:Is(e.fill,n),o=this._roomDialog&&n.id===this._roomEditId?this._roomCustomFill||e.customFill:rs(e.customFill,n),a=ps(t,"lqi"===t&&n.area?this._roomLqi(n.area):null,"light"===t?co(ro(this._renderPlanHass,this._renderDevices,n,this._virtualLights)):"none","temp"===t?this._roomTemp(n):null,e.tempMin,e.tempMax,this._fillColors,o);i.set(n,a),n.id&&s.set(n.id,a)}return{byRoom:i,byId:s}}_spaceDisplayForRender(){const t=ls(this._curSpaceCfg),e=this._spaceDialog;return e&&"edit"===e.mode&&e.spaceId===this._space?{...t,showBorders:e.showBorders,showNames:e.showNames,hideDecor:e.hideDecor,hideOpenings:e.hideOpenings,color:e.roomColor,opacity:e.roomOpacity,fill:e.fillMode,customFill:e.customFill?as(e.customFill):os,glow:e.glowEnabled,tempMin:e.tempMin,tempMax:e.tempMax,showLqi:e.showLqi,cardFontScale:e.cardFontScale,labelTemp:e.labelTemp,labelHum:e.labelHum,labelLqi:e.labelLqi,labelLight:e.labelLight}:t}_openingWallIndexFor(t,e){const i=t.rooms.map(t=>`${t.id}:${t.poly?.map(t=>t.join(",")).join("/")||`${t.x},${t.y},${t.w},${t.h}`}`).join(";"),s=this._spaceWalls.map(t=>`${t.key}:${t.a?.join(",")||""}:${t.b?.join(",")||""}:${t.cm}`).join(";"),n=e.map(t=>t.join(",")).join(";"),o=[t.id,this._cfgEpoch,this._wallKeyPitch,this._cellCm,this._gridPitch,i,s,n].join("|");let a=this._openingWallIndexCache.get(o);return a||(a=ml(t.rooms,this._spaceWalls,e,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)),y_(this._openingWallIndexCache,o,a,4),{key:o,value:a}}_renderOpeningTunnelFills(t,e,i="data"){if(this._markup||!this._spaceWalls.length||!this._openingsR.length)return W``;if("glow-base"===i&&![...e.byRoom.values()].some(Boolean))return W``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingsR.map(t=>({x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=n.map(t=>`${t.x},${t.y},${t.angle},${t.length}`).join(";"),a=this._openingWallIndexFor(t,s),r=`${a.key}|${o}`;return this._openingTunnelCache&&this._openingTunnelCache.key===r||(this._openingTunnelCache={key:r,value:xl(a.value,n)}),yu({openings:this._openingsR,geometries:this._openingTunnelCache.value,fillsByRoomId:e.byId,idPrefix:`${t.id}-${i}`,groupClass:"data"===i?"opening-tunnels":"opening-tunnels glow-base-tunnels",dataLayer:i})}_resolvedGlowBase(t,e,i){const s=new Map,n=new Map,o=this._fillColors.glow_base;for(const a of t.rooms){const t=i.byRoom.get(a),r=Fs(e.glow,a)&&(!t||t.opacity<=0)?{color:o.c,opacity:o.a,mode:"glow"}:null;s.set(a,r),a.id&&n.set(a.id,r)}return{byRoom:s,byId:n}}_renderGlowBaseRooms(t,e){if(this._markup||![...e.byRoom.values()].some(Boolean))return W``;const i=new Map(t.rooms.map(t=>[t,ci(t)])),s=this._openPairs().flatMap(t=>t.segs),n=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",o=t.rooms.map(o=>{const a=e.byRoom.get(o)||null,r=i.get(o)||null;if(!a||!r)return G;const l=this._spaceWalls.length&&o.id&&ol(t.rooms,o.id,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||r,c=Di(l,t.rooms.filter(t=>t!==o).map(t=>i.get(t)).filter(t=>!!t)),h=this._cleanFloor(o,l,t).path;return h||c.length?W``:o.poly||l!==r?W` - `}_isoDecorationLayers(t){const e="undefined"==typeof CSS||"function"!=typeof CSS.supports||CSS.supports("filter","blur(1px)"),i="function"==typeof matchMedia&&matchMedia("(forced-colors: active)").matches;return function(t){const e=!!t.showBorders;return{structural:e,panels:e&&!t.hideOpenings,shadows:e&&t.filtersSupported&&!t.forcedColors,materialNuance:e&&!t.forcedColors,floorSymbols:!t.hideOpenings&&!e}}({showBorders:t.showBorders,hideOpenings:t.hideOpenings,filtersSupported:e,forcedColors:i})}_isoOpeningPanels(t){if(!t.panels)return[];const e=this._isoScene();if(!e)return[];return e.openings.flatMap(t=>{const e=this._openingsR[t.sourceIndex];return e?i_(t,this._openingAmt(e)):[]}).sort((t,e)=>t.depth-e.depth||t.sourceIndex-e.sourceIndex||t.leaf-e.leaf)}_renderIsoDefs(t,e){return W` + `}_isoDecorationLayers(t){const e="undefined"==typeof CSS||"function"!=typeof CSS.supports||CSS.supports("filter","blur(1px)"),i="function"==typeof matchMedia&&matchMedia("(forced-colors: active)").matches;return function(t){const e=!!t.showBorders;return{structural:e,panels:e&&!t.hideOpenings,shadows:e&&t.filtersSupported&&!t.forcedColors,materialNuance:e&&!t.forcedColors,floorSymbols:!t.hideOpenings&&!e}}({showBorders:t.showBorders,hideOpenings:t.hideOpenings,filtersSupported:e,forcedColors:i})}_isoOpeningPanels(t){if(!t.panels)return[];const e=this._isoScene();if(!e)return[];return e.openings.flatMap(t=>{const e=this._openingsR[t.sourceIndex];return e?s_(t,this._openingAmt(e)):[]}).sort((t,e)=>t.depth-e.depth||t.sourceIndex-e.sourceIndex||t.leaf-e.leaf)}_renderIsoDefs(t,e){return W` ${"walls"===e&&t.materialNuance?W` @@ -5146,7 +5163,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${t.panels?W``:G} - `:W``}_roomHoverPaths(t){const e=this._hoverRoom;if("view"!==this._mode||!e||e.space!==t.id)return null;const i=t.rooms.find(t=>t===e.room||!!t.id&&t.id===e.room.id);if(!i)return null;const s=ci(i);if(!s)return null;const n=t.rooms.filter(t=>t!==i).map(t=>({room:t,poly:ci(t)})).filter(t=>!!t.poly),o=Di(s,n.map(t=>t.poly)),a=this._openPairs(),r=a.flatMap(t=>t.segs),l=i.id?a.filter(t=>t.a.id===i.id||t.b.id===i.id).flatMap(t=>t.segs):a.flatMap(t=>t.segs),c=this._spaceWalls,h=c.length&&i.id&&ol(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||s,d=[{axis:s,face:h}];for(const e of o){const i=n.find(t=>t.poly===e)?.room;let s=e;if(c.length&&i?.id){const n=Qr(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);n&&(s=gl(n.poly,n.offsets)||e)}d.push({axis:e,face:s})}const u=this._roomWallOpeningInputs(this._openingsR,t).map(t=>{const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,s=Math.sin(e)*t.length/2;return[t.x-i,t.y-s,t.x+i,t.y+s]}),p=.02*this._gridPitch,_=l.concat(u),g=d.map(({axis:t,face:e})=>{const i=_.map(i=>((t,e,i)=>{const s=t[2]-t[0],n=t[3]-t[1],o=Math.hypot(s,n);if(o.05)&&Ns([l,c],[i[0],i[1],s[0],s[1]])<=4*p){h=!0;break}}if(!h)return null;let d=null;for(let t=0;t.05)continue;const u=Ns([l,c],[e[0],e[1],s[0],s[1]]);(!d||u!!t);return i.length?Ds(e,i,p).map(t=>`M ${t[0]} ${t[1]} L ${t[2]} ${t[3]}`).join(" "):`M ${e.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`}).filter(Boolean).join(" ");if(!g)return null;const m=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`;return{fillD:[this._cleanFloor(i,h,t).path||m(h),...o.map(m)].join(" "),outlineD:g}}_renderRoomHoverFill(t){return t?W` + `:W``}_roomHoverPaths(t){const e=this._hoverRoom;if("view"!==this._mode||!e||e.space!==t.id)return null;const i=t.rooms.find(t=>t===e.room||!!t.id&&t.id===e.room.id);if(!i)return null;const s=ci(i);if(!s)return null;const n=t.rooms.filter(t=>t!==i).map(t=>({room:t,poly:ci(t)})).filter(t=>!!t.poly),o=Di(s,n.map(t=>t.poly)),a=this._openPairs(),r=a.flatMap(t=>t.segs),l=i.id?a.filter(t=>t.a.id===i.id||t.b.id===i.id).flatMap(t=>t.segs):a.flatMap(t=>t.segs),c=this._spaceWalls,h=c.length&&i.id&&ol(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||s,d=[{axis:s,face:h}];for(const e of o){const i=n.find(t=>t.poly===e)?.room;let s=e;if(c.length&&i?.id){const n=Qr(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);n&&(s=gl(n.poly,n.offsets)||e)}d.push({axis:e,face:s})}const u=this._roomWallOpeningInputs(this._openingsR,t).map(t=>{const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,s=Math.sin(e)*t.length/2;return[t.x-i,t.y-s,t.x+i,t.y+s]}),p=.02*this._gridPitch,_=l.concat(u),g=d.map(({axis:t,face:e})=>{const i=_.map(i=>((t,e,i)=>{const s=t[2]-t[0],n=t[3]-t[1],o=Math.hypot(s,n);if(o.05)&&Hs([l,c],[i[0],i[1],s[0],s[1]])<=4*p){h=!0;break}}if(!h)return null;let d=null;for(let t=0;t.05)continue;const u=Hs([l,c],[e[0],e[1],s[0],s[1]]);(!d||u!!t);return i.length?Ds(e,i,p).map(t=>`M ${t[0]} ${t[1]} L ${t[2]} ${t[3]}`).join(" "):`M ${e.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`}).filter(Boolean).join(" ");if(!g)return null;const m=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`;return{fillD:[this._cleanFloor(i,h,t).path||m(h),...o.map(m)].join(" "),outlineD:g}}_renderRoomHoverFill(t){return t?W` `:W``}_renderRoomHoverOutline(t){return t?W` @@ -5170,7 +5187,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
-
`:j``}_openingAt(t){if(!this._openingsR.length)return null;const e=this._openingsR.flatMap(e=>{const i=e.angle*Math.PI/180,s=t[0]-e.rx,n=t[1]-e.ry,o=s*Math.cos(i)+n*Math.sin(i);return Math.abs(o)>e.rlen/2+12?[]:[{o:e,localY:-s*Math.sin(i)+n*Math.cos(i)}]});if(!e.length)return null;const i=this._spaceModel();if(!i)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return e.find(({o:t,localY:e})=>{const i="gate"===t.type?!t.flip_v:t.flip_v,s=t.partitionHost||this._spaceWalls.length||"gate"===t.type?this._openingFace(t,n,!!i):{ox:0,oy:0,cm:0,side:-1},o=tu({type:t.type,length:t.rlen,angle:t.angle,amount:this._openingAmt(t),flipH:!!t.flip_h,flipV:!!t.flip_v,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s});return Math.abs(e)<=o.hitHalf})?.o||null}_resolveOpeningPlacement(t){const e=this._openingPreset;if("opening"!==this._tool||!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._openCuts(),n=this._openingWallIndexFor(i,s),o=`${n.key}|partitions:${this._cfgEpoch}`;var a,r,l;this._openingPlacementIntervalsCache&&this._openingPlacementIntervalsCache.key===o||(this._openingPlacementIntervalsCache={key:o,value:[...tl(i.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),...(a=i.partitions,r=this._cellCm,l=this._gridPitch,a.flatMap(t=>!sd(t.a)||!sd(t.b)||Math.hypot(t.b[0]-t.a[0],t.b[1]-t.a[1])<=1e-9?[]:[{roomId:"",a:[t.a[0],t.a[1]],b:[t.b[0],t.b[1]],key:`partition:${t.id}`,kind:"outer",cm:t.cm,open:!1,half:vr(t.cm,r,l)/2,partitionHost:{kind:"partition",id:t.id}}]))]});const c=l_({pointer:[t[0],t[1]],preset:e,geometryRevision:this._cfgEpoch,renderedLength:this._cmToUnits(e.lengthCm),intervals:this._openingPlacementIntervalsCache.value,baseTolerance:1.5*this._gridPitch,bodyPointerPadding:this._cssPxToRender(this._boundaryCoarse?10:6),gridStep:this._gridPitch});this._openingJambBlockCm=c.jambBlockedTarget?c.jambBlockedTarget.physicalHalfWidth/this._gridPitch*this._cellCm:null;const h=c.candidate;if(!h)return null;const d="gate"===h.type?!h.flipV:h.flipV;let u;if(h.host){const t=ad({id:"preview",type:h.type,x:h.x/T_,y:h.y/T_,angle:h.angle,length:h.renderedLength/T_,host:h.host},i.partitions,T_,this._cellCm,this._gridPitch).resolved;u=t?hd(t,d):{ox:0,oy:0,cm:0,side:-1}}else u=bl(n.value,{x:h.x,y:h.y,angle:h.angle,length:h.renderedLength,flip_v:d});const p="mi"===this.hass?.config?.unit_system?.length,_=pi([h.x,h.y],h.angle,h.renderedLength,i.rooms,this._gridPitch/2),g=(_?[{distance:_.sideA,midpoint:_.midA},{distance:_.sideB,midpoint:_.midB}]:h.measure.labels).map(t=>({x:t.midpoint[0],y:t.midpoint[1],text:ri(t.distance/this._gridPitch*this._cellCm,p)}));return{...h,face:u,measure:{labels:g,guide:h.measure.guide}}}_activateOpeningPlacement(t){this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingPreset=function(t,e){return{type:t,lengthCm:n_(t),flipH:!1,flipV:!1,revision:e}}(t,++this._openingPresetRevision),this._openingHoverCandidate=null,this._cursorPt=null)}_clearOpeningPlacement(t){this._openingHoverCandidate=null,this._openingJambBlockCm=null,t&&(this._openingPreset=null,this._openingRebindId=null)}_openingClick(t){const e=this._spaceModel();if(!e)return;const i=this._openingRebindId?null:this._openingAt(t);if(i)return void this._editOpening(i);const s=this._openingPreset;if(!s)return;const n=this._openingHoverCandidate,o=n&&c_(n,[t[0],t[1]],s.revision,this._cfgEpoch)?n:this._resolveOpeningPlacement(t);if(!o){if(null!=this._openingJambBlockCm)return void this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(this._openingJambBlockCm,this._imperial)}));const i=1.5*this._gridPitch,s=ui(t,e.rooms,i);return s&&function(t,e,i,s,n){for(const o of s)if(!(Ns([t,e],o)>n)&&Rr([o[0],o[1]],[o[2],o[3]],i))return!0;return!1}(s.x,s.y,s.angle,this._openCuts(),i)?void this._showToast(this._t("toast.opening_on_virtual")):void this._showToast(this._t("toast.opening_no_wall"))}const a=this._openingRebindId?this._curSpaceCfg?.openings?.find(t=>t.id===this._openingRebindId):null;this._openingDialog={...a?{id:a.id,type:a.type,lengthCm:Math.round(a.length*T_/this._gridPitch*this._cellCm),lengthTouched:!1,contact:a.contact||"",lock:a.lock||"",invert:!!a.invert,flipH:!!a.flip_h,flipV:!!a.flip_v}:{type:o.type,lengthCm:o.lengthCm,contact:"",lock:"",invert:!1,flipH:o.flipH,flipV:o.flipV},...o.host?{host:o.host}:{},x:o.x,y:o.y,angle:o.angle},this._openingRebindId=null,this._openingHoverCandidate=null,this._cursorPt=null}_editOpening(t){this._openingDialog={id:t.id,type:t.type,lengthCm:Math.round(t.rlen/this._gridPitch*this._cellCm),lengthTouched:!1,contact:t.contact||"",lock:t.lock||"",invert:!!t.invert,flipH:!!t.flip_h,flipV:!!t.flip_v,...t.host?{host:{...t.host}}:{},x:t.rx,y:t.ry,angle:t.angle}}_opPointerDown(t,e){if("plan"===this._mode&&this._spaceModel()&&"resize"!==this._tool){t.preventDefault(),t.stopPropagation();try{O_(t)}catch{}this._opDrag={id:e.id,moved:!1,sx:t.clientX,sy:t.clientY,dirty:!1,before:this._geometrySnapshot()}}}_opPointerMove(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;if(Math.abs(t.clientX-this._opDrag.sx)+Math.abs(t.clientY-this._opDrag.sy)<=3)return;const i=this._spaceModel();if(!i)return;const s=this._svgPoint(t),n=this._curSpaceCfg,o=n?.openings?.find(t=>t.id===e.id);if(!o)return;if("partition"===o.host?.kind){const t=i.partitions.find(t=>t.id===o.host.id);if(!t)return;const e=t.b[0]-t.a[0],n=t.b[1]-t.a[1],a=Math.hypot(e,n);if(!(a>1e-9))return;const r=e/a,l=n/a;if(Math.abs((s[0]-t.a[0])*l-(s[1]-t.a[1])*r)>4*this._gridPitch)return;const c=o.length*T_/2+nd(t,this._cellCm,this._gridPitch);let h=(s[0]-t.a[0])*r+(s[1]-t.a[1])*l;if(h=Math.round(h/this._gridPitch)*this._gridPitch,h=Math.max(c,Math.min(a-c,h)),a<2*c-1e-9)return;const d=h/a,u=(t.a[0]+r*h)/T_,p=(t.a[1]+l*h)/this._spaceH;let _=180*Math.atan2(n,e)/Math.PI;_>=90?_-=180:_<-90&&(_+=180);const g=o.host.t!==d||o.x!==u||o.y!==p||o.angle!==_;return this._opDrag.moved=!0,g&&(this._opDrag.dirty=!0),o.host={...o.host,t:d},o.x=u,o.y=p,o.angle=_,this._opMeasure=null,g&&this._cfgEpoch++,void this.requestUpdate()}const a=ui(s,i.rooms,4*this._gridPitch);if(!a)return;this._opDrag.moved=!0;const r=this._opRuler(a,o.length*T_);this._opMeasure=r.measure;const l=r.x/T_,c=r.y/this._spaceH,h=o.x!==l||o.y!==c||o.angle!==a.angle;h&&(this._opDrag.dirty=!0),o.x=l,o.y=c,o.angle=a.angle,h&&this._cfgEpoch++,this.requestUpdate()}_opRuler(t,e){const i=this._spaceModel()?.rooms||[],s=this._gridPitch/2;let n=t.x,o=t.y,a=pi([n,o],t.angle,e,i,s);if(a&&a.centered&&(n!==a.wallCenter[0]||o!==a.wallCenter[1]))[n,o]=a.wallCenter,a=pi([n,o],t.angle,e,i,s);else if(a){const[r,l]=a.wallA,[c,h]=a.wallB,d=c-r,u=h-l,p=Math.hypot(d,u);if(p>0){const c=this._gridPitch,h=Math.min(e/2,p/2);let _=Math.round(((n-r)*d+(o-l)*u)/p/c)*c;_=Math.max(h,Math.min(p-h,_)),n=r+_/p*d,o=l+_/p*u,a=pi([n,o],t.angle,e,i,s)||a}}if(!a)return{x:n,y:o,angle:t.angle,measure:null};const r="mi"===this.hass?.config?.unit_system?.length,l=(t,e)=>({x:e[0],y:e[1],text:ri(t/this._gridPitch*this._cellCm,r)});return{x:n,y:o,angle:t.angle,measure:{labels:[l(a.sideA,a.midA),l(a.sideB,a.midB)],guide:a.centered?{x:a.wallCenter[0],y:a.wallCenter[1],angle:t.angle}:null}}}_opPointerUp(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;const i=this._opDrag,s=i.moved;this._opMeasure=null,s&&i.dirty&&(this._recordGeometry(this._t("history.move_opening"),i.before),this._saveConfig()),s?window.setTimeout(()=>this._opDrag=null,0):this._opDrag=null}_opClick(t,e){"plan"===this._mode&&"resize"===this._tool||(t.stopPropagation(),this._opDrag?.moved||"plan"===this._mode&&this._editOpening(e))}_saveOpening(){const t=this._openingDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=this._geometrySnapshot(),n=this._spaceH,o=(e.openings||[]).find(e=>e.id===t.id),a={...o||{},id:t.id||"o"+Date.now().toString(36),type:t.type,x:t.x/T_,y:t.y/n,angle:t.angle,length:o&&!t.lengthTouched?o.length:this._cmToUnits(Math.max(20,t.lengthCm))/T_,...t.host?{host:{...t.host}}:{}};if(a.host){const t=ld(o,a)?rd(a,i.partitions,T_,this._cellCm,this._gridPitch):ad(a,i.partitions,T_,this._cellCm,this._gridPitch);if(!t.resolved){const e=i.partitions.find(t=>t.id===a.host.id);if("does-not-fit-jamb"===t.reason&&e){const t=nd(e,this._cellCm,this._gridPitch);this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(t/this._gridPitch*this._cellCm,this._imperial)}))}else this._showToast(this._t("opening.partition_orphan"));return}const s=(e.openings||[]).flatMap(t=>{if(!t.host||t.id===a.id)return[];const e=ad(t,i.partitions,T_,this._cellCm,this._gridPitch).resolved;return e?[e]:[]});if(function(t,e,i=1e-9){const s=t.length/(2*t.axis.length),n=t.t-s,o=t.t+s;return e.some(e=>{if(e.host.id!==t.host.id||e.opening.id===t.opening.id)return!1;const s=e.length/(2*e.axis.length);return Math.max(n,e.t-s)t.id===a.id);r>=0?e.openings[r]=a:e.openings.push(a),this._recordGeometry(this._t(t.id?"history.edit_opening":"history.add_opening"),s),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_deleteOpening(){const t=this._openingDialog,e=this._curSpaceCfg;if(!t?.id||!e?.openings)return;const i=this._geometrySnapshot();e.openings=e.openings.filter(e=>e.id!==t.id),this._recordGeometry(this._t("history.delete_opening"),i),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_contactCandidates(){const t=[];for(const e of Object.keys(this.hass.states)){if(!this._openingEntityAvailable(e))continue;const i=e.split(".")[0];if("binary_sensor"!==i&&"cover"!==i)continue;const s=this.hass.states[e],n=["door","window","opening","garage_door","garage"].includes(s?.attributes?.device_class||"");("cover"!==i||n)&&t.push([e,s?.attributes?.friendly_name||e,n?0:1])}return t.sort((t,e)=>t[2]-e[2]||t[1].localeCompare(e[1])).map(([t,e])=>({value:t,label:e}))}_lockCandidates(){return Object.keys(this.hass.states).filter(t=>t.startsWith("lock.")&&this._openingEntityAvailable(t)).map(t=>({value:t,label:this.hass.states[t]?.attributes?.friendly_name||t})).sort((t,e)=>t.label.localeCompare(e.label))}_mergeClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms,s=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!s?.id)return;const n=s.id;if(!this._mergeSel||this._mergeSel===n)return void(this._mergeSel=this._mergeSel===n?null:n);const o=i.find(t=>t.id===this._mergeSel),a=o?ci(o):null,r=ci(s),l=a&&r?function(t,e){if(!t||!e||t.length<3||e.length<3)return null;const i=si(Pi(t),Pi(e));if(1!==i.length)return null;if(1!==i[0].length)return null;const s=i[0][0].slice(0,-1).map(t=>[t[0],t[1]]);return s.length>=3?s:null}(a,r):null;if(!l)return this._showToast(this._t("toast.merge_not_adjacent")),void(this._mergeSel=null);this._mergeDialog={aId:this._mergeSel,bId:n,poly:l,pick:"a"},this._mergeSel=null}_commitMerge(){const t=this._mergeDialog,e=this._curSpaceCfg;if(!t||!e||!this._spaceModel())return;const i=this._geometrySnapshot(),s=this._spaceH,n="a"===t.pick?t.aId:t.bId,o="a"===t.pick?t.bId:t.aId,a=e.rooms.find(t=>t.id===n);a?(a.poly=t.poly.map(t=>[t[0]/T_,t[1]/s]),delete a.x,delete a.y,delete a.w,delete a.h,e.rooms=e.rooms.filter(t=>t.id!==o),this._commitOpenSpans(),this._recordGeometry(this._t("history.merge_rooms"),i),this._saveConfig(),this._mergeDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.rooms_merged",{name:a.name||""}))):this._mergeDialog=null}_splitClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms;if(!this._splitSel){const e=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!e?.id)return;return void(this._splitSel={roomId:e.id,pts:[]})}const s=i.find(t=>t.id===this._splitSel.roomId),n=s?ci(s):null;if(!s||!n)return void(this._splitSel=null);const o=.02*this._gridPitch,a=6*this._gridPitch,r=function(t,e){if(!e||e.length<2)return null;let i=null,s=1/0;for(let n=0;n=n)continue;n=_;const g=Math.sqrt(u),m=(i>0?Math.max(0,Math.min(g,Math.round(p*g/i)*i)):p*g)/g;s=[a+m*h,r+m*d]}return s}(r,n,this._gridPitch)||r,c=r&&l&&Math.hypot(r[0]-t[0],r[1]-t[1])<=a?l:null,h=!!c&&yi(c,n,o),d=this._splitSel.pts;if(!d.length)return h?void(this._splitSel={...this._splitSel,pts:[c]}):void this._showToast(this._t("toast.split_pick_wall"));if(!h){const e=this._snap(t);return bi(e,n,o)?void(this._splitSel={...this._splitSel,pts:[...d,e]}):void this._showToast(this._t("toast.split_pick_inside"))}const u=Ii(n,[...d,c],o);if(!u)return void this._showToast(this._t("toast.split_bad_cut"));this._resetRoomDialogFields();const[p,_]=u,g=Ti(p)>=Ti(_)?p:_,m=g===p?_:p;this._pendingSplit={roomId:s.id,mainPoly:g,newPoly:m},this._cursorPt=null,this._nameSel="",this._areaSel="",this._roomDialog=!0}get _contourClosed(){return this._path.length>=4&&this._samePt(this._path[0],this._path[this._path.length-1])&&(null!=this._closingWallCm||!this._activeDraftId)}_markupMove(t){if(!this._markup)return;const e=t.pointerType;if(e&&(this._boundaryPointerType=e),"column"===this._tool)return void(this._cursorPt=this._snap(this._svgPoint(t)));if("opening"===this._tool||"boundary"===this._tool||"wallthick"===this._tool)return void(this._cursorPt=this._svgPoint(t));const i="draw"===this._tool&&!this._contourClosed,s="split"===this._tool&&!!this._splitSel?.pts?.length;if(!i&&!s)return;const n=this._svgPoint(t);if(i){const e=this._resolvePlanDrawPoint(n,t.shiftKey);return this._planSnapHover={contextKey:e.contextKey,candidate:e.candidate},this._path.length?void(this._cursorPt=e.point):void this._syncPlanSnapActiveMarker(e.candidate)}this._cursorPt=this._snap(n)}get _openingPreview(){const t=this._openingPreset;if("opening"!==this._tool||!t||!this._cursorPt)return null;const e=this._cursorPt,i=this._openingHoverCandidate;if(i&&c_(i,[e[0],e[1]],t.revision,this._cfgEpoch))return i;if(this._openingAt(e))return this._openingHoverCandidate=null,null;const s=this._resolveOpeningPlacement(e);return this._openingHoverCandidate=s,s}get _opMeasureView(){return this._opMeasure||this._openingPreview?.measure||null}_saveRoom(){(this._areaSel||this._nameSel.trim())&&(this._wallFaceBatch?this._decideWallFace(!0):this._commitRoom())}_decideWallFace(t){const e=this._wallFaceBatch;if(!e)return;const i=e.candidates[e.index];if(!i)return;const s=t?{candidate:i,create:!0,name:this._nameSel.trim(),area:this._areaSel||null,settings:this._roomSettingsFromDialog()?JSON.parse(JSON.stringify(this._roomSettingsFromDialog())):null}:{candidate:i,create:!1},n=[...e.decisions,s],o=e.index+1;if(o"number"==typeof t&&Number.isFinite(t)&&t>=0?t:null,n=.02*this._gridPitch,o=this._spaceModel();if(!o)return _r;for(const e of this._planSnapGeometrySnapshot().value.segments){if("room"===e.sourceKind||Ns(t,[e.a[0],e.a[1],e.b[0],e.b[1]])>n)continue;if("partition"===e.sourceKind)return s(o.partitions.find(t=>t.id===e.sourceId)?.cm)??_r;const i=e.sourceId.lastIndexOf(":"),a=i>=0?e.sourceId.slice(0,i):e.sourceId,r=i>=0?Number(e.sourceId.slice(i+1)):-1;return s(o.room_drafts.find(t=>t.id===a)?.segments[r]?.cm)??_r}for(let o=0;o+1{this._showToast(this._t(t,e)),this._roomDialogCancel()},n=t.decisions.filter(t=>t.create),o=n.map(t=>t.candidate.ring),a=i.rooms;for(let t=0;ti.id!==e&&!!ci(i)&&Ci(o[t],ci(i)));if(i)return void s("toast.room_overlap",{name:i.name||""})}if((e.rooms||[]).length+n.length>400)return void s("toast.physical_limit");if(n.some(t=>t.candidate.split&&!e.rooms.some(e=>e.id===t.candidate.split.roomId)))return void s("toast.contour_cannot_close");const r=2e-4*this._gridPitch,l=new Map;for(let e=0;et.candidate.atomKeys)),i=n.some(t=>t.candidate.consumeAllActive);for(const s of Gd(this._wallGraphSources(t.activePath),r)){const t=s.sourceKeys.find(t=>l.has(t));!t||i||e.has(s.key)||c.push({a:s.a,b:s.b,cm:l.get(t)})}}else c.push(...Sd(t.activePath,t.activeCms,_r));if((e.partitions||[]).length+c.length>I_)return void s("toast.physical_limit");const h=this._geometrySnapshot(),d=n.some(t=>!!t.candidate.split),u=d?el(i.rooms,e.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,T_):null,p=d&&Array.isArray(e.walls)?e.walls:null;for(const t of n){const i=t.candidate.split;if(!i)continue;const n=e.rooms.find(t=>t.id===i.roomId);if(!n)return void s("toast.contour_cannot_close");n.poly=i.mainPoly.map(t=>[t[0]/T_,t[1]/this._spaceH]),delete n.x,delete n.y,delete n.w,delete n.h}const _=Date.now().toString(36),g=[];if(n.forEach((t,i)=>{const s=t.area?this.hass.areas[t.area]?.name:"",n={id:`r${_}-${i}`,name:t.name||s||this._t("room.default_name"),area:t.area||null,poly:t.candidate.ring.map(t=>[t[0]/T_,t[1]/this._spaceH]),...t.settings?{settings:JSON.parse(JSON.stringify(t.settings))}:{}};e.rooms.push(n),g.push({room:n,decision:t})}),t.activeDraftId&&Array.isArray(e.room_drafts)&&(e.room_drafts=e.room_drafts.filter(e=>e.id!==t.activeDraftId),e.room_drafts.length||delete e.room_drafts),c.length&&(e.partitions||=[],c.forEach((t,i)=>e.partitions.push({id:`partition-${_}-${i}`,a:[t.a[0]/T_,t.a[1]/T_],b:[t.b[0]/T_,t.b[1]/T_],cm:t.cm}))),d){this._commitOpenSpans();const t=this._normalizeWalls(u,this._openCuts());t.length?e.walls=t:p?.length?e.walls=p:delete e.walls}if(g.length){this._cfgEpoch++;const i=this._openCuts(),s=this._spaceModel();if(!s)return;let n=e.walls;for(const{room:e,decision:o}of g){const a=o.candidate.ring,r=this._wallSourceCmAt(a[0],t.activePath,t.activeCms);n=Er(n,s.rooms,e.id,r,this._wallKeyPitch,i,T_);for(const o of tl(s.rooms,n,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){if(o.roomId!==e.id||"outer"!==o.kind)continue;const i=[(o.a[0]+o.b[0])/2,(o.a[1]+o.b[1])/2];n=Ir(n,o.a,o.b,this._wallSourceCmAt(i,t.activePath,t.activeCms),this._wallKeyPitch,T_)}}const o=this._normalizeWalls(n,i);o.length?e.walls=o:delete e.walls}this._recordGeometry(this._t("history.wall_face_batch"),h),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._wallFaceBatch=null,this._roomDialog=!1,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices();const m=new Set(n.map(t=>t.area).filter(t=>!!t));if(m.size){const t={...this._layout};for(const e of this._devices){if(!m.has(e.area||"")||e.space!==this._space)continue;if(this._layout[e.id])continue;const i=this._defPos[e.id];i&&(t[e.id]={s:this._space,x:i.x/T_,y:i.y/T_},this._dirtyPos.add(e.id))}this._layout=t,this._persistLayout()}this._showToast(this._t(n.length?"toast.wall_rooms_saved":"toast.wall_chain_saved",{n:n.length}))}_commitRoom(){const t=this._curSpaceCfg,e=this._spaceModel();if(!t||!e)return;const i=this._geometrySnapshot(),s=this._spaceH,n=!!this._pendingSplit,o=n?el(e.rooms,t.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,T_):null,a=n&&Array.isArray(t.walls)?t.walls:null;let r;if(this._pendingSplit){const e=t.rooms.find(t=>t.id===this._pendingSplit.roomId);if(!e)return this._pendingSplit=null,this._splitSel=null,void(this._roomDialog=!1);e.poly=this._pendingSplit.mainPoly.map(t=>[t[0]/T_,t[1]/s]),delete e.x,delete e.y,delete e.w,delete e.h,r=this._pendingSplit.newPoly}else{if(!this._contourClosed)return;r=this._path.slice(0,-1)}const l=this._areaSel?this.hass.areas[this._areaSel]?.name:"",c={id:"r"+Date.now().toString(36),name:this._nameSel||l||this._t("room.default_name"),area:this._areaSel||null,poly:r.map(t=>[t[0]/T_,t[1]/s]),...this._roomSettingsFromDialog()?{settings:this._roomSettingsFromDialog()}:{}};if(t.rooms.push(c),!n&&this._activeDraftId&&Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),n){this._commitOpenSpans();const e=this._normalizeWalls(o,this._openCuts());e.length?t.walls=e:a?.length?t.walls=a:delete t.walls}if(!n){const e=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r],i=e[0]||this._drawWallCm;if(null!=i){this._cfgEpoch++;const s=this._openCuts(),n=this._spaceModel();if(!n)return;let o=Er(t.walls,n.rooms,c.id,i,this._wallKeyPitch,s,T_);for(const t of tl(n.rooms,o,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){if(t.roomId!==c.id||"outer"!==t.kind)continue;const s=[(t.a[0]+t.b[0])/2,(t.a[1]+t.b[1])/2],n=r.findIndex((t,e)=>{const i=r[(e+1)%r.length];return Ns(s,[t[0],t[1],i[0],i[1]])<=.02*this._gridPitch});n>=0&&(o=Ir(o,t.a,t.b,e[n]||i,this._wallKeyPitch,T_))}o=this._normalizeWalls(o,s),o.length?t.walls=o:delete t.walls}}this._recordGeometry(this._t(n?"history.split_room":"history.add_room"),i),this._saveConfig(),this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._pendingSplit=null,this._splitSel=null;const h=this._areaSel;this._areaSel="",this._nameSel="",this._roomDialog=!1,this._regSignature="",this._maybeRebuildDevices();let d=0;if(h){const t=T_,e={...this._layout};for(const i of this._devices){if(i.area!==h||i.space!==this._space)continue;if(d++,this._layout[i.id])continue;const s=this._defPos[i.id];s&&(e[i.id]={s:this._space,x:s.x/T_,y:s.y/t},this._dirtyPos.add(i.id))}this._layout=e,this._persistLayout()}const u=this._model.find(t=>t.id===this._space)?.rooms.length||0;this._showToast(h?this._t("toast.room_saved",{n:u,added:d}):this._t("toast.room_saved_no_area",{n:u}))}_cancelPath(){this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),this._roomDialog=!1,this._pendingSplit=null,this._wallFaceBatch=null,this._splitSel=null,this._mergeSel=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._clearOpeningPlacement(!0)}_resumeLastDraft(){const t=this._resumeDraftBySpace[this._space];if(!t)return;const e=this._spaceModel()?.room_drafts.find(e=>e.id===t);e?(this._activeDraftId=t,this._path=e.points.map(t=>[...t]),this._draftSegmentCms=e.segments.map(t=>t.cm),this._clearPlanSnapHover()):delete this._resumeDraftBySpace[this._space]}_roomDialogCancel(){if(this._roomDialog=!1,this._roomEditId)return this._roomEditId=null,this._nameSel="",void(this._areaSel="");if(this._wallFaceBatch){const t=this._wallFaceBatch;return this._wallFaceBatch=null,this._path=t.activePath.map(t=>[...t]),this._draftSegmentCms=[...t.activeCms],this._activeDraftId=t.activeDraftId,this._nameSel="",this._areaSel="",void this.requestUpdate()}if(this._pendingSplit)return this._pendingSplit=null,void(this._splitSel=null);this._undoPoint()}get _freeAreas(){const t=new Set;for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area&&t.add(i.area);for(const e of this._wallFaceBatch?.decisions||[])e.create&&e.area&&t.add(e.area);return Object.values(this.hass?.areas||{}).filter(e=>!t.has(e.area_id)).sort((t,e)=>(t.name||"").localeCompare(e.name||""))}_openMarkerDialog(t){if(this._vacAllCamerasFor=null,this._vacAllCameraCache=null,t&&this._ackNewDevice(t.id),this._norm)if(t){const e=t.marker,i=Object.prototype.hasOwnProperty.call(e||{},"is_light"),s=Object.prototype.hasOwnProperty.call(e||{},"light_entity"),n=Object.prototype.hasOwnProperty.call(e||{},"glow_color"),o=Object.prototype.hasOwnProperty.call(e||{},"value_badge"),a=Object.prototype.hasOwnProperty.call(e||{},"tap_action"),r=Object.prototype.hasOwnProperty.call(e||{},"toggle_entity"),l=ws(e?.glow_color),c=this._devicePresentation(t,!0).valueBadge,h=Lo(this._planHass,t,this._devices),d=Bo(this._planHass,t,h);this._markerDialog={devId:t.id,name:t.name,binding:"virtual"===t.bindingKind?"virtual":t.bindingKind+":"+t.bindingRef,bindingMode:"virtual"===t.bindingKind?"virtual":"ha",bindingOpen:!1,showEntities:"entity"===t.bindingKind&&!!this._fullRegistryHass.entities[t.bindingRef||""]?.device_id,bindingFilter:"",icon:t.marker?.icon||"",autoIcon:t.icon||"",display:Li(t.marker?.display),rippleColor:Rt(t.marker?.ripple_color,""),rippleSize:Number(t.marker?.ripple_size)>0?Number(t.marker.ripple_size):1.5,size:Number(t.marker?.size)>0?Number(t.marker.size):1,angle:Number(t.marker?.angle)||0,tapAction:Yh(t.marker?.tap_action,t.primary?.split(".")[0]),tapActionTouched:!1,originalHasTapAction:a,originalTapAction:t.marker?.tap_action,tapHintAnnouncement:"",toggleEntity:e?.toggle_entity||"",toggleEntityTouched:!1,originalHasToggleEntity:r,originalToggleEntity:e?.toggle_entity,tapTarget:t.marker?.tap_target||"",tapConfirm:!0===t.marker?.tap_confirm,runFilter:"",controls:Yn(t.marker?.binding,t.marker?.controls,t.entities),controlsFilter:"",lightRole:!0===e?.is_light?"always":!1===e?.is_light?"never":"auto",lightRoleTouched:!1,originalHasIsLight:i,originalIsLight:e?.is_light,lightEntity:e?.light_entity||"",lightEntityTouched:!1,originalHasLightEntity:s,originalLightEntity:e?.light_entity,glowMode:null!=l?.bri?"fixed":l?"color":"auto",glowColor:l?.c||this._fillColors.glow_light.c,glowBrightness:Math.max(1,Math.round(100*(l?.bri??1))),glowColorDrafted:!!l,glowBrightnessDrafted:null!=l?.bri,glowTouched:!1,originalHasGlowColor:n&&(!!l||null===e?.glow_color),originalGlowColor:l||(null===e?.glow_color?null:void 0),valueBadgeEnabled:o?!0===e?.value_badge?.enabled:!!c,valueBadgeSource:e?.value_badge?.source||c?.source||d,valueBadgePosition:e?.value_badge?.position||c?.position||"right",valueBadgeTouched:!1,originalHasValueBadge:o,originalValueBadge:e?.value_badge,useClimateTemp:!0===t.marker?.use_climate_temp,glowRadius:Number(t.marker?.glow_radius_cm)>0?String(this._imperial?Math.round(Number(t.marker.glow_radius_cm)/30.48*10)/10:Math.round(Number(t.marker.glow_radius_cm))/100):"",model:t.model||"",link:t.link||"",description:t.description||"",pdfs:[...t.pdfs||[]],room:t.marker?.room_id?t.space+"#@"+t.marker.room_id:t.space&&t.area?t.space+"#"+t.area:"",hideFromPlan:!0===t.marker?.hidden,busy:!1}}else this._markerDialog={name:"",binding:"virtual",bindingMode:"virtual",bindingOpen:!1,showEntities:!1,bindingFilter:"",icon:"",autoIcon:"",display:"badge",rippleColor:"",rippleSize:1.5,size:1,angle:0,tapAction:"info",tapActionTouched:!1,originalHasTapAction:!1,originalTapAction:void 0,tapHintAnnouncement:"",toggleEntity:"",toggleEntityTouched:!1,originalHasToggleEntity:!1,originalToggleEntity:void 0,tapTarget:"",tapConfirm:!1,runFilter:"",controls:[],controlsFilter:"",lightRole:"auto",lightRoleTouched:!1,originalHasIsLight:!1,originalIsLight:void 0,lightEntity:"",lightEntityTouched:!1,originalHasLightEntity:!1,originalLightEntity:void 0,glowMode:"auto",glowColor:this._fillColors.glow_light.c,glowBrightness:100,glowColorDrafted:!1,glowBrightnessDrafted:!1,glowTouched:!1,originalHasGlowColor:!1,originalGlowColor:void 0,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgePosition:"right",valueBadgeTouched:!1,originalHasValueBadge:!1,originalValueBadge:void 0,useClimateTemp:!1,glowRadius:"",model:"",link:"",description:"",pdfs:[],room:"",hideFromPlan:!1,busy:!1,uploadId:"up_"+Date.now().toString(36)+Math.random().toString(36).slice(2,6)};else this._showToast(this._t("toast.marker_needs_server"))}_runCandidates(){const t=[];for(const e of Ui)for(const[i,s]of Object.entries(this.hass.states))i.startsWith(e+".")&&this._planEntityAvailable(i)&&t.push({value:i,label:s?.attributes?.friendly_name||i,sub:this._t("run."+e)});return t.sort((t,e)=>t.sub.localeCompare(e.sub)||t.label.localeCompare(e.label))}_bindingCandidates(){const t=this._planHass,e=vo(this._markers),i=new Set(this._markers.filter(t=>t.removed).map(t=>t.binding)),s=new Set;for(const t of this._devices)t.id!==this._markerDialog?.devId&&("device"===t.bindingKind&&t.bindingRef&&s.add("device:"+t.bindingRef),"entity"===t.bindingKind&&t.bindingRef&&s.add("entity:"+t.bindingRef));const n=new Set;for(const t of this._devices)"device"===t.bindingKind&&t.name&&n.add(t.name.trim()+"|"+(t.area||""));const o=[];for(const e of Object.values(t.devices)){if("service"===e.entry_type)continue;const t="device:"+e.id;if(s.has(t))continue;const a=(e.name_by_user||e.name||e.id).trim();t!==this._markerDialog?.binding&&!i.has(t)&&n.has(a+"|"+(e.area_id||""))||o.push({value:t,label:a,sub:(e.model||this._t("marker.sub_device"))+("Group"===e.model?this._t("marker.sub_z2m_group"):"")})}const a=new Set(["group","template","derivative","min_max","threshold","integration","statistics","trend","utility_meter","tod","switch_as_x","schedule"]);for(const[n,r]of Object.entries(t.entities)){const l="entity:"+n;if(s.has(l))continue;if(yo(t,n,e)&&!i.has(l))continue;const c=a.has(r.platform),h="group"===r.platform;if(!c&&!h)continue;if(r.hidden&&!i.has(l))continue;const d=t.states[n];o.push({value:l,label:r.name||d?.attributes?.friendly_name||n,sub:n.split(".")[0]+" · "+("group"===r.platform?this._t("marker.sub_group"):this._t("marker.sub_helper"))})}if(this._markerDialog?.showEntities){const n=new Set(o.map(t=>t.value));for(const[a,r]of Object.entries(t.entities)){const l="entity:"+a;if(s.has(l)||n.has(l)||r.hidden&&!i.has(l))continue;if(yo(t,a,e)&&!i.has(l))continue;const c=t.states[a],h=r.name||c?.attributes?.friendly_name||a,d=r.device_id?t.devices[r.device_id]:null,u=d&&(d.name_by_user||d.name)||"";o.push({value:l,label:h,sub:a.split(".")[0]+" · "+this._t("marker.sub_entity")+(u?" · "+u:"")})}}const r=(this._markerDialog?.bindingFilter||"").toLowerCase().trim(),l=r?o.filter(t=>(t.label+" "+t.sub+" "+t.value).toLowerCase().includes(r)):o;return l.sort((t,e)=>t.label.localeCompare(e.label)),l.slice(0,200)}_physicalBodiesR(t=this._spaceModel()){if(!t)return[];const e=`${t.id}|${this._cfgEpoch}|${this._cellCm}|${this._gridPitch}`;if(this._physicalBodiesCache?.key===e)return this._physicalBodiesCache.all;const i=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t));return this._physicalBodiesCache={key:e,...i},i.all}_rawPhysicalBodiesR(t=this._spaceModel()){if(!t)return[];this._physicalBodiesR(t);const e=this._physicalBodiesCache;return e?[...e.drafts,...e.partitions,...e.columns]:[]}_cleanFloor(t,e,i=this._spaceModel()){if(!i)return{floor:e,geom:null,path:"",area:Ol([[[...e,e[0]]]])};const s=t.id||`#${i.rooms.indexOf(t)}`,n=`${i.id}|${this._cfgEpoch}|${s}`;if(!this._rszPreview){const t=f_(this._cleanFloorCache,n);if(t.hit)return t.value}const o=e.map(t=>t[0]),a=e.map(t=>t[1]),r=[Math.min(...o),Math.min(...a),Math.max(...o),Math.max(...a)],l=this._physicalBodiesR(i).filter(t=>{const e=t.map(t=>t[0]),i=t.map(t=>t[1]);return Math.max(...e)>=r[0]&&Math.min(...e)<=r[2]&&Math.max(...i)>=r[1]&&Math.min(...i)<=r[3]}),c=l.length?zl(e,l):null,h={floor:e,geom:c,path:c?Dl(c):"",area:Ol(c||[[[...e,e[0]]]])};return this._rszPreview||v_(this._cleanFloorCache,n,h,600),h}_autoIconForBinding(t){if("virtual"===t)return"mdi:map-marker";const[e,i]=t.split(":");if(!i)return"";const s=this._fullRegistryHass,n=this._bindingStatus(t),o="active"===n.kind?n.enabledEntityIds:n.allEntityIds;if("device"===e){const t=s.devices?.[i];if(!t)return"mdi:help-circle";const e=o;return e.some(t=>t.startsWith("lock."))?"mdi:lock":fo(s,t.name_by_user||t.name||"",t.model,e,this._iconRules)}if("entity"===e){const t=s.entities?.[i],e=this.hass.states?.[i],n=t?.name||e?.attributes?.friendly_name||i;return i.startsWith("lock.")?"mdi:lock":fo(s,n,"",[i],this._iconRules)}return""}_allRoomsFlat(){const t=[];for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area?t.push({value:e.id+"#"+i.area,label:(e.title||e.id)+" · "+i.name}):i.id&&t.push({value:e.id+"#@"+i.id,label:(e.title||e.id)+" · "+i.name+" · "+this._t("marker.subarea")});return t}_errText(t){if(!t)return this._t("err.unknown");if("string"==typeof t)return t;if("invalid_passage_fields"===t.code){const e=String(t.message||t.error||"").match(/space=([^;]*);\s*opening=([^;]*);\s*fields=([^;]*)/);if(e){const t=this._serverCfg?.spaces?.find(t=>String(t.id)===e[1]),i={contact:"opening.contact_label",lock:"opening.lock_label",invert:"opening.invert",flip_h:"opening.flip_h",flip_v:"opening.flip_v"},s=e[3].split(",").filter(Boolean).map(t=>i[t]?this._t(i[t]):t).join(", ");return this._t("opening.invalid_passage_fields",{room:t?.title||e[1],fields:s})}}if("invalid_partition_opening_jamb_margin"===t.code){const e=String(t.message||t.error||"").match(/margin_cm=([^;]*)/),i=e?Number(e[1]):NaN;if(Number.isFinite(i))return this._t("opening.partition_jamb_margin",{distance:ri(i,this._imperial)})}if(t.message)return t.message;if(t.error)return t.error;if(null!=t.code)return this._t("err.code",{code:t.code});try{return JSON.stringify(t)}catch{return String(t)}}_backupErrorText(t){const e=t?.code??t?.error;if("string"==typeof e){const t=`backup.error.${e}`,i=this._t(t);if(i!==t)return i}return this._errText(t)}async _pickMarkerFiles(t){const e=t.target,i=e.files?[...e.files]:[];if(e.value="",!i.length||!this._markerDialog)return;const s=this._markerDialog.uploadId||this._markerDialog.devId||"new",n=[];for(const t of i)try{const e=new FormData;e.append("marker_id",s),e.append("file",t,t.name);const i=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth("/api/houseplan/upload",{method:"POST",body:e}):await fetch("/api/houseplan/upload",{method:"POST",body:e,headers:this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}),o=await i.json().catch(()=>({}));if(!i.ok||o.error){const t={too_large:this._t("err.too_large",{mb:o.max_mb||50}),bad_ext:this._t("err.bad_ext"),unauthorized:this._t("err.unauthorized")};throw new Error(t[o.error]||o.error||"HTTP "+i.status)}n.push({name:o.name||t.name,url:o.url})}catch(e){this._showToast(this._t("toast.file_failed",{name:t.name,err:this._errText(e)}))}n.length&&this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:[...this._markerDialog.pdfs,...n]},this._showToast(this._t("toast.files_attached",{n:n.length})))}_removeMarkerPdf(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:this._markerDialog.pdfs.filter(e=>e.url!==t)})}_markerLightFields(t){const e={};if(t.lightRoleTouched?"always"===t.lightRole?e.is_light=!0:"never"===t.lightRole&&(e.is_light=!1):t.originalHasIsLight&&(e.is_light=t.originalIsLight??null),t.lightEntityTouched?t.lightEntity&&(e.light_entity=t.lightEntity):t.originalHasLightEntity&&(e.light_entity=t.originalLightEntity??null),t.glowTouched){if("auto"!==t.glowMode){const i={c:Rt(t.glowColor,this._fillColors.glow_light.c)};"fixed"===t.glowMode&&(i.bri=Math.max(.01,Math.min(1,Math.round(t.glowBrightness)/100))),e.glow_color=i}}else t.originalHasGlowColor&&(e.glow_color=t.originalGlowColor??null);return e}_markerTapActionFields(t){return t.tapActionTouched?{tap_action:t.tapAction||null}:t.originalHasTapAction?{tap_action:t.originalTapAction??null}:{}}_markerToggleEntityFields(t){return(e={touched:t.toggleEntityTouched,originalHas:t.originalHasToggleEntity,original:t.originalToggleEntity,value:t.toggleEntity}).touched?e.value?{toggle_entity:e.value}:{}:e.originalHas?{toggle_entity:e.original??null}:{};var e}async _saveMarker(){const t=this._markerDialog;if(!t||t.busy)return;const e=this._effectiveMarkerTapAction(t);if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return;if("virtual"===t.binding&&!t.name.trim())return void this._showToast(this._t("toast.virtual_name_required"));if("run"===e&&!t.tapTarget)return void this._showToast(this._t("toast.run_target_required"));if(t.valueBadgeTouched&&t.valueBadgeEnabled&&!t.valueBadgeSource)return void this._showToast(this._t("toast.value_badge_source_required"));if("ha"===t.bindingMode){const e=this._bindingStatus(t.binding),i=t.devId?this._markers.find(e=>e.id===t.devId):null,s=!i||i.binding!==t.binding;if("active"!==e.kind&&s)return void this._showToast(this._t("ha_disabled"===e.kind?"toast.ha_disabled_add":"toast.ha_binding_unverified"));if("ha_disabled"===e.kind&&!0===i?.hidden&&!t.hideFromPlan)return this._markerDialog={...t,hideFromPlan:!0},void this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device"))}const i=this._serverCfg;if(!i)return;const s=i.markers||[],n=Bs(t.room);let o=n?.space||null;const a=n?.area||null,r=n?.roomId||null,l=Fi(t.binding,t.devId,()=>"v_"+Date.now().toString(36)),c=t.devId,h=c?this._devices.find(t=>t.id===c):null,d=n?.space||h?.space||null,u=d?this._spaceModelById(d):this._spaceModel();if(!u)return;const p=u.id;"virtual"!==t.binding||o||(o=p),this._markerDialog={...t,busy:!0};try{const n="virtual"===t.binding?[]:s.filter(e=>e.removed&&e.binding===t.binding).map(t=>t.id),d=n.length>0,_=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),g=s.find(t=>t.id===l||t.id===c)?.vacuum||null,m={id:l,vacuum:g,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle?t.angle:null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===e&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:_.length?_:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=m_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:!!t.hideFromPlan};("virtual"===t.binding||t.room)&&(m.space=o,m.area=a,m.room_id=r);const f=h?.marker?.room_id??null,v=!!t.room&&null!=h&&(h.space!==o||h.area!==a||f!==r);let y=!1;const b=t.uploadId||c;if(b&&b!==l&&m.pdfs?.length)try{const t=await this.hass.callWS({type:"houseplan/files/migrate",from_id:b,to_id:l}),e=t?.mapping||{};m.pdfs=function(t,e,i,s){if(!e||!i||e===i)return t;const n="/files/"+e+"/",o="/files/"+i+"/";return t.map(t=>{if(!t.url.includes(n))return t;const e=t.url.split(n)[1]||"",[i,a]=[e.split("?")[0],e.includes("?")?"?"+e.split("?")[1]:""];if(s){const e=s[decodeURIComponent(i)]??s[i];return e?{...t,url:t.url.split(n+i)[0]+o+encodeURIComponent(e)+a}:t}return{...t,url:t.url.split(n).join(o)}})}(m.pdfs,b,l,e),y=Object.keys(e).length>0}catch(t){this._showToast(this._t("toast.files_migrate_failed",{err:this._errText(t)}))}i.markers=s,c&&c!==l&&(i.markers=function(t,e,i){if(!e||!i||e===i)return[...t];const s=`marker:${e}`,n=`marker:${i}`;return t.map(t=>{const e=Array.isArray(t.controls)?t.controls.map(t=>t===s?n:t):t.controls,i="derived_marker_state"===t.value_badge?.source?.kind&&t.value_badge.source.ref===s?{...t.value_badge,source:{...t.value_badge.source,ref:n}}:t.value_badge;return e===t.controls&&i===t.value_badge?t:{...t,controls:e,value_badge:i}})}(i.markers,c,l)),c&&c!==l&&"derived_marker_state"===m.value_badge?.source?.kind&&m.value_badge.source.ref===`marker:${c}`&&(m.value_badge.source={kind:"derived_marker_state",ref:`marker:${l}`}),i.markers=i.markers.filter(t=>t.id!==l&&t.id!==c&&("virtual"===m.binding||t.binding!==m.binding)),i.markers.push(m);let w=null;const k=c?this._layout[c]:null,x=k?{s:k.s||h?.space||this._space,x:k.x,y:k.y}:c&&h&&this._defPos[c]?this._normPos(h.space,this._defPos[c].x,this._defPos[c].y):null;if(!d&&x&&x.s===p)l===c&&this._layout[l]&&!v||(w={s:x.s,x:x.x,y:x.y},this._layout={...this._layout,[l]:w});else if(d||!this._layout[l]||v){let t=u.vb[0]+u.vb[2]/2,e=u.vb[1]+u.vb[3]/2;const i=r?u.rooms.find(t=>t.id===r):a?u.rooms.find(t=>t.area===a):void 0;i&&([t,e]=this._roomCenter(i)),w=this._normPos(p,t,e),this._layout={...this._layout,[l]:w}}await this._saveConfigNow(),w&&this._noteLayoutRev(await this.hass.callWS({type:"houseplan/layout/update",device_id:l,pos:w}));const $=new Set(n);c&&c!==l&&$.add(c),$.delete(l);for(const t of $)delete this._layout[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{});y&&b&&await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:b}).catch(()=>{}),this._markerDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_saved"))}catch(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteMarker(){const t=this._markerDialog;if(!t||t.busy||!t.devId)return;const e=t.devId?this._devices.find(e=>e.id===t.devId):null;if(!e)return;const i=t.name||this._t("device.fallback");if(!confirm(this._t("confirm.remove_marker",{name:i})))return;const s=this._serverCfg;s.markers=s.markers||[];const n=s.markers,o="virtual"===e.bindingKind?"virtual":e.bindingKind&&e.bindingRef?`${e.bindingKind}:${e.bindingRef}`:"";if(!o)return;const a=function(t,e,i,s){const n=new Set([e]),o=t.filter(t=>{const o=t.id===e||!s&&t.binding===i;return o&&n.add(t.id),!o});return{markers:s?o:[...o,{id:e,binding:i,removed:!0,hidden:!0}],cleanupIds:n}}(s.markers,e.id,o,"virtual"===e.bindingKind);var r,l;s.markers=(r=a.markers,l=a.cleanupIds,r.map(t=>{if(!Array.isArray(t.controls))return t;const e=t.controls.filter(t=>!("string"==typeof t&&t.startsWith("marker:")&&l.has(t.slice(7))));return e.length===t.controls.length?t:{...t,controls:e.length?e:null}}));const c=a.cleanupIds;this._markerDialog={...t,busy:!0};try{await this._saveConfigNow();for(const t of c){delete this._layout[t],delete this._defPos[t],this._dirtyPos.delete(t),this._sentPos.delete(t);const e=this._activityRt.get(t);e&&clearTimeout(e.timer),this._activityRt.delete(t),this._vacRt.delete(t),delete this._vacSrvTrails[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{}),await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:t}).catch(()=>{}),await this.hass.callWS({type:"houseplan/trail/delete",marker_id:t}).catch(()=>{})}this._markerDialog=null,this._infoCard?.id===e.id&&this._closeInfoCard(),this._selId===e.id&&(this._selId=null),this._drag?.id===e.id&&(this._drag=null),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_removed"))}catch(t){this._serverCfg===s&&(s.markers=n),this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}_normPos(t,e,i){return{s:t,x:e/T_,y:i/T_}}_openSpaceDialog(t,e){if(this._serverStorage&&this._serverCfg)if("edit"===t){const i=this._serverCfg.spaces.find(t=>t.id===e);if(!i)return;const s=ls(i),n=i.settings?.custom_fill&&"object"==typeof i.settings.custom_fill?as(i.settings.custom_fill):null,o="none"===s.fill?{...n||os,a:0}:n;this._spaceDialog={mode:t,spaceId:e,title:i.title,planUrl:i.plan_url||null,planFile:null,source:i.plan_url?"file":"draw",showBorders:s.showBorders,showNames:s.showNames,displayTouched:!0,hideDecor:s.hideDecor,hideOpenings:s.hideOpenings,roomColor:s.color,roomOpacity:s.opacity,fillMode:"none"===s.fill?"custom":s.fill,customFill:o,glowEnabled:s.glow,bgColor:s.bgColor,bgMode:"static"===i.settings?.bg_mode||"daynight"===i.settings?.bg_mode?i.settings.bg_mode:null,northDeg:Ya({},i.settings),sunRays:"boolean"==typeof i.settings?.sun_rays?i.settings.sun_rays:null,tempMin:s.tempMin,tempMax:s.tempMax,showLqi:s.showLqi??this._config?.show_signal??!0,cardFontScale:s.cardFontScale,labelTemp:s.labelTemp,labelHum:s.labelHum,labelLqi:s.labelLqi,labelLight:s.labelLight,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,busy:!1}}else this._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:{...os,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1};else this._showToast(this._t("toast.integration_missing"))}async _pickPlanFile(t){const e=t.target,i=e.files?.[0];if(!i||!this._spaceDialog)return;const s={"image/svg+xml":"svg","image/png":"png","image/jpeg":"jpg","image/webp":"webp"}[i.type]||(i.name.toLowerCase().endsWith(".svg")?"svg":"");if(!s)return void this._showToast(this._t("toast.plan_formats"));const n=new Uint8Array(await i.arrayBuffer());let o="";for(let t=0;t{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:1.414),e.onerror=()=>t(1.414),e.src=r});URL.revokeObjectURL(r),this._spaceDialog={...this._spaceDialog,planFile:{ext:s,b64:a,aspect:l,name:i.name}}}_useServerPlan(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let e=0;e<40;e++){const e=this._display(t);if(e){const i=await new Promise(t=>{const i=new Image;i.onload=()=>t(i.naturalWidth&&i.naturalHeight?i.naturalWidth/i.naturalHeight:0),i.onerror=()=>t(0),i.src=e}),s=this._spaceDialog;return s&&s.planUrl===t&&Number.isFinite(i)&&i>0?(this._spaceDialog={...s,savedAspect:i},i):0}if(await new Promise(t=>setTimeout(t,150)),this._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){if(confirm(this._t("confirm.delete_plan",{name:t})))try{await this.hass.callWS({type:"houseplan/plans/delete",name:t});const e=this._spaceDialog;e?.saved&&(this._spaceDialog={...e,saved:e.saved.filter(e=>e.name!==t)})}catch(t){this._showToast(this._t("toast.plan_delete_failed",{err:this._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return j`
${this._t("space.loading")}
`;const e=t.saved||[];if(!e.length)return j`
${this._t("space.no_saved")}
`;return j`
+
`:j``}_openingAt(t){if(!this._openingsR.length)return null;const e=this._openingsR.flatMap(e=>{const i=e.angle*Math.PI/180,s=t[0]-e.rx,n=t[1]-e.ry,o=s*Math.cos(i)+n*Math.sin(i);return Math.abs(o)>e.rlen/2+12?[]:[{o:e,localY:-s*Math.sin(i)+n*Math.cos(i)}]});if(!e.length)return null;const i=this._spaceModel();if(!i)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return e.find(({o:t,localY:e})=>{const i="gate"===t.type?!t.flip_v:t.flip_v,s=t.partitionHost||this._spaceWalls.length||"gate"===t.type?this._openingFace(t,n,!!i):{ox:0,oy:0,cm:0,side:-1},o=tu({type:t.type,length:t.rlen,angle:t.angle,amount:this._openingAmt(t),flipH:!!t.flip_h,flipV:!!t.flip_v,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s});return Math.abs(e)<=o.hitHalf})?.o||null}_resolveOpeningPlacement(t){const e=this._openingPreset;if("opening"!==this._tool||!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._openCuts(),n=this._openingWallIndexFor(i,s),o=`${n.key}|partitions:${this._cfgEpoch}`;var a,r,l;this._openingPlacementIntervalsCache&&this._openingPlacementIntervalsCache.key===o||(this._openingPlacementIntervalsCache={key:o,value:[...tl(i.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),...(a=i.partitions,r=this._cellCm,l=this._gridPitch,a.flatMap(t=>!sd(t.a)||!sd(t.b)||Math.hypot(t.b[0]-t.a[0],t.b[1]-t.a[1])<=1e-9?[]:[{roomId:"",a:[t.a[0],t.a[1]],b:[t.b[0],t.b[1]],key:`partition:${t.id}`,kind:"outer",cm:t.cm,open:!1,half:vr(t.cm,r,l)/2,partitionHost:{kind:"partition",id:t.id}}]))]});const c=c_({pointer:[t[0],t[1]],preset:e,geometryRevision:this._cfgEpoch,renderedLength:this._cmToUnits(e.lengthCm),intervals:this._openingPlacementIntervalsCache.value,baseTolerance:1.5*this._gridPitch,bodyPointerPadding:this._cssPxToRender(this._boundaryCoarse?10:6),gridStep:this._gridPitch});this._openingJambBlockCm=c.jambBlockedTarget?c.jambBlockedTarget.physicalHalfWidth/this._gridPitch*this._cellCm:null;const h=c.candidate;if(!h)return null;const d="gate"===h.type?!h.flipV:h.flipV;let u;if(h.host){const t=ad({id:"preview",type:h.type,x:h.x/P_,y:h.y/P_,angle:h.angle,length:h.renderedLength/P_,host:h.host},i.partitions,P_,this._cellCm,this._gridPitch).resolved;u=t?hd(t,d):{ox:0,oy:0,cm:0,side:-1}}else u=bl(n.value,{x:h.x,y:h.y,angle:h.angle,length:h.renderedLength,flip_v:d});const p="mi"===this.hass?.config?.unit_system?.length,_=pi([h.x,h.y],h.angle,h.renderedLength,i.rooms,this._gridPitch/2),g=(_?[{distance:_.sideA,midpoint:_.midA},{distance:_.sideB,midpoint:_.midB}]:h.measure.labels).map(t=>({x:t.midpoint[0],y:t.midpoint[1],text:ri(t.distance/this._gridPitch*this._cellCm,p)}));return{...h,face:u,measure:{labels:g,guide:h.measure.guide}}}_activateOpeningPlacement(t){this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingPreset=function(t,e){return{type:t,lengthCm:o_(t),flipH:!1,flipV:!1,revision:e}}(t,++this._openingPresetRevision),this._openingHoverCandidate=null,this._cursorPt=null)}_clearOpeningPlacement(t){this._openingHoverCandidate=null,this._openingJambBlockCm=null,t&&(this._openingPreset=null,this._openingRebindId=null)}_openingClick(t){const e=this._spaceModel();if(!e)return;const i=this._openingRebindId?null:this._openingAt(t);if(i)return void this._editOpening(i);const s=this._openingPreset;if(!s)return;const n=this._openingHoverCandidate,o=n&&h_(n,[t[0],t[1]],s.revision,this._cfgEpoch)?n:this._resolveOpeningPlacement(t);if(!o){if(null!=this._openingJambBlockCm)return void this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(this._openingJambBlockCm,this._imperial)}));const i=1.5*this._gridPitch,s=ui(t,e.rooms,i);return s&&function(t,e,i,s,n){for(const o of s)if(!(Hs([t,e],o)>n)&&Rr([o[0],o[1]],[o[2],o[3]],i))return!0;return!1}(s.x,s.y,s.angle,this._openCuts(),i)?void this._showToast(this._t("toast.opening_on_virtual")):void this._showToast(this._t("toast.opening_no_wall"))}const a=this._openingRebindId?this._curSpaceCfg?.openings?.find(t=>t.id===this._openingRebindId):null;this._openingDialog={...a?{id:a.id,type:a.type,lengthCm:Math.round(a.length*P_/this._gridPitch*this._cellCm),lengthTouched:!1,contact:a.contact||"",lock:a.lock||"",invert:!!a.invert,flipH:!!a.flip_h,flipV:!!a.flip_v}:{type:o.type,lengthCm:o.lengthCm,contact:"",lock:"",invert:!1,flipH:o.flipH,flipV:o.flipV},...o.host?{host:o.host}:{},x:o.x,y:o.y,angle:o.angle},this._openingRebindId=null,this._openingHoverCandidate=null,this._cursorPt=null}_editOpening(t){this._openingDialog={id:t.id,type:t.type,lengthCm:Math.round(t.rlen/this._gridPitch*this._cellCm),lengthTouched:!1,contact:t.contact||"",lock:t.lock||"",invert:!!t.invert,flipH:!!t.flip_h,flipV:!!t.flip_v,...t.host?{host:{...t.host}}:{},x:t.rx,y:t.ry,angle:t.angle}}_opPointerDown(t,e){if("plan"===this._mode&&this._spaceModel()&&"resize"!==this._tool){t.preventDefault(),t.stopPropagation();try{H_(t)}catch{}this._opDrag={id:e.id,moved:!1,sx:t.clientX,sy:t.clientY,dirty:!1,before:this._geometrySnapshot()}}}_opPointerMove(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;if(Math.abs(t.clientX-this._opDrag.sx)+Math.abs(t.clientY-this._opDrag.sy)<=3)return;const i=this._spaceModel();if(!i)return;const s=this._svgPoint(t),n=this._curSpaceCfg,o=n?.openings?.find(t=>t.id===e.id);if(!o)return;if("partition"===o.host?.kind){const t=i.partitions.find(t=>t.id===o.host.id);if(!t)return;const e=t.b[0]-t.a[0],n=t.b[1]-t.a[1],a=Math.hypot(e,n);if(!(a>1e-9))return;const r=e/a,l=n/a;if(Math.abs((s[0]-t.a[0])*l-(s[1]-t.a[1])*r)>4*this._gridPitch)return;const c=o.length*P_/2+nd(t,this._cellCm,this._gridPitch);let h=(s[0]-t.a[0])*r+(s[1]-t.a[1])*l;if(h=Math.round(h/this._gridPitch)*this._gridPitch,h=Math.max(c,Math.min(a-c,h)),a<2*c-1e-9)return;const d=h/a,u=(t.a[0]+r*h)/P_,p=(t.a[1]+l*h)/this._spaceH;let _=180*Math.atan2(n,e)/Math.PI;_>=90?_-=180:_<-90&&(_+=180);const g=o.host.t!==d||o.x!==u||o.y!==p||o.angle!==_;return this._opDrag.moved=!0,g&&(this._opDrag.dirty=!0),o.host={...o.host,t:d},o.x=u,o.y=p,o.angle=_,this._opMeasure=null,g&&this._cfgEpoch++,void this.requestUpdate()}const a=ui(s,i.rooms,4*this._gridPitch);if(!a)return;this._opDrag.moved=!0;const r=this._opRuler(a,o.length*P_);this._opMeasure=r.measure;const l=r.x/P_,c=r.y/this._spaceH,h=o.x!==l||o.y!==c||o.angle!==a.angle;h&&(this._opDrag.dirty=!0),o.x=l,o.y=c,o.angle=a.angle,h&&this._cfgEpoch++,this.requestUpdate()}_opRuler(t,e){const i=this._spaceModel()?.rooms||[],s=this._gridPitch/2;let n=t.x,o=t.y,a=pi([n,o],t.angle,e,i,s);if(a&&a.centered&&(n!==a.wallCenter[0]||o!==a.wallCenter[1]))[n,o]=a.wallCenter,a=pi([n,o],t.angle,e,i,s);else if(a){const[r,l]=a.wallA,[c,h]=a.wallB,d=c-r,u=h-l,p=Math.hypot(d,u);if(p>0){const c=this._gridPitch,h=Math.min(e/2,p/2);let _=Math.round(((n-r)*d+(o-l)*u)/p/c)*c;_=Math.max(h,Math.min(p-h,_)),n=r+_/p*d,o=l+_/p*u,a=pi([n,o],t.angle,e,i,s)||a}}if(!a)return{x:n,y:o,angle:t.angle,measure:null};const r="mi"===this.hass?.config?.unit_system?.length,l=(t,e)=>({x:e[0],y:e[1],text:ri(t/this._gridPitch*this._cellCm,r)});return{x:n,y:o,angle:t.angle,measure:{labels:[l(a.sideA,a.midA),l(a.sideB,a.midB)],guide:a.centered?{x:a.wallCenter[0],y:a.wallCenter[1],angle:t.angle}:null}}}_opPointerUp(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;const i=this._opDrag,s=i.moved;this._opMeasure=null,s&&i.dirty&&(this._recordGeometry(this._t("history.move_opening"),i.before),this._saveConfig()),s?window.setTimeout(()=>this._opDrag=null,0):this._opDrag=null}_opClick(t,e){"plan"===this._mode&&"resize"===this._tool||(t.stopPropagation(),this._opDrag?.moved||"plan"===this._mode&&this._editOpening(e))}_saveOpening(){const t=this._openingDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=this._geometrySnapshot(),n=this._spaceH,o=(e.openings||[]).find(e=>e.id===t.id),a={...o||{},id:t.id||"o"+Date.now().toString(36),type:t.type,x:t.x/P_,y:t.y/n,angle:t.angle,length:o&&!t.lengthTouched?o.length:this._cmToUnits(Math.max(20,t.lengthCm))/P_,...t.host?{host:{...t.host}}:{}};if(a.host){const t=ld(o,a)?rd(a,i.partitions,P_,this._cellCm,this._gridPitch):ad(a,i.partitions,P_,this._cellCm,this._gridPitch);if(!t.resolved){const e=i.partitions.find(t=>t.id===a.host.id);if("does-not-fit-jamb"===t.reason&&e){const t=nd(e,this._cellCm,this._gridPitch);this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(t/this._gridPitch*this._cellCm,this._imperial)}))}else this._showToast(this._t("opening.partition_orphan"));return}const s=(e.openings||[]).flatMap(t=>{if(!t.host||t.id===a.id)return[];const e=ad(t,i.partitions,P_,this._cellCm,this._gridPitch).resolved;return e?[e]:[]});if(function(t,e,i=1e-9){const s=t.length/(2*t.axis.length),n=t.t-s,o=t.t+s;return e.some(e=>{if(e.host.id!==t.host.id||e.opening.id===t.opening.id)return!1;const s=e.length/(2*e.axis.length);return Math.max(n,e.t-s)t.id===a.id);r>=0?e.openings[r]=a:e.openings.push(a),this._recordGeometry(this._t(t.id?"history.edit_opening":"history.add_opening"),s),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_deleteOpening(){const t=this._openingDialog,e=this._curSpaceCfg;if(!t?.id||!e?.openings)return;const i=this._geometrySnapshot();e.openings=e.openings.filter(e=>e.id!==t.id),this._recordGeometry(this._t("history.delete_opening"),i),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_contactCandidates(){const t=[];for(const e of Object.keys(this.hass.states)){if(!this._openingEntityAvailable(e))continue;const i=e.split(".")[0];if("binary_sensor"!==i&&"cover"!==i)continue;const s=this.hass.states[e],n=["door","window","opening","garage_door","garage"].includes(s?.attributes?.device_class||"");("cover"!==i||n)&&t.push([e,s?.attributes?.friendly_name||e,n?0:1])}return t.sort((t,e)=>t[2]-e[2]||t[1].localeCompare(e[1])).map(([t,e])=>({value:t,label:e}))}_lockCandidates(){return Object.keys(this.hass.states).filter(t=>t.startsWith("lock.")&&this._openingEntityAvailable(t)).map(t=>({value:t,label:this.hass.states[t]?.attributes?.friendly_name||t})).sort((t,e)=>t.label.localeCompare(e.label))}_mergeClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms,s=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!s?.id)return;const n=s.id;if(!this._mergeSel||this._mergeSel===n)return void(this._mergeSel=this._mergeSel===n?null:n);const o=i.find(t=>t.id===this._mergeSel),a=o?ci(o):null,r=ci(s),l=a&&r?function(t,e){if(!t||!e||t.length<3||e.length<3)return null;const i=si(Pi(t),Pi(e));if(1!==i.length)return null;if(1!==i[0].length)return null;const s=i[0][0].slice(0,-1).map(t=>[t[0],t[1]]);return s.length>=3?s:null}(a,r):null;if(!l)return this._showToast(this._t("toast.merge_not_adjacent")),void(this._mergeSel=null);this._mergeDialog={aId:this._mergeSel,bId:n,poly:l,pick:"a"},this._mergeSel=null}_commitMerge(){const t=this._mergeDialog,e=this._curSpaceCfg;if(!t||!e||!this._spaceModel())return;const i=this._geometrySnapshot(),s=this._spaceH,n="a"===t.pick?t.aId:t.bId,o="a"===t.pick?t.bId:t.aId,a=e.rooms.find(t=>t.id===n);a?(a.poly=t.poly.map(t=>[t[0]/P_,t[1]/s]),delete a.x,delete a.y,delete a.w,delete a.h,e.rooms=e.rooms.filter(t=>t.id!==o),this._commitOpenSpans(),this._recordGeometry(this._t("history.merge_rooms"),i),this._saveConfig(),this._mergeDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.rooms_merged",{name:a.name||""}))):this._mergeDialog=null}_splitClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms;if(!this._splitSel){const e=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!e?.id)return;return void(this._splitSel={roomId:e.id,pts:[]})}const s=i.find(t=>t.id===this._splitSel.roomId),n=s?ci(s):null;if(!s||!n)return void(this._splitSel=null);const o=.02*this._gridPitch,a=6*this._gridPitch,r=function(t,e){if(!e||e.length<2)return null;let i=null,s=1/0;for(let n=0;n=n)continue;n=_;const g=Math.sqrt(u),m=(i>0?Math.max(0,Math.min(g,Math.round(p*g/i)*i)):p*g)/g;s=[a+m*h,r+m*d]}return s}(r,n,this._gridPitch)||r,c=r&&l&&Math.hypot(r[0]-t[0],r[1]-t[1])<=a?l:null,h=!!c&&yi(c,n,o),d=this._splitSel.pts;if(!d.length)return h?void(this._splitSel={...this._splitSel,pts:[c]}):void this._showToast(this._t("toast.split_pick_wall"));if(!h){const e=this._snap(t);return bi(e,n,o)?void(this._splitSel={...this._splitSel,pts:[...d,e]}):void this._showToast(this._t("toast.split_pick_inside"))}const u=Ii(n,[...d,c],o);if(!u)return void this._showToast(this._t("toast.split_bad_cut"));this._resetRoomDialogFields();const[p,_]=u,g=Ti(p)>=Ti(_)?p:_,m=g===p?_:p;this._pendingSplit={roomId:s.id,mainPoly:g,newPoly:m},this._cursorPt=null,this._nameSel="",this._areaSel="",this._roomDialog=!0}get _contourClosed(){return this._path.length>=4&&this._samePt(this._path[0],this._path[this._path.length-1])&&(null!=this._closingWallCm||!this._activeDraftId)}_markupMove(t){if(!this._markup)return;const e=t.pointerType;if(e&&(this._boundaryPointerType=e),"column"===this._tool)return void(this._cursorPt=this._snap(this._svgPoint(t)));if("opening"===this._tool||"boundary"===this._tool||"wallthick"===this._tool)return void(this._cursorPt=this._svgPoint(t));const i="draw"===this._tool&&!this._contourClosed,s="split"===this._tool&&!!this._splitSel?.pts?.length;if(!i&&!s)return;const n=this._svgPoint(t);if(i){const e=this._resolvePlanDrawPoint(n,t.shiftKey);return this._planSnapHover={contextKey:e.contextKey,candidate:e.candidate},this._path.length?void(this._cursorPt=e.point):void this._syncPlanSnapActiveMarker(e.candidate)}this._cursorPt=this._snap(n)}get _openingPreview(){const t=this._openingPreset;if("opening"!==this._tool||!t||!this._cursorPt)return null;const e=this._cursorPt,i=this._openingHoverCandidate;if(i&&h_(i,[e[0],e[1]],t.revision,this._cfgEpoch))return i;if(this._openingAt(e))return this._openingHoverCandidate=null,null;const s=this._resolveOpeningPlacement(e);return this._openingHoverCandidate=s,s}get _opMeasureView(){return this._opMeasure||this._openingPreview?.measure||null}_saveRoom(){(this._areaSel||this._nameSel.trim())&&(this._wallFaceBatch?this._decideWallFace(!0):this._commitRoom())}_decideWallFace(t){const e=this._wallFaceBatch;if(!e)return;const i=e.candidates[e.index];if(!i)return;const s=t?{candidate:i,create:!0,name:this._nameSel.trim(),area:this._areaSel||null,settings:this._roomSettingsFromDialog()?JSON.parse(JSON.stringify(this._roomSettingsFromDialog())):null}:{candidate:i,create:!1},n=[...e.decisions,s],o=e.index+1;if(o"number"==typeof t&&Number.isFinite(t)&&t>=0?t:null,n=.02*this._gridPitch,o=this._spaceModel();if(!o)return _r;for(const e of this._planSnapGeometrySnapshot().value.segments){if("room"===e.sourceKind||Hs(t,[e.a[0],e.a[1],e.b[0],e.b[1]])>n)continue;if("partition"===e.sourceKind)return s(o.partitions.find(t=>t.id===e.sourceId)?.cm)??_r;const i=e.sourceId.lastIndexOf(":"),a=i>=0?e.sourceId.slice(0,i):e.sourceId,r=i>=0?Number(e.sourceId.slice(i+1)):-1;return s(o.room_drafts.find(t=>t.id===a)?.segments[r]?.cm)??_r}for(let o=0;o+1{this._showToast(this._t(t,e)),this._roomDialogCancel()},n=t.decisions.filter(t=>t.create),o=n.map(t=>t.candidate.ring),a=i.rooms;for(let t=0;ti.id!==e&&!!ci(i)&&Ci(o[t],ci(i)));if(i)return void s("toast.room_overlap",{name:i.name||""})}if((e.rooms||[]).length+n.length>400)return void s("toast.physical_limit");if(n.some(t=>t.candidate.split&&!e.rooms.some(e=>e.id===t.candidate.split.roomId)))return void s("toast.contour_cannot_close");const r=2e-4*this._gridPitch,l=new Map;for(let e=0;et.candidate.atomKeys)),i=n.some(t=>t.candidate.consumeAllActive);for(const s of Gd(this._wallGraphSources(t.activePath),r)){const t=s.sourceKeys.find(t=>l.has(t));!t||i||e.has(s.key)||c.push({a:s.a,b:s.b,cm:l.get(t)})}}else c.push(...Sd(t.activePath,t.activeCms,_r));if((e.partitions||[]).length+c.length>F_)return void s("toast.physical_limit");const h=this._geometrySnapshot(),d=n.some(t=>!!t.candidate.split),u=d?el(i.rooms,e.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,P_):null,p=d&&Array.isArray(e.walls)?e.walls:null;for(const t of n){const i=t.candidate.split;if(!i)continue;const n=e.rooms.find(t=>t.id===i.roomId);if(!n)return void s("toast.contour_cannot_close");n.poly=i.mainPoly.map(t=>[t[0]/P_,t[1]/this._spaceH]),delete n.x,delete n.y,delete n.w,delete n.h}const _=Date.now().toString(36),g=[];if(n.forEach((t,i)=>{const s=t.area?this.hass.areas[t.area]?.name:"",n={id:`r${_}-${i}`,name:t.name||s||this._t("room.default_name"),area:t.area||null,poly:t.candidate.ring.map(t=>[t[0]/P_,t[1]/this._spaceH]),...t.settings?{settings:JSON.parse(JSON.stringify(t.settings))}:{}};e.rooms.push(n),g.push({room:n,decision:t})}),t.activeDraftId&&Array.isArray(e.room_drafts)&&(e.room_drafts=e.room_drafts.filter(e=>e.id!==t.activeDraftId),e.room_drafts.length||delete e.room_drafts),c.length&&(e.partitions||=[],c.forEach((t,i)=>e.partitions.push({id:`partition-${_}-${i}`,a:[t.a[0]/P_,t.a[1]/P_],b:[t.b[0]/P_,t.b[1]/P_],cm:t.cm}))),d){this._commitOpenSpans();const t=this._normalizeWalls(u,this._openCuts());t.length?e.walls=t:p?.length?e.walls=p:delete e.walls}if(g.length){this._cfgEpoch++;const i=this._openCuts(),s=this._spaceModel();if(!s)return;let n=e.walls;for(const{room:e,decision:o}of g){const a=o.candidate.ring,r=this._wallSourceCmAt(a[0],t.activePath,t.activeCms);n=Er(n,s.rooms,e.id,r,this._wallKeyPitch,i,P_);for(const o of tl(s.rooms,n,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){if(o.roomId!==e.id||"outer"!==o.kind)continue;const i=[(o.a[0]+o.b[0])/2,(o.a[1]+o.b[1])/2];n=Ir(n,o.a,o.b,this._wallSourceCmAt(i,t.activePath,t.activeCms),this._wallKeyPitch,P_)}}const o=this._normalizeWalls(n,i);o.length?e.walls=o:delete e.walls}this._recordGeometry(this._t("history.wall_face_batch"),h),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._wallFaceBatch=null,this._roomDialog=!1,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices();const m=new Set(n.map(t=>t.area).filter(t=>!!t));if(m.size){const t={...this._layout};for(const e of this._devices){if(!m.has(e.area||"")||e.space!==this._space)continue;if(this._layout[e.id])continue;const i=this._defPos[e.id];i&&(t[e.id]={s:this._space,x:i.x/P_,y:i.y/P_},this._dirtyPos.add(e.id))}this._layout=t,this._persistLayout()}this._showToast(this._t(n.length?"toast.wall_rooms_saved":"toast.wall_chain_saved",{n:n.length}))}_commitRoom(){const t=this._curSpaceCfg,e=this._spaceModel();if(!t||!e)return;const i=this._geometrySnapshot(),s=this._spaceH,n=!!this._pendingSplit,o=n?el(e.rooms,t.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,P_):null,a=n&&Array.isArray(t.walls)?t.walls:null;let r;if(this._pendingSplit){const e=t.rooms.find(t=>t.id===this._pendingSplit.roomId);if(!e)return this._pendingSplit=null,this._splitSel=null,void(this._roomDialog=!1);e.poly=this._pendingSplit.mainPoly.map(t=>[t[0]/P_,t[1]/s]),delete e.x,delete e.y,delete e.w,delete e.h,r=this._pendingSplit.newPoly}else{if(!this._contourClosed)return;r=this._path.slice(0,-1)}const l=this._areaSel?this.hass.areas[this._areaSel]?.name:"",c={id:"r"+Date.now().toString(36),name:this._nameSel||l||this._t("room.default_name"),area:this._areaSel||null,poly:r.map(t=>[t[0]/P_,t[1]/s]),...this._roomSettingsFromDialog()?{settings:this._roomSettingsFromDialog()}:{}};if(t.rooms.push(c),!n&&this._activeDraftId&&Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),n){this._commitOpenSpans();const e=this._normalizeWalls(o,this._openCuts());e.length?t.walls=e:a?.length?t.walls=a:delete t.walls}if(!n){const e=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r],i=e[0]||this._drawWallCm;if(null!=i){this._cfgEpoch++;const s=this._openCuts(),n=this._spaceModel();if(!n)return;let o=Er(t.walls,n.rooms,c.id,i,this._wallKeyPitch,s,P_);for(const t of tl(n.rooms,o,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){if(t.roomId!==c.id||"outer"!==t.kind)continue;const s=[(t.a[0]+t.b[0])/2,(t.a[1]+t.b[1])/2],n=r.findIndex((t,e)=>{const i=r[(e+1)%r.length];return Hs(s,[t[0],t[1],i[0],i[1]])<=.02*this._gridPitch});n>=0&&(o=Ir(o,t.a,t.b,e[n]||i,this._wallKeyPitch,P_))}o=this._normalizeWalls(o,s),o.length?t.walls=o:delete t.walls}}this._recordGeometry(this._t(n?"history.split_room":"history.add_room"),i),this._saveConfig(),this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._pendingSplit=null,this._splitSel=null;const h=this._areaSel;this._areaSel="",this._nameSel="",this._roomDialog=!1,this._regSignature="",this._maybeRebuildDevices();let d=0;if(h){const t=P_,e={...this._layout};for(const i of this._devices){if(i.area!==h||i.space!==this._space)continue;if(d++,this._layout[i.id])continue;const s=this._defPos[i.id];s&&(e[i.id]={s:this._space,x:s.x/P_,y:s.y/t},this._dirtyPos.add(i.id))}this._layout=e,this._persistLayout()}const u=this._model.find(t=>t.id===this._space)?.rooms.length||0;this._showToast(h?this._t("toast.room_saved",{n:u,added:d}):this._t("toast.room_saved_no_area",{n:u}))}_cancelPath(){this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),this._roomDialog=!1,this._pendingSplit=null,this._wallFaceBatch=null,this._splitSel=null,this._mergeSel=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._clearOpeningPlacement(!0)}_resumeLastDraft(){const t=this._resumeDraftBySpace[this._space];if(!t)return;const e=this._spaceModel()?.room_drafts.find(e=>e.id===t);e?(this._activeDraftId=t,this._path=e.points.map(t=>[...t]),this._draftSegmentCms=e.segments.map(t=>t.cm),this._clearPlanSnapHover()):delete this._resumeDraftBySpace[this._space]}_roomDialogCancel(){if(this._roomDialog=!1,this._roomEditId)return this._roomEditId=null,this._nameSel="",void(this._areaSel="");if(this._wallFaceBatch){const t=this._wallFaceBatch;return this._wallFaceBatch=null,this._path=t.activePath.map(t=>[...t]),this._draftSegmentCms=[...t.activeCms],this._activeDraftId=t.activeDraftId,this._nameSel="",this._areaSel="",void this.requestUpdate()}if(this._pendingSplit)return this._pendingSplit=null,void(this._splitSel=null);this._undoPoint()}get _freeAreas(){const t=new Set;for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area&&t.add(i.area);for(const e of this._wallFaceBatch?.decisions||[])e.create&&e.area&&t.add(e.area);return Object.values(this.hass?.areas||{}).filter(e=>!t.has(e.area_id)).sort((t,e)=>(t.name||"").localeCompare(e.name||""))}_openMarkerDialog(t){if(this._vacAllCamerasFor=null,this._vacAllCameraCache=null,t&&this._ackNewDevice(t.id),this._norm)if(t){const e=t.marker,i=Object.prototype.hasOwnProperty.call(e||{},"is_light"),s=Object.prototype.hasOwnProperty.call(e||{},"light_entity"),n=Object.prototype.hasOwnProperty.call(e||{},"glow_color"),o=Object.prototype.hasOwnProperty.call(e||{},"value_badge"),a=Object.prototype.hasOwnProperty.call(e||{},"tap_action"),r=Object.prototype.hasOwnProperty.call(e||{},"toggle_entity"),l=ws(e?.glow_color),c=this._devicePresentation(t,!0).valueBadge,h=Lo(this._planHass,t,this._devices),d=Bo(this._planHass,t,h);this._markerDialog={devId:t.id,name:t.name,binding:"virtual"===t.bindingKind?"virtual":t.bindingKind+":"+t.bindingRef,bindingMode:"virtual"===t.bindingKind?"virtual":"ha",bindingOpen:!1,showEntities:"entity"===t.bindingKind&&!!this._fullRegistryHass.entities[t.bindingRef||""]?.device_id,bindingFilter:"",icon:t.marker?.icon||"",autoIcon:t.icon||"",display:Li(t.marker?.display),rippleColor:Rt(t.marker?.ripple_color,""),rippleSize:Number(t.marker?.ripple_size)>0?Number(t.marker.ripple_size):1.5,size:Number(t.marker?.size)>0?Number(t.marker.size):1,angle:Number(t.marker?.angle)||0,tapAction:Yh(t.marker?.tap_action,t.primary?.split(".")[0]),tapActionTouched:!1,originalHasTapAction:a,originalTapAction:t.marker?.tap_action,tapHintAnnouncement:"",toggleEntity:e?.toggle_entity||"",toggleEntityTouched:!1,originalHasToggleEntity:r,originalToggleEntity:e?.toggle_entity,tapTarget:t.marker?.tap_target||"",tapConfirm:!0===t.marker?.tap_confirm,runFilter:"",controls:Yn(t.marker?.binding,t.marker?.controls,t.entities),controlsFilter:"",lightRole:!0===e?.is_light?"always":!1===e?.is_light?"never":"auto",lightRoleTouched:!1,originalHasIsLight:i,originalIsLight:e?.is_light,lightEntity:e?.light_entity||"",lightEntityTouched:!1,originalHasLightEntity:s,originalLightEntity:e?.light_entity,glowMode:null!=l?.bri?"fixed":l?"color":"auto",glowColor:l?.c||this._fillColors.glow_light.c,glowBrightness:Math.max(1,Math.round(100*(l?.bri??1))),glowColorDrafted:!!l,glowBrightnessDrafted:null!=l?.bri,glowTouched:!1,originalHasGlowColor:n&&(!!l||null===e?.glow_color),originalGlowColor:l||(null===e?.glow_color?null:void 0),valueBadgeEnabled:o?!0===e?.value_badge?.enabled:!!c,valueBadgeSource:e?.value_badge?.source||c?.source||d,valueBadgePosition:e?.value_badge?.position||c?.position||"right",valueBadgeTouched:!1,originalHasValueBadge:o,originalValueBadge:e?.value_badge,useClimateTemp:!0===t.marker?.use_climate_temp,glowRadius:Number(t.marker?.glow_radius_cm)>0?String(this._imperial?Math.round(Number(t.marker.glow_radius_cm)/30.48*10)/10:Math.round(Number(t.marker.glow_radius_cm))/100):"",model:t.model||"",link:t.link||"",description:t.description||"",pdfs:[...t.pdfs||[]],room:t.marker?.room_id?t.space+"#@"+t.marker.room_id:t.space&&t.area?t.space+"#"+t.area:"",hideFromPlan:!0===t.marker?.hidden,busy:!1}}else this._markerDialog={name:"",binding:"virtual",bindingMode:"virtual",bindingOpen:!1,showEntities:!1,bindingFilter:"",icon:"",autoIcon:"",display:"badge",rippleColor:"",rippleSize:1.5,size:1,angle:0,tapAction:"info",tapActionTouched:!1,originalHasTapAction:!1,originalTapAction:void 0,tapHintAnnouncement:"",toggleEntity:"",toggleEntityTouched:!1,originalHasToggleEntity:!1,originalToggleEntity:void 0,tapTarget:"",tapConfirm:!1,runFilter:"",controls:[],controlsFilter:"",lightRole:"auto",lightRoleTouched:!1,originalHasIsLight:!1,originalIsLight:void 0,lightEntity:"",lightEntityTouched:!1,originalHasLightEntity:!1,originalLightEntity:void 0,glowMode:"auto",glowColor:this._fillColors.glow_light.c,glowBrightness:100,glowColorDrafted:!1,glowBrightnessDrafted:!1,glowTouched:!1,originalHasGlowColor:!1,originalGlowColor:void 0,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgePosition:"right",valueBadgeTouched:!1,originalHasValueBadge:!1,originalValueBadge:void 0,useClimateTemp:!1,glowRadius:"",model:"",link:"",description:"",pdfs:[],room:"",hideFromPlan:!1,busy:!1,uploadId:"up_"+Date.now().toString(36)+Math.random().toString(36).slice(2,6)};else this._showToast(this._t("toast.marker_needs_server"))}_runCandidates(){const t=[];for(const e of Ui)for(const[i,s]of Object.entries(this.hass.states))i.startsWith(e+".")&&this._planEntityAvailable(i)&&t.push({value:i,label:s?.attributes?.friendly_name||i,sub:this._t("run."+e)});return t.sort((t,e)=>t.sub.localeCompare(e.sub)||t.label.localeCompare(e.label))}_bindingCandidates(){const t=this._planHass,e=vo(this._markers),i=new Set(this._markers.filter(t=>t.removed).map(t=>t.binding)),s=new Set;for(const t of this._devices)t.id!==this._markerDialog?.devId&&("device"===t.bindingKind&&t.bindingRef&&s.add("device:"+t.bindingRef),"entity"===t.bindingKind&&t.bindingRef&&s.add("entity:"+t.bindingRef));const n=new Set;for(const t of this._devices)"device"===t.bindingKind&&t.name&&n.add(t.name.trim()+"|"+(t.area||""));const o=[];for(const e of Object.values(t.devices)){if("service"===e.entry_type)continue;const t="device:"+e.id;if(s.has(t))continue;const a=(e.name_by_user||e.name||e.id).trim();t!==this._markerDialog?.binding&&!i.has(t)&&n.has(a+"|"+(e.area_id||""))||o.push({value:t,label:a,sub:(e.model||this._t("marker.sub_device"))+("Group"===e.model?this._t("marker.sub_z2m_group"):"")})}const a=new Set(["group","template","derivative","min_max","threshold","integration","statistics","trend","utility_meter","tod","switch_as_x","schedule"]);for(const[n,r]of Object.entries(t.entities)){const l="entity:"+n;if(s.has(l))continue;if(yo(t,n,e)&&!i.has(l))continue;const c=a.has(r.platform),h="group"===r.platform;if(!c&&!h)continue;if(r.hidden&&!i.has(l))continue;const d=t.states[n];o.push({value:l,label:r.name||d?.attributes?.friendly_name||n,sub:n.split(".")[0]+" · "+("group"===r.platform?this._t("marker.sub_group"):this._t("marker.sub_helper"))})}if(this._markerDialog?.showEntities){const n=new Set(o.map(t=>t.value));for(const[a,r]of Object.entries(t.entities)){const l="entity:"+a;if(s.has(l)||n.has(l)||r.hidden&&!i.has(l))continue;if(yo(t,a,e)&&!i.has(l))continue;const c=t.states[a],h=r.name||c?.attributes?.friendly_name||a,d=r.device_id?t.devices[r.device_id]:null,u=d&&(d.name_by_user||d.name)||"";o.push({value:l,label:h,sub:a.split(".")[0]+" · "+this._t("marker.sub_entity")+(u?" · "+u:"")})}}const r=(this._markerDialog?.bindingFilter||"").toLowerCase().trim(),l=r?o.filter(t=>(t.label+" "+t.sub+" "+t.value).toLowerCase().includes(r)):o;return l.sort((t,e)=>t.label.localeCompare(e.label)),l.slice(0,200)}_physicalBodiesR(t=this._spaceModel()){if(!t)return[];const e=`${t.id}|${this._cfgEpoch}|${this._cellCm}|${this._gridPitch}`;if(this._physicalBodiesCache?.key===e)return this._physicalBodiesCache.all;const i=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t));return this._physicalBodiesCache={key:e,...i},i.all}_rawPhysicalBodiesR(t=this._spaceModel()){if(!t)return[];this._physicalBodiesR(t);const e=this._physicalBodiesCache;return e?[...e.drafts,...e.partitions,...e.columns]:[]}_cleanFloor(t,e,i=this._spaceModel()){if(!i)return{floor:e,geom:null,path:"",area:Ol([[[...e,e[0]]]])};const s=t.id||`#${i.rooms.indexOf(t)}`,n=`${i.id}|${this._cfgEpoch}|${s}`;if(!this._rszPreview){const t=v_(this._cleanFloorCache,n);if(t.hit)return t.value}const o=e.map(t=>t[0]),a=e.map(t=>t[1]),r=[Math.min(...o),Math.min(...a),Math.max(...o),Math.max(...a)],l=this._physicalBodiesR(i).filter(t=>{const e=t.map(t=>t[0]),i=t.map(t=>t[1]);return Math.max(...e)>=r[0]&&Math.min(...e)<=r[2]&&Math.max(...i)>=r[1]&&Math.min(...i)<=r[3]}),c=l.length?zl(e,l):null,h={floor:e,geom:c,path:c?Dl(c):"",area:Ol(c||[[[...e,e[0]]]])};return this._rszPreview||y_(this._cleanFloorCache,n,h,600),h}_autoIconForBinding(t){if("virtual"===t)return"mdi:map-marker";const[e,i]=t.split(":");if(!i)return"";const s=this._fullRegistryHass,n=this._bindingStatus(t),o="active"===n.kind?n.enabledEntityIds:n.allEntityIds;if("device"===e){const t=s.devices?.[i];if(!t)return"mdi:help-circle";const e=o;return e.some(t=>t.startsWith("lock."))?"mdi:lock":fo(s,t.name_by_user||t.name||"",t.model,e,this._iconRules)}if("entity"===e){const t=s.entities?.[i],e=this.hass.states?.[i],n=t?.name||e?.attributes?.friendly_name||i;return i.startsWith("lock.")?"mdi:lock":fo(s,n,"",[i],this._iconRules)}return""}_allRoomsFlat(){const t=[];for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area?t.push({value:e.id+"#"+i.area,label:(e.title||e.id)+" · "+i.name}):i.id&&t.push({value:e.id+"#@"+i.id,label:(e.title||e.id)+" · "+i.name+" · "+this._t("marker.subarea")});return t}_errText(t){if(!t)return this._t("err.unknown");if("string"==typeof t)return t;if("invalid_passage_fields"===t.code){const e=String(t.message||t.error||"").match(/space=([^;]*);\s*opening=([^;]*);\s*fields=([^;]*)/);if(e){const t=this._serverCfg?.spaces?.find(t=>String(t.id)===e[1]),i={contact:"opening.contact_label",lock:"opening.lock_label",invert:"opening.invert",flip_h:"opening.flip_h",flip_v:"opening.flip_v"},s=e[3].split(",").filter(Boolean).map(t=>i[t]?this._t(i[t]):t).join(", ");return this._t("opening.invalid_passage_fields",{room:t?.title||e[1],fields:s})}}if("invalid_partition_opening_jamb_margin"===t.code){const e=String(t.message||t.error||"").match(/margin_cm=([^;]*)/),i=e?Number(e[1]):NaN;if(Number.isFinite(i))return this._t("opening.partition_jamb_margin",{distance:ri(i,this._imperial)})}if(t.message)return t.message;if(t.error)return t.error;if(null!=t.code)return this._t("err.code",{code:t.code});try{return JSON.stringify(t)}catch{return String(t)}}_backupErrorText(t){const e=t?.code??t?.error;if("string"==typeof e){const t=`backup.error.${e}`,i=this._t(t);if(i!==t)return i}return this._errText(t)}async _pickMarkerFiles(t){const e=t.target,i=e.files?[...e.files]:[];if(e.value="",!i.length||!this._markerDialog)return;const s=this._markerDialog.uploadId||this._markerDialog.devId||"new",n=[];for(const t of i)try{const e=new FormData;e.append("marker_id",s),e.append("file",t,t.name);const i=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth("/api/houseplan/upload",{method:"POST",body:e}):await fetch("/api/houseplan/upload",{method:"POST",body:e,headers:this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}),o=await i.json().catch(()=>({}));if(!i.ok||o.error){const t={too_large:this._t("err.too_large",{mb:o.max_mb||50}),bad_ext:this._t("err.bad_ext"),unauthorized:this._t("err.unauthorized")};throw new Error(t[o.error]||o.error||"HTTP "+i.status)}n.push({name:o.name||t.name,url:o.url})}catch(e){this._showToast(this._t("toast.file_failed",{name:t.name,err:this._errText(e)}))}n.length&&this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:[...this._markerDialog.pdfs,...n]},this._showToast(this._t("toast.files_attached",{n:n.length})))}_removeMarkerPdf(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:this._markerDialog.pdfs.filter(e=>e.url!==t)})}_markerLightFields(t){const e={};if(t.lightRoleTouched?"always"===t.lightRole?e.is_light=!0:"never"===t.lightRole&&(e.is_light=!1):t.originalHasIsLight&&(e.is_light=t.originalIsLight??null),t.lightEntityTouched?t.lightEntity&&(e.light_entity=t.lightEntity):t.originalHasLightEntity&&(e.light_entity=t.originalLightEntity??null),t.glowTouched){if("auto"!==t.glowMode){const i={c:Rt(t.glowColor,this._fillColors.glow_light.c)};"fixed"===t.glowMode&&(i.bri=Math.max(.01,Math.min(1,Math.round(t.glowBrightness)/100))),e.glow_color=i}}else t.originalHasGlowColor&&(e.glow_color=t.originalGlowColor??null);return e}_markerTapActionFields(t){return t.tapActionTouched?{tap_action:t.tapAction||null}:t.originalHasTapAction?{tap_action:t.originalTapAction??null}:{}}_markerToggleEntityFields(t){return(e={touched:t.toggleEntityTouched,originalHas:t.originalHasToggleEntity,original:t.originalToggleEntity,value:t.toggleEntity}).touched?e.value?{toggle_entity:e.value}:{}:e.originalHas?{toggle_entity:e.original??null}:{};var e}async _saveMarker(){const t=this._markerDialog;if(!t||t.busy)return;const e=this._effectiveMarkerTapAction(t);if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return;if("virtual"===t.binding&&!t.name.trim())return void this._showToast(this._t("toast.virtual_name_required"));if("run"===e&&!t.tapTarget)return void this._showToast(this._t("toast.run_target_required"));if(t.valueBadgeTouched&&t.valueBadgeEnabled&&!t.valueBadgeSource)return void this._showToast(this._t("toast.value_badge_source_required"));if("ha"===t.bindingMode){const e=this._bindingStatus(t.binding),i=t.devId?this._markers.find(e=>e.id===t.devId):null,s=!i||i.binding!==t.binding;if("active"!==e.kind&&s)return void this._showToast(this._t("ha_disabled"===e.kind?"toast.ha_disabled_add":"toast.ha_binding_unverified"));if("ha_disabled"===e.kind&&!0===i?.hidden&&!t.hideFromPlan)return this._markerDialog={...t,hideFromPlan:!0},void this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device"))}const i=this._serverCfg;if(!i)return;const s=i.markers||[],n=Bs(t.room);let o=n?.space||null;const a=n?.area||null,r=n?.roomId||null,l=Fi(t.binding,t.devId,()=>"v_"+Date.now().toString(36)),c=t.devId,h=c?this._devices.find(t=>t.id===c):null,d=n?.space||h?.space||null,u=d?this._spaceModelById(d):this._spaceModel();if(!u)return;const p=u.id;"virtual"!==t.binding||o||(o=p),this._markerDialog={...t,busy:!0};try{const n="virtual"===t.binding?[]:s.filter(e=>e.removed&&e.binding===t.binding).map(t=>t.id),d=n.length>0,_=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),g=s.find(t=>t.id===l||t.id===c)?.vacuum||null,m={id:l,vacuum:g,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle?t.angle:null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===e&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:_.length?_:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=f_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:!!t.hideFromPlan};("virtual"===t.binding||t.room)&&(m.space=o,m.area=a,m.room_id=r);const f=h?.marker?.room_id??null,v=!!t.room&&null!=h&&(h.space!==o||h.area!==a||f!==r);let y=!1;const b=t.uploadId||c;if(b&&b!==l&&m.pdfs?.length)try{const t=await this.hass.callWS({type:"houseplan/files/migrate",from_id:b,to_id:l}),e=t?.mapping||{};m.pdfs=function(t,e,i,s){if(!e||!i||e===i)return t;const n="/files/"+e+"/",o="/files/"+i+"/";return t.map(t=>{if(!t.url.includes(n))return t;const e=t.url.split(n)[1]||"",[i,a]=[e.split("?")[0],e.includes("?")?"?"+e.split("?")[1]:""];if(s){const e=s[decodeURIComponent(i)]??s[i];return e?{...t,url:t.url.split(n+i)[0]+o+encodeURIComponent(e)+a}:t}return{...t,url:t.url.split(n).join(o)}})}(m.pdfs,b,l,e),y=Object.keys(e).length>0}catch(t){this._showToast(this._t("toast.files_migrate_failed",{err:this._errText(t)}))}i.markers=s,c&&c!==l&&(i.markers=function(t,e,i){if(!e||!i||e===i)return[...t];const s=`marker:${e}`,n=`marker:${i}`;return t.map(t=>{const e=Array.isArray(t.controls)?t.controls.map(t=>t===s?n:t):t.controls,i="derived_marker_state"===t.value_badge?.source?.kind&&t.value_badge.source.ref===s?{...t.value_badge,source:{...t.value_badge.source,ref:n}}:t.value_badge;return e===t.controls&&i===t.value_badge?t:{...t,controls:e,value_badge:i}})}(i.markers,c,l)),c&&c!==l&&"derived_marker_state"===m.value_badge?.source?.kind&&m.value_badge.source.ref===`marker:${c}`&&(m.value_badge.source={kind:"derived_marker_state",ref:`marker:${l}`}),i.markers=i.markers.filter(t=>t.id!==l&&t.id!==c&&("virtual"===m.binding||t.binding!==m.binding)),i.markers.push(m);let w=null;const k=c?this._layout[c]:null,x=k?{s:k.s||h?.space||this._space,x:k.x,y:k.y}:c&&h&&this._defPos[c]?this._normPos(h.space,this._defPos[c].x,this._defPos[c].y):null;if(!d&&x&&x.s===p)l===c&&this._layout[l]&&!v||(w={s:x.s,x:x.x,y:x.y},this._layout={...this._layout,[l]:w});else if(d||!this._layout[l]||v){let t=u.vb[0]+u.vb[2]/2,e=u.vb[1]+u.vb[3]/2;const i=r?u.rooms.find(t=>t.id===r):a?u.rooms.find(t=>t.area===a):void 0;i&&([t,e]=this._roomCenter(i)),w=this._normPos(p,t,e),this._layout={...this._layout,[l]:w}}await this._saveConfigNow(),w&&this._noteLayoutRev(await this.hass.callWS({type:"houseplan/layout/update",device_id:l,pos:w}));const $=new Set(n);c&&c!==l&&$.add(c),$.delete(l);for(const t of $)delete this._layout[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{});y&&b&&await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:b}).catch(()=>{}),this._markerDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_saved"))}catch(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteMarker(){const t=this._markerDialog;if(!t||t.busy||!t.devId)return;const e=t.devId?this._devices.find(e=>e.id===t.devId):null;if(!e)return;const i=t.name||this._t("device.fallback");if(!confirm(this._t("confirm.remove_marker",{name:i})))return;const s=this._serverCfg;s.markers=s.markers||[];const n=s.markers,o="virtual"===e.bindingKind?"virtual":e.bindingKind&&e.bindingRef?`${e.bindingKind}:${e.bindingRef}`:"";if(!o)return;const a=function(t,e,i,s){const n=new Set([e]),o=t.filter(t=>{const o=t.id===e||!s&&t.binding===i;return o&&n.add(t.id),!o});return{markers:s?o:[...o,{id:e,binding:i,removed:!0,hidden:!0}],cleanupIds:n}}(s.markers,e.id,o,"virtual"===e.bindingKind);var r,l;s.markers=(r=a.markers,l=a.cleanupIds,r.map(t=>{if(!Array.isArray(t.controls))return t;const e=t.controls.filter(t=>!("string"==typeof t&&t.startsWith("marker:")&&l.has(t.slice(7))));return e.length===t.controls.length?t:{...t,controls:e.length?e:null}}));const c=a.cleanupIds;this._markerDialog={...t,busy:!0};try{await this._saveConfigNow();for(const t of c){delete this._layout[t],delete this._defPos[t],this._dirtyPos.delete(t),this._sentPos.delete(t);const e=this._activityRt.get(t);e&&clearTimeout(e.timer),this._activityRt.delete(t),this._vacRt.delete(t),delete this._vacSrvTrails[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{}),await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:t}).catch(()=>{}),await this.hass.callWS({type:"houseplan/trail/delete",marker_id:t}).catch(()=>{})}this._markerDialog=null,this._infoCard?.id===e.id&&this._closeInfoCard(),this._selId===e.id&&(this._selId=null),this._drag?.id===e.id&&(this._drag=null),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_removed"))}catch(t){this._serverCfg===s&&(s.markers=n),this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}_normPos(t,e,i){return{s:t,x:e/P_,y:i/P_}}_openSpaceDialog(t,e){if(this._serverStorage&&this._serverCfg)if("edit"===t){const i=this._serverCfg.spaces.find(t=>t.id===e);if(!i)return;const s=ls(i),n=i.settings?.custom_fill&&"object"==typeof i.settings.custom_fill?as(i.settings.custom_fill):null,o="none"===s.fill?{...n||os,a:0}:n;this._spaceDialog={mode:t,spaceId:e,title:i.title,planUrl:i.plan_url||null,planFile:null,source:i.plan_url?"file":"draw",showBorders:s.showBorders,showNames:s.showNames,displayTouched:!0,hideDecor:s.hideDecor,hideOpenings:s.hideOpenings,roomColor:s.color,roomOpacity:s.opacity,fillMode:"none"===s.fill?"custom":s.fill,customFill:o,glowEnabled:s.glow,bgColor:s.bgColor,bgMode:"static"===i.settings?.bg_mode||"daynight"===i.settings?.bg_mode?i.settings.bg_mode:null,northDeg:Ya({},i.settings),sunRays:"boolean"==typeof i.settings?.sun_rays?i.settings.sun_rays:null,tempMin:s.tempMin,tempMax:s.tempMax,showLqi:s.showLqi??this._config?.show_signal??!0,cardFontScale:s.cardFontScale,labelTemp:s.labelTemp,labelHum:s.labelHum,labelLqi:s.labelLqi,labelLight:s.labelLight,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,busy:!1}}else this._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:{...os,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1};else this._showToast(this._t("toast.integration_missing"))}async _pickPlanFile(t){const e=t.target,i=e.files?.[0];if(!i||!this._spaceDialog)return;const s={"image/svg+xml":"svg","image/png":"png","image/jpeg":"jpg","image/webp":"webp"}[i.type]||(i.name.toLowerCase().endsWith(".svg")?"svg":"");if(!s)return void this._showToast(this._t("toast.plan_formats"));const n=new Uint8Array(await i.arrayBuffer());let o="";for(let t=0;t{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:1.414),e.onerror=()=>t(1.414),e.src=r});URL.revokeObjectURL(r),this._spaceDialog={...this._spaceDialog,planFile:{ext:s,b64:a,aspect:l,name:i.name}}}_useServerPlan(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let e=0;e<40;e++){const e=this._display(t);if(e){const i=await new Promise(t=>{const i=new Image;i.onload=()=>t(i.naturalWidth&&i.naturalHeight?i.naturalWidth/i.naturalHeight:0),i.onerror=()=>t(0),i.src=e}),s=this._spaceDialog;return s&&s.planUrl===t&&Number.isFinite(i)&&i>0?(this._spaceDialog={...s,savedAspect:i},i):0}if(await new Promise(t=>setTimeout(t,150)),this._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){if(confirm(this._t("confirm.delete_plan",{name:t})))try{await this.hass.callWS({type:"houseplan/plans/delete",name:t});const e=this._spaceDialog;e?.saved&&(this._spaceDialog={...e,saved:e.saved.filter(e=>e.name!==t)})}catch(t){this._showToast(this._t("toast.plan_delete_failed",{err:this._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return j`
${this._t("space.loading")}
`;const e=t.saved||[];if(!e.length)return j`
${this._t("space.no_saved")}
`;return j`
${e.map(e=>j`
@@ -5187,7 +5204,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`)} -
`}async _saveSpaceDialog(){const t=this._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this._showToast(this._t("toast.plan_required"));const e="create"===t.mode&&0===(this._serverCfg?.spaces.length||0);this._spaceDialog={...t,busy:!0};try{const i="create"===t.mode?"s"+Date.now().toString(36):t.spaceId;let s=null;if("file"===t.source&&t.planFile){s={url:(await this.hass.callWS({type:"houseplan/plan/set",space_id:i,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let n=t.savedAspect||null;!s&&"file"===t.source&&t.planUrl&&!n&&this._aspectJob&&(n=await this._aspectJob||null);const o=this._serverCfg;let a;if("create"===t.mode)a={id:i,title:t.title.trim(),plan_url:null,view_box:[0,0,1,1],rooms:[]},o.spaces.push(a);else{if(a=o.spaces.find(t=>t.id===i),!a)throw new Error("space "+i+" is gone from the config");a.title=t.title.trim()}s?(a.plan_url=s.url,a.plan_aspect=s.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==a.plan_url&&(a.plan_url=t.planUrl,a.plan_aspect=n),"draw"===t.source&&(a.plan_url=null,a.plan_aspect=null,delete a.plan_x,delete a.plan_y,delete a.plan_scale,delete a.plan_scale_x,delete a.plan_scale_y,delete a.plan_angle),a.settings={...a.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):20,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):25,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},a.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(__,t.cellCm)):5,await this._saveConfigNow(),this._spaceDialog=null,"create"===t.mode&&this._commitSpace(a.id),this._regSignature="",this._maybeRebuildDevices(),this._importQueue.length?this._openNextImport():e||this._importTotal>0?(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._showToast(this._t(e&&!this._importTotal?"toast.space_added_onboard":"import.done"))):(this._showToast("create"===t.mode?this._t("toast.space_added"):this._t("toast.space_saved")),"create"===t.mode&&("plan"!==this._mode?this._setMode("plan"):(this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._saveNav())))}catch(t){this._spaceDialog&&(this._spaceDialog={...this._spaceDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteSpace(){const t=this._spaceDialog;if(!t||"edit"!==t.mode)return;const e=this._serverCfg.spaces.find(e=>e.id===t.spaceId);if(confirm(this._t("confirm.delete_space",{title:e.title}))){this._serverCfg.spaces=this._serverCfg.spaces.filter(e=>e.id!==t.spaceId);try{await this._saveConfigNow(),this._spaceDialog=null,this._space===t.spaceId&&this._commitSpace(this._serverCfg.spaces[0]?.id||""),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.space_deleted"))}catch(t){this._showToast(this._t("toast.delete_failed",{err:this._errText(t)}))}}}async _saveConfigNow(){this._cfgEpoch++;try{await this._writeConfig()}catch(t){throw"conflict"===t?.code&&await this._reloadConfigOnly(),t}}_startImport(){const t=this._importDialog;if(!t)return;const e=t.floors.filter(t=>t.checked).map(t=>t.name);this._importDialog=null,e.length?(this._importQueue=e,this._importTotal=e.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this._importQueue.shift();void 0!==t&&(this._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1})}_skipImport(){this._spaceDialog=null,this._importQueue.length?this._openNextImport():this._importTotal>0&&this._model.length&&(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._showToast(this._t("import.done")))}_renderImportDialog(){const t=this._importDialog,e=t.floors.filter(t=>t.checked).length;return j``}async _saveSpaceDialog(){const t=this._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this._showToast(this._t("toast.plan_required"));const e="create"===t.mode&&0===(this._serverCfg?.spaces.length||0);this._spaceDialog={...t,busy:!0};try{const i="create"===t.mode?"s"+Date.now().toString(36):t.spaceId;let s=null;if("file"===t.source&&t.planFile){s={url:(await this.hass.callWS({type:"houseplan/plan/set",space_id:i,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let n=t.savedAspect||null;!s&&"file"===t.source&&t.planUrl&&!n&&this._aspectJob&&(n=await this._aspectJob||null);const o=this._serverCfg;let a;if("create"===t.mode)a={id:i,title:t.title.trim(),plan_url:null,view_box:[0,0,1,1],rooms:[]},o.spaces.push(a);else{if(a=o.spaces.find(t=>t.id===i),!a)throw new Error("space "+i+" is gone from the config");a.title=t.title.trim()}s?(a.plan_url=s.url,a.plan_aspect=s.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==a.plan_url&&(a.plan_url=t.planUrl,a.plan_aspect=n),"draw"===t.source&&(a.plan_url=null,a.plan_aspect=null,delete a.plan_x,delete a.plan_y,delete a.plan_scale,delete a.plan_scale_x,delete a.plan_scale_y,delete a.plan_angle),a.settings={...a.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):20,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):25,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},a.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(g_,t.cellCm)):5,await this._saveConfigNow(),this._spaceDialog=null,"create"===t.mode&&this._commitSpace(a.id),this._regSignature="",this._maybeRebuildDevices(),this._importQueue.length?this._openNextImport():e||this._importTotal>0?(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._showToast(this._t(e&&!this._importTotal?"toast.space_added_onboard":"import.done"))):(this._showToast("create"===t.mode?this._t("toast.space_added"):this._t("toast.space_saved")),"create"===t.mode&&("plan"!==this._mode?this._setMode("plan"):(this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._saveNav())))}catch(t){this._spaceDialog&&(this._spaceDialog={...this._spaceDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteSpace(){const t=this._spaceDialog;if(!t||"edit"!==t.mode)return;const e=this._serverCfg.spaces.find(e=>e.id===t.spaceId);if(confirm(this._t("confirm.delete_space",{title:e.title}))){this._serverCfg.spaces=this._serverCfg.spaces.filter(e=>e.id!==t.spaceId);try{await this._saveConfigNow(),this._spaceDialog=null,this._space===t.spaceId&&this._commitSpace(this._serverCfg.spaces[0]?.id||""),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.space_deleted"))}catch(t){this._showToast(this._t("toast.delete_failed",{err:this._errText(t)}))}}}async _saveConfigNow(){this._cfgEpoch++;try{await this._writeConfig()}catch(t){throw"conflict"===t?.code&&await this._reloadConfigOnly(),t}}_startImport(){const t=this._importDialog;if(!t)return;const e=t.floors.filter(t=>t.checked).map(t=>t.name);this._importDialog=null,e.length?(this._importQueue=e,this._importTotal=e.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this._importQueue.shift();void 0!==t&&(this._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1})}_skipImport(){this._spaceDialog=null,this._importQueue.length?this._openNextImport():this._importTotal>0&&this._model.length&&(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._showToast(this._t("import.done")))}_renderImportDialog(){const t=this._importDialog,e=t.floors.filter(t=>t.checked).length;return j`this._importDialog=null}>
${this._t("import.hint")}
@@ -5207,7 +5224,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t("import.start",{n:e})}
-
`}_sunGlobal(){const t=this._settingsDialog;return t?{...this._settings,north_deg:t.northDeg??void 0,bg_mode:t.bgMode,sun_rays:t.sunRays}:this._settings}_sunSpace(){const t=this._spaceDialog,e=this._curSpaceCfg?.settings||{};return t&&"edit"===t.mode&&t.spaceId===this._space?{...e,north_deg:t.northDeg??void 0,bg_mode:t.bgMode??void 0,sun_rays:t.sunRays??void 0}:e}_effNorth(){return Ya(this._sunGlobal(),this._sunSpace())}_effBgMode(){return Xa(this._sunGlobal(),this._sunSpace())}_dayCycleState(t=new Date){return(this._modeTransitionVisual?.viewWeight??("view"===this._mode?1:0))<=0||"daynight"!==this._effBgMode()?null:Ha(this._renderPlanHass,t)}_syncDayCycleClock(){const t=this._dayCycleState();this._dayCycleClockKey=t?La(t):"";const e="clock"===t?.source&&"hidden"!==this.ownerDocument.visibilityState&&this.isConnected;e&&!this._dayCycleTimer?this._dayCycleTimer=window.setInterval(this._dayCycleTick,3e4):!e&&this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_dayCycleVisibility(t){"hidden"!==t.kind?(this._dayCycleTick(),this._syncDayCycleClock()):this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_effSunRays(){return Ja(this._sunGlobal(),this._sunSpace())}_sunNow(){return null!==this._effNorth()?Za(this._renderPlanHass):null}_renderSunRays(t){const e=W``,i=this._modeTransitionVisual?.viewWeight??0;if(this._editing&&i<=0||!this._effSunRays())return this._sunFadeReset(),e;const s=this._effNorth(),n=null!==s?Za(this._renderPlanHass):null;if(!n||n.elevation<=0)return this._sunFadeReset(),e;if(o=n.elevation,Number(o)>=3)this._sunOutTimer&&(clearTimeout(this._sunOutTimer),this._sunOutTimer=0),this._sunOut=!1,this._sunShown=!0;else{if(!this._sunShown)return e;this._sunOut||(this._sunOut=!0,this._sunOutTimer=window.setTimeout(()=>{this._sunOutTimer=0,this._sunShown=!1,this._sunOut=!1,this.requestUpdate()},2e3))}var o;const a=`${t.id}|${n.azimuth}|${n.elevation}|${s}|${this._cfgEpoch}`;if(!this._sunRaysCache||this._sunRaysCache.key!==a){const e=t.rooms.map(t=>({id:t.id||"",poly:ci(t)})).filter(t=>!!t.id&&!!t.poly),i=this._openingsR.filter(t=>"window"===t.type&&!t.host).map(t=>({id:t.id,x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=this._spaceWalls,r=this._openPairs().flatMap(t=>t.segs),l=this._openingWallIndexFor(t,r).value,c={},h={};if(o.length){for(const i of e){const e=ol(t.rooms,i.id,o,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);e&&(c[i.id]=e)}for(const t of i){const e=bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length});e.cm>0&&(h[t.id]=vr(e.cm,this._cellCm,this._gridPitch))}}let d=Va(e,i,n.azimuth,n.elevation,s,o.length?c:void 0,o.length?h:void 0);const u=this._physicalBodiesR(t);u.length&&(d=d.map(t=>{const e=function(t,e,i){return i>0?t.map(t=>function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<=2)return e;const i=(t,e,i)=>(e[0]-t[0])*(i[1]-t[1])-(e[1]-t[1])*(i[0]-t[0]),s=[];for(const t of e){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],t)<=0;)s.pop();s.push(t)}const n=[];for(let t=e.length-1;t>=0;t--){const s=e[t];for(;n.length>=2&&i(n[n.length-2],n[n.length-1],s)<=0;)n.pop();n.push(s)}return s.slice(0,-1).concat(n.slice(0,-1))}([...t,...t.map(t=>[t[0]+e[0]*i,t[1]+e[1]*i])])).filter(t=>t.length>=3):t}(u,t.dir,t.len),i=t.polys.map(t=>zl(t,e));return{...t,paths:i.map(Dl).filter(Boolean),polys:i.flatMap(Nl)}}).filter(t=>t.paths?.length||t.polys.length)),this._sunRaysCache={key:a,rays:d,rims:d.map(t=>function(t,e=1e-4){const[i,s]=t.dir,n=-s,o=i,a=[];for(const r of[t.a,t.b]){const l=[];for(const a of t.polys)for(let t=0;te)continue;if(Math.abs((h[0]-r[0])*n+(h[1]-r[1])*o)>e)continue;const d=(c[0]-r[0])*i+(c[1]-r[1])*s,u=(h[0]-r[0])*i+(h[1]-r[1])*s;Math.abs(u-d)<=e||l.push(dt[0]-e[0]);const c=[];for(const t of l){const i=c[c.length-1];i&&t[0]<=i[1]+e?i[1]=Math.max(i[1],t[1]):c.push([t[0],t[1]])}for(const[t,e]of c)a.push([[r[0]+i*t,r[1]+s*t],[r[0]+i*e,r[1]+s*e]])}return a}(t))}}const r=this._sunRaysCache.rays,l=this._sunRaysCache.rims;if(!r.length)return e;const c=(h=function(t){const e=Math.min(90,Math.max(-90,Number(t)||0));let i=Ba[Ba.length-1][1];for(let t=1;t +
`}_sunGlobal(){const t=this._settingsDialog;return t?{...this._settings,north_deg:t.northDeg??void 0,bg_mode:t.bgMode,sun_rays:t.sunRays}:this._settings}_sunSpace(){const t=this._spaceDialog,e=this._curSpaceCfg?.settings||{};return t&&"edit"===t.mode&&t.spaceId===this._space?{...e,north_deg:t.northDeg??void 0,bg_mode:t.bgMode??void 0,sun_rays:t.sunRays??void 0}:e}_effNorth(){return Ya(this._sunGlobal(),this._sunSpace())}_effBgMode(){return Xa(this._sunGlobal(),this._sunSpace())}_dayCycleState(t=new Date){return(this._modeTransitionVisual?.viewWeight??("view"===this._mode?1:0))<=0||"daynight"!==this._effBgMode()?null:Na(this._renderPlanHass,t)}_syncDayCycleClock(){const t=this._dayCycleState();this._dayCycleClockKey=t?La(t):"";const e="clock"===t?.source&&"hidden"!==this.ownerDocument.visibilityState&&this.isConnected;e&&!this._dayCycleTimer?this._dayCycleTimer=window.setInterval(this._dayCycleTick,3e4):!e&&this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_dayCycleVisibility(t){"hidden"!==t.kind?(this._dayCycleTick(),this._syncDayCycleClock()):this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_effSunRays(){return Ja(this._sunGlobal(),this._sunSpace())}_sunNow(){return null!==this._effNorth()?Za(this._renderPlanHass):null}_renderSunRays(t){const e=W``,i=this._modeTransitionVisual?.viewWeight??0;if(this._editing&&i<=0||!this._effSunRays())return this._sunFadeReset(),e;const s=this._effNorth(),n=null!==s?Za(this._renderPlanHass):null;if(!n||n.elevation<=0)return this._sunFadeReset(),e;if(o=n.elevation,Number(o)>=3)this._sunOutTimer&&(clearTimeout(this._sunOutTimer),this._sunOutTimer=0),this._sunOut=!1,this._sunShown=!0;else{if(!this._sunShown)return e;this._sunOut||(this._sunOut=!0,this._sunOutTimer=window.setTimeout(()=>{this._sunOutTimer=0,this._sunShown=!1,this._sunOut=!1,this.requestUpdate()},2e3))}var o;const a=`${t.id}|${n.azimuth}|${n.elevation}|${s}|${this._cfgEpoch}`;if(!this._sunRaysCache||this._sunRaysCache.key!==a){const e=t.rooms.map(t=>({id:t.id||"",poly:ci(t)})).filter(t=>!!t.id&&!!t.poly),i=this._openingsR.filter(t=>"window"===t.type&&!t.host).map(t=>({id:t.id,x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=this._spaceWalls,r=this._openPairs().flatMap(t=>t.segs),l=this._openingWallIndexFor(t,r).value,c={},h={};if(o.length){for(const i of e){const e=ol(t.rooms,i.id,o,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);e&&(c[i.id]=e)}for(const t of i){const e=bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length});e.cm>0&&(h[t.id]=vr(e.cm,this._cellCm,this._gridPitch))}}let d=Va(e,i,n.azimuth,n.elevation,s,o.length?c:void 0,o.length?h:void 0);const u=this._physicalBodiesR(t);u.length&&(d=d.map(t=>{const e=function(t,e,i){return i>0?t.map(t=>function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<=2)return e;const i=(t,e,i)=>(e[0]-t[0])*(i[1]-t[1])-(e[1]-t[1])*(i[0]-t[0]),s=[];for(const t of e){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],t)<=0;)s.pop();s.push(t)}const n=[];for(let t=e.length-1;t>=0;t--){const s=e[t];for(;n.length>=2&&i(n[n.length-2],n[n.length-1],s)<=0;)n.pop();n.push(s)}return s.slice(0,-1).concat(n.slice(0,-1))}([...t,...t.map(t=>[t[0]+e[0]*i,t[1]+e[1]*i])])).filter(t=>t.length>=3):t}(u,t.dir,t.len),i=t.polys.map(t=>zl(t,e));return{...t,paths:i.map(Dl).filter(Boolean),polys:i.flatMap(Hl)}}).filter(t=>t.paths?.length||t.polys.length)),this._sunRaysCache={key:a,rays:d,rims:d.map(t=>function(t,e=1e-4){const[i,s]=t.dir,n=-s,o=i,a=[];for(const r of[t.a,t.b]){const l=[];for(const a of t.polys)for(let t=0;te)continue;if(Math.abs((h[0]-r[0])*n+(h[1]-r[1])*o)>e)continue;const d=(c[0]-r[0])*i+(c[1]-r[1])*s,u=(h[0]-r[0])*i+(h[1]-r[1])*s;Math.abs(u-d)<=e||l.push(dt[0]-e[0]);const c=[];for(const t of l){const i=c[c.length-1];i&&t[0]<=i[1]+e?i[1]=Math.max(i[1],t[1]):c.push([t[0],t[1]])}for(const[t,e]of c)a.push([[r[0]+i*t,r[1]+s*t],[r[0]+i*e,r[1]+s*e]])}return a}(t))}}const r=this._sunRaysCache.rays,l=this._sunRaysCache.rims;if(!r.length)return e;const c=(h=function(t){const e=Math.min(90,Math.max(-90,Number(t)||0));let i=Ba[Ba.length-1][1];for(let t=1;t ${r.map((t,e)=>{const i=(t.a[0]+t.b[0])/2,s=(t.a[1]+t.b[1])/2,n=i+t.normal[0]*t.depth,o=s+t.normal[1]*t.depth;return W` ${d.map(([t,e])=>W`${this._t("gs.north_letter")} ${null===t?"—":t+"°"} - `}_stageBg(t){const e=this._settingsDialog,i=this._spaceDialog,s=e?e.bgColor||"":cs(this._settings,{bgColor:null});return(i&&"edit"===i.mode&&i.spaceId===this._space?i.bgColor||"":t.bgColor||"")||s}_stageBgHex(){const t=this._stageEl;if(t){const e=getComputedStyle(t).backgroundColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e)return"#"+e.slice(1,4).map(t=>(+t).toString(16).padStart(2,"0")).join("")}return"#111111"}async _runAlignToGrid(){const t=this._alignDialog;if(t&&!t.busy&&this._serverCfg){this._clearGeometryGesture(),this._alignDialog={...t,busy:!0};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain;const e=await this.hass.callWS({type:"houseplan/plan/optimize",config:t.config,layout:t.layout,expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});this._serverCfg=t.config,this._layout=t.layout,this._geometryHistory.clear(),this._cfgRev=e?.config_rev??this._cfgRev+1,this._layoutRev=e?.layout_rev??this._layoutRev+1,this._canOptimizeUndo=!!e?.can_undo,this._undoKind=e?.can_undo?"optimize":null,this._dirtyPos.clear(),this._sentPos.clear(),this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this._alignDialog=null,this.requestUpdate(),this._showToast(this._t("gs.align_done",{n:String(t.report.moved),m:String(t.report.migrated+t.report.canonicalized+t.report.wallsMerged+t.report.spansMerged)}))}catch(t){this._alignDialog&&(this._alignDialog={...this._alignDialog,busy:!1}),"conflict"===t?.code&&await Promise.all([this._reloadConfigOnly(!0),this._reloadLayoutOnly()]),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}async _undoPlanOptimization(){if(!this._canOptimizeUndo||this._optimizeUndoBusy)return;const t=this._undoKind;this._clearGeometryGesture(),this._optimizeUndoBusy=!0,this.requestUpdate();try{await this.hass.callWS({type:"houseplan/plan/optimize_undo",expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});const[e,i]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._serverCfg=e?.config||this._serverCfg,this._cfgRev=e?.rev??this._cfgRev,this._layout=i?.layout||this._layout,this._geometryHistory.clear(),this._layoutRev=i?.rev??this._layoutRev,this._canOptimizeUndo=!1,this._undoKind=null,this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this.requestUpdate(),this._showToast(this._t("import"===t?"backup.import_undone":"gs.optimize_undone"))}catch(t){this._canOptimizeUndo=!1,this._undoKind=null,this._showToast(this._t("toast.error",{err:this._errText(t)}))}finally{this._optimizeUndoBusy=!1,this.requestUpdate()}}async _runBackupExport(){const t=this._backupExportDialog;if(t&&!t.busy){this._backupExportDialog={...t,busy:!0,error:""};try{const e=await this.hass.callWS({type:"houseplan/export/create",kind:t.kind,space_id:"space"===t.kind?this._space:void 0,..."space"===t.kind&&t.planOnly?{plan_only:!0}:{},card_version:h_}),i=new Blob([JSON.stringify(e.document,null,2)+"\n"],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(i),n=document.createElement("a");n.href=s,n.download=e.filename||`houseplan-${t.kind}.json`,n.style.display="none",document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0),this._backupExportDialog=null,this._showToast(this._t("backup.export_done"))}catch(t){this._backupExportDialog&&(this._backupExportDialog={...this._backupExportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _pickBackupImport(t){const e=t.target,i=e.files?.[0];if(e.value="",i){this._settingsDialog=null,this._backupImportDialog={filename:i.name,size:i.size,token:"",preview:null,expectedConfigRev:this._cfgRev,expectedLayoutRev:this._layoutRev,duplicatePolicy:"skip",confirmMissing:!1,busy:!0,error:""};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain,this._persistLayout.pending()&&this._persistLayout.flush();const t="/api/houseplan/import/preview?duplicate_policy=skip",e={method:"POST",body:i,headers:{"content-type":"application/json"}},s=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth(t,e):await fetch(t,{...e,headers:{...e.headers,...this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}}),n=await s.json().catch(()=>({}));if(!s.ok||n.error)throw Object.assign(new Error(n.message||n.error||`HTTP ${s.status}`),{code:n.error});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,token:n.token,preview:n.preview,expectedConfigRev:n.expected_config_rev,expectedLayoutRev:n.expected_layout_rev,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _setBackupDuplicatePolicy(t){const e=this._backupImportDialog;if(e&&!e.busy&&e.token&&t!==e.duplicatePolicy){this._backupImportDialog={...e,duplicatePolicy:t,busy:!0,error:""};try{const i=await this.hass.callWS({type:"houseplan/import/revalidate",token:e.token,duplicate_policy:t});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,preview:{...e.preview,...i.preview},expectedConfigRev:i.expected_config_rev,expectedLayoutRev:i.expected_layout_rev,confirmMissing:!1,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,duplicatePolicy:e.duplicatePolicy,preview:e.preview,confirmMissing:e.confirmMissing,busy:!1,error:this._backupErrorText(t)})}}}async _applyBackupImport(){const t=this._backupImportDialog;if(!t||t.busy||!t.token||!t.preview)return;if(t.preview.confirmation_required&&!t.confirmMissing)return;this._backupImportDialog={...t,busy:!0,error:""};const e=this._space;try{const i=await this.hass.callWS({type:"houseplan/import/apply",token:t.token,expected_config_rev:t.expectedConfigRev,expected_layout_rev:t.expectedLayoutRev,duplicate_policy:t.duplicatePolicy,confirm_missing_content:t.confirmMissing}),[s,n]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._adoptStructuralResponses(s,n),this._geometryHistory.clear(),this._dirtyPos.clear(),this._sentPos.clear(),this._defPos={},this._cfgEpoch++,this._modelCache=null,this._frame=null,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotConfigEpoch=-1,this._regSignature="",this._signer.invalidate(this.hass),this._resign(),this._maybeRebuildDevices();const o=this._serverCfg?.spaces||[],a="space"===i.kind&&i.space_id?i.space_id:o.some(t=>t.id===e)?e:o[0]?.id||this._space;this._hasFixedFloor?this._adoptInitialSpace(this._model,!0):this._commitSpace(a),this._backupImportDialog=null,this._cacheSnapshot(),this.requestUpdate();const r="space"===i.kind?t.preview.counts:i.counts;this._showToast(this._t("space"===i.kind?"backup.space_done":"backup.full_done",{spaces:String(r?.spaces||0),rooms:String(r?.rooms||0),markers:String(r?.markers||0)}))}catch(t){if("conflict"===t?.code&&this._backupImportDialog?.token)try{const t=this._backupImportDialog,e=await this.hass.callWS({type:"houseplan/import/revalidate",token:t.token,duplicate_policy:t.duplicatePolicy});return void(this._backupImportDialog={...t,preview:{...t.preview,...e.preview},expectedConfigRev:e.expected_config_rev,expectedLayoutRev:e.expected_layout_rev,confirmMissing:!1,busy:!1,error:this._t("backup.revalidated")})}catch(e){t=e}this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}_renderBackupExportDialog(){const t=this._backupExportDialog,e=(this._serverCfg?.spaces||[]).find(t=>t.id===this._space);return j``}_stageBg(t){const e=this._settingsDialog,i=this._spaceDialog,s=e?e.bgColor||"":cs(this._settings,{bgColor:null});return(i&&"edit"===i.mode&&i.spaceId===this._space?i.bgColor||"":t.bgColor||"")||s}_stageBgHex(){const t=this._stageEl;if(t){const e=getComputedStyle(t).backgroundColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e)return"#"+e.slice(1,4).map(t=>(+t).toString(16).padStart(2,"0")).join("")}return"#111111"}async _runAlignToGrid(){const t=this._alignDialog;if(t&&!t.busy&&this._serverCfg){this._clearGeometryGesture(),this._alignDialog={...t,busy:!0};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain;const e=await this.hass.callWS({type:"houseplan/plan/optimize",config:t.config,layout:t.layout,expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});this._serverCfg=t.config,this._layout=t.layout,this._geometryHistory.clear(),this._cfgRev=e?.config_rev??this._cfgRev+1,this._layoutRev=e?.layout_rev??this._layoutRev+1,this._canOptimizeUndo=!!e?.can_undo,this._undoKind=e?.can_undo?"optimize":null,this._dirtyPos.clear(),this._sentPos.clear(),this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this._alignDialog=null,this.requestUpdate(),this._showToast(this._t("gs.align_done",{n:String(t.report.moved),m:String(t.report.migrated+t.report.canonicalized+t.report.wallsMerged+t.report.spansMerged)}))}catch(t){this._alignDialog&&(this._alignDialog={...this._alignDialog,busy:!1}),"conflict"===t?.code&&await Promise.all([this._reloadConfigOnly(!0),this._reloadLayoutOnly()]),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}async _undoPlanOptimization(){if(!this._canOptimizeUndo||this._optimizeUndoBusy)return;const t=this._undoKind;this._clearGeometryGesture(),this._optimizeUndoBusy=!0,this.requestUpdate();try{await this.hass.callWS({type:"houseplan/plan/optimize_undo",expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});const[e,i]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._serverCfg=e?.config||this._serverCfg,this._cfgRev=e?.rev??this._cfgRev,this._layout=i?.layout||this._layout,this._geometryHistory.clear(),this._layoutRev=i?.rev??this._layoutRev,this._canOptimizeUndo=!1,this._undoKind=null,this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this.requestUpdate(),this._showToast(this._t("import"===t?"backup.import_undone":"gs.optimize_undone"))}catch(t){this._canOptimizeUndo=!1,this._undoKind=null,this._showToast(this._t("toast.error",{err:this._errText(t)}))}finally{this._optimizeUndoBusy=!1,this.requestUpdate()}}async _runBackupExport(){const t=this._backupExportDialog;if(t&&!t.busy){this._backupExportDialog={...t,busy:!0,error:""};try{const e=await this.hass.callWS({type:"houseplan/export/create",kind:t.kind,space_id:"space"===t.kind?this._space:void 0,..."space"===t.kind&&t.planOnly?{plan_only:!0}:{},card_version:d_}),i=new Blob([JSON.stringify(e.document,null,2)+"\n"],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(i),n=document.createElement("a");n.href=s,n.download=e.filename||`houseplan-${t.kind}.json`,n.style.display="none",document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0),this._backupExportDialog=null,this._showToast(this._t("backup.export_done"))}catch(t){this._backupExportDialog&&(this._backupExportDialog={...this._backupExportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _pickBackupImport(t){const e=t.target,i=e.files?.[0];if(e.value="",i){this._settingsDialog=null,this._backupImportDialog={filename:i.name,size:i.size,token:"",preview:null,expectedConfigRev:this._cfgRev,expectedLayoutRev:this._layoutRev,duplicatePolicy:"skip",confirmMissing:!1,busy:!0,error:""};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain,this._persistLayout.pending()&&this._persistLayout.flush();const t="/api/houseplan/import/preview?duplicate_policy=skip",e={method:"POST",body:i,headers:{"content-type":"application/json"}},s=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth(t,e):await fetch(t,{...e,headers:{...e.headers,...this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}}),n=await s.json().catch(()=>({}));if(!s.ok||n.error)throw Object.assign(new Error(n.message||n.error||`HTTP ${s.status}`),{code:n.error});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,token:n.token,preview:n.preview,expectedConfigRev:n.expected_config_rev,expectedLayoutRev:n.expected_layout_rev,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _setBackupDuplicatePolicy(t){const e=this._backupImportDialog;if(e&&!e.busy&&e.token&&t!==e.duplicatePolicy){this._backupImportDialog={...e,duplicatePolicy:t,busy:!0,error:""};try{const i=await this.hass.callWS({type:"houseplan/import/revalidate",token:e.token,duplicate_policy:t});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,preview:{...e.preview,...i.preview},expectedConfigRev:i.expected_config_rev,expectedLayoutRev:i.expected_layout_rev,confirmMissing:!1,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,duplicatePolicy:e.duplicatePolicy,preview:e.preview,confirmMissing:e.confirmMissing,busy:!1,error:this._backupErrorText(t)})}}}async _applyBackupImport(){const t=this._backupImportDialog;if(!t||t.busy||!t.token||!t.preview)return;if(t.preview.confirmation_required&&!t.confirmMissing)return;this._backupImportDialog={...t,busy:!0,error:""};const e=this._space;try{const i=await this.hass.callWS({type:"houseplan/import/apply",token:t.token,expected_config_rev:t.expectedConfigRev,expected_layout_rev:t.expectedLayoutRev,duplicate_policy:t.duplicatePolicy,confirm_missing_content:t.confirmMissing}),[s,n]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._adoptStructuralResponses(s,n),this._geometryHistory.clear(),this._dirtyPos.clear(),this._sentPos.clear(),this._defPos={},this._cfgEpoch++,this._modelCache=null,this._frame=null,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotConfigEpoch=-1,this._regSignature="",this._signer.invalidate(this.hass),this._resign(),this._maybeRebuildDevices();const o=this._serverCfg?.spaces||[],a="space"===i.kind&&i.space_id?i.space_id:o.some(t=>t.id===e)?e:o[0]?.id||this._space;this._hasFixedFloor?this._adoptInitialSpace(this._model,!0):this._commitSpace(a),this._backupImportDialog=null,this._cacheSnapshot(),this.requestUpdate();const r="space"===i.kind?t.preview.counts:i.counts;this._showToast(this._t("space"===i.kind?"backup.space_done":"backup.full_done",{spaces:String(r?.spaces||0),rooms:String(r?.rooms||0),markers:String(r?.markers||0)}))}catch(t){if("conflict"===t?.code&&this._backupImportDialog?.token)try{const t=this._backupImportDialog,e=await this.hass.callWS({type:"houseplan/import/revalidate",token:t.token,duplicate_policy:t.duplicatePolicy});return void(this._backupImportDialog={...t,preview:{...t.preview,...e.preview},expectedConfigRev:e.expected_config_rev,expectedLayoutRev:e.expected_layout_rev,confirmMissing:!1,busy:!1,error:this._t("backup.revalidated")})}catch(e){t=e}this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}_renderBackupExportDialog(){const t=this._backupExportDialog,e=(this._serverCfg?.spaces||[]).find(t=>t.id===this._space);return j`this._backupExportDialog=null}>
${this._t("backup.export_hint")}
@@ -5334,12 +5351,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 .pickerLabels=${this._colorPickerLabels} .color=${i.c} .opacity=${i.a} .showOpacity=${!0} @hp-color-opacity-change=${e=>{this._setFillColor(t,{c:e.detail.color,a:e.detail.opacity})}}> -
`}get _glowRadiusCm(){const t=Number(this._settings.glow_radius_cm);return Number.isFinite(t)&&t>0?t:300}get _imperial(){return"mi"===this.hass?.config?.unit_system?.length}get _glowRadiusPlaceholder(){const t=this._glowRadiusCm;return this._imperial?String(Math.round(t/30.48*10)/10):String(t/100)}_glowTransition(t,e){let i=this._glowRenderedSources.get(t);if(e){const e=this._glowFadeTimers.get(t);if(null!=e&&(clearTimeout(e),this._glowFadeTimers.delete(t)),null==i){this._suspendGlowFeatherForTransition(),i=++this._glowSourceSeq,this._glowRenderedSources.set(t,i),this._glowEnteringSources.add(t);const e=requestAnimationFrame(()=>{this._glowEnterRafs.get(t)===e&&(this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),this.isConnected&&this.requestUpdate())});this._glowEnterRafs.set(t,e)}return{domId:i,entering:this._glowEnteringSources.has(t),leaving:!1}}if(null==i)return null;const s=this._glowEnterRafs.get(t);if(null!=s&&cancelAnimationFrame(s),this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),!this._glowFadeTimers.has(t)){this._suspendGlowFeatherForTransition();const e=window.setTimeout(()=>{this._glowFadeTimers.get(t)===e&&(this._glowFadeTimers.delete(t),this._glowRenderedSources.delete(t),this._glowLastAppearance.delete(t),this.isConnected&&this.requestUpdate())},534);this._glowFadeTimers.set(t,e)}return{domId:i,entering:!1,leaving:!0}}_suspendGlowFeatherForTransition(){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;this._glowFeatherSuspendUntil=Math.max(this._glowFeatherSuspendUntil,Date.now()+500),clearTimeout(this._glowFeatherResumeTimer);const t=Math.max(0,this._glowFeatherSuspendUntil-Date.now())+17,e=()=>{this._glowFeatherResumeTimer=0,Date.now()t.segs),s=[...i],n=Math.max(this._cmToUnits(10),.5*this._gridPitch),o=t=>e.some(e=>this._pointInRoom(t,e.r)),a=this._openingsR.filter(t=>{if("door"!==(e=String(t.type))&&"gate"!==e&&"passage"!==e)return!1;var e;const i=t.angle*Math.PI/180,s=-Math.sin(i),a=Math.cos(i);return o([t.rx+s*n,t.ry+a*n])&&o([t.rx-s*n,t.ry-a*n])}),r=this._roomWallOpeningInputs(a,t);for(const t of r){const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,n=Math.sin(e)*t.length/2;s.push([t.x-i,t.y-n,t.x+i,t.y+n])}const l=new Set(a.filter(t=>t.partitionHost).map(t=>t.id)),c=[t.id,this._cfgEpoch,this._cellCm,this._gridPitch,[...l].sort().join(",")].join("|");this._lightPhysicalBodiesCache?.key!==c&&(this._lightPhysicalBodiesCache={key:c,all:Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t,t=>l.has(t.id))).all});const h=this._lightPhysicalBodiesCache.all;let d=2166136261;const u=t=>{d^=Math.round(64*(Number.isFinite(t)?t:0)),d=Math.imul(d,16777619)>>>0},p=this._spaceWalls;u(this._cellCm),u(this._gridPitch),u(this._wallKeyPitch);for(const{poly:t}of e){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of s)for(const e of t)u(e);for(const t of h){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of p)u(t.cm),u(t.a?.[0]??0),u(t.a?.[1]??0),u(t.b?.[0]??0),u(t.b?.[1]??0);const _=d.toString(36),g=`${t.id}|${_}`;if(this._lightBarrierCache?.key===g)return this._lightBarrierCache.value;const m=.02*this._gridPitch,f=[],v=p.length||h.length?ul(t.rooms,p,i,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,h):null;if(v)for(const t of function(t){const e=[];for(const i of t||[])for(const t of i||[])t?.length>=4&&e.push(t.slice(0,-1).map(t=>[t[0],t[1]]));return e}(v.geom))f.push(...Yd(t));else for(const t of h)f.push(...Yd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Yd(t))f.push(e);const y={occluders:Kd(f),floor:e.map(t=>t.poly),fingerprint:_,masonryGeometry:v?.geom||[],opaqueBodies:h};return this._lightBarrierCache={key:g,value:y},y}_renderGlowLayer(t,e){const i=this._fillColors,s=this._glowRadiusCm/this._cellCm*this._gridPitch,n=t.rooms.map(t=>({r:t,poly:ci(t)})).filter(t=>!!t.poly),o=n.filter(({r:t})=>Fs(e.glow,t));if(!o.length)return this._forgetGlowSpace(t.id),W``;const{occluders:a,floor:r,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=ro(this._renderPlanHass,this._renderDevices,null,this._virtualLights).filter(e=>e.device.space===t.id),u=new Map;for(const t of d){if(!t.device.id)continue;const e=u.get(t.device.id)||[];e.push(t),u.set(t.device.id,e)}const p=[],_=new Set;for(const e of this._renderDevices){if(e.space!==t.id)continue;const n=lo(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=xs(n.passive?{state:n.on?"on":"off",attributes:{}}:this._renderPlanHass.states[n.eid],e.marker?.glow_color,i.glow_light.c),g=Number(e.marker?.glow_radius_cm),m=Number.isFinite(g)&&g>0?g/this._cellCm*this._gridPitch:s,f=this._pos(e);if(Ll([f.x,f.y],c,h)){this._forgetGlowSource(o);continue}const v=this._glowTransition(o,!!d);if(!v)continue;d&&this._glowLastAppearance.set(o,{c:d.c,alpha:$s(d.bri,i.glow_light.a)});const y=this._glowLastAppearance.get(o);if(!y)continue;let b=null;const w=`${t.id}|${l}|${f.x.toFixed(4)},${f.y.toFixed(4)}|${m.toFixed(4)}`,k=f_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Zd([f.x,f.y],m,a,96);b={lit:t.length>=3?El([t],r):[]},v_(this._glowClipCache,w,b,256)}p.push({key:o,sourceEid:n.eid,domId:v.domId,entering:v.entering,leaving:v.leaving,pos:f,c:y.c,alpha:y.alpha,geometry:b,r:m})}const g=`${t.id}|`;for(const t of this._glowRenderedSources.keys())t.startsWith(g)&&!_.has(t)&&this._forgetGlowSource(t);if(!p.length)return W``;const m=this._spaceWalls,f=o.length===n.length?[]:this._openPairs().flatMap(t=>t.segs),v=o.length===n.length?null:o.map(({r:e,poly:i})=>{const s=m.length&&e.id&&ol(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||i,o=this._cleanFloor(e,s,t).path,a=Di(s,n.filter(t=>t.r!==e).map(t=>t.poly)),r=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||r(s),...a.map(r)].join(" ")}),y=this._viewOr(this._baseVb()),b=this._stageEl?.clientWidth&&y.w?this._stageEl.clientWidth/y.w:1,w=1/(b>0?b:1),k=!this._pinchStart&&!this._panStart&&Date.now()>=this._glowFeatherSuspendUntil;(null==this._glowFeatherUnits||k)&&(this._glowFeatherUnits=w);const x=this._glowFeatherUnits??w,$=4*x,S=p.reduce((t,e)=>({x:Math.min(t.x,e.pos.x-e.r-$),y:Math.min(t.y,e.pos.y-e.r-$),maxX:Math.max(t.maxX,e.pos.x+e.r+$),maxY:Math.max(t.maxY,e.pos.y+e.r+$),w:0,h:0}),{x:1/0,y:1/0,maxX:-1/0,maxY:-1/0,w:0,h:0});return S.w=S.maxX-S.x,S.h=S.maxY-S.y,W` + `}get _glowRadiusCm(){const t=Number(this._settings.glow_radius_cm);return Number.isFinite(t)&&t>0?t:300}get _imperial(){return"mi"===this.hass?.config?.unit_system?.length}get _glowRadiusPlaceholder(){const t=this._glowRadiusCm;return this._imperial?String(Math.round(t/30.48*10)/10):String(t/100)}_glowTransition(t,e){let i=this._glowRenderedSources.get(t);if(e){const e=this._glowFadeTimers.get(t);if(null!=e&&(clearTimeout(e),this._glowFadeTimers.delete(t)),null==i){this._suspendGlowFeatherForTransition(),i=++this._glowSourceSeq,this._glowRenderedSources.set(t,i),this._glowEnteringSources.add(t);const e=requestAnimationFrame(()=>{this._glowEnterRafs.get(t)===e&&(this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),this.isConnected&&this.requestUpdate())});this._glowEnterRafs.set(t,e)}return{domId:i,entering:this._glowEnteringSources.has(t),leaving:!1}}if(null==i)return null;const s=this._glowEnterRafs.get(t);if(null!=s&&cancelAnimationFrame(s),this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),!this._glowFadeTimers.has(t)){this._suspendGlowFeatherForTransition();const e=window.setTimeout(()=>{this._glowFadeTimers.get(t)===e&&(this._glowFadeTimers.delete(t),this._glowRenderedSources.delete(t),this._glowLastAppearance.delete(t),this.isConnected&&this.requestUpdate())},534);this._glowFadeTimers.set(t,e)}return{domId:i,entering:!1,leaving:!0}}_suspendGlowFeatherForTransition(){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;this._glowFeatherSuspendUntil=Math.max(this._glowFeatherSuspendUntil,Date.now()+500),clearTimeout(this._glowFeatherResumeTimer);const t=Math.max(0,this._glowFeatherSuspendUntil-Date.now())+17,e=()=>{this._glowFeatherResumeTimer=0,Date.now()t.segs),s=[...i],n=Math.max(this._cmToUnits(10),.5*this._gridPitch),o=t=>e.some(e=>this._pointInRoom(t,e.r)),a=this._openingsR.filter(t=>{if("door"!==(e=String(t.type))&&"gate"!==e&&"passage"!==e)return!1;var e;const i=t.angle*Math.PI/180,s=-Math.sin(i),a=Math.cos(i);return o([t.rx+s*n,t.ry+a*n])&&o([t.rx-s*n,t.ry-a*n])}),r=this._roomWallOpeningInputs(a,t);for(const t of r){const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,n=Math.sin(e)*t.length/2;s.push([t.x-i,t.y-n,t.x+i,t.y+n])}const l=new Set(a.filter(t=>t.partitionHost).map(t=>t.id)),c=[t.id,this._cfgEpoch,this._cellCm,this._gridPitch,[...l].sort().join(",")].join("|");this._lightPhysicalBodiesCache?.key!==c&&(this._lightPhysicalBodiesCache={key:c,all:Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t,t=>l.has(t.id))).all});const h=this._lightPhysicalBodiesCache.all;let d=2166136261;const u=t=>{d^=Math.round(64*(Number.isFinite(t)?t:0)),d=Math.imul(d,16777619)>>>0},p=this._spaceWalls;u(this._cellCm),u(this._gridPitch),u(this._wallKeyPitch);for(const{poly:t}of e){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of s)for(const e of t)u(e);for(const t of h){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of p)u(t.cm),u(t.a?.[0]??0),u(t.a?.[1]??0),u(t.b?.[0]??0),u(t.b?.[1]??0);const _=d.toString(36),g=`${t.id}|${_}`;if(this._lightBarrierCache?.key===g)return this._lightBarrierCache.value;const m=.02*this._gridPitch,f=[],v=p.length||h.length?ul(t.rooms,p,i,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,h):null;if(v)for(const t of function(t){const e=[];for(const i of t||[])for(const t of i||[])t?.length>=4&&e.push(t.slice(0,-1).map(t=>[t[0],t[1]]));return e}(v.geom))f.push(...Yd(t));else for(const t of h)f.push(...Yd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Yd(t))f.push(e);const y={occluders:Kd(f),floor:e.map(t=>t.poly),fingerprint:_,masonryGeometry:v?.geom||[],opaqueBodies:h};return this._lightBarrierCache={key:g,value:y},y}_renderGlowLayer(t,e){const i=this._fillColors,s=this._glowRadiusCm/this._cellCm*this._gridPitch,n=t.rooms.map(t=>({r:t,poly:ci(t)})).filter(t=>!!t.poly),o=n.filter(({r:t})=>Fs(e.glow,t));if(!o.length)return this._forgetGlowSpace(t.id),W``;const{occluders:a,floor:r,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=ro(this._renderPlanHass,this._renderDevices,null,this._virtualLights).filter(e=>e.device.space===t.id),u=new Map;for(const t of d){if(!t.device.id)continue;const e=u.get(t.device.id)||[];e.push(t),u.set(t.device.id,e)}const p=[],_=new Set;for(const e of this._renderDevices){if(e.space!==t.id)continue;const n=lo(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=xs(n.passive?{state:n.on?"on":"off",attributes:{}}:this._renderPlanHass.states[n.eid],e.marker?.glow_color,i.glow_light.c),g=Number(e.marker?.glow_radius_cm),m=Number.isFinite(g)&&g>0?g/this._cellCm*this._gridPitch:s,f=this._pos(e);if(Ll([f.x,f.y],c,h)){this._forgetGlowSource(o);continue}const v=this._glowTransition(o,!!d);if(!v)continue;d&&this._glowLastAppearance.set(o,{c:d.c,alpha:$s(d.bri,i.glow_light.a)});const y=this._glowLastAppearance.get(o);if(!y)continue;let b=null;const w=`${t.id}|${l}|${f.x.toFixed(4)},${f.y.toFixed(4)}|${m.toFixed(4)}`,k=v_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Zd([f.x,f.y],m,a,96);b={lit:t.length>=3?El([t],r):[]},y_(this._glowClipCache,w,b,256)}p.push({key:o,sourceEid:n.eid,domId:v.domId,entering:v.entering,leaving:v.leaving,pos:f,c:y.c,alpha:y.alpha,geometry:b,r:m})}const g=`${t.id}|`;for(const t of this._glowRenderedSources.keys())t.startsWith(g)&&!_.has(t)&&this._forgetGlowSource(t);if(!p.length)return W``;const m=this._spaceWalls,f=o.length===n.length?[]:this._openPairs().flatMap(t=>t.segs),v=o.length===n.length?null:o.map(({r:e,poly:i})=>{const s=m.length&&e.id&&ol(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||i,o=this._cleanFloor(e,s,t).path,a=Di(s,n.filter(t=>t.r!==e).map(t=>t.poly)),r=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||r(s),...a.map(r)].join(" ")}),y=this._viewOr(this._baseVb()),b=this._stageEl?.clientWidth&&y.w?this._stageEl.clientWidth/y.w:1,w=1/(b>0?b:1),k=!this._pinchStart&&!this._panStart&&Date.now()>=this._glowFeatherSuspendUntil;(null==this._glowFeatherUnits||k)&&(this._glowFeatherUnits=w);const x=this._glowFeatherUnits??w,$=4*x,S=p.reduce((t,e)=>({x:Math.min(t.x,e.pos.x-e.r-$),y:Math.min(t.y,e.pos.y-e.r-$),maxX:Math.max(t.maxX,e.pos.x+e.r+$),maxY:Math.max(t.maxY,e.pos.y+e.r+$),w:0,h:0}),{x:1/0,y:1/0,maxX:-1/0,maxY:-1/0,w:0,h:0});return S.w=S.maxX-S.x,S.h=S.maxY-S.y,W` ${Mt(p,t=>t.key,t=>{const e=t.domId,i=t.geometry;return W` ${""} - ${P_.map(([e,i])=>W` + ${R_.map(([e,i])=>W` `)} @@ -5418,7 +5435,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t("gs.glow_radius")} {const e=m_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> + @input=${t=>{const e=f_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> ${this._imperial?this._t("gs.unit_ft"):this._t("gs.unit_m")} @@ -5493,7 +5510,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G} -
${this._t("gs.about_version",{v:h_})}
+
${this._t("gs.about_version",{v:d_})}
${this._t("gs.about_github")} @@ -5550,7 +5567,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${t.busy?"…":this._t("btn.save")} -
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(C_,JSON.stringify(this._kioskScale))}catch{}this.requestUpdate()}_renderKioskDialog(){const t=this._kioskScale,e=(e,i)=>j` +
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(D_,JSON.stringify(this._kioskScale))}catch{}this.requestUpdate()}_renderKioskDialog(){const t=this._kioskScale,e=(e,i)=>j`
${this._rangeInput(50,300,5,Math.round(100*t[e]),t=>this._saveKioskScale({[e]:t/100}))} ${Math.round(100*t[e])}% @@ -5607,7 +5624,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._spaceDialog?this._renderSpaceDialog():G} ${this._importDialog?this._renderImportDialog():G} ${this._toast?j``:G} - `;const s=this._spaceModel();if(!s)return G;const n="valid"===i.kind?[s]:t,o=s.vb,a=this._effectiveProjection();this._renderProjection=a,this._labs.active.length&&function(t){Rp||Op(t);const e=Pp,i=e.active.join(",");if(!i||i===Ip)return;Ip=i;const s=new Map(wp.map(t=>[t.id,t])),n=e.active.map(t=>{const e=s.get(t);return`${t} (#${e.issue}, expires ${e.expires})`}).join(", ");console.info(`HOUSEPLAN LABS: ${n}`)}(h_);const r="iso"===a,l="devices"===this._mode&&this._showAll,c=this._renderDevices.filter(t=>t.space===s.id&&(!t.hidden||l)),h=this._renderDeviceSnapshot,d=this._spaceDisplayForRender(),u=r?this._isoDecorationLayers(d):null,p=u?this._isoOpeningPanels(u):[],_=this._resolvedRoomFills(s,d),g=this._resolvedGlowBase(s,d,_),m=d.showLqi??this._config.show_signal??!0,f=this._config.icon_size??2.5,v=f>8?2.5:f,y=this._viewOr(this._baseVb()),b=this._floorView(y),w=this._editing?"":this._stageBg(d),k=this._opMeasureView,x=this._decorMeasure,$=this._bdLive,S=this._furnLive,M="view"===this._mode?this._editorChromeMode:this._mode,C=this._roomHoverPaths(s),D=s.bg?this._display(s.bg.href):"",T=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,P=this._modeTransitionVisual,R=this._dayCycleState(),A=P?.viewWeight??("view"===this._mode?1:0),I=this._modeTransition.state?.from.presentedMode,F=!this._markup||!!P&&("view"===P.presentedMode||"devices"===P.presentedMode||"view"===I||"devices"===I),E=P?.stageColor||w,z=P?.sceneBrightness??1;return j` + `;const s=this._spaceModel();if(!s)return G;const n="valid"===i.kind?[s]:t,o=s.vb,a=this._effectiveProjection();this._renderProjection=a,this._labs.active.length&&function(t){Ap||Hp(t);const e=Rp,i=e.active.join(",");if(!i||i===Fp)return;Fp=i;const s=new Map(kp.map(t=>[t.id,t])),n=e.active.map(t=>{const e=s.get(t);return`${t} (#${e.issue}, expires ${e.expires})`}).join(", ");console.info(`HOUSEPLAN LABS: ${n}`)}(d_);const r="iso"===a,l="devices"===this._mode&&this._showAll,c=this._renderDevices.filter(t=>t.space===s.id&&(!t.hidden||l)),h=this._renderDeviceSnapshot,d=this._spaceDisplayForRender(),u=r?this._isoDecorationLayers(d):null,p=u?this._isoOpeningPanels(u):[],_=this._resolvedRoomFills(s,d),g=this._resolvedGlowBase(s,d,_),m=d.showLqi??this._config.show_signal??!0,f=this._config.icon_size??2.5,v=f>8?2.5:f,y=this._viewOr(this._baseVb()),b=this._floorView(y),w=this._editing?"":this._stageBg(d),k=this._opMeasureView,x=this._decorMeasure,$=this._bdLive,S=this._furnLive,M="view"===this._mode?this._editorChromeMode:this._mode,C=this._roomHoverPaths(s),D=s.bg?this._display(s.bg.href):"",T=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,P=this._modeTransitionVisual,R=this._dayCycleState(),A=P?.viewWeight??("view"===this._mode?1:0),I=this._modeTransition.state?.from.presentedMode,F=!this._markup||!!P&&("view"===P.presentedMode||"devices"===P.presentedMode||"view"===I||"devices"===I),E=P?.stageColor||w,z=P?.sceneBrightness??1;return j`
@@ -5710,7 +5729,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 viewBox=${u?.structural?`${y.x} ${y.y} ${y.w} ${y.h}`:`${b.x} ${b.y} ${b.w} ${b.h}`} preserveAspectRatio=${u?.structural||!r?"xMidYMid meet":"none"}> + transform=${u?.structural?Wp():G}> ${""} ${this._wallHatchDefs(d.color)}${W`${this._paperShapes(s.rooms).map(t=>"path"in t?W``:"poly"in t?W``:W``)}`} ${this._editing?this._renderMarkupDefs(o):G} @@ -5724,30 +5743,30 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 preserveAspectRatio="none" />`:G} ${""} ${d.hideDecor&&"decor"!==this._mode?G:this._renderDecorLayer()} - ${(()=>{const t=this._openPairs(),e=new Map,i=t=>(e.has(t)||e.set(t,ci(t)),e.get(t));return s.rooms.filter(t=>t.area||"view"===this._mode||this._markup||d.showBorders).map(e=>{let n="room "+(s.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||e.id!==this._mergeSel&&e.id!==this._splitSel?.roomId||(n+=" picked");let o="";const a=Is(d.fill,e);if(!this._markup&&(d.showBorders||"none"!==a)){n+=" styled";const t=[];t.push(`--room-stroke:${d.color}`,`--room-stroke-op:${d.showBorders?d.opacity:0}`);const i=_.byRoom.get(e)||null;i?(n+=" filled",t.push(`--room-fill:${i.color}`,`--room-fill-op:${i.opacity}`)):t.push("--room-fill:transparent","--room-fill-op:0"),o=t.join(";")}let r;const l=t=>{"view"===this._mode&&(void 0===r&&(r=this._roomArea(e)),this._showTip(t,e.name||this._t("room.unnamed"),r?this._t("tip.area",{value:r}):"",m?this._roomLqi(e.area):null,this._roomTemp(e),this._roomHum(e)))},c=this._markup&&(e.id===this._mergeSel||e.id===this._splitSel?.roomId),h=e.id&&!c?t.filter(t=>t.a.id===e.id||t.b.id===e.id).flatMap(t=>t.segs):[],u=c?[]:this._thickWallCuts(),p=h.concat(u);p.length&&(n+=" noedge");const g=i(e),f=this._spaceWalls,v=f.length&&e.id&&g&&ol(s.rooms,e.id,f,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||g,y=v?Di(v,(b=e,s.rooms.filter(t=>t!==b).map(i).filter(Boolean))):[];var b;const w=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",k=v?this._cleanFloor(e,v,s).path:"",x=e.id||G,$=e.area||G,S=k&&v?W`{const t=this._openPairs(),e=new Map,i=t=>(e.has(t)||e.set(t,ci(t)),e.get(t));return s.rooms.filter(t=>t.area||"view"===this._mode||this._markup||d.showBorders).map(e=>{let n="room "+(s.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||e.id!==this._mergeSel&&e.id!==this._splitSel?.roomId||(n+=" picked");let o="";const a=Is(d.fill,e);if(!this._markup&&(d.showBorders||"none"!==a)){n+=" styled";const t=[];t.push(`--room-stroke:${d.color}`,`--room-stroke-op:${d.showBorders?d.opacity:0}`);const i=_.byRoom.get(e)||null;i?(n+=" filled",t.push(`--room-fill:${i.color}`,`--room-fill-op:${i.opacity}`)):t.push("--room-fill:transparent","--room-fill-op:0"),o=t.join(";")}let r;const l=t=>{"view"===this._mode&&(void 0===r&&(r=this._roomArea(e)),this._showTip(t,e.name||this._t("room.unnamed"),r?this._t("tip.area",{value:r}):"",m?this._roomLqi(e.area):null,this._roomTemp(e),this._roomHum(e)))},c=this._markup&&(e.id===this._mergeSel||e.id===this._splitSel?.roomId),h=e.id&&!c?t.filter(t=>t.a.id===e.id||t.b.id===e.id).flatMap(t=>t.segs):[],u=c?[]:this._thickWallCuts(),p=h.concat(u);p.length&&(n+=" noedge");const g=i(e),f=this._spaceWalls,v=f.length&&e.id&&g&&ol(s.rooms,e.id,f,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||g,y=v?Di(v,(b=e,s.rooms.filter(t=>t!==b).map(i).filter(Boolean))):[];var b;const w=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",k=v?this._cleanFloor(e,v,s).path:"",x=e.id||G,$=e.area||G,S=k&&v?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:y.length&&v?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:y.length&&v?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:v&&v!==g?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:v&&v!==g?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:e.poly?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:e.poly?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`,M=p.length&&g?Ds(g,p,.02*this._gridPitch):null,C=M?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`,M=p.length&&g?Ds(g,p,.02*this._gridPitch):null,C=M?W``:G;return W`${S}${C}`})})()} ${this._renderRoomHoverFill(C)} @@ -5895,7 +5914,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G} ${this._toast?j``:G} - `}_vacCandidateStatus(t,e,i=this._planHass){const s=this._bindingStatus("entity:"+t);if("ha_disabled"===s.kind)return"disabled";if("orphaned"===s.kind)return"missing";if("unverified"===s.kind)return"unverified";const n=i?.states?.[t];return"unavailable"===n?.state?"unavailable":e?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(t){const e=this._haRegistry.entities||{},i=[];for(const[t,s]of Object.entries(this.hass?.states||{})){if(!t.startsWith("camera."))continue;const n=wh(t,s,e[t]);n&&i.push(n)}this._vacAllCameraCache={devId:t.id,candidates:i},this._vacAllCamerasFor=t.id}_vacSourceResolution(t,e=!1,i=this._planHass){const s=t.marker?.vacuum,n="string"==typeof s?.source&&!!s.source,o=new Set(t.entities||[]),a=new Set(o);n&&a.add(s.source);const r=i?.entities||{},l=[];for(const t of a){const e=i?.states?.[t],o=wh(t,e,r[t]);o?l.push(o):n&&t===s.source&&l.push({entityId:t,name:String(e?.attributes?.friendly_name||t),platform:r[t]?.platform?String(r[t].platform):null,category:t.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(e&&this._vacAllCameraCache?.devId===t.id){const t=new Set(l.map(t=>t.entityId));for(const e of this._vacAllCameraCache.candidates)t.has(e.entityId)||l.push(e)}const c={};for(const t of l)c[t.entityId]=this._vacCandidateStatus(t.entityId,t,i);return function(t,e,i,s){const n="string"==typeof t&&t.length>0,o=new Set(e),a=Array.from(i).sort((e,i)=>n&&e.entityId===t?-1:n&&i.entityId===t?1:i.score-e.score||e.entityId.localeCompare(i.entityId));if(n){const e=a.find(e=>e.entityId===t);return{entityId:t,status:s[t]||(e?.hasPosition?"ok":"unverified"),pinned:!0,candidates:a}}const r=a.find(t=>o.has(t.entityId)&&t.hasPosition&&"ok"===s[t.entityId]);return r?{entityId:r.entityId,status:"ok",pinned:!1,candidates:a}:{entityId:null,status:"none",pinned:!1,candidates:a}}(s?.source,o,l,c)}_vacSource(t,e=this._planHass){if(!1===t.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(t,!1,e);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(t){return t.primary?.startsWith("vacuum.")?t.primary:(t.entities||[]).find(t=>t.startsWith("vacuum."))||null}_isVacDev(t){return!!this._vacEntity(t)}_activitySourceKey(t){return this._activitySnapshot(t).sourceKey}_activitySnapshot(t,e=ro(this._planHass,this._devices,null,this._virtualLights)){const i=cu(this._planHass,t,this._devices,e,this._fullRegistryHass);return{samples:i.samples,sourceKey:uu(this._planHass,t,i)}}_stampActivity(t,e,i){let s=this._activityRt.get(t);s||(s=Eu(i||"",[]),this._activityRt.set(t,s)),null!=i&&(s.sources=i),Ou(s,e,Date.now(),window.clearTimeout.bind(window),t=>window.setTimeout(()=>this.requestUpdate(),t))}_syncActivityRuntime(){const t=new Map;if(!this.hass)return t;if(!1===this._config?.live_states){for(const t of this._activityRt.values())clearTimeout(t.timer);return this._activityRt.clear(),t}const e=new Set,i=ro(this._planHass,this._devices,null,this._virtualLights);for(const s of this._devices){if(s.hidden)continue;if("icon_ripple"!==Li(s.marker?.display))continue;e.add(s.id);const n=this._activitySnapshot(s,i);t.set(s.id,n);const{samples:o,sourceKey:a}=n;let r=this._activityRt.get(s.id);r?r.sources!==a&&zu(r,a,o,window.clearTimeout.bind(window)):(r=Eu(a,o),this._activityRt.set(s.id,r))}for(const[t,i]of this._activityRt)e.has(t)||(clearTimeout(i.timer),this._activityRt.delete(t));return t}_activityTick(){if(!this.hass)return;const t=this._syncActivityRuntime();for(const e of this._devices){if(e.hidden)continue;if("icon_ripple"!==Li(e.marker?.display))continue;const i=t.get(e.id)||this._activitySnapshot(e),{samples:s,sourceKey:n}=i,o=this._activityRt.get(e.id);if(!o||o.sources!==n)continue;const a=Nu(o,s,window.clearTimeout.bind(window));a&&this._stampActivity(e.id,a,n)}}_vacTick(){if(this.hass)for(const t of this._devices){if(t.hidden||!this._isVacDev(t))continue;if("static_icon"===Li(t.marker?.display)){this._vacRt.delete(t.id);continue}const e=this._vacSource(t);if(!e)continue;const i=this._vacEntity(t),s=Sh(this.hass.states[i||""]?.state),n=bh(this.hass.states[e]?.attributes);let o=this._vacRt.get(t.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(t.id,o)),s&&!o.moving&&(o.trail=[],o.lastPos=null);const a="never"!==Ph(t.marker?.vacuum)&&!n?.path.length;!s&&o.moving&&(o.endedTs=Date.now(),a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=s;const r=n?.pos;if(s&&r){const t=r.x+":"+r.y;if(t!==o.lastKey){const e=Date.now();o.jump=o.lastTs>0&&e-o.lastTs>1e4,o.lastKey=t,o.lastTs=e,a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=[r.x,r.y]}}}}_vacEnsureMarker(t){const e=this._serverCfg;if(!e)return null;e.markers=e.markers||[];const i=e.markers.find(e=>e.id===t.id);if(i)return i;if("device"!==t.bindingKind&&"entity"!==t.bindingKind||!t.bindingRef)return null;const s={id:t.id,binding:t.bindingKind+":"+t.bindingRef,space:t.space||null,area:t.area||null,hidden:!!t.hidden};return e.markers.push(s),s}_renderVacSection(t){const e=this._devices.find(e=>e.id===t.devId);if(!e||!this._isVacDev(e))return G;const i=e.marker?.vacuum||{},s=this._vacAllCamerasFor===e.id,n=this._vacSourceResolution(e,s),o=n.entityId,a=n.candidates.find(t=>t.entityId===o)||null,r=o?bh(this.hass?.states[o]?.attributes):null,l=!1!==i.live&&("ok"===n.status||"unsupported"===n.status),c=this._vacPlanRoomAnchors(e.space),h=r?function(t,e){const i=new Set(e.map(kh).filter(Boolean)),s=new Set;for(const e of t){const t=kh(e.name||"");t&&i.has(t)&&s.add(t)}return s.size}(r.rooms,c.map(t=>t.name)):0,d=!!(l&&r&&h>=3),u=Object.keys(i.calibration||{}),p=t=>{const i=this._vacEnsureMarker(e);i&&(i.vacuum={...i.vacuum||{},...t},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate())},_=new Set(e.entities||[]),g=n.candidates.filter(t=>_.has(t.entityId)||t.entityId===i.source),m=s?n.candidates.filter(t=>t.entityId.startsWith("camera.")&&!g.some(e=>e.entityId===t.entityId)):[],f=t=>[t.hasPosition?this._t("vac.cap_position"):"",t.hasRooms?this._t("vac.cap_rooms_short"):"",t.hasPath?this._t("vac.cap_path"):"",t.hasMapId?this._t("vac.cap_map"):""].filter(Boolean).join(" · ")||this._t("vac.cap_none"),v=t=>j` + `}_vacCandidateStatus(t,e,i=this._planHass){const s=this._bindingStatus("entity:"+t);if("ha_disabled"===s.kind)return"disabled";if("orphaned"===s.kind)return"missing";if("unverified"===s.kind)return"unverified";const n=i?.states?.[t];return"unavailable"===n?.state?"unavailable":e?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(t){const e=this._haRegistry.entities||{},i=[];for(const[t,s]of Object.entries(this.hass?.states||{})){if(!t.startsWith("camera."))continue;const n=wh(t,s,e[t]);n&&i.push(n)}this._vacAllCameraCache={devId:t.id,candidates:i},this._vacAllCamerasFor=t.id}_vacSourceResolution(t,e=!1,i=this._planHass){const s=t.marker?.vacuum,n="string"==typeof s?.source&&!!s.source,o=new Set(t.entities||[]),a=new Set(o);n&&a.add(s.source);const r=i?.entities||{},l=[];for(const t of a){const e=i?.states?.[t],o=wh(t,e,r[t]);o?l.push(o):n&&t===s.source&&l.push({entityId:t,name:String(e?.attributes?.friendly_name||t),platform:r[t]?.platform?String(r[t].platform):null,category:t.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(e&&this._vacAllCameraCache?.devId===t.id){const t=new Set(l.map(t=>t.entityId));for(const e of this._vacAllCameraCache.candidates)t.has(e.entityId)||l.push(e)}const c={};for(const t of l)c[t.entityId]=this._vacCandidateStatus(t.entityId,t,i);return function(t,e,i,s){const n="string"==typeof t&&t.length>0,o=new Set(e),a=Array.from(i).sort((e,i)=>n&&e.entityId===t?-1:n&&i.entityId===t?1:i.score-e.score||e.entityId.localeCompare(i.entityId));if(n){const e=a.find(e=>e.entityId===t);return{entityId:t,status:s[t]||(e?.hasPosition?"ok":"unverified"),pinned:!0,candidates:a}}const r=a.find(t=>o.has(t.entityId)&&t.hasPosition&&"ok"===s[t.entityId]);return r?{entityId:r.entityId,status:"ok",pinned:!1,candidates:a}:{entityId:null,status:"none",pinned:!1,candidates:a}}(s?.source,o,l,c)}_vacSource(t,e=this._planHass){if(!1===t.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(t,!1,e);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(t){return t.primary?.startsWith("vacuum.")?t.primary:(t.entities||[]).find(t=>t.startsWith("vacuum."))||null}_isVacDev(t){return!!this._vacEntity(t)}_activitySourceKey(t){return this._activitySnapshot(t).sourceKey}_activitySnapshot(t,e=ro(this._planHass,this._devices,null,this._virtualLights)){const i=cu(this._planHass,t,this._devices,e,this._fullRegistryHass);return{samples:i.samples,sourceKey:uu(this._planHass,t,i)}}_stampActivity(t,e,i){let s=this._activityRt.get(t);s||(s=Eu(i||"",[]),this._activityRt.set(t,s)),null!=i&&(s.sources=i),Ou(s,e,Date.now(),window.clearTimeout.bind(window),t=>window.setTimeout(()=>this.requestUpdate(),t))}_syncActivityRuntime(){const t=new Map;if(!this.hass)return t;if(!1===this._config?.live_states){for(const t of this._activityRt.values())clearTimeout(t.timer);return this._activityRt.clear(),t}const e=new Set,i=ro(this._planHass,this._devices,null,this._virtualLights);for(const s of this._devices){if(s.hidden)continue;if("icon_ripple"!==Li(s.marker?.display))continue;e.add(s.id);const n=this._activitySnapshot(s,i);t.set(s.id,n);const{samples:o,sourceKey:a}=n;let r=this._activityRt.get(s.id);r?r.sources!==a&&zu(r,a,o,window.clearTimeout.bind(window)):(r=Eu(a,o),this._activityRt.set(s.id,r))}for(const[t,i]of this._activityRt)e.has(t)||(clearTimeout(i.timer),this._activityRt.delete(t));return t}_activityTick(){if(!this.hass)return;const t=this._syncActivityRuntime();for(const e of this._devices){if(e.hidden)continue;if("icon_ripple"!==Li(e.marker?.display))continue;const i=t.get(e.id)||this._activitySnapshot(e),{samples:s,sourceKey:n}=i,o=this._activityRt.get(e.id);if(!o||o.sources!==n)continue;const a=Hu(o,s,window.clearTimeout.bind(window));a&&this._stampActivity(e.id,a,n)}}_vacTick(){if(this.hass)for(const t of this._devices){if(t.hidden||!this._isVacDev(t))continue;if("static_icon"===Li(t.marker?.display)){this._vacRt.delete(t.id);continue}const e=this._vacSource(t);if(!e)continue;const i=this._vacEntity(t),s=Sh(this.hass.states[i||""]?.state),n=bh(this.hass.states[e]?.attributes);let o=this._vacRt.get(t.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(t.id,o)),s&&!o.moving&&(o.trail=[],o.lastPos=null);const a="never"!==Ph(t.marker?.vacuum)&&!n?.path.length;!s&&o.moving&&(o.endedTs=Date.now(),a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=s;const r=n?.pos;if(s&&r){const t=r.x+":"+r.y;if(t!==o.lastKey){const e=Date.now();o.jump=o.lastTs>0&&e-o.lastTs>1e4,o.lastKey=t,o.lastTs=e,a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=[r.x,r.y]}}}}_vacEnsureMarker(t){const e=this._serverCfg;if(!e)return null;e.markers=e.markers||[];const i=e.markers.find(e=>e.id===t.id);if(i)return i;if("device"!==t.bindingKind&&"entity"!==t.bindingKind||!t.bindingRef)return null;const s={id:t.id,binding:t.bindingKind+":"+t.bindingRef,space:t.space||null,area:t.area||null,hidden:!!t.hidden};return e.markers.push(s),s}_renderVacSection(t){const e=this._devices.find(e=>e.id===t.devId);if(!e||!this._isVacDev(e))return G;const i=e.marker?.vacuum||{},s=this._vacAllCamerasFor===e.id,n=this._vacSourceResolution(e,s),o=n.entityId,a=n.candidates.find(t=>t.entityId===o)||null,r=o?bh(this.hass?.states[o]?.attributes):null,l=!1!==i.live&&("ok"===n.status||"unsupported"===n.status),c=this._vacPlanRoomAnchors(e.space),h=r?function(t,e){const i=new Set(e.map(kh).filter(Boolean)),s=new Set;for(const e of t){const t=kh(e.name||"");t&&i.has(t)&&s.add(t)}return s.size}(r.rooms,c.map(t=>t.name)):0,d=!!(l&&r&&h>=3),u=Object.keys(i.calibration||{}),p=t=>{const i=this._vacEnsureMarker(e);i&&(i.vacuum={...i.vacuum||{},...t},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate())},_=new Set(e.entities||[]),g=n.candidates.filter(t=>_.has(t.entityId)||t.entityId===i.source),m=s?n.candidates.filter(t=>t.entityId.startsWith("camera.")&&!g.some(e=>e.entityId===t.entityId)):[],f=t=>[t.hasPosition?this._t("vac.cap_position"):"",t.hasRooms?this._t("vac.cap_rooms_short"):"",t.hasPath?this._t("vac.cap_path"):"",t.hasMapId?this._t("vac.cap_map"):""].filter(Boolean).join(" · ")||this._t("vac.cap_none"),v=t=>j`
`}_roomArea(t){const e=ci(t);if(!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._spaceWalls,n=s.length&&t.id&&ol(i.rooms,t.id,s,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||e,o=this._cleanFloor(t,n),a=this._cellCm/this._gridPitch;return Ta(o.area*a*a/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(t){const e=t.settings?.temp_source;return e?xo(this._renderPlanHass,e,"temp",this._markers):t.area?this._climate().get(t.area)?.temp??null:null}_roomHum(t){const e=t.settings?.hum_source;return e?xo(this._renderPlanHass,e,"hum",this._markers):t.area?this._climate().get(t.area)?.hum??null:null}_climate(){const t=this._serverCfg?.markers,e=this._renderPlanHass,i=this._climateCache;if(i&&i.h===e&&i.r===this._iconRules&&i.mk===t)return i.m;const s=function(t,e,i){const s=new Map;if(!t?.entities)return s;const n=vo(i),o=new Set;for(const t of i||[]){if(t?.removed||!0!==t?.use_climate_temp)continue;const e=(t.binding||"").indexOf(":");e>0&&o.add(t.binding.slice(e+1))}const a=new Map;for(const[e,i]of Object.entries(t.entities)){if(i.device_id&&n.devices.has(i.device_id)||!i.device_id&&n.entities.has(e))continue;const s=i.device_id?t.devices?.[i.device_id]:null,r=i.area_id||s?.area_id||null;if(!r)continue;if(i.entity_category)continue;if(!(o.size>0&&e.startsWith("climate.")&&(o.has(e)||i.device_id&&o.has(i.device_id)))){if(Yt.has(i.platform))continue;if($o.test(e))continue}let l=a.get(r);l||(l=new Map,a.set(r,l));const c=i.device_id||e;let h=l.get(c);if(!h){const n=t.states?.[e];h={name:(s?s.name_by_user||s.name:i.name||n?.attributes?.friendly_name||e)||e,model:s?.model,ents:[]},l.set(c,h)}h.ents.push(e)}for(const[i,n]of a){const a=[],r=[];for(const[i,s]of n){const n=fo(t,s.name,s.model,s.ents,e),l="mdi:thermometer"===n||"mdi:air-filter"===n;if(l){const e=uo(t,s.ents);null!=e&&a.push(e)}if(o.size>0&&(o.has(i)||s.ents.some(t=>o.has(t)))){const e=po(t,s.ents);null!=e&&a.push(e)}if(l||"mdi:water-percent"===n){const e=go(t,s.ents);null!=e&&r.push(e)}}(a.length||r.length)&&s.set(i,{temp:a.length?Math.round(a.reduce((t,e)=>t+e,0)/a.length*10)/10:null,hum:r.length?Math.round(r.reduce((t,e)=>t+e,0)/r.length):null})}return s}(e,this._iconRules,t);return this._climateCache={h:e,r:this._iconRules,mk:t,m:s},s}_resetRoomDialogFields(){this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1}_openRoomEdit(t){if(!t.id)return;this._roomEditId=t.id,this._nameSel=t.name||"",this._areaSel=t.area||"",this._roomFill="glow"===t.settings?.fill_mode?"":t.settings?.fill_mode||"";const e=t.settings?.custom_fill;this._roomCustomFill=e&&"object"==typeof e?as(e,ls(this._curSpaceCfg).customFill):null,this._roomTempSrc=t.settings?.temp_source||"",this._roomHumSrc=t.settings?.hum_source||"",this._roomNameScale=Es(t.settings?.name_scale),this._roomLabelScale=Es(t.settings?.label_scale),this._roomSrcOpen=null,this._roomSrcFilter="",this._roomDialog=!0}_roomSettingsFromDialog(){const t={};return this._roomFill&&(t.fill_mode=this._roomFill),this._roomCustomFill&&(t.custom_fill=this._roomCustomFill),this._roomTempSrc&&(t.temp_source=this._roomTempSrc),this._roomHumSrc&&(t.hum_source=this._roomHumSrc),1!==this._roomNameScale&&(t.name_scale=this._roomNameScale),1!==this._roomLabelScale&&(t.label_scale=this._roomLabelScale),Object.keys(t).length?t:null}_saveRoomEdit(){const t=this._curSpaceCfg,e=t?.rooms.find(t=>t.id===this._roomEditId);if(!e)return this._roomDialog=!1,void(this._roomEditId=null);e.name=this._nameSel.trim()||e.name,e.area=this._areaSel||null;const i=e.settings||{},s={...i};this._roomFill?s.fill_mode=this._roomFill:delete s.fill_mode,this._roomCustomFill?s.custom_fill=this._roomCustomFill:delete s.custom_fill,"glow"===i.fill_mode&&"boolean"!=typeof i.glow&&(s.glow=!0),this._roomTempSrc?s.temp_source=this._roomTempSrc:delete s.temp_source,this._roomHumSrc?s.hum_source=this._roomHumSrc:delete s.hum_source,1!==this._roomNameScale?s.name_scale=this._roomNameScale:delete s.name_scale,1!==this._roomLabelScale?s.label_scale=this._roomLabelScale:delete s.label_scale,Object.keys(s).length?e.settings=s:delete e.settings,this._saveConfig(),this._roomDialog=!1,this._roomEditId=null,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate(),this._showToast(this._t("toast.room_updated"))}_roomSrcCandidates(){const t=this._planHass,e=vo(this._markers),i=this._roomSrcFilter.trim().toLowerCase(),s=[];for(const n of Object.values(t.devices)){if("service"===n.entry_type)continue;if(e.devices.has(n.id))continue;const t=(n.name_by_user||n.name||n.id).trim();i&&!t.toLowerCase().includes(i)||s.push({value:"device:"+n.id,label:t,sub:n.model||this._t("marker.sub_device")})}for(const[n,o]of Object.entries(t.entities)){if(!n.startsWith("sensor.")||o.hidden)continue;if(yo(t,n,e))continue;const a=o.name||t.states[n]?.attributes?.friendly_name||n;i&&!(a+" "+n).toLowerCase().includes(i)||s.push({value:"entity:"+n,label:a,sub:n})}return s.sort((t,e)=>t.label.localeCompare(e.label)),s.slice(0,200)}_roomSrcLabel(t){const e=t.indexOf(":"),i=t.slice(0,e),s=t.slice(e+1);return"device"===i?this._fullRegistryHass.devices[s]?.name_by_user||this._fullRegistryHass.devices[s]?.name||s:this._fullRegistryHass.entities[s]?.name||this.hass.states[s]?.attributes?.friendly_name||s}_labelPos(t,e){const i=this._layout["rl_"+(t.id||"")];if(i&&i.s===e)return{x:i.x*T_,y:i.y*T_};const s=this._snap(this._roomCenter(t));return{x:s[0],y:s[1]}}_labelDown(t,e,i){if("plan"!==this._mode)return;t.preventDefault(),t.stopPropagation();const s=this._labelPos(e,i);this._drag={id:"rl_"+(e.id||""),sx:t.clientX,sy:t.clientY,ox:s.x,oy:s.y,moved:!1},O_(t),this._tip=null}_labelMove(t,e,i){const s="rl_"+(e.id||"");if(!this._drag||this._drag.id!==s)return;const n=this._stageEl;if(!n)return;const o=this._spaceModelById(i);if(!o)return;const a=o.vb,r=n.getBoundingClientRect(),l=this._viewOr(a),c=(t.clientX-this._drag.sx)/r.width*l.w,h=(t.clientY-this._drag.sy)/r.height*l.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0);const d=ic(this._drag.ox+c),u=ic(this._drag.oy+h);this._savePos({id:s,space:i},d,u)}_labelUp(t){const e="rl_"+(t.id||"");if(!this._drag||this._drag.id!==e)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&window.setTimeout(()=>this._drag=null,0)}_labelScale(t){const e=this._layout["rl_"+(t.id||"")]?.k;return"number"==typeof e&&Number.isFinite(e)?Math.min(3,Math.max(.5,e)):1}_rlResizeDown(t,e,i){if("plan"!==this._mode)return;t.preventDefault(),t.stopPropagation();const s=t.target.closest(".roomlabel");if(!s)return;const n=s.getBoundingClientRect(),o=n.left+n.width/2,a=n.top+n.height/2,r=Math.max(8,Math.hypot(t.clientX-o,t.clientY-a));this._rlResize={id:"rl_"+(e.id||""),space:i,k0:this._labelScale(e),cx:o,cy:a,d0:r},O_(t)}_rlResizeMove(t){const e=this._rlResize;if(!e)return;t.stopPropagation();const i=Math.max(8,Math.hypot(t.clientX-e.cx,t.clientY-e.cy)),s=Math.min(3,Math.max(.5,e.k0*(i/e.d0))),n=this._layout[e.id];if(n)this._layout={...this._layout,[e.id]:{...n,k:s}};else{const t=e.id.slice(3),i=this._spaceModelById(e.space);if(!i)return;const n=i.rooms.find(e=>e.id===t);if(!n)return;const o=this._labelPos(n,e.space);this._layout={...this._layout,[e.id]:{s:e.space,x:o.x/T_,y:o.y/T_,k:s}}}this._dirtyPos.add(e.id)}_rlResizeUp(){this._rlResize&&(this._rlResize=null,this._persistLayout())}_renderRoomGear(t,e,i){if(!t.id)return G;let s=null;if(t.poly?(s=this._gearPtCache.get(t.poly)||null,s||(s=xi(t.poly),this._gearPtCache.set(t.poly,s))):null!=t.x&&null!=t.y&&(s=[t.x+(t.w||0)/2,t.y+(t.h||0)/2]),!s)return G;const n=(s[0]-i.x)/i.w*100,o=(s[1]-i.y)/i.h*100;return j`
`}get _measureAnchor(){return this._markup&&this._cursorPt?"draw"===this._tool&&this._path.length&&!this._contourClosed?this._path[this._path.length-1]:"split"===this._tool&&this._splitSel?.pts?.length?this._splitSel.pts[this._splitSel.pts.length-1]:null:null}_renderMeasureLabel(t){const e=this._measureAnchor,i=this._cursorPt,s=(i[0]-t.x)/t.w*100,n=(i[1]-t.y)/t.h*100,o=zs(e,i),a=Math.round(10*o)/10,r=Os(o);return j`
- ${this._fmtLen(e,i)} · ${a}°
`}get _decorMeasure(){const t=this._decorDraft;if(!t||"decor"!==this._mode)return null;const[e,i]=t.a,[s,n]=t.b;if(Math.abs(e-s)<1e-6&&Math.abs(i-n)<1e-6)return null;const o=(e+s)/2,a=(i+n)/2;if("line"===t.kind){const e=zs(t.a,t.b);return{x:o,y:a,on45:Os(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const r=this._fmtLen([e,i],[s,i]),l=this._fmtLen([s,i],[s,n]);if("ellipse"===t.kind){const t=this._fmtLen([0,0],[Math.abs(s-e)/2,0]),r=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:a,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${r}`}}return{x:o,y:a,on45:!1,text:`${r} × ${l} · ${Ta(rr(Math.abs(s-e),this._cellCm,this._gridPitch)*rr(Math.abs(n-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const t=this._drag.id.slice(3),e=this._spaceModel()?.rooms.find(e=>e.id===t);return e?(()=>{const t=this._labelPos(e,this._space);return[t.x,t.y]})():null}return null}if("devices"===this._mode&&this._drag?.moved){const t=this._devices.find(t=>t.id===this._drag.id);return t?(()=>{const e=this._pos(t);return[e.x,e.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const t=this._decorList.find(t=>t.id===this._decorMove.id);if(!t)return null;const e=T_,i=this._decorH;return"line"===t.kind?[t.x1*e,t.y1*i]:[t.x*e,t.y*i]}return null}return null}_alignCandidates(){const t=[],e=this._spaceModel();if(this._markup){if(!e)return t;if(this._drag?.id.startsWith("rl_")){const i=this._drag.id.slice(3);for(const s of e.rooms){if(!s.name||s.id===i)continue;const e=this._labelPos(s,this._space);t.push([e.x,e.y])}return t}for(const i of e.rooms){const e=ci(i);if(e)for(const i of e)t.push(i)}if("draw"===this._tool)for(const e of this._path)t.push(e);if("split"===this._tool&&this._splitSel?.pts)for(const e of this._splitSel.pts)t.push(e);return t}if("devices"===this._mode){for(const e of this._devices){if(e.space!==this._space||e.id===this._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const i=this._pos(e);t.push([i.x,i.y])}return t}if("decor"===this._mode){const e=this._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this._decorDraft&&t.push(this._decorDraft.a),t}return t}_renderAlignGuides(){const t=this._alignPoint;if(!t)return W``;const e=this._drag?.id.startsWith("rl_")?.5*this._gridPitch:.05*this._gridPitch,i=function(t,e,i){let s=null,n=null;for(const o of e)if(!(Math.abs(o[0]-t[0])<1e-6&&Math.abs(o[1]-t[1])<1e-6)){if(Math.abs(o[0]-t[0])<=i){const e=Math.abs(o[1]-t[1]);e>1e-6&&(!s||e1e-6&&(!n||e + ${this._fmtLen(e,i)} · ${a}°`}get _decorMeasure(){const t=this._decorDraft;if(!t||"decor"!==this._mode)return null;const[e,i]=t.a,[s,n]=t.b;if(Math.abs(e-s)<1e-6&&Math.abs(i-n)<1e-6)return null;const o=(e+s)/2,a=(i+n)/2;if("line"===t.kind){const e=zs(t.a,t.b);return{x:o,y:a,on45:Os(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const r=this._fmtLen([e,i],[s,i]),l=this._fmtLen([s,i],[s,n]);if("ellipse"===t.kind){const t=this._fmtLen([0,0],[Math.abs(s-e)/2,0]),r=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:a,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${r}`}}return{x:o,y:a,on45:!1,text:`${r} × ${l} · ${Ta(rr(Math.abs(s-e),this._cellCm,this._gridPitch)*rr(Math.abs(n-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const t=this._drag.id.slice(3),e=this._spaceModel()?.rooms.find(e=>e.id===t);return e?(()=>{const t=this._labelPos(e,this._space);return[t.x,t.y]})():null}return null}if("devices"===this._mode&&this._drag?.moved){const t=this._devices.find(t=>t.id===this._drag.id);return t?(()=>{const e=this._pos(t);return[e.x,e.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const t=this._decorList.find(t=>t.id===this._decorMove.id);if(!t)return null;const e=P_,i=this._decorH;return"line"===t.kind?[t.x1*e,t.y1*i]:[t.x*e,t.y*i]}return null}return null}_alignCandidates(){const t=[],e=this._spaceModel();if(this._markup){if(!e)return t;if(this._drag?.id.startsWith("rl_")){const i=this._drag.id.slice(3);for(const s of e.rooms){if(!s.name||s.id===i)continue;const e=this._labelPos(s,this._space);t.push([e.x,e.y])}return t}for(const i of e.rooms){const e=ci(i);if(e)for(const i of e)t.push(i)}if("draw"===this._tool)for(const e of this._path)t.push(e);if("split"===this._tool&&this._splitSel?.pts)for(const e of this._splitSel.pts)t.push(e);return t}if("devices"===this._mode){for(const e of this._devices){if(e.space!==this._space||e.id===this._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const i=this._pos(e);t.push([i.x,i.y])}return t}if("decor"===this._mode){const e=this._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this._decorDraft&&t.push(this._decorDraft.a),t}return t}_renderAlignGuides(){const t=this._alignPoint;if(!t)return W``;const e=this._drag?.id.startsWith("rl_")?.5*this._gridPitch:.05*this._gridPitch,i=function(t,e,i){let s=null,n=null;for(const o of e)if(!(Math.abs(o[0]-t[0])<1e-6&&Math.abs(o[1]-t[1])<1e-6)){if(Math.abs(o[0]-t[0])<=i){const e=Math.abs(o[1]-t[1]);e>1e-6&&(!s||e1e-6&&(!n||e ${i.map(e=>{const[i,o,a,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*n]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*n,e.at];return W` `})} `}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180;return W` - `}_renderOpeningDialog(){const t=this._openingDialog,e=this._spaceModel()?.partitions||[],i=t.id?this._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,s={id:t.id||"preview",type:t.type,x:t.x/T_,y:t.y/this._spaceH,angle:t.angle,length:i&&!t.lengthTouched?i.length:this._cmToUnits(Math.max(20,t.lengthCm))/T_,...t.host?{host:t.host}:{}},n=ld(i,s),o=t.host?n?rd(s,e,T_,this._cellCm,this._gridPitch):ad(s,e,T_,this._cellCm,this._gridPitch):null,a="does-not-fit-jamb"===o?.reason,r=t.host?e.find(e=>e.id===t.host.id):null,l=r?ri(r.cm/2,this._imperial):"",c=!!t.host&&!o?.resolved&&!a,h="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",d=(t,e,i)=>j`i(t.target.value)}> ${t.map(t=>j``)} `;return j` {const i=m_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> + @input=${e=>{const i=f_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> ${"passage"===t.type&&(t.contact||t.lock)?j`
@@ -6220,7 +6239,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 data-active=${e?"true":"false"} cx=${e?.point[0]??0} cy=${e?.point[1]??0} r=${s} visibility=${e?"visible":"hidden"} pointer-events="none"> - `}_syncPlanSnapActiveMarker(t){const e=this.renderRoot?.querySelector('[data-hp="plan-snap-active-marker"]');if(e){if(e.setAttribute("class",`plan-snap-node${t?" active":""}${"line"===t?.kind?" dynamic":""}`),e.setAttribute("data-active",t?"true":"false"),e.setAttribute("visibility",t?"visible":"hidden"),!t)return e.removeAttribute("data-kind"),void e.removeAttribute("data-key");e.setAttribute("data-kind",t.kind),e.setAttribute("data-key",t.key),e.setAttribute("cx",String(t.point[0])),e.setAttribute("cy",String(t.point[1])),e.setAttribute("r",String(vr(10,this._cellCm,this._gridPitch)))}}_planSnapPhysicalSegment(t){let e=0;const i=this._spaceModel();if(!i)return null;if("partition"===t.sourceKind)e=Number(i.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const s=/^(.*):(\d+)$/.exec(t.sourceId),n=s?i.room_drafts.find(t=>t.id===s[1]):null;e=n&&s&&Number(n.segments[Number(s[2])]?.cm)||0}else e=sl(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,T_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:vr(e,this._cellCm,this._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const i=[];for(let s=0;s+10&&i.push({a:t[s],b:t[s+1],halfDepth:e[s]});if(!i.length)return"";const s=2e-4*this._gridPitch,n=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>Ns(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=s)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Lr([...i,...n],s).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this._openPairs().flatMap(t=>t.segs),i=this._thickWallCuts(),s=e.concat(i),n=s.length?Cs(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,a=this._gridPitch,r=this._viewOr(this._baseVb()),l="draw"===this._tool?this._drawWallCm:null,c=(()=>"draw"===this._tool&&o.length&&null!=l&&l>0?this._contourClosed?o:this._cursorPt?[...o,this._cursorPt]:o.length>=2?o:null:null)(),h=c?c.slice(0,-1).map((t,e)=>vr(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||_r:l||_r,this._cellCm,this._gridPitch)/2):[],d=c?Br(c,vr(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` + `}_syncPlanSnapActiveMarker(t){const e=this.renderRoot?.querySelector('[data-hp="plan-snap-active-marker"]');if(e){if(e.setAttribute("class",`plan-snap-node${t?" active":""}${"line"===t?.kind?" dynamic":""}`),e.setAttribute("data-active",t?"true":"false"),e.setAttribute("visibility",t?"visible":"hidden"),!t)return e.removeAttribute("data-kind"),void e.removeAttribute("data-key");e.setAttribute("data-kind",t.kind),e.setAttribute("data-key",t.key),e.setAttribute("cx",String(t.point[0])),e.setAttribute("cy",String(t.point[1])),e.setAttribute("r",String(vr(10,this._cellCm,this._gridPitch)))}}_planSnapPhysicalSegment(t){let e=0;const i=this._spaceModel();if(!i)return null;if("partition"===t.sourceKind)e=Number(i.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const s=/^(.*):(\d+)$/.exec(t.sourceId),n=s?i.room_drafts.find(t=>t.id===s[1]):null;e=n&&s&&Number(n.segments[Number(s[2])]?.cm)||0}else e=sl(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,P_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:vr(e,this._cellCm,this._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const i=[];for(let s=0;s+10&&i.push({a:t[s],b:t[s+1],halfDepth:e[s]});if(!i.length)return"";const s=2e-4*this._gridPitch,n=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>Hs(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=s)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Lr([...i,...n],s).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this._openPairs().flatMap(t=>t.segs),i=this._thickWallCuts(),s=e.concat(i),n=s.length?Cs(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,a=this._gridPitch,r=this._viewOr(this._baseVb()),l="draw"===this._tool?this._drawWallCm:null,c=(()=>"draw"===this._tool&&o.length&&null!=l&&l>0?this._contourClosed?o:this._cursorPt?[...o,this._cursorPt]:o.length>=2?o:null:null)(),h=c?c.slice(0,-1).map((t,e)=>vr(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||_r:l||_r,this._cellCm,this._gridPitch)/2):[],d=c?Br(c,vr(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` ${this._gridLevels()?W``:G} ${n.map(t=>W``)} ${this._renderPhysicalEditorLayer()} @@ -6244,7 +6263,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182

${this._t("confirm.delete_partition_openings_body",{count:t.openings.length})}

    - ${t.openings.map(t=>j`
  • ${this._t("confirm.delete_partition_openings_item",{type:this._t(`opening.${t.type}`),length:ri(t.length*T_/this._gridPitch*this._cellCm,e)})}
  • `)} + ${t.openings.map(t=>j`
  • ${this._t("confirm.delete_partition_openings_item",{type:this._t(`opening.${t.type}`),length:ri(t.length*P_/this._gridPitch*this._cellCm,e)})}
  • `)}
@@ -6406,11 +6425,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`:G})()} ${t.model?j`
${this._t("info.model")}${t.model}
`:G} ${i&&!this._cardEntities(t).length?j`
${this._t("info.state")}${i}
`:G} - ${Ni(t.link)?j`
`:G} + ${Hi(t.link)?j`
${this._t("info.link")} + ${t.link}
`:G} ${t.description?j`
${t.description}
`:G} ${t.pdfs&&t.pdfs.length?j`
${this._t("info.manuals")} - ${t.pdfs.map(t=>j` + ${t.pdfs.map(t=>j` ${t.name}`)}
`:G} ${s.length?j`
${this._t("info.controls")} @@ -6429,7 +6448,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G}
- `}_markerValueBadgeFields(t){return(e={touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition}).touched?{value_badge:{enabled:e.enabled,source:e.source,position:e.position}}:e.originalHas?{value_badge:e.original}:{};var e}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=Bs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),a={id:i,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle||null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===o&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:n.length?n:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=m_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:t.hideFromPlan,vacuum:s?.vacuum||null};return("virtual"===t.binding||t.room)&&(a.space=e?.space||("virtual"===t.binding?this._space:null),a.area=e?.area||null,a.room_id=e?.roomId||null),a}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const i=`${this._haRegistry.revision}\n${JSON.stringify(e)}`;if(this._markerPreviewMemo?.key===i)return this._markerPreviewMemo.device;const s=function(t){const{marker:e,...i}=t;return ko({...i,markers:[e]}).find(t=>t.id===e.id)||null}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||this._space,loc:t=>this._t(t),iconRules:this._iconRules});return this._markerPreviewMemo={key:i,device:s},s}_markerPreviewDevices(t){const e=this._markerPreviewDevicesMemo;if(e?.base===this._devices&&e.preview===t)return e.devices;const i=[...this._devices.filter(e=>e.id!==t.id),t];return this._markerPreviewDevicesMemo={base:this._devices,preview:t,devices:i},i}_toggleIntent(t,e=this._devices){return Qh({hass:this._planHass,registryHass:this._fullRegistryHass,devices:e,device:t,virtualLights:this._virtualLights})}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i=this._markerPreviewDevices(e);return this._toggleIntent(e,i)}_toggleStateText(t,e){const i=this._planHass?.states?.[t]||this.hass?.states?.[t];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):e}catch{return e}}_toggleConfirmationStateText(t){const e=String(t.state||"unknown"),i=t.entityId?this._toggleStateText(t.entityId,e):e;if(i.trim().toLocaleLowerCase()!==e.trim().toLocaleLowerCase())return i;const s={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[e];return s?this._t(s):e.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(t){const e={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(t,e){if(!ed(t)||!t.nextEffect||!t.targets.length)return[];const i="group"===t.kind,s=i?t.targets.filter(t=>"on"===t.state).length:0,n=i?0===s?e.groupAllOff():e.groupCurrent(s,t.targets.length):e.state(t.targets[0]);let o;return o="toggle"===t.nextEffect?e.expectedByHa():i&&"turn-on"===t.nextEffect?e.groupAllOn():i&&"turn-off"===t.nextEffect?e.groupAllOff():e.effect(t.nextEffect),[e.current(n),e.expected(o),...t.skippedTargets.length?[e.unavailable(t.skippedTargets.length)]:[]]}(t,{state:t=>this._toggleConfirmationStateText(t),current:t=>this._t("confirm.current_state",{state:t}),expected:t=>this._t("confirm.expected_state",{state:t}),groupCurrent:(t,e)=>this._t("confirm.group_current",{on:t,total:e}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:t=>this._t("confirm.unavailable_targets",{count:t}),effect:t=>this._t(e[t]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(t){if(!t)return[];const e=t=>this._t(`marker.toggle_effect_${t.replace("-","_")}`),i=t=>this._t(`marker.toggle_skip_${t.replace("-","_")}`);return function(t,e){const i=t.targets[0]||t.skippedTargets[0],s=[];return"group"===t.kind?t.targets.length&&s.push(e.group(t.targets)):i&&s.push(e.single(i)),t.nextEffect&&t.targets.length&&s.push("group"===t.kind?e.groupCurrentNext(t.targets,t.nextEffect):e.currentNext(t.targets[0],t.nextEffect)),t.skippedTargets.length&&s.push(e.skipped(t.skippedTargets)),!t.command&&t.noneReason&&s.push(e.none(t.noneReason)),s}(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),i=t.name||e;return this._t("marker.toggle_hint_single",{name:i,id:e})},group:t=>this._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,i)=>"virtual-light"===t.via?this._t("marker.virtual_light_current",{state:this._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(i)}):this._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(i)}),groupCurrentNext:(t,i)=>this._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(i)}),skipped:t=>this._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${i(t.reason)})`}).join(", ")}),none:t=>this._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:Yh(t.originalHasTapAction?t.originalTapAction:null,e)}_effectiveMarkerTapAction(t,e=this._markerPreviewDevice(t)){return this._effectiveStoredTapAction(t,e?.primary?.split(".")[0])}_announceToggleDraft(t){const e=this._markerPreviewDevice(t),i=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},s="toggle"===i.tapAction?this._toggleHintLines(this._toggleIntentForDialog(i)).join(" "):"";return{...i,tapHintAnnouncement:s}}_valueBadgeForBinding(t,e){const i={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},s=this._markerPreviewDevice(i);if(!s)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const n=[...this._devices.filter(t=>t.id!==s.id),s],o=Lo(this._planHass,s,n),a=Bo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!a,valueBadgeSource:a,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return lo(ro(this._planHass,[...this._devices.filter(t=>t.id!==i.id),i],null,this._virtualLights).filter(t=>t.device.id===i.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},i=this._markerPreviewDevice(e);return!!i&&oo(this._planHass,{...i})}_setMarkerLightRole(t){const e=this._markerDialog;e&&(this._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this._planEntityAvailable(t)};const e=t.slice(7),i=this._markers.find(t=>t.id===e),s=this._devices.find(t=>t.id===e);if(!i||i.removed||!0!==i.is_light)return{label:this._t("marker.control_missing_label"),sub:`${this._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const n=this._serverCfg?.spaces.find(t=>t.id===(s?.space||i.space)),o=!!s&&Jn(s).length>0;return{label:i.name||s?.name||e,sub:[n?.title||s?.space||i.space,i.room_id||s?.area,o?"":this._t("marker.control_passive")].filter(Boolean).join(" · "),icon:i.icon||s?.icon||"mdi:lightbulb-outline",warning:!0===i.hidden||!0===s?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this._t("marker.value_badge_state",{name:t.label});const i=this.hass.states[e.entity_id]?.attributes?.friendly_name||this._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this._t(`marker.value_badge_attr_${e.attribute}`,{name:i})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",i=[],s=new Set;for(const t of this._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this._bindingStatus(t.binding).kind)continue;const n=this._devices.find(e=>e.id===t.id);if(!n||n.hidden)continue;const o=this._controlRefInfo(`marker:${t.id}`);for(const t of Jn(n))s.add(t);i.push({value:`marker:${t.id}`,label:o.label,sub:o.sub,icon:o.icon,search:`${o.label} ${o.sub} ${t.id} ${Jn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ss(e)&&!s.has(e)&&Kn(t.binding,[e],this._bindingEntities(t.binding)).length>0&&this._planEntityAvailable(e)).map(t=>{const e=this._controlRefInfo(t);return{value:t,label:e.label,sub:t,icon:e.icon,search:`${e.label} ${t}`.toLowerCase()}}),o=t.controlsFilter.trim().toLowerCase();return[...i,...n].filter(e=>!t.controls.includes(e.value)&&(!o||e.search.includes(o))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const i=this._markerDraft(t)?.id||t.devId||"";if(!i)return void this._showToast(this._t("toast.marker_binding_required"));const s=e.slice(7),n=this._markerDraft(t);if(function(t,e,i){if(!e||e===i)return!0;const s=new Map;for(const e of t)s.set(e.id,(e.controls||[]).filter(t=>"string"==typeof t&&t.startsWith("marker:")).map(t=>t.slice(7)));const n=new Set,o=[i];for(;o.length;){const t=o.pop();if(t===e)return!0;n.has(t)||(n.add(t),o.push(...s.get(t)||[]))}return!1}(n?[...this._markers.filter(t=>t.id!==i),n]:this._markers,i,s))return void this._showToast(this._t("toast.marker_control_cycle"))}this._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this._markerDialog;if(!e)return;if("auto"===t)return void(this._markerDialog={...e,glowMode:t,glowTouched:!0});const i=this._markerSpatialSource(e),s=ks(i?this._planHass.states[i.eid]:void 0,null,this._fillColors.glow_light.c),n=!e.glowColorDrafted,o="fixed"===t&&!e.glowBrightnessDrafted;this._markerDialog={...e,glowMode:t,glowColor:n?s.c:e.glowColor,glowBrightness:o?Math.max(1,Math.round(100*s.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this._markerDialog,e="virtual"===t.bindingMode,i=this._bindingCandidates();this._bindingEntities(t.binding);const s=e?null:this._bindingStatus(t.binding),n=!e&&this._bindingHasHaPage(t.binding),o=this._markerPreviewDevice(t),a=this._effectiveMarkerTapAction(t,o),r=o?ls(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===a&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?_u(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:r?.showLqi??!1!==this._config?.show_signal,designPreview:!0,activityRuntime:this._activityRt.get(o.id),lightDevices:l,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}):null,u=o?Lo(this._planHass,o,l):[],p=o?Bo(this._planHass,o,u):null,_=t.valueBadgeTouched?t.valueBadgeEnabled:!!d?.valueBadge,g=t.valueBadgeTouched?t.valueBadgeSource:d?.valueBadge?.source||t.valueBadgeSource,m=t.valueBadgeTouched?t.valueBadgePosition:d?.valueBadge?.position||t.valueBadgePosition,f=Po(g),v=!!g&&!u.some(t=>t.key===f),y=u.find(t=>t.key===f),b=d?.valueSource?d.valueSource.attribute?`attr:${d.valueSource.eid}:${d.valueSource.attribute}`:`state:${d.valueSource.eid}`:"",w=this._markerAutoHasSpatialSource(t),k=!!o&&function(t,e){return Qn(t,e).some(t=>!!t.eid)}(this._planHass,{...o}),x=function(t,e,i,s){const n="always"===t||"auto"===t&&e,o=n&&!i;return{sourceExists:n,fromSourceEnabled:n&&i,manualEnabled:n,radiusEnabled:n,passive:o,effectiveMode:o&&"auto"===s?"fixed":s}}(t.lightRole,w,k,t.glowMode),$=!x.sourceExists,S=!x.fromSourceEnabled,M=x.passive,C=x.effectiveMode,D="never"===t.lightRole?this._t("marker.glow_disabled_never"):"auto"!==t.lightRole||w?M?this._t("marker.glow_passive_hint"):this._t("marker.glow_disabled_no_entity"):this._t("marker.glow_disabled_auto"),T=o?Jn(o):[],P=o&&Zn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?Wh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),F="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=F?[...F.targets,...F.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",z=(()=>{if(e)return null;const s=i.find(e=>e.value===t.binding);if(s)return s.label;const[n,o]=t.binding.split(":");return"device"===n?this._fullRegistryHass.devices[o]?.name_by_user||this._fullRegistryHass.devices[o]?.name||o:this._fullRegistryHass.entities[o]?.name||this.hass.states[o]?.attributes?.friendly_name||o})();return j``}_markerValueBadgeFields(t){return(e={touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition}).touched?{value_badge:{enabled:e.enabled,source:e.source,position:e.position}}:e.originalHas?{value_badge:e.original}:{};var e}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=Bs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),a={id:i,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle||null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===o&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:n.length?n:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=f_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:t.hideFromPlan,vacuum:s?.vacuum||null};return("virtual"===t.binding||t.room)&&(a.space=e?.space||("virtual"===t.binding?this._space:null),a.area=e?.area||null,a.room_id=e?.roomId||null),a}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const i=`${this._haRegistry.revision}\n${JSON.stringify(e)}`;if(this._markerPreviewMemo?.key===i)return this._markerPreviewMemo.device;const s=function(t){const{marker:e,...i}=t;return ko({...i,markers:[e]}).find(t=>t.id===e.id)||null}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||this._space,loc:t=>this._t(t),iconRules:this._iconRules});return this._markerPreviewMemo={key:i,device:s},s}_markerPreviewDevices(t){const e=this._markerPreviewDevicesMemo;if(e?.base===this._devices&&e.preview===t)return e.devices;const i=[...this._devices.filter(e=>e.id!==t.id),t];return this._markerPreviewDevicesMemo={base:this._devices,preview:t,devices:i},i}_toggleIntent(t,e=this._devices){return Qh({hass:this._planHass,registryHass:this._fullRegistryHass,devices:e,device:t,virtualLights:this._virtualLights})}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i=this._markerPreviewDevices(e);return this._toggleIntent(e,i)}_toggleStateText(t,e){const i=this._planHass?.states?.[t]||this.hass?.states?.[t];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):e}catch{return e}}_toggleConfirmationStateText(t){const e=String(t.state||"unknown"),i=t.entityId?this._toggleStateText(t.entityId,e):e;if(i.trim().toLocaleLowerCase()!==e.trim().toLocaleLowerCase())return i;const s={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[e];return s?this._t(s):e.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(t){const e={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(t,e){if(!ed(t)||!t.nextEffect||!t.targets.length)return[];const i="group"===t.kind,s=i?t.targets.filter(t=>"on"===t.state).length:0,n=i?0===s?e.groupAllOff():e.groupCurrent(s,t.targets.length):e.state(t.targets[0]);let o;return o="toggle"===t.nextEffect?e.expectedByHa():i&&"turn-on"===t.nextEffect?e.groupAllOn():i&&"turn-off"===t.nextEffect?e.groupAllOff():e.effect(t.nextEffect),[e.current(n),e.expected(o),...t.skippedTargets.length?[e.unavailable(t.skippedTargets.length)]:[]]}(t,{state:t=>this._toggleConfirmationStateText(t),current:t=>this._t("confirm.current_state",{state:t}),expected:t=>this._t("confirm.expected_state",{state:t}),groupCurrent:(t,e)=>this._t("confirm.group_current",{on:t,total:e}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:t=>this._t("confirm.unavailable_targets",{count:t}),effect:t=>this._t(e[t]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(t){if(!t)return[];const e=t=>this._t(`marker.toggle_effect_${t.replace("-","_")}`),i=t=>this._t(`marker.toggle_skip_${t.replace("-","_")}`);return function(t,e){const i=t.targets[0]||t.skippedTargets[0],s=[];return"group"===t.kind?t.targets.length&&s.push(e.group(t.targets)):i&&s.push(e.single(i)),t.nextEffect&&t.targets.length&&s.push("group"===t.kind?e.groupCurrentNext(t.targets,t.nextEffect):e.currentNext(t.targets[0],t.nextEffect)),t.skippedTargets.length&&s.push(e.skipped(t.skippedTargets)),!t.command&&t.noneReason&&s.push(e.none(t.noneReason)),s}(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),i=t.name||e;return this._t("marker.toggle_hint_single",{name:i,id:e})},group:t=>this._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,i)=>"virtual-light"===t.via?this._t("marker.virtual_light_current",{state:this._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(i)}):this._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(i)}),groupCurrentNext:(t,i)=>this._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(i)}),skipped:t=>this._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${i(t.reason)})`}).join(", ")}),none:t=>this._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:Yh(t.originalHasTapAction?t.originalTapAction:null,e)}_effectiveMarkerTapAction(t,e=this._markerPreviewDevice(t)){return this._effectiveStoredTapAction(t,e?.primary?.split(".")[0])}_announceToggleDraft(t){const e=this._markerPreviewDevice(t),i=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},s="toggle"===i.tapAction?this._toggleHintLines(this._toggleIntentForDialog(i)).join(" "):"";return{...i,tapHintAnnouncement:s}}_valueBadgeForBinding(t,e){const i={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},s=this._markerPreviewDevice(i);if(!s)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const n=[...this._devices.filter(t=>t.id!==s.id),s],o=Lo(this._planHass,s,n),a=Bo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!a,valueBadgeSource:a,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return lo(ro(this._planHass,[...this._devices.filter(t=>t.id!==i.id),i],null,this._virtualLights).filter(t=>t.device.id===i.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},i=this._markerPreviewDevice(e);return!!i&&oo(this._planHass,{...i})}_setMarkerLightRole(t){const e=this._markerDialog;e&&(this._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this._planEntityAvailable(t)};const e=t.slice(7),i=this._markers.find(t=>t.id===e),s=this._devices.find(t=>t.id===e);if(!i||i.removed||!0!==i.is_light)return{label:this._t("marker.control_missing_label"),sub:`${this._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const n=this._serverCfg?.spaces.find(t=>t.id===(s?.space||i.space)),o=!!s&&Jn(s).length>0;return{label:i.name||s?.name||e,sub:[n?.title||s?.space||i.space,i.room_id||s?.area,o?"":this._t("marker.control_passive")].filter(Boolean).join(" · "),icon:i.icon||s?.icon||"mdi:lightbulb-outline",warning:!0===i.hidden||!0===s?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this._t("marker.value_badge_state",{name:t.label});const i=this.hass.states[e.entity_id]?.attributes?.friendly_name||this._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this._t(`marker.value_badge_attr_${e.attribute}`,{name:i})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",i=[],s=new Set;for(const t of this._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this._bindingStatus(t.binding).kind)continue;const n=this._devices.find(e=>e.id===t.id);if(!n||n.hidden)continue;const o=this._controlRefInfo(`marker:${t.id}`);for(const t of Jn(n))s.add(t);i.push({value:`marker:${t.id}`,label:o.label,sub:o.sub,icon:o.icon,search:`${o.label} ${o.sub} ${t.id} ${Jn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ss(e)&&!s.has(e)&&Kn(t.binding,[e],this._bindingEntities(t.binding)).length>0&&this._planEntityAvailable(e)).map(t=>{const e=this._controlRefInfo(t);return{value:t,label:e.label,sub:t,icon:e.icon,search:`${e.label} ${t}`.toLowerCase()}}),o=t.controlsFilter.trim().toLowerCase();return[...i,...n].filter(e=>!t.controls.includes(e.value)&&(!o||e.search.includes(o))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const i=this._markerDraft(t)?.id||t.devId||"";if(!i)return void this._showToast(this._t("toast.marker_binding_required"));const s=e.slice(7),n=this._markerDraft(t);if(function(t,e,i){if(!e||e===i)return!0;const s=new Map;for(const e of t)s.set(e.id,(e.controls||[]).filter(t=>"string"==typeof t&&t.startsWith("marker:")).map(t=>t.slice(7)));const n=new Set,o=[i];for(;o.length;){const t=o.pop();if(t===e)return!0;n.has(t)||(n.add(t),o.push(...s.get(t)||[]))}return!1}(n?[...this._markers.filter(t=>t.id!==i),n]:this._markers,i,s))return void this._showToast(this._t("toast.marker_control_cycle"))}this._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this._markerDialog;if(!e)return;if("auto"===t)return void(this._markerDialog={...e,glowMode:t,glowTouched:!0});const i=this._markerSpatialSource(e),s=ks(i?this._planHass.states[i.eid]:void 0,null,this._fillColors.glow_light.c),n=!e.glowColorDrafted,o="fixed"===t&&!e.glowBrightnessDrafted;this._markerDialog={...e,glowMode:t,glowColor:n?s.c:e.glowColor,glowBrightness:o?Math.max(1,Math.round(100*s.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this._markerDialog,e="virtual"===t.bindingMode,i=this._bindingCandidates();this._bindingEntities(t.binding);const s=e?null:this._bindingStatus(t.binding),n=!e&&this._bindingHasHaPage(t.binding),o=this._markerPreviewDevice(t),a=this._effectiveMarkerTapAction(t,o),r=o?ls(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===a&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?_u(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:r?.showLqi??!1!==this._config?.show_signal,designPreview:!0,activityRuntime:this._activityRt.get(o.id),lightDevices:l,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}):null,u=o?Lo(this._planHass,o,l):[],p=o?Bo(this._planHass,o,u):null,_=t.valueBadgeTouched?t.valueBadgeEnabled:!!d?.valueBadge,g=t.valueBadgeTouched?t.valueBadgeSource:d?.valueBadge?.source||t.valueBadgeSource,m=t.valueBadgeTouched?t.valueBadgePosition:d?.valueBadge?.position||t.valueBadgePosition,f=Po(g),v=!!g&&!u.some(t=>t.key===f),y=u.find(t=>t.key===f),b=d?.valueSource?d.valueSource.attribute?`attr:${d.valueSource.eid}:${d.valueSource.attribute}`:`state:${d.valueSource.eid}`:"",w=this._markerAutoHasSpatialSource(t),k=!!o&&function(t,e){return Qn(t,e).some(t=>!!t.eid)}(this._planHass,{...o}),x=function(t,e,i,s){const n="always"===t||"auto"===t&&e,o=n&&!i;return{sourceExists:n,fromSourceEnabled:n&&i,manualEnabled:n,radiusEnabled:n,passive:o,effectiveMode:o&&"auto"===s?"fixed":s}}(t.lightRole,w,k,t.glowMode),$=!x.sourceExists,S=!x.fromSourceEnabled,M=x.passive,C=x.effectiveMode,D="never"===t.lightRole?this._t("marker.glow_disabled_never"):"auto"!==t.lightRole||w?M?this._t("marker.glow_passive_hint"):this._t("marker.glow_disabled_no_entity"):this._t("marker.glow_disabled_auto"),T=o?Jn(o):[],P=o&&Zn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?Wh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),F="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=F?[...F.targets,...F.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",z=(()=>{if(e)return null;const s=i.find(e=>e.value===t.binding);if(s)return s.label;const[n,o]=t.binding.split(":");return"device"===n?this._fullRegistryHass.devices[o]?.name_by_user||this._fullRegistryHass.devices[o]?.name||o:this._fullRegistryHass.entities[o]?.name||this.hass.states[o]?.attributes?.friendly_name||o})();return j`this._markerDialog=null}>
@@ -6674,11 +6693,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 -

${this._t(u_[t.display])}

+

${this._t(p_[t.display])}

${"static_icon"===t.display&&this._bindingHasAlarm(t.binding)?j`
${this._t("marker.static_alarm_warning")} @@ -6780,7 +6799,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
${t.pdfs.map(t=>j` - ${t.name} + ${t.name} this._removeMarkerPdf(t.url)}>`)} `}
- `}}N_.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_hoverRoom:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeDraftId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_openWallAnchor:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_alignDialog:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},N_.ZOOM_MAX=8,N_.ZOOM_MIN=1/3,N_._touchSeen=!1,N_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,N_.styles=[Kt,qu],customElements.get("houseplan-card")||customElements.define("houseplan-card",N_),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${h_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}N_.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_hoverRoom:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeDraftId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_openWallAnchor:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_alignDialog:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},N_.ZOOM_MAX=8,N_.ZOOM_MIN=1/3,N_.styles=[Kt,ju],customElements.get("houseplan-card")||customElements.define("houseplan-card",N_),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${d_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/dist/houseplan-card.js b/dist/houseplan-card.js index 630ddc71..5994bc03 100755 --- a/dist/houseplan-card.js +++ b/dist/houseplan-card.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let n=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=s.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&s.set(i,t))}return t}toString(){return this.cssText}};const o=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new n(s,t,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new n("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:r,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,g=_?_.emptyScript:"",m=p.reactiveElementPolyfillSupport,f=(t,e)=>t,v={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},y=(t,e)=>!r(t,e),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=b){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const t=this.properties,e=[...h(t),...d(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(e)i.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of s){const s=document.createElement("style"),n=t.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=e.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:v;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??y)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,m?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=t=>t,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,M="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,D="?"+C,T=`<${D}>`,P=document,R=()=>P.createComment(""),A=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,F="[ \t\n\f\r]",E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=P.createTreeWalker(P,129);function Y(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(e):e}const X=(t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"":3===e?"":"",a=E;for(let e=0;e"===l[0]?(a=n??E,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?N:'"'===l[3]?L:H):a===L||a===H?a=N:a===z||a===O?a=E:(a=N,n=void 0);const d=a===N&&t[e+1].startsWith("/>")?" ":"";o+=a===E?i+T:c>=0?(s.push(r),i.slice(0,c)+M+i.slice(c)+C+d):i+C+(-2===c?e:d)}return[Y(t,o+(t[i]||"")+(2===e?"":3===e?"":"")),s]};class J{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=t.length-1,r=this.parts,[l,c]=X(t,e);if(this.el=J.createElement(l,i),K.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=K.nextNode())&&r.length0){s.textContent=$?$.emptyScript:"";for(let i=0;iI(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&A(this._$AH)?this._$AA.nextSibling.data=t:this.T(P.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=J.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new J(t)),e}k(t){I(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(R()),this.O(R()),this,this.options)):i=e[s],i._$AI(n),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!A(t)||t!==this._$AH&&t!==U,o&&(this._$AH=t);else{const s=t;let a,r;for(t=n[0],a=0;a{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(R(),t),t,void 0,i??{})}return n._$AI(t),n},ct=globalThis;let ht=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=lt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};ht._$litElement$=!0,ht.finalized=!0,ct.litElementHydrateSupport?.({LitElement:ht});const dt=ct.litElementPolyfillSupport;dt?.({LitElement:ht}),(ct.litElementVersions??=[]).push("4.2.2");const ut=2,pt=t=>(...e)=>({_$litDirective$:t,values:e});let _t=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};const gt={},mt=pt(class extends _t{constructor(){super(...arguments),this.ot=gt}render(t,e){return e()}update(t,[e,i]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((t,e)=>t===this.ot[e]))return U}else if(this.ot===e)return U;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,i)}}),{I:ft}=at,vt=t=>t,yt=()=>document.createComment(""),bt=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(yt(),n),o=s.insertBefore(yt(),n);i=new ft(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,a=o!==t;if(a){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||a){let t=i._$AA;for(;t!==e;){const e=vt(t).nextSibling;vt(s).insertBefore(t,n),t=e}}}return i},wt=(t,e,i=t)=>(t._$AI(e,i),t),kt={},xt=(t,e=kt)=>t._$AH=e,$t=t=>{t._$AR(),t._$AA.remove()},St=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},Mt=pt(class extends _t{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let a=0;for(const e of t)n[a]=s?s(e,a):a,o[a]=i(e,a),a++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:a}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=a,o;const r=this.ut??=[],l=[];let c,h,d=0,u=n.length-1,p=0,_=o.length-1;for(;d<=u&&p<=_;)if(null===n[d])d++;else if(null===n[u])u--;else if(r[d]===a[p])l[p]=wt(n[d],o[p]),d++,p++;else if(r[u]===a[_])l[_]=wt(n[u],o[_]),u--,_--;else if(r[d]===a[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(r[u]===a[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(a,p,_),h=St(r,d,u)),c.has(r[d]))if(c.has(r[u])){const e=h.get(a[p]),i=void 0!==e?n[e]:null;if(null===i){const e=bt(t,n[d]);wt(e,o[p]),l[p]=e}else l[p]=wt(i,o[p]),bt(t,n[d],i),n[e]=null;p++}else $t(n[u]),u--;else $t(n[d]),d++;for(;p<=_;){const e=bt(t,l[_+1]);wt(e,o[p]),l[p++]=e}for(;d<=u;){const t=n[d++];null!==t&&$t(t)}return this.ut=a,xt(t,l),U}}),Ct=new WeakMap;let Dt=0;class Tt extends ht{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=!1,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Dt,this._focusInitial=()=>{const t=this._focusableElements(),e=t.find(t=>t.hasAttribute("autofocus"))||t[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");e?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=t=>{if("Escape"===t.key){t.preventDefault(),t.stopImmediatePropagation(),this._pruneOverlays();const e=this._overlays[this._overlays.length-1];return e?void this._closeOverlay(e,"escape"):void this._requestClose()}if("Tab"!==t.key||this._useHaDialog)return;const e=this.renderRoot.querySelector(".close"),i=e?[e,...this._focusableElements()]:this._focusableElements();if(!i.length)return t.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const s=this._deepActiveElement(),n=i[0],o=i[i.length-1];!t.shiftKey||s!==n&&i.includes(s)?t.shiftKey||s!==o||(t.preventDefault(),n.focus()):(t.preventDefault(),o.focus())},this._onFallbackCancel=t=>{t.preventDefault(),this._requestClose()},this._onFallbackClick=t=>{this.dismissOnScrim&&t.target===t.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const t=this.getRootNode();this._focusRoot=t;const e=Ct.get(t)||{dialogs:new Set,opener:this._opener};e.dialogs.add(this),Ct.set(t,e),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const t=[...this._overlays];this._overlays=[];for(const e of t.reverse())e.close("disconnect");const e=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const s=e?Ct.get(e):void 0;s?.dialogs.delete(this),super.disconnectedCallback(),e&&s&&requestAnimationFrame(()=>{const t=Ct.get(e);if(!t)return;if(!t.dialogs.size)return t.opener?.isConnected&&t.opener.focus({preventScroll:!0}),void Ct.delete(e);const s=i?.closest("hp-dialog");i?.isConnected&&s&&t.dialogs.has(s)&&i.focus({preventScroll:!0})})}firstUpdated(t){if(super.firstUpdated(t),!this._useHaDialog){const t=this.renderRoot.querySelector("dialog");t&&!t.open&&t.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t&&t!==document.body?t:null}_focusableElements(){const t=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),e=[],i=new Set,s=n=>{if(!i.has(n)){if(i.add(n),n instanceof HTMLElement){if(n.matches(t)&&e.push(n),n instanceof HTMLSlotElement){for(const t of n.assignedNodes({flatten:!0}))s(t);return}if(n.shadowRoot){for(const t of n.shadowRoot.childNodes)s(t);return}}for(const t of n.childNodes)s(t)}};for(const t of this.childNodes)s(t);const n=this.overlayPortal();return n&&s(n),e.filter(t=>{let e=t;for(;e;){const t=getComputedStyle(e);if(e.hidden||e.inert||"true"===e.getAttribute("aria-hidden")||"none"===t.display||"hidden"===t.visibility)return!1;if(e=e.assignedSlot||e.parentElement||(e.getRootNode()instanceof ShadowRoot?e.getRootNode().host:null),e===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(t=>t.owner.isConnected)}_closeOverlay(t,e){const i=this._overlays.findIndex(e=>e.token===t.token);i>=0&&this._overlays.splice(i,1),t.close(e)}registerOverlay(t){this._pruneOverlays();const e=this._overlays.find(e=>e.owner===t.owner);e&&this._overlays.splice(this._overlays.indexOf(e),1);const i=t.group||"transient";for(const t of[...this._overlays].reverse())t.group===i&&this._closeOverlay(t,"exclusive");const s={...t,group:i,token:Symbol("hp-overlay")};this._overlays.push(s);let n=!1;return()=>{if(n)return;n=!0;const t=this._overlays.findIndex(t=>t.token===s.token);t>=0&&this._overlays.splice(t,1)}}closeTransientOverlays(t="outside"){this._pruneOverlays();const e=[...this._overlays].filter(t=>"transient"===(t.group||"transient"));for(const i of e.reverse())this._closeOverlay(i,t);return e.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const t=j` +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21";const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;let n=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const i=this.t;if(e&&void 0===t){const e=void 0!==i&&1===i.length;e&&(t=s.get(i)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&s.set(i,t))}return t}toString(){return this.cssText}};const o=(t,...e)=>{const s=1===t.length?t[0]:e.reduce((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1],t[0]);return new n(s,t,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new n("string"==typeof t?t:t+"",void 0,i))(e)})(t):t,{is:r,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,g=_?_.emptyScript:"",m=p.reactiveElementPolyfillSupport,f=(t,e)=>t,v={toAttribute(t,e){switch(e){case Boolean:t=t?g:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},y=(t,e)=>!r(t,e),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=b){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(t,i,e);void 0!==s&&l(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){const{get:s,set:n}=c(this.prototype,t)??{get(){return this[e]},set(t){this[e]=t}};return{get:s,set(e){const o=s?.call(this);n?.call(this,e),this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const t=u(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const t=this.properties,e=[...h(t),...d(t)];for(const i of e)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const e=litPropertyMetadata.get(t);if(void 0!==e)for(const[t,i]of e)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,e]of this.elementProperties){const i=this._$Eu(t,e);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eu(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,e=this.constructor.elementProperties;for(const i of e.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(e)i.adoptedStyleSheets=s.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of s){const s=document.createElement("style"),n=t.litNonce;void 0!==n&&s.setAttribute("nonce",n),s.textContent=e.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ET(t,e){const i=this.constructor.elementProperties.get(t),s=this.constructor._$Eu(t,i);if(void 0!==s&&!0===i.reflect){const n=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(e,i.type);this._$Em=t,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(t,e){const i=this.constructor,s=i._$Eh.get(t);if(void 0!==s&&this._$Em!==s){const t=i.getPropertyOptions(s),n="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:v;this._$Em=s;const o=n.fromAttribute(e,t.type);this[s]=o??this._$Ej?.get(s)??o,this._$Em=null}}requestUpdate(t,e,i,s=!1,n){if(void 0!==t){const o=this.constructor;if(!1===s&&(n=this[t]),i??=o.getPropertyOptions(t),!((i.hasChanged??y)(n,e)||i.useDefault&&i.reflect&&n===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,i))))return;this.C(t,e,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,e,{useDefault:i,reflect:s,wrapped:n},o){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,o??e??this[t]),!0!==n||void 0!==o)||(this._$AL.has(t)||(this.hasUpdated||i||(e=void 0),this._$AL.set(t,e)),!0===s&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,e]of this._$Ep)this[t]=e;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[e,i]of t){const{wrapped:t}=i,s=this[e];!0!==t||this._$AL.has(e)||void 0===s||this.C(e,void 0,i,s)}}let t=!1;const e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(e){throw t=!1,this._$EM(),e}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,m?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=t=>t,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:t=>t}):void 0,M="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,D="?"+C,T=`<${D}>`,P=document,R=()=>P.createComment(""),A=t=>null===t||"object"!=typeof t&&"function"!=typeof t,I=Array.isArray,F="[ \t\n\f\r]",E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,H=RegExp(`>|${F}(?:([^\\s"'>=/]+)(${F}*=${F}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=t=>(e,...i)=>({_$litType$:t,strings:e,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=P.createTreeWalker(P,129);function Y(t,e){if(!I(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(e):e}const X=(t,e)=>{const i=t.length-1,s=[];let n,o=2===e?"":3===e?"":"",a=E;for(let e=0;e"===l[0]?(a=n??E,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?H:'"'===l[3]?L:N):a===L||a===N?a=H:a===z||a===O?a=E:(a=H,n=void 0);const d=a===H&&t[e+1].startsWith("/>")?" ":"";o+=a===E?i+T:c>=0?(s.push(r),i.slice(0,c)+M+i.slice(c)+C+d):i+C+(-2===c?e:d)}return[Y(t,o+(t[i]||"")+(2===e?"":3===e?"":"")),s]};class J{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let n=0,o=0;const a=t.length-1,r=this.parts,[l,c]=X(t,e);if(this.el=J.createElement(l,i),K.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(s=K.nextNode())&&r.length0){s.textContent=$?$.emptyScript:"";for(let i=0;iI(t)||"function"==typeof t?.[Symbol.iterator])(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==G&&A(this._$AH)?this._$AA.nextSibling.data=t:this.T(P.createTextNode(t)),this._$AH=t}$(t){const{values:e,_$litType$:i}=t,s="number"==typeof i?this._$AC(t):(void 0===i.el&&(i.el=J.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(e);else{const t=new Q(s,this),i=t.u(this.options);t.p(e),this.T(i),this._$AH=t}}_$AC(t){let e=V.get(t.strings);return void 0===e&&V.set(t.strings,e=new J(t)),e}k(t){I(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const n of t)s===e.length?e.push(i=new tt(this.O(R()),this.O(R()),this,this.options)):i=e[s],i._$AI(n),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(t,e=this,i,s){const n=this.strings;let o=!1;if(void 0===n)t=Z(this,t,e,0),o=!A(t)||t!==this._$AH&&t!==U,o&&(this._$AH=t);else{const s=t;let a,r;for(t=n[0],a=0;a{const s=i?.renderBefore??e;let n=s._$litPart$;if(void 0===n){const t=i?.renderBefore??null;s._$litPart$=n=new tt(e.insertBefore(R(),t),t,void 0,i??{})}return n._$AI(t),n},ct=globalThis;let ht=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=lt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};ht._$litElement$=!0,ht.finalized=!0,ct.litElementHydrateSupport?.({LitElement:ht});const dt=ct.litElementPolyfillSupport;dt?.({LitElement:ht}),(ct.litElementVersions??=[]).push("4.2.2");const ut=2,pt=t=>(...e)=>({_$litDirective$:t,values:e});let _t=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};const gt={},mt=pt(class extends _t{constructor(){super(...arguments),this.ot=gt}render(t,e){return e()}update(t,[e,i]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((t,e)=>t===this.ot[e]))return U}else if(this.ot===e)return U;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,i)}}),{I:ft}=at,vt=t=>t,yt=()=>document.createComment(""),bt=(t,e,i)=>{const s=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=s.insertBefore(yt(),n),o=s.insertBefore(yt(),n);i=new ft(e,o,t,t.options)}else{const e=i._$AB.nextSibling,o=i._$AM,a=o!==t;if(a){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||a){let t=i._$AA;for(;t!==e;){const e=vt(t).nextSibling;vt(s).insertBefore(t,n),t=e}}}return i},wt=(t,e,i=t)=>(t._$AI(e,i),t),kt={},xt=(t,e=kt)=>t._$AH=e,$t=t=>{t._$AR(),t._$AA.remove()},St=(t,e,i)=>{const s=new Map;for(let n=e;n<=i;n++)s.set(t[n],n);return s},Mt=pt(class extends _t{constructor(t){if(super(t),t.type!==ut)throw Error("repeat() can only be used in text expressions")}dt(t,e,i){let s;void 0===i?i=e:void 0!==e&&(s=e);const n=[],o=[];let a=0;for(const e of t)n[a]=s?s(e,a):a,o[a]=i(e,a),a++;return{values:o,keys:n}}render(t,e,i){return this.dt(t,e,i).values}update(t,[e,i,s]){const n=(t=>t._$AH)(t),{values:o,keys:a}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=a,o;const r=this.ut??=[],l=[];let c,h,d=0,u=n.length-1,p=0,_=o.length-1;for(;d<=u&&p<=_;)if(null===n[d])d++;else if(null===n[u])u--;else if(r[d]===a[p])l[p]=wt(n[d],o[p]),d++,p++;else if(r[u]===a[_])l[_]=wt(n[u],o[_]),u--,_--;else if(r[d]===a[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(r[u]===a[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(a,p,_),h=St(r,d,u)),c.has(r[d]))if(c.has(r[u])){const e=h.get(a[p]),i=void 0!==e?n[e]:null;if(null===i){const e=bt(t,n[d]);wt(e,o[p]),l[p]=e}else l[p]=wt(i,o[p]),bt(t,n[d],i),n[e]=null;p++}else $t(n[u]),u--;else $t(n[d]),d++;for(;p<=_;){const e=bt(t,l[_+1]);wt(e,o[p]),l[p++]=e}for(;d<=u;){const t=n[d++];null!==t&&$t(t)}return this.ut=a,xt(t,l),U}}),Ct=new WeakMap;let Dt=0;class Tt extends ht{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=!1,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Dt,this._focusInitial=()=>{const t=this._focusableElements(),e=t.find(t=>t.hasAttribute("autofocus"))||t[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");e?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=t=>{if("Escape"===t.key){t.preventDefault(),t.stopImmediatePropagation(),this._pruneOverlays();const e=this._overlays[this._overlays.length-1];return e?void this._closeOverlay(e,"escape"):void this._requestClose()}if("Tab"!==t.key||this._useHaDialog)return;const e=this.renderRoot.querySelector(".close"),i=e?[e,...this._focusableElements()]:this._focusableElements();if(!i.length)return t.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const s=this._deepActiveElement(),n=i[0],o=i[i.length-1];!t.shiftKey||s!==n&&i.includes(s)?t.shiftKey||s!==o||(t.preventDefault(),n.focus()):(t.preventDefault(),o.focus())},this._onFallbackCancel=t=>{t.preventDefault(),this._requestClose()},this._onFallbackClick=t=>{this.dismissOnScrim&&t.target===t.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const t=this.getRootNode();this._focusRoot=t;const e=Ct.get(t)||{dialogs:new Set,opener:this._opener};e.dialogs.add(this),Ct.set(t,e),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const t=[...this._overlays];this._overlays=[];for(const e of t.reverse())e.close("disconnect");const e=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const s=e?Ct.get(e):void 0;s?.dialogs.delete(this),super.disconnectedCallback(),e&&s&&requestAnimationFrame(()=>{const t=Ct.get(e);if(!t)return;if(!t.dialogs.size)return t.opener?.isConnected&&t.opener.focus({preventScroll:!0}),void Ct.delete(e);const s=i?.closest("hp-dialog");i?.isConnected&&s&&t.dialogs.has(s)&&i.focus({preventScroll:!0})})}firstUpdated(t){if(super.firstUpdated(t),!this._useHaDialog){const t=this.renderRoot.querySelector("dialog");t&&!t.open&&t.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let t=document.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return t&&t!==document.body?t:null}_focusableElements(){const t=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),e=[],i=new Set,s=n=>{if(!i.has(n)){if(i.add(n),n instanceof HTMLElement){if(n.matches(t)&&e.push(n),n instanceof HTMLSlotElement){for(const t of n.assignedNodes({flatten:!0}))s(t);return}if(n.shadowRoot){for(const t of n.shadowRoot.childNodes)s(t);return}}for(const t of n.childNodes)s(t)}};for(const t of this.childNodes)s(t);const n=this.overlayPortal();return n&&s(n),e.filter(t=>{let e=t;for(;e;){const t=getComputedStyle(e);if(e.hidden||e.inert||"true"===e.getAttribute("aria-hidden")||"none"===t.display||"hidden"===t.visibility)return!1;if(e=e.assignedSlot||e.parentElement||(e.getRootNode()instanceof ShadowRoot?e.getRootNode().host:null),e===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(t=>t.owner.isConnected)}_closeOverlay(t,e){const i=this._overlays.findIndex(e=>e.token===t.token);i>=0&&this._overlays.splice(i,1),t.close(e)}registerOverlay(t){this._pruneOverlays();const e=this._overlays.find(e=>e.owner===t.owner);e&&this._overlays.splice(this._overlays.indexOf(e),1);const i=t.group||"transient";for(const t of[...this._overlays].reverse())t.group===i&&this._closeOverlay(t,"exclusive");const s={...t,group:i,token:Symbol("hp-overlay")};this._overlays.push(s);let n=!1;return()=>{if(n)return;n=!0;const t=this._overlays.findIndex(t=>t.token===s.token);t>=0&&this._overlays.splice(t,1)}}closeTransientOverlays(t="outside"){this._pruneOverlays();const e=[...this._overlays].filter(t=>"transient"===(t.group||"transient"));for(const i of e.reverse())this._closeOverlay(i,t);return e.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const t=j` ${this.icon?j``:G} ${this.title} `;return this._useHaDialog?j` * { pointer-events: auto; } - `,customElements.get("hp-dialog")||customElements.define("hp-dialog",Tt);const Pt=/^#[0-9a-fA-F]{6}$/;function Rt(t,e){return"string"==typeof t&&Pt.test(t)?t:e}const At="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",It=new RegExp(`^rgb\\(${At}, ${At}, ${At}\\)$`);function Ft(t){if(!Array.isArray(t)||t.length<3)return null;const e=t.slice(0,3);if(!e.every(t=>"number"==typeof t&&Number.isFinite(t)))return null;const[i,s,n]=e.map(t=>Math.round(Math.min(255,Math.max(0,t))));return`rgb(${i}, ${s}, ${n})`}const Et=(t,e,i)=>Math.min(i,Math.max(e,Number.isFinite(t)?t:e));function zt(t){return Number.isFinite(t)?(t%360+360)%360:0}function Ot(t){if("string"!=typeof t)return null;const e=t.trim().replace(/^#/,""),i=/^[0-9a-fA-F]{3}$/.test(e)?e.split("").map(t=>`${t}${t}`).join(""):e;return/^[0-9a-fA-F]{6}$/.test(i)?`#${i.toLowerCase()}`:null}function Nt(t){const e=Ot(t);return e?{r:Number.parseInt(e.slice(1,3),16),g:Number.parseInt(e.slice(3,5),16),b:Number.parseInt(e.slice(5,7),16)}:null}function Ht(t){const e=Et(t.r,0,255)/255,i=Et(t.g,0,255)/255,s=Et(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let a=0;return o>0&&(a=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(a),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Et(t,0,255)).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}(function(t){const e=zt(t.h),i=Et(t.s,0,100)/100,s=Et(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),a=s-n;let r;return r=e<60?[n,o,0]:e<120?[o,n,0]:e<180?[0,n,o]:e<240?[0,o,n]:e<300?[o,0,n]:[n,0,o],{r:Math.round(255*(r[0]+a)),g:Math.round(255*(r[1]+a)),b:Math.round(255*(r[2]+a))}}(t))}function Bt(t){const e=t.visualViewport;return e&&Number.isFinite(e.width)&&Number.isFinite(e.height)?{left:Number(e.offsetLeft)||0,top:Number(e.offsetTop)||0,width:Math.max(0,Number(e.width)||0),height:Math.max(0,Number(e.height)||0)}:{left:0,top:0,width:t.innerWidth,height:t.innerHeight}}function qt(t,e,i,s=7,n=8){const o=i.left+n,a=i.top+n,r=Math.max(o,i.left+i.width-n),l=Math.max(a,i.top+i.height-n),c=Math.max(0,r-o),h=Math.max(0,l-a),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>r&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,r-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=a?(m="top",f=Math.min(Math.max(a,g),Math.max(a,l-u))):f=Math.min(Math.max(a,_),Math.max(a,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(c),maxHeight:Math.round(h)}}class jt{constructor(t,e,i){this.owner=t,this.name=e,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(t=!1){const e=this.window();return!t&&!!e&&function(t){const e=t.HTMLElement?.prototype;return"function"==typeof e?.showPopover&&"function"==typeof e?.hidePopover}(e)}get hasFallback(){return!!this.host}containsPath(t){return t.includes(this.owner)||!!this.host&&t.includes(this.host)}ownsActiveElement(){let t=this.owner.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return!(!t||t!==this.owner&&!this.owner.shadowRoot?.contains(t)&&!this.root?.contains(t))}renderFallback(t,e){const i=this.ensureFallback();return i?(lt(j`${t}`,i),i):null}surface(t,e){return e?this.owner.shadowRoot?.querySelector(t)||null:this.root?.querySelector(t)||null}destroy(){this.root&<(G,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const t=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!t)return null;const e=this.owner.ownerDocument.createElement("div");return e.dataset.hpOverlay=this.name,e.style.display="contents",this.keydown&&e.addEventListener("keydown",this.keydown,!0),t.append(e),this.host=e,this.root=e.attachShadow({mode:"open"}),this.root}}const Wt={title:"Color picker",hue:"Hue",saturation:"Saturation",value:"Brightness",hex:"Hex color",invalidHex:"Enter a 3- or 6-digit hex color"};class Ut extends ht{constructor(){super(...arguments),this.label="",this.opacityLabel="Opacity",this.color="#607d8b",this.opacity=1,this.disabled=!1,this.showOpacity=!0,this.pickerLabels=Wt,this._open=!1,this._pickerRaf=0,this._emitRaf=0,this._forceFallback=!1,this._overlayDispose=null,this._hue=0,this._saturation=0,this._value=0,this._hexDraft="#607d8b",this._hexInvalid=!1,this._lastValidColor="#607d8b",this._activePointerId=null,this._outsidePointerDown=t=>{if(!this._open)return;const e=t.composedPath();this._floating.containsPath(e)||this._closePicker(!1,"outside")},this._keyDown=t=>{this._open&&"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation(),this._closePicker(this._floating.ownsActiveElement(),"escape"))},this._floating=new jt(this,"color-opacity",this._keyDown),this._queuePickerPosition=()=>{if(!this._open)return;this._pickerRaf&&cancelAnimationFrame(this._pickerRaf);const t=this._window();t&&(this._pickerRaf=t.requestAnimationFrame(()=>{this._pickerRaf=0,this._positionPicker()||this._closePicker()}))}}connectedCallback(){super.connectedCallback(),this._syncFromColor(this.color,!1),this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.addEventListener("resize",this._queuePickerPosition),t?.addEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.addEventListener("resize",this._queuePickerPosition),t?.visualViewport?.addEventListener("scroll",this._queuePickerPosition),this.addEventListener("keydown",this._keyDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.removeEventListener("resize",this._queuePickerPosition),t?.removeEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.removeEventListener("resize",this._queuePickerPosition),t?.visualViewport?.removeEventListener("scroll",this._queuePickerPosition),this.removeEventListener("keydown",this._keyDown,!0),this._pickerRaf&&cancelAnimationFrame(this._pickerRaf),this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._pickerRaf=0,this._emitRaf=0,this._closePicker(!1,"disconnect"),super.disconnectedCallback()}updated(t){if(t.has("color")){const t=Ot(this.color);t&&t!==this._lastValidColor&&this._syncFromColor(t,this._open)}this.disabled&&this._open?this._closePicker():this._open&&(this._supportsPopover()||this._renderFallback(),(t.has("color")||t.has("opacity")||t.has("showOpacity")||t.has("label")||t.has("opacityLabel")||t.has("pickerLabels"))&&this._queuePickerPosition())}_window(){return this._floating.window()}_supportsPopover(){return this._floating.usesPopover(this._forceFallback)}_dialog(){return this._floating.dialog()}async _toggle(){this.disabled||(this._open?this._closePicker():(this._forceFallback=!1,this._syncFromColor(this.color,!1),this._hexInvalid=!1,this._activePointerId=null,this._open=!0,await this.updateComplete,this._open&&(this._supportsPopover()||this._renderFallback(),this._positionPicker()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:t=>this._closePicker("escape"===t&&this._floating.ownsActiveElement(),t)})||null:this._closePicker())))}_closePicker(t=!1,e="exclusive"){if(!this._open&&!this._floating.hasFallback)return;const i=this._overlayDispose;this._overlayDispose=null,i?.();const s=this.renderRoot.querySelector(".picker");if(s?.hidePopover)try{s.matches(":popover-open")&&s.hidePopover()}catch{}this._open=!1,this._cancelQueuedEmit(),this._activePointerId=null,this._floating.destroy(),t&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_surface(){return this._floating.surface(".picker",this._supportsPopover())}_renderFallback(){const t=Ut.styles.cssText;this._floating.renderFallback(this._pickerTemplate(!1),t)}_positionPicker(){if(!this._open)return!1;const t=this._window(),e=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!t||!e?.isConnected||!i?.isConnected)return!1;const s=Bt(t);if(i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden",this._supportsPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden"}const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(!(n.width&&n.height&&o.width&&o.height))return!1;const a=qt(n,o,s);return i.style.left=`${a.left}px`,i.style.top=`${a.top}px`,i.dataset.side=a.side,i.style.visibility="",!0}_labels(){const t=this.pickerLabels||Wt;return{title:t.title||Wt.title,hue:t.hue||Wt.hue,saturation:t.saturation||Wt.saturation,value:t.value||Wt.value,hex:t.hex||Wt.hex,invalidHex:t.invalidHex||Wt.invalidHex}}_syncFromColor(t,e){const i=Ot(Rt(t,"#607d8b"))||"#607d8b",s=Nt(i);if(!s)return;const n=Ht(s);(!e||n.s>1e-4)&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._hexDraft=i,this._hexInvalid=!1,this._lastValidColor=i}_cancelQueuedEmit(t=!1){this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._emitRaf=0,t&&this._syncFromColor(this._lastValidColor,!0)}_queueHsvEmit(){if(this._emitRaf)return;const t=this._window();t?this._emitRaf=t.requestAnimationFrame(()=>{this._emitRaf=0,this._emitHsv()}):this._emitHsv()}_emitHsv(){this._emit(Lt({h:this._hue,s:this._saturation,v:this._value}),this.opacity)}_setHue(t){this._hue=Math.min(359,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setSaturation(t){this._saturation=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setValue(t){this._value=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setOpacity(t){this._emit(this._lastValidColor,t)}_shiftRangeKey(t,e,i,s,n){if(!t.shiftKey)return;const o="ArrowRight"===t.key||"ArrowUp"===t.key?10:"ArrowLeft"===t.key||"ArrowDown"===t.key?-10:0;o&&(t.preventDefault(),t.stopPropagation(),n(Math.min(s,Math.max(i,e+o))))}_setSvFromPointer(t,e){const i=t.currentTarget.getBoundingClientRect();i.width&&i.height&&(this._saturation=Math.min(100,Math.max(0,(t.clientX-i.left)/i.width*100)),this._value=Math.min(100,Math.max(0,100*(1-(t.clientY-i.top)/i.height))),e?(this._cancelQueuedEmit(),this._emitHsv()):this._queueHsvEmit())}_svPointerDown(t){if(t.preventDefault(),t.stopPropagation(),null===this._activePointerId){this._activePointerId=t.pointerId;try{t.currentTarget.setPointerCapture(t.pointerId)}catch{}this._setSvFromPointer(t,!0)}}_svPointerMove(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!1))}_svPointerUp(t){if(t.pointerId===this._activePointerId){t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!0),this._activePointerId=null;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}}}_svPointerCancel(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._activePointerId=null,this._cancelQueuedEmit(!0))}_svLostPointerCapture(t){t.pointerId===this._activePointerId&&(this._activePointerId=null,this._cancelQueuedEmit(!0))}_hexInput(t){const e=t.target.value;this._hexDraft=e,this._hexInvalid=!1;const i=Ot(e),s=i?Nt(i):null;if(!i||!s)return;const n=Ht(s);n.s>1e-4&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._emit(i,this.opacity,!0)}_commitHex(){const t=Ot(this._hexDraft);if(!t)return this._hexDraft=this._lastValidColor,void(this._hexInvalid=!0);this._hexDraft=t,this._hexInvalid=!1,t!==this._lastValidColor&&this._emit(t,this.opacity)}_hexKeyDown(t){"Enter"===t.key&&(t.preventDefault(),t.stopPropagation(),this._commitHex())}_emit(t,e,i=!1){const s=Ot(t)||this._lastValidColor,n=Number.isFinite(e)?e:Number(this.opacity)||0,o=Math.min(1,Math.max(0,n));this.color=s,this.opacity=o,this._lastValidColor=s,i||(this._hexDraft=s),this._hexInvalid=!1,this.dispatchEvent(new CustomEvent("hp-color-opacity-change",{detail:{color:s,opacity:o},bubbles:!0,composed:!0}))}_pickerTemplate(t){const e=Math.round(100*Math.min(1,Math.max(0,Number(this.opacity)||0))),i=Lt({h:this._hue,s:this._saturation,v:this._value}),s=Lt({h:this._hue,s:100,v:100}),n=this._labels(),o=Math.round(this._hue),a=Math.round(this._saturation),r=Math.round(this._value);return j` + `,customElements.get("hp-dialog")||customElements.define("hp-dialog",Tt);const Pt=/^#[0-9a-fA-F]{6}$/;function Rt(t,e){return"string"==typeof t&&Pt.test(t)?t:e}const At="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",It=new RegExp(`^rgb\\(${At}, ${At}, ${At}\\)$`);function Ft(t){if(!Array.isArray(t)||t.length<3)return null;const e=t.slice(0,3);if(!e.every(t=>"number"==typeof t&&Number.isFinite(t)))return null;const[i,s,n]=e.map(t=>Math.round(Math.min(255,Math.max(0,t))));return`rgb(${i}, ${s}, ${n})`}const Et=(t,e,i)=>Math.min(i,Math.max(e,Number.isFinite(t)?t:e));function zt(t){return Number.isFinite(t)?(t%360+360)%360:0}function Ot(t){if("string"!=typeof t)return null;const e=t.trim().replace(/^#/,""),i=/^[0-9a-fA-F]{3}$/.test(e)?e.split("").map(t=>`${t}${t}`).join(""):e;return/^[0-9a-fA-F]{6}$/.test(i)?`#${i.toLowerCase()}`:null}function Ht(t){const e=Ot(t);return e?{r:Number.parseInt(e.slice(1,3),16),g:Number.parseInt(e.slice(3,5),16),b:Number.parseInt(e.slice(5,7),16)}:null}function Nt(t){const e=Et(t.r,0,255)/255,i=Et(t.g,0,255)/255,s=Et(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let a=0;return o>0&&(a=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(a),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Et(t,0,255)).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}(function(t){const e=zt(t.h),i=Et(t.s,0,100)/100,s=Et(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),a=s-n;let r;return r=e<60?[n,o,0]:e<120?[o,n,0]:e<180?[0,n,o]:e<240?[0,o,n]:e<300?[o,0,n]:[n,0,o],{r:Math.round(255*(r[0]+a)),g:Math.round(255*(r[1]+a)),b:Math.round(255*(r[2]+a))}}(t))}function Bt(t){const e=t.visualViewport;return e&&Number.isFinite(e.width)&&Number.isFinite(e.height)?{left:Number(e.offsetLeft)||0,top:Number(e.offsetTop)||0,width:Math.max(0,Number(e.width)||0),height:Math.max(0,Number(e.height)||0)}:{left:0,top:0,width:t.innerWidth,height:t.innerHeight}}function qt(t,e,i,s=7,n=8){const o=i.left+n,a=i.top+n,r=Math.max(o,i.left+i.width-n),l=Math.max(a,i.top+i.height-n),c=Math.max(0,r-o),h=Math.max(0,l-a),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>r&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,r-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=a?(m="top",f=Math.min(Math.max(a,g),Math.max(a,l-u))):f=Math.min(Math.max(a,_),Math.max(a,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(c),maxHeight:Math.round(h)}}class jt{constructor(t,e,i){this.owner=t,this.name=e,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(t=!1){const e=this.window();return!t&&!!e&&function(t){const e=t.HTMLElement?.prototype;return"function"==typeof e?.showPopover&&"function"==typeof e?.hidePopover}(e)}get hasFallback(){return!!this.host}containsPath(t){return t.includes(this.owner)||!!this.host&&t.includes(this.host)}ownsActiveElement(){let t=this.owner.ownerDocument.activeElement;for(;t?.shadowRoot?.activeElement;)t=t.shadowRoot.activeElement;return!(!t||t!==this.owner&&!this.owner.shadowRoot?.contains(t)&&!this.root?.contains(t))}renderFallback(t,e){const i=this.ensureFallback();return i?(lt(j`${t}`,i),i):null}surface(t,e){return e?this.owner.shadowRoot?.querySelector(t)||null:this.root?.querySelector(t)||null}destroy(){this.root&<(G,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const t=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!t)return null;const e=this.owner.ownerDocument.createElement("div");return e.dataset.hpOverlay=this.name,e.style.display="contents",this.keydown&&e.addEventListener("keydown",this.keydown,!0),t.append(e),this.host=e,this.root=e.attachShadow({mode:"open"}),this.root}}const Wt={title:"Color picker",hue:"Hue",saturation:"Saturation",value:"Brightness",hex:"Hex color",invalidHex:"Enter a 3- or 6-digit hex color"};class Ut extends ht{constructor(){super(...arguments),this.label="",this.opacityLabel="Opacity",this.color="#607d8b",this.opacity=1,this.disabled=!1,this.showOpacity=!0,this.pickerLabels=Wt,this._open=!1,this._pickerRaf=0,this._emitRaf=0,this._forceFallback=!1,this._overlayDispose=null,this._hue=0,this._saturation=0,this._value=0,this._hexDraft="#607d8b",this._hexInvalid=!1,this._lastValidColor="#607d8b",this._activePointerId=null,this._outsidePointerDown=t=>{if(!this._open)return;const e=t.composedPath();this._floating.containsPath(e)||this._closePicker(!1,"outside")},this._keyDown=t=>{this._open&&"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation(),this._closePicker(this._floating.ownsActiveElement(),"escape"))},this._floating=new jt(this,"color-opacity",this._keyDown),this._queuePickerPosition=()=>{if(!this._open)return;this._pickerRaf&&cancelAnimationFrame(this._pickerRaf);const t=this._window();t&&(this._pickerRaf=t.requestAnimationFrame(()=>{this._pickerRaf=0,this._positionPicker()||this._closePicker()}))}}connectedCallback(){super.connectedCallback(),this._syncFromColor(this.color,!1),this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.addEventListener("resize",this._queuePickerPosition),t?.addEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.addEventListener("resize",this._queuePickerPosition),t?.visualViewport?.addEventListener("scroll",this._queuePickerPosition),this.addEventListener("keydown",this._keyDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("scroll",this._queuePickerPosition,!0);const t=this.ownerDocument.defaultView;t?.removeEventListener("resize",this._queuePickerPosition),t?.removeEventListener("orientationchange",this._queuePickerPosition),t?.visualViewport?.removeEventListener("resize",this._queuePickerPosition),t?.visualViewport?.removeEventListener("scroll",this._queuePickerPosition),this.removeEventListener("keydown",this._keyDown,!0),this._pickerRaf&&cancelAnimationFrame(this._pickerRaf),this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._pickerRaf=0,this._emitRaf=0,this._closePicker(!1,"disconnect"),super.disconnectedCallback()}updated(t){if(t.has("color")){const t=Ot(this.color);t&&t!==this._lastValidColor&&this._syncFromColor(t,this._open)}this.disabled&&this._open?this._closePicker():this._open&&(this._supportsPopover()||this._renderFallback(),(t.has("color")||t.has("opacity")||t.has("showOpacity")||t.has("label")||t.has("opacityLabel")||t.has("pickerLabels"))&&this._queuePickerPosition())}_window(){return this._floating.window()}_supportsPopover(){return this._floating.usesPopover(this._forceFallback)}_dialog(){return this._floating.dialog()}async _toggle(){this.disabled||(this._open?this._closePicker():(this._forceFallback=!1,this._syncFromColor(this.color,!1),this._hexInvalid=!1,this._activePointerId=null,this._open=!0,await this.updateComplete,this._open&&(this._supportsPopover()||this._renderFallback(),this._positionPicker()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:t=>this._closePicker("escape"===t&&this._floating.ownsActiveElement(),t)})||null:this._closePicker())))}_closePicker(t=!1,e="exclusive"){if(!this._open&&!this._floating.hasFallback)return;const i=this._overlayDispose;this._overlayDispose=null,i?.();const s=this.renderRoot.querySelector(".picker");if(s?.hidePopover)try{s.matches(":popover-open")&&s.hidePopover()}catch{}this._open=!1,this._cancelQueuedEmit(),this._activePointerId=null,this._floating.destroy(),t&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_surface(){return this._floating.surface(".picker",this._supportsPopover())}_renderFallback(){const t=Ut.styles.cssText;this._floating.renderFallback(this._pickerTemplate(!1),t)}_positionPicker(){if(!this._open)return!1;const t=this._window(),e=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!t||!e?.isConnected||!i?.isConnected)return!1;const s=Bt(t);if(i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden",this._supportsPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.maxWidth=`${Math.max(0,s.width-16)}px`,i.style.maxHeight=`${Math.max(0,s.height-16)}px`,i.style.visibility="hidden"}const n=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(!(n.width&&n.height&&o.width&&o.height))return!1;const a=qt(n,o,s);return i.style.left=`${a.left}px`,i.style.top=`${a.top}px`,i.dataset.side=a.side,i.style.visibility="",!0}_labels(){const t=this.pickerLabels||Wt;return{title:t.title||Wt.title,hue:t.hue||Wt.hue,saturation:t.saturation||Wt.saturation,value:t.value||Wt.value,hex:t.hex||Wt.hex,invalidHex:t.invalidHex||Wt.invalidHex}}_syncFromColor(t,e){const i=Ot(Rt(t,"#607d8b"))||"#607d8b",s=Ht(i);if(!s)return;const n=Nt(s);(!e||n.s>1e-4)&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._hexDraft=i,this._hexInvalid=!1,this._lastValidColor=i}_cancelQueuedEmit(t=!1){this._emitRaf&&cancelAnimationFrame(this._emitRaf),this._emitRaf=0,t&&this._syncFromColor(this._lastValidColor,!0)}_queueHsvEmit(){if(this._emitRaf)return;const t=this._window();t?this._emitRaf=t.requestAnimationFrame(()=>{this._emitRaf=0,this._emitHsv()}):this._emitHsv()}_emitHsv(){this._emit(Lt({h:this._hue,s:this._saturation,v:this._value}),this.opacity)}_setHue(t){this._hue=Math.min(359,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setSaturation(t){this._saturation=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setValue(t){this._value=Math.min(100,Math.max(0,Number.isFinite(t)?t:0)),this._emitHsv()}_setOpacity(t){this._emit(this._lastValidColor,t)}_shiftRangeKey(t,e,i,s,n){if(!t.shiftKey)return;const o="ArrowRight"===t.key||"ArrowUp"===t.key?10:"ArrowLeft"===t.key||"ArrowDown"===t.key?-10:0;o&&(t.preventDefault(),t.stopPropagation(),n(Math.min(s,Math.max(i,e+o))))}_setSvFromPointer(t,e){const i=t.currentTarget.getBoundingClientRect();i.width&&i.height&&(this._saturation=Math.min(100,Math.max(0,(t.clientX-i.left)/i.width*100)),this._value=Math.min(100,Math.max(0,100*(1-(t.clientY-i.top)/i.height))),e?(this._cancelQueuedEmit(),this._emitHsv()):this._queueHsvEmit())}_svPointerDown(t){if(t.preventDefault(),t.stopPropagation(),null===this._activePointerId){this._activePointerId=t.pointerId;try{t.currentTarget.setPointerCapture(t.pointerId)}catch{}this._setSvFromPointer(t,!0)}}_svPointerMove(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!1))}_svPointerUp(t){if(t.pointerId===this._activePointerId){t.preventDefault(),t.stopPropagation(),this._setSvFromPointer(t,!0),this._activePointerId=null;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}}}_svPointerCancel(t){t.pointerId===this._activePointerId&&(t.preventDefault(),t.stopPropagation(),this._activePointerId=null,this._cancelQueuedEmit(!0))}_svLostPointerCapture(t){t.pointerId===this._activePointerId&&(this._activePointerId=null,this._cancelQueuedEmit(!0))}_hexInput(t){const e=t.target.value;this._hexDraft=e,this._hexInvalid=!1;const i=Ot(e),s=i?Ht(i):null;if(!i||!s)return;const n=Nt(s);n.s>1e-4&&(this._hue=n.h),this._saturation=n.s,this._value=n.v,this._emit(i,this.opacity,!0)}_commitHex(){const t=Ot(this._hexDraft);if(!t)return this._hexDraft=this._lastValidColor,void(this._hexInvalid=!0);this._hexDraft=t,this._hexInvalid=!1,t!==this._lastValidColor&&this._emit(t,this.opacity)}_hexKeyDown(t){"Enter"===t.key&&(t.preventDefault(),t.stopPropagation(),this._commitHex())}_emit(t,e,i=!1){const s=Ot(t)||this._lastValidColor,n=Number.isFinite(e)?e:Number(this.opacity)||0,o=Math.min(1,Math.max(0,n));this.color=s,this.opacity=o,this._lastValidColor=s,i||(this._hexDraft=s),this._hexInvalid=!1,this.dispatchEvent(new CustomEvent("hp-color-opacity-change",{detail:{color:s,opacity:o},bubbles:!0,composed:!0}))}_pickerTemplate(t){const e=Math.round(100*Math.min(1,Math.max(0,Number(this.opacity)||0))),i=Lt({h:this._hue,s:this._saturation,v:this._value}),s=Lt({h:this._hue,s:100,v:100}),n=this._labels(),o=Math.round(this._hue),a=Math.round(this._saturation),r=Math.round(this._value);return j` `:G}
${s} @@ -4440,7 +4457,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`:G} - `}}Bu.properties={hass:{attribute:!1},_config:{state:!0},_snap:{state:!0},_continuityEpoch:{state:!0}},Bu.styles=[Kt,o` + `}}qu.properties={hass:{attribute:!1},_config:{state:!0},_snap:{state:!0},_continuityEpoch:{state:!0}},qu.styles=[Kt,o` .hp-static-title { font-weight: 700; padding: 10px 14px 6px; @@ -4512,7 +4529,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 font-weight: 600; cursor: pointer; } - .hp-static-btn:hover { + :host([data-pointer-hover]) .hp-static-btn:hover { filter: brightness(1.08); } .hp-static-error { @@ -4520,7 +4537,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 text-align: center; color: var(--secondary-text-color, #9aa4ad); } - `],customElements.get("houseplan-space-card")||customElements.define("houseplan-space-card",Bu),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-space-card"===t.type)||window.customCards.push({type:"houseplan-space-card",name:"House Plan — Space (static)",description:"Read-only live schematic of a single houseplan space, with a deep-link button.",preview:!1,documentation:"https://github.com/Matysh/houseplan-card"});const qu=o` + `],customElements.get("houseplan-space-card")||customElements.define("houseplan-space-card",qu),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-space-card"===t.type)||window.customCards.push({type:"houseplan-space-card",name:"House Plan — Space (static)",description:"Read-only live schematic of a single houseplan space, with a deep-link button.",preview:!1,documentation:"https://github.com/Matysh/houseplan-card"});const ju=o` :host { --hp-editor-tray-bg-fallback: color-mix(in srgb, var(--card-background-color, var(--hp-bg)) 94%, var(--hp-line)); --hp-editor-tray-bg: color-mix(in srgb, var(--card-background-color, var(--hp-bg)) 86%, transparent); @@ -4691,7 +4708,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 .editor-secondary { transition: none; } .editor-group-launcher .group-chevron { transition: none; } } -`,ju=(t,e)=>(t.composedPath?.()||[t.target]).some(t=>(t=>!!t&&"function"==typeof t.matches)(t)&&e(t));class Wu{constructor(t){this.host=t,this._openGroupId=null,this._groupGeneration=0,this._renderedContext="",this._focusOwned=!1,this._currentModel=null,this._blocked=!1,this._dismissPointerTarget=null,this._globalDismissListening=!1,this._globalDismissGuard=t=>{this.handleOutsideDismiss(t)}}get hasOpenGroup(){return null!==this._openGroupId}get groupGeneration(){return this._groupGeneration}activeGroup(t){return this._openGroupId&&t.find(t=>t.id===this._openGroupId)||null}reset(){this._openGroupId=null,this._contentAnimation?.cancel(),this._contentAnimation=void 0,this._renderedContext="",this._focusOwned=!1,this._currentModel=null,this._blocked=!1,this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}closeForNavigation(){const t="palette"===this._currentModel?.kind?this._currentModel.dismiss:void 0,e=!!this._openGroupId||!!t;this._openGroupId=null,t?.(),t&&(this._currentModel=null),this._clearDismissClick(),e&&this.host.requestUpdate(),this._syncGlobalDismissListener()}openPalette(){this._openGroupId&&this.closeGroup(!1)}toggleGroup(t,e){this._openGroupId!==e?t.some(t=>t.id===e)&&("palette"===this._currentModel?.kind&&this._currentModel.dismiss?.(),this._groupGeneration+=1,this._openGroupId=e,this.host.clearTip(),this.host.requestUpdate(),this._syncGlobalDismissListener()):this.closeGroup(!1)}closeGroup(t){const e=this._openGroupId;this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener(),t&&e&&this.host.updateComplete().then(()=>{const t=this.host.root(),i=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===e&&null!==t.offsetParent);(i||t.querySelector(".editbar-tools"))?.focus?.()})}renderGroupLauncher(t,e,i){const s=this._openGroupId===t.id,n=t.items.find(e=>e.id===t.activeItemId&&!e.disabled);return j`
-
`}afterRender(){const t=this.host.root();this._blocked&&(this._openGroupId?this.closeGroup(!1):"palette"===this._currentModel?.kind&&this._currentModel.dismiss?.()),this._syncGlobalDismissListener();const e=t.querySelector(".editor-secondary"),i=this._renderedContext,s=e?.dataset.contextId||"";if(s&&i&&s!==i&&!window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches&&(this._contentAnimation?.cancel(),this._contentAnimation=e?.querySelector(".editor-secondary-content")?.animate([{opacity:.35,transform:"translateY(-4px)"},{opacity:1,transform:"translateY(0)"}],{duration:100,easing:"ease-out"})),this._renderedContext=s,i&&s!==i&&this._focusOwned){const i=s?e?.querySelector('[tabindex="0"], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled])'):t.querySelector(".editbar-tools");i?.focus?.(),this._focusOwned=!!s}if("palette"===this._currentModel?.kind&&this._currentModel.launcherId){const e=[...t.querySelectorAll("[data-editor-palette]")].find(t=>t.dataset.editorPalette===this._currentModel?.launcherId);e&&null!==e.offsetParent||this._currentModel.dismiss?.()}if(!this._openGroupId)return;const n=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===this._openGroupId);n&&null!==n.offsetParent||this.closeGroup(!0)}handleOutsideDismiss(t){if(ju(t,t=>t.hasAttribute("data-editor-navigation")))return"pointerdown"===t.type?this.closeForNavigation():"click"===t.type&&this._dismissPointerTarget&&this._clearDismissClick(),!1;if("click"===t.type&&this._dismissPointerTarget){return!!(t.composedPath?.()||[t.target]).includes(this._dismissPointerTarget)&&(this._clearDismissClick(),t.preventDefault(),t.stopImmediatePropagation(),!0)}const e=this._openGroupId||this._blocked||"palette"!==this._currentModel?.kind?null:this._currentModel;if("pointerdown"===t.type&&(this._openGroupId||e)){const i=ju(t,t=>t.classList.contains("editor-secondary")),s=ju(t,t=>!!t.dataset.editorGroup),n=ju(t,t=>!!t.dataset.editorPalette),o=ju(t,t=>t.classList.contains("stage"));if(!(i||s||n||"stay-open-on-canvas"===e?.dismissPolicy&&o))return t.preventDefault(),t.stopImmediatePropagation(),this._dismissPointerTarget=t.target,clearTimeout(this._dismissTimer),this._dismissTimer=window.setTimeout(()=>{this._clearDismissClick()},800),this._openGroupId?this.closeGroup(!1):e?.dismiss?.(),this._syncGlobalDismissListener(),!0}return!1}_activateGroupItem(t,e,i){if(t.id!==this._openGroupId)return;const s=t.items.find(t=>t.id===e);if(!s||s.disabled)return;const n="toggle"===s.role&&"stay-open"===s.closePolicy,o=0===i.detail;n||(this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener()),s.invoke(),!n&&o&&this.host.updateComplete().then(()=>{const e=[...this.host.root().querySelectorAll("[data-editor-group]")].find(e=>e.dataset.editorGroup===t.id&&null!==e.offsetParent);e?.focus()})}_groupKeydown(t){if(!["ArrowLeft","ArrowRight","Home","End"].includes(t.key))return;const e=[...t.currentTarget.querySelectorAll(".editor-group-item:not([disabled])")];if(!e.length)return;t.preventDefault();const i=e.indexOf(this.host.root().activeElement),s="Home"===t.key?0:"End"===t.key?e.length-1:"ArrowLeft"===t.key?i<=0?e.length-1:i-1:(i+1)%e.length;e[s]?.focus()}_clearDismissClick(){this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}_syncGlobalDismissListener(){const t=!this._blocked&&"palette"===this._currentModel?.kind,e=!!this._openGroupId||t||!!this._dismissPointerTarget;e!==this._globalDismissListening&&(this._globalDismissListening=e,e?(window.addEventListener("pointerdown",this._globalDismissGuard,!0),window.addEventListener("click",this._globalDismissGuard,!0)):(window.removeEventListener("pointerdown",this._globalDismissGuard,!0),window.removeEventListener("click",this._globalDismissGuard,!0)))}}const Uu=t=>t.stopPropagation(),Gu=4.166666666666667e-9;function Vu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Gu?t:e}const Ku=(t,e,i,s)=>Math.hypot(i-t,s-e),Yu=(t,e,i,s,n,o,a,r)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+a-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+r-(e+s)))),Xu=(t,e,i,s,n,o,a)=>{const r=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*r,h=Math.sin(i*l)*r,d=Math.cos(a*l)*r,u=Math.sin(a*l)*r,p=Math.max(Ku(t+c,e+h,n+d,o+u),Ku(t-c,e-h,n-d,o-u)),_=Math.max(Ku(t+c,e+h,n-d,o-u),Ku(t-c,e-h,n+d,o+u));return Math.min(p,_)},Ju=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Zu=t=>JSON.parse(JSON.stringify(t)),Qu=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),tp=(t,e,i)=>Math.min(i,Math.max(e,t)),ep=t=>Kl({spaces:[t]})[0],ip=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),a=n(e);return o0?a:1,l=Math.max(s*r*.02,1e-9),c=[];for(const e of t||[])for(const t of ci(e)||[])c.push([t[0],t[1]]);for(const t of i||[])Array.isArray(t)&&t.length>=4&&t.slice(0,4).every(Number.isFinite)&&c.push([t[0],t[1]],[t[2],t[3]]);const h=t=>c.some(e=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l),d=new Map;for(const a of t||[]){if(!a?.id)continue;const c=Qr(t,a.id,e,i,s,n,o,r);if(c)for(let t=0;t0&&u>0&&a===p&&u!==a))continue;const _=c.poly[s],g=c.poly[(s+1)%c.poly.length],m=Math.hypot(g[0]-_[0],g[1]-_[1]);if(!(m>l&&m<.5*o-1e-9*o))continue;if(h(_)||h(g))continue;const f=ip(_,g,r),v=d.get(f);v?v.targets.add(a):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([a])})}}}let u=e.slice();const p=(t,e)=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l,_=(t,e)=>{if(!Array.isArray(t.a)||!Array.isArray(t.b)||t.a.length<2||t.b.length<2)return!1;const i=[Number(t.a[0])*r,Number(t.a[1])*r],s=[Number(t.b[0])*r,Number(t.b[1])*r];return!![...i,...s].every(Number.isFinite)&&(p(i,e.a)&&p(s,e.b)||p(i,e.b)&&p(s,e.a))};for(const t of[...d.values()].filter(t=>1===t.targets.size).sort((t,e)=>ip(t.a,t.b,r).localeCompare(ip(e.a,e.b,r)))){const e=[...t.targets][0],i=u.filter(e=>_(e,t));if(new Set(i.map(t=>t.cm)).size>1)continue;let n=!1;u=u.map(i=>_(i,t)?(n=!0,i.cm===e?i:{...i,cm:e}):i),n||(u=Ir(u,t.a,t.b,e,s,r))}return u}const np=t=>{const e=[];for(const i of t||[]){const t=ci(i);if(t?.length)for(let i=0;i{let e=0,i=0,s=0;for(const i of t.markers||[]){if("ripple"===i.display&&(i.display="icon_ripple",e++),Array.isArray(i.controls)){const t="string"==typeof i.binding&&i.binding.startsWith("entity:")?i.binding.slice(7):"",s=t?i.controls.filter(e=>e!==t):i.controls;JSON.stringify(s)!==JSON.stringify(i.controls)&&(i.controls=s.length?s:null,e++)}const t=i.vacuum;t&&Qu(t,"trail")&&(["never","cleaning","always"].includes(t.trail_mode)||(t.trail_mode=!1===t.trail?"never":"cleaning"),delete t.trail,e++)}for(const n of t.spaces||[]){const t=n.settings;"glow"===t?.fill_mode&&("boolean"!=typeof t.glow_enabled&&(t.glow_enabled=!0),t.fill_mode="none",e++,i++);for(const t of n.rooms||[]){const i=t.settings;"glow"===i?.fill_mode&&("boolean"!=typeof i.glow&&(i.glow=!0),delete i.fill_mode,e++,s++)}if(Qu(n,"segments")&&(delete n.segments,e++),Qu(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(Qu(n,"plan_scale_x")||(n.plan_scale_x=t),Qu(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Qu(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?tp(o,.1,1e3):5,e++);const a=Number(n.cell_cm),r=Number.isFinite(a)&&a>0?a:5;for(const t of n.wall_columns||[])if("circle"===t.shape)Qu(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Qu(t,"angle")){const i=((Number(t.angle)||0)%90+90)%90;t.angle!==i&&(t.angle=i,e++)}for(const t of n.decor||[]){if(Qu(t,"width")){const i=Number(t.width);(Qu(t,"width_cm")||Number.isFinite(i))&&(Qu(t,"width_cm")||(t.width_cm=Number(tp(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Qu(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Qu(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(tp(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Qu(t,"scale")||Qu(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1]));if(!(Qu(t,"entity")||Qu(t,"attr")||Qu(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,a=s||n?"":Yi(t.entity,o);if(s||a){if(a){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+a+i.slice(e+2):`${i}${i?" ":""}${a}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let r=a.total;for(const t of i.spaces||[]){const e=ep(t);if(!e)continue;if(!zc(t.open_spans).length){const i=Bc(e.rooms,null,ql,.02*Zl,!0);i.length&&(t.open_spans=qc(i,ql),r++)}}const l=Zu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,a=0,r=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Ju(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Gu||s))return;n++,t>a&&(a=t);const o=t*Jl*e;o>r&&(r=o,l=i)};for(const t of i){const e=Ju(t),i=null!=t?.id?String(t.id):"";for(const s of t.rooms||[]){o++;let t=0;if(s.poly?.length)s.poly=s.poly.map(e=>{const i=[Vu(e[0]),Vu(e[1])];return t=Math.max(t,Ku(e[0],e[1],i[0],i[1])),i});else if(null!=s.x&&null!=s.y){const e=s.x,i=s.y,n=s.w||0,o=s.h||0,a=Vu(e+n),r=Vu(i+o),l=Vu(e),c=Vu(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Yu(e,i,n,o,l,c,h,d),s.x=l,s.y=c,s.w=h,s.h=d}p(t,e,i)}for(const s of t.room_drafts||[]){o++;let t=0;const n=(s.points||[]).map(e=>{const i=[Vu(e[0]),Vu(e[1])];return t=Math.max(t,Ku(e[0],e[1],i[0],i[1])),i}),a=n.length?[n[0]]:[],r=[];for(let t=0;t+1t.points?.length>=2),h+=e-t.room_drafts.length,t.room_drafts.length||delete t.room_drafts}for(const s of t.partitions||[]){o++;const n=[Vu(s.a[0]),Vu(s.a[1])],a=[Vu(s.b[0]),Vu(s.b[1])];let r=Math.max(Ku(s.a[0],s.a[1],n[0],n[1]),Ku(s.b[0],s.b[1],a[0],a[1]));const l=Ku(n[0],n[1],a[0],a[1]),c=(t.openings||[]).filter(t=>"partition"===t.host?.kind&&t.host.id===s.id).every(t=>{const e=Number(t.length),i=Number(t.host.t),s=i*l;return Number.isFinite(e)&&e>0&&Number.isFinite(i)&&i>=0&&i<=1&&s-e/2>=-Gu&&s+e/2<=l+Gu});l>Gu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Vu(s.center[0]),Vu(s.center[1])],n=Ku(s.center[0],s.center[1],t[0],t[1]);s.center=t,p(n,e,i)}for(const s of t.decor||[]){o++;let t=0;if("line"===s.kind){const e=[Vu(s.x1),Vu(s.y1)],i=[Vu(s.x2),Vu(s.y2)];t=Math.max(Ku(s.x1,s.y1,e[0],e[1]),Ku(s.x2,s.y2,i[0],i[1])),s.x1=e[0],s.y1=e[1],s.x2=i[0],s.y2=i[1]}else{const e=Vu(s.x),i=Vu(s.y);if(null!=s.w&&null!=s.h){const n=Vu(s.x+s.w),o=Vu(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Yu(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Ku(s.x,s.y,e,i);s.x=e,s.y=i}p(t,e,i)}for(const s of t.openings||[]){if(o++,"partition"===s.host?.kind){const n=(t.partitions||[]).find(t=>t.id===s.host.id),o=Number(s.host.t);if(!n||!Number.isFinite(o)||o<0||o>1)continue;const a=n.b[0]-n.a[0],r=n.b[1]-n.a[1];if(Math.hypot(a,r)<=Gu)continue;const l=n.a[0]+a*o,h=n.a[1]+r*o;let d=180*Math.atan2(r,a)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Xu(s.x,s.y,Number.isFinite(u)?u:d,Number(s.length)||0,l,h,d);s.x=l,s.y=h,s.angle=d,_&&c++,p(g,e,i,_);continue}const n=ui([s.x,s.y],t.rooms||[],.025,{step:Ql,length:Number(s.length)||0});if(!n)continue;const a=Number(s.angle),r=!(Number.isFinite(a)&&a===n.angle),l=Xu(s.x,s.y,Number.isFinite(a)?a:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,r&&c++,p(l,e,i,r)}}for(const[t,e]of Object.entries(s)){if(!e||"object"!=typeof e)continue;const i=e;if("number"!=typeof i.x||"number"!=typeof i.y)continue;o++;const n=Vu(i.x),a=Vu(i.y),r=Ku(i.x,i.y,n,a);s[t]={...i,x:n,y:a};const l="string"==typeof i.s?i.s:"";p(r,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:a,maxShiftCm:r,maxSpace:l,rotated:c,removedDrafts:h},changed:n>0}}(i.spaces||[],e||{});i.spaces=c.spaces;const h={...c.report};let d=0,u=0,p=0;for(let t=0;t[t.id,t.open_to||[]]),walls:e.walls||[]}),o=ep(e),a=ep(s);if(!o||!a)continue;const r=np(o.rooms),c=np(a.rooms),_=.02*Zl;let g=Xc(zc(e.open_spans),r,c,ql);const m=g.length;g=Yc(g,a.rooms,ql,_),g=g.map(t=>{const e=Fc(t,ql),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=e[2]-e[0],r=e[3]-e[1],l=Math.hypot(a,r)||1,d=c.map(([t,e])=>[t[0],t[1],e[0],e[1]]).filter(t=>{const e=t[2]-t[0],s=t[3]-t[1],c=Math.hypot(e,s)||1;return Math.abs(a*s-r*e)/(l*c)<=1e-6&&Oc(o,t).d<=4*_&&Oc(i,t).d<=4*_&&Oc(n,t).d<=4*_}).sort((t,e)=>Math.hypot(e[2]-e[0],e[3]-e[1])-Math.hypot(t[2]-t[0],t[3]-t[1]))[0];if(h.total++,!d)return t;const u=[[d[0],d[1]],[d[2],d[3]]],p=Hc(i,d,u,Zl,2*_),g=Hc(n,d,u,Zl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Zl)return t;const m=Math.max(Math.hypot(p[0]-i[0],p[1]-i[1]),Math.hypot(g[0]-n[0],g[1]-n[1]));if(m>1e-6*Zl){h.moved++;const t=m/ql;t>h.maxShift&&(h.maxShift=t);const e=m/Zl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ic(p,g,ql)}),g=Yc(g,a.rooms,ql,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Fc(t,ql));g.length?s.open_spans=g:delete s.open_spans,jc(s.rooms||[],a.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ar(e.walls,r,c,Ql,ql);y=sp(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=il(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=Pr(y,s.rooms||[],Ql,1,f.map(t=>[t[0]/ql,t[1]/ql,t[2]/ql,t[3]/ql])),d+=Math.max(0,v-y.length),y.length?s.walls=y:delete s.walls;const b=JSON.stringify({spans:s.open_spans||[],links:(s.rooms||[]).map(t=>[t.id,t.open_to||[]]),walls:s.walls||[]});b!==n&&p++}const _=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n;o<6&&_&&(i.model_version=6);const g=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n,m=Number.isInteger(Number(i.model_version))?Number(i.model_version):o;return{config:i,layout:c.layout,report:{...h,modelFrom:o,modelTo:m,migrated:r,glowSpacesMigrated:a.glowSpaces,glowRoomsMigrated:a.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class ap{constructor(t=50){this._undo=[],this._redo=[],this._limit=Math.max(30,Math.floor(t))}get canUndo(){return this._undo.length>0}get canRedo(){return this._redo.length>0}get undoName(){return this._undo[this._undo.length-1]?.name??null}get redoName(){return this._redo[this._redo.length-1]?.name??null}get size(){return this._undo.length}push(t){this._undo.push(t),this._undo.length>this._limit&&this._undo.splice(0,this._undo.length-this._limit),this._redo=[]}undo(){const t=this._undo.pop()??null;return t&&this._redo.push(t),t}redo(){const t=this._redo.pop()??null;return t&&this._undo.push(t),t}clear(){this._undo=[],this._redo=[]}}const rp=new WeakMap;const lp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function cp(t){const e=t.defaultView;if(!e||!e.CSS?.supports?.("mix-blend-mode","screen"))return!1;const i=[128,32,16],s=[16,64,128],n=[9,19,29],o=`\n \n \n \n \n \n `,a=e.URL.createObjectURL(new Blob([o],{type:"image/svg+xml"}));try{const o=await new Promise((t,i)=>{const s=new e.Image,n=e.setTimeout(()=>i(new Error("SVG blend probe timeout")),1e3);s.onload=()=>{e.clearTimeout(n),t(s)},s.onerror=()=>{e.clearTimeout(n),i(new Error("SVG blend probe failed"))},s.src=a}),r=t.createElement("canvas");r.width=4,r.height=1;const l=r.getContext("2d",{willReadFrequently:!0});if(!l)return!1;l.drawImage(o,0,0,4,1);const c=l.getImageData(0,0,4,1).data;return lp(c,i,0)&&lp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&lp(c,s,8)&&lp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const hp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},dp=t=>Math.max(0,Math.min(1,t)),up=(t,e,i)=>t+(e-t)*i,pp=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function _p(t,e){return{centerX:t.x+t.w/2,centerY:t.y+t.h/2,pixelsPerUnit:e>0&&t.w>0?e/t.w:1,viewBox:{...t}}}function gp(t,e,i){const s=Math.max(1e-9,t.pixelsPerUnit),n=Math.max(1e-9,e/s),o=Math.max(1e-9,i/s);return{x:t.centerX-n/2,y:t.centerY-o/2,w:n,h:o}}function mp(t){const e=t.trim(),i=/^rgba?\(\s*([\d.]+)[, ]+([\d.]+)[, ]+([\d.]+)(?:\s*[,/]\s*([\d.]+))?\s*\)$/i.exec(e);if(i)return[Number(i[1]),Number(i[2]),Number(i[3]),null==i[4]?1:Number(i[4])];const s=/^#([0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];return s?[parseInt(s.slice(0,2),16),parseInt(s.slice(2,4),16),parseInt(s.slice(4,6),16),8===s.length?parseInt(s.slice(6,8),16)/255:1]:null}function fp(t,e,i){const s=mp(t),n=mp(e);if(!s||!n)return i<.5?t:e;const o=dp(i);return`rgba(${Math.round(up(s[0],n[0],o))}, ${Math.round(up(s[1],n[1],o))}, ${Math.round(up(s[2],n[2],o))}, ${up(s[3],n[3],o).toFixed(3)})`}function vp(t,e,i){const s=(t=>{const e=dp(t);if(0===e||1===e)return e;let i=0,s=1,n=e;for(let t=0;t<12;t++)n=(i+s)/2,pp(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=dp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:vp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(a):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(a),n}cancel(t=!0){this._raf&&this._clock.cancelFrame(this._raf),this._raf=0;const e=this._state;this._state=null,this._token++,e&&t&&(e.phase="settling",e.presented=e.to,this._hooks.frame(e),this._hooks.settled(e))}dispose(){this.cancel(!1)}}const bp="houseplan_card_labs_v1",wp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function kp(t){const e=/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/.exec(String(t||"").trim());if(!e)return null;const i=e.slice(1).map(Number);return i.every(t=>Number.isSafeInteger(t))?i:null}function xp(t,e){for(let i=0;i<3;i++)if(t[i]!==e[i])return t[i]t.split(",")).map(t=>t.trim()).filter(Boolean)}function Tp(t,e,i,s=wp){const n=function(t,e=wp){const i=kp(t),s=new Map;if(!i||!Sp(e))return s;for(const t of e){const e=kp(t.since),n=kp(t.expires);xp(i,e)>=0&&xp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(Sp(s)?s.map(t=>t.id):[]),a=new Set(function(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e.filter(t=>"string"==typeof t):[]}catch{return[]}}(e).filter(t=>n.has(t)));let r=!1;const l=t=>{if("off"===t)return a.clear(),void(r=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(r=!0,e||!n.has(i)?a.delete(i):a.add(i))};for(const e of Dp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Dp(Mp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Cp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Pp={active:Object.freeze([]),space:""},Rp="",Ap=!1,Ip="";const Fp=new Set;function Ep(){if("undefined"==typeof window)return Pp;const t=Tp(window.location,function(){try{return window.localStorage.getItem(bp)}catch{return null}}(),Rp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(bp,t)}catch{}}(t.persist),Pp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Fp)t(Pp);return Pp}function zp(){Ep()}function Op(t){return Rp=t,"undefined"==typeof window?Pp:(Ap||(Ap=!0,window.addEventListener("hashchange",zp),window.addEventListener("popstate",zp)),Ep())}const Np=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Hp=64;function Lp(t){return[t.rotDeg,t.tiltDeg,t.xyScale,t.zScale,t.origin[0],t.origin[1]].every(Number.isFinite)&&Math.abs(t.xyScale)>1e-12&&Math.abs(Math.cos(t.tiltDeg*Math.PI/180))>1e-12}function Bp(t,e,i=Np){if(!(Lp(i)&&Number.isFinite(t[0])&&Number.isFinite(t[1])&&Number.isFinite(e)))throw new Error("invalid isometric projection input");const s=i.rotDeg*Math.PI/180,n=i.tiltDeg*Math.PI/180,o=t[0]-i.origin[0],a=t[1]-i.origin[1],r=(o*Math.cos(s)-a*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+a*Math.cos(s))*i.xyScale;return[i.origin[0]+r,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function qp(t,e=Np){if(!Lp(e)||!Number.isFinite(t[0])||!Number.isFinite(t[1]))throw new Error("invalid isometric projection input");const i=e.rotDeg*Math.PI/180,s=e.tiltDeg*Math.PI/180,n=(t[0]-e.origin[0])/e.xyScale,o=(t[1]-e.origin[1])/(e.xyScale*Math.cos(s));return[e.origin[0]+n*Math.cos(i)+o*Math.sin(i),e.origin[1]-n*Math.sin(i)+o*Math.cos(i)]}function jp(t=Np){return`matrix(${function(t=Np){if(!Lp(t))throw new Error("invalid isometric camera");const e=t.rotDeg*Math.PI/180,i=t.tiltDeg*Math.PI/180,s=t.xyScale*Math.cos(e),n=-t.xyScale*Math.sin(e),o=t.xyScale*Math.sin(e)*Math.cos(i),a=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,a,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-a*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Wp(t,e=Np){const{rect:i,wallHeight:s}=t,n=t.openingHeight??s,o=t.floorDepth??0;if(!(i.w>=0)||!(i.h>=0)||!Number.isFinite(s)||!Number.isFinite(n)||!Number.isFinite(o)||s<0||n<0||o<0)throw new Error("invalid isometric frame");const a=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],r=Math.max(s,n),l=a.flatMap(t=>[Bp(t,-o,e),Bp(t,r,e)]),c=l.map(t=>t[0]),h=l.map(t=>t[1]),d=Math.min(...c),u=Math.min(...h);return{x:d,y:u,w:Math.max(...c)-d,h:Math.max(...h)-u}}const Up=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Gp(t){let e=0;for(let i=0;iArray.isArray(t)&&Number.isFinite(t[0])&&Number.isFinite(t[1])).map(t=>[Number(t[0]),Number(t[1])]),i=e[e.length-1];return e.length>1&&e[0][0]===i[0]&&e[0][1]===i[1]&&e.pop(),e}(t);if(i.length<3)return[];const s=!e;return Gp(i)>0===s?i:[...i].reverse()}function Kp(t,e,i){return t.length?`M ${t.map(t=>Up(Bp(t,i,e))).join(" L ")} Z`:""}function Yp(t,e,i){const s=e[1]-t[1],n=-(e[0]-t[0]),o=i.rotDeg*Math.PI/180;return s*Math.sin(o)+n*Math.cos(o)}function Xp(t,e,i=Np){if(!Number.isFinite(e)||e<0)throw new Error("invalid floor edge height");const s=(t||[]).map(t=>(t||[]).map((t,e)=>function(t,e){const i=Vp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Gp(t))>=1e-9)).filter(t=>t.length&&Gp(t[0])>0);s.sort((t,e)=>{const i=t[0][0],s=e[0][0];return i[0]-s[0]||i[1]-s[1]||Math.abs(Gp(e[0]))-Math.abs(Gp(t[0]))});const n=[],o=[];let a=0;for(let t=0;tt.depth-e.depth||t.component-e.component||t.edge-e.edge),{footprintPath:n.join(" "),sides:o,componentCount:s.length,edgeCount:a}}function Jp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Zp=t=>t.every(Number.isFinite);function Qp(t,e,i,s){const n=t[0]*i,o=t[1]*s,a=e*Math.PI/180;return[n*Math.cos(a)-o*Math.sin(a),n*Math.sin(a)+o*Math.cos(a)]}function t_(t,e,i,s,n,o,a){const r=t.flipH?-1:1,l=t.flipV?-1:1,c=function(t,e){return[t[0]+e[0],t[1]+e[1]]}([t.x+t.face.ox,t.y+t.face.oy],Qp(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:Qp(s,t.angle,r,l),quarterVector:Qp([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const e_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function i_(t,e,i=Np){const s=Math.max(0,Math.min(1,Number.isFinite(e)?e:0));return t.leaves.map(e=>{const n=function(t,e){const i=t.turnDeg*e*Math.PI/180;return[t.hinge[0]+t.closedVector[0]*Math.cos(i)+t.quarterVector[0]*Math.sin(i),t.hinge[1]+t.closedVector[1]*Math.cos(i)+t.quarterVector[1]*Math.sin(i)]}(e,s),o=Bp(e.hinge,e.bottom,i),a=Bp(n,e.bottom,i),r=Bp(n,e.top,i),l=Bp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${e_(o)} L ${e_(a)} L ${e_(r)} L ${e_(l)} Z`,shadowD:`M ${e_(Bp(e.hinge,0,i))} L ${e_(Bp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const s_={window:120,door:90,passage:90,gate:300};function n_(t){return s_[t]}function o_(t,e){const i=[t[0],t[1]],s=[e[0],e[1]];return function(t,e){return t[0]-e[0]||t[1]-e[1]}(i,s)<=0?{a:i,b:s}:{a:s,b:i}}function a_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=o_(t.a,t.b);if(Math.hypot(s.b[0]-s.a[0],s.b[1]-s.a[1])<=1e-9)return;const n=function(t,e){const i=t=>(Math.abs(t)<=5e-10?0:Math.round(1e6*t)/1e6).toFixed(6);return`${i(t[0])},${i(t[1])}>${i(e[0])},${i(e[1])}`}(s.a,s.b),o=e.get(n);if(o)return o.physicalHalfWidth=Math.max(o.physicalHalfWidth,t.half||0),o.sourceOrder=Math.min(o.sourceOrder,i),void(t.partitionHost&&(o.partitionHost&&o.partitionHost.id!==t.partitionHost.id?o.ambiguousPartitionHost=!0:o.partitionHost=t.partitionHost));e.set(n,{segmentKey:n,a:s.a,b:s.b,physicalHalfWidth:Math.max(0,t.half||0),sourceOrder:i,...t.partitionHost?{partitionHost:t.partitionHost}:{}})}),[...e.values()]}function r_(t,e){if(Math.abs(t.distance-e.distance)>1e-9)return t.distance-e.distance;if(Math.abs(t.perpendicular-e.perpendicular)>1e-9)return t.perpendicular-e.perpendicular;return(t.target.segmentKeye.target.segmentKey?1:0)||t.target.sourceOrder-e.target.sourceOrder}function l_(t){const e=a_(t.intervals).map(e=>{const i=function(t,e){const i=e.b[0]-e.a[0],s=e.b[1]-e.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,r=(t[0]-e.a[0])*o+(t[1]-e.a[1])*a,l=Math.max(0,Math.min(n,r)),c=e.a[0]+l*o,h=e.a[1]+l*a;return{along:l,length:n,x:c,y:h,distance:Math.hypot(t[0]-c,t[1]-h),perpendicular:Math.abs((t[0]-e.a[0])*a-(t[1]-e.a[1])*o)}}(t.pointer,e);return{target:e,...i,envelope:Math.max(t.baseTolerance,e.physicalHalfWidth+t.bodyPointerPadding)}}).filter(t=>t.distance<=t.envelope+1e-9).filter(e=>!function(t,e,i,s,n){const o=e.b[0]-e.a[0],a=e.b[1]-e.a[1],r=Math.hypot(o,a);if(!(r>1e-9))return!1;const l=o/r,c=a/r;for(const o of i){if(!o.open&&o.kind)continue;const i=o_(o.a,o.b),a=i.b[0]-i.a[0],r=i.b[1]-i.a[1],h=Math.hypot(a,r);if(!(h>1e-9))continue;const d=a/h,u=r/h;if(Math.abs(l*u-c*d)>1e-6)continue;if(Math.abs((i.a[0]-e.a[0])*c-(i.a[1]-e.a[1])*l)>n)continue;const p=(t[0]-i.a[0])*d+(t[1]-i.a[1])*u,_=1e-9;if(!(p<=_||p>=h-_)&&Math.abs((t[0]-i.a[0])*u-(t[1]-i.a[1])*d)<=s+1e-9)return!0}return!1}(t.pointer,e.target,t.intervals,e.envelope,Math.max(1e-9,Math.min(t.baseTolerance,.04*t.gridStep)))),i=e.filter(e=>!!e.target.partitionHost&&t.renderedLength+2*e.target.physicalHalfWidth>e.length+1e-9).sort(r_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(r_);let n=s[0];if(!n)return{candidate:null,jambBlockedTarget:i[0]?.target||null};const o=s.filter(t=>Math.abs(t.distance-n.distance)<=1e-9&&Math.abs(t.perpendicular-n.perpendicular)<=1e-9),a=o.filter(t=>t.target.partitionHost);if(a.length){if(1!==new Set(a.map(t=>t.target.partitionHost.id)).size||a.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=a[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),r=e/s,l=i/s;if(!o.every(e=>{const i=e.target.b[0]-e.target.a[0],s=e.target.b[1]-e.target.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,c=Math.abs(r*a-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*r);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:r,length:l}=n,c=r.b[0]-r.a[0],h=r.b[1]-r.a[1],d=c/l,u=h/l,p=r.partitionHost?r.physicalHalfWidth:0,_=Math.min(Math.max(0,t.renderedLength)/2+p,l/2);let g=n.along;const m=Math.max(t.gridStep,1e-9),f=l/2;g=Math.abs(g-f)<=m/2?f:Math.round(g/m)*m,g=Math.max(_,Math.min(l-_,g));const v=r.a[0]+d*g,y=r.a[1]+u*g,b=Math.max(0,t.renderedLength)/2,w=g-b,k=g+b,x=Math.max(0,w),$=Math.max(0,l-k),S=[r.a[0]+d*(w-x/2),r.a[1]+u*(w-x/2)],M=[r.a[0]+d*(k+$/2),r.a[1]+u*(k+$/2)];let C=180*Math.atan2(h,c)/Math.PI;C>=90?C-=180:C<-90&&(C+=180);const D=Math.abs(g-f)<=1e-9;return{candidate:{presetRevision:t.preset.revision,geometryRevision:t.geometryRevision,pointer:[t.pointer[0],t.pointer[1]],type:t.preset.type,lengthCm:t.preset.lengthCm,flipH:t.preset.flipH,flipV:t.preset.flipV,x:v,y:y,angle:C,renderedLength:t.renderedLength,target:r,...r.partitionHost?{host:{...r.partitionHost,t:l>0?g/l:0}}:{},measure:{labels:[{distance:x,midpoint:S},{distance:$,midpoint:M}],guide:D?{x:v,y:y,angle:C}:null}},jambBlockedTarget:null}}function c_(t,e,i,s,n=1e-6){return t.presetRevision===i&&t.geometryRevision===s&&Math.hypot(t.pointer[0]-e[0],t.pointer[1]-e[1])<=n}const h_="1.65.0-beta.7",d_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},u_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},p_=2e3,__=1e3,g_=1500,m_=t=>{const e=String(t??"").trim().replace(",",".");if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e))return null;const i=Number(e);return Number.isFinite(i)?i:null},f_=(t,e)=>{if(!t.has(e))return{hit:!1};const i=t.get(e);return t.delete(e),t.set(e,i),{hit:!0,value:i}},v_=(t,e,i,s)=>{for(t.delete(e),t.set(e,i);t.size>s;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},y_=new Map;let b_=0;const w_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let k_=1e4;const x_="houseplan_card_layout_v1",$_="houseplan_card_cfg_v1",S_="houseplan_card_zoom_v1",M_="houseplan_card_nav_v1",C_="houseplan_card_kiosk_v1",D_="houseplan_card_view_v1",T_=1e3,P_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],R_=(t,e)=>{const i=Math.min(t.x,e.x),s=Math.min(t.y,e.y);return{x:i,y:s,w:Math.max(t.x+t.w,e.x+e.w)-i,h:Math.max(t.y+t.h,e.y+e.h)-s}},A_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),I_=2e3,F_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},E_=t=>{history.pushState(null,"",t),F_(window,"location-changed",{replace:!1})},z_=(t,e)=>{let i,s=null;const n=(...n)=>{clearTimeout(i),s=n,i=window.setTimeout(()=>{i=void 0;const e=s;s=null,e&&t(...e)},e)};return n.flush=()=>{if(void 0===i)return;clearTimeout(i),i=void 0;const e=s;s=null,e&&t(...e)},n.cancel=()=>{clearTimeout(i),i=void 0,s=null},n.pending=()=>void 0!==i,n},O_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class N_ extends ht{constructor(){super(...arguments),this._space="f1",this._layout={},this._serverStorage=!1,this._loadOk=!1,this._serverCanWrite=null,this._loading=!1,this._loadTries=0,this._serverCfg=null,this._cfgRev=0,this._cfgContentFingerprint="",this._unsubCfg=null,this._unsubLayout=null,this._unsubVirtual=null,this._liveSyncAttempt=null,this._liveSyncGeneration=0,this._liveSyncConnection=null,this._layoutRev=0,this._layoutContentFingerprint="",this._virtualLights=_n(null),this._canOptimizeUndo=!1,this._undoKind=null,this._devices=[],this._regSignature="",this._defPos={},this._newSyncKey="",this._tip=null,this._hoverRoom=null,this._selId=null,this._toast="",this._mode="view",this._pendingNavMode=null,this._decorTool="select",this._decorStyle={...ir},this._decorDraft=null,this._decorMove=null,this._decorSel=null,this._decorEraseConfirm=null,this._decorTextDialog=null,this._decorShapeDialog=null,this._backdropDialog=null,this._decorTextSelection={start:0,end:0},this._furnPalette=null,this._dtBox=null,this._dtDrag=null,this._bdDrag=null,this._slide="",this._reducedMotion=!1,this._onMotionChange=t=>{this._reducedMotion=t.matches,t.matches&&this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:t.matches&&this._modeTransition.active&&this._cancelModeTransition(!0),this.requestUpdate()},this._editorChromeMode="plan",this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest=0,this._modeTransitionTargetZoom=1,this._modeTransitionEditorCamera=null,this._modeTransition=new yp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Wu({root:()=>this.renderRoot,requestUpdate:()=>this.requestUpdate(),updateComplete:()=>this.updateComplete,clearTip:()=>{this._tip=null}}),this._editorSecondaryCopy={groupActive:(t,e)=>this._t("editor.group_active",{group:t,item:e}),openGroup:t=>this._t("editor.open_group",{group:t}),disabledAction:(t,e)=>this._t("editor.disabled_action",{action:t,reason:e})},this._tool="draw",this._geometryHistory=new ap(50),this._wallDialog=null,this._drawWallField=null,this._activeDraftId=null,this._resumeDraftBySpace={},this._physicalSel=null,this._physicalDialog=null,this._partitionDeleteDialog=null,this._physicalDrag=null,this._physicalRotate=null,this._physicalLastTap=null,this._physicalPickCycle=null,this._wallUnionCache=null,this._isoGeometryCache=new Map,this._isoFallback=new Set,this._openingTunnelCache=null,this._openingWallIndexCache=new Map,this._openingPlacementIntervalsCache=null,this._planSnapGeometryCache=null,this._planStructuralGeometryCache=null,this._physicalBodiesCache=null,this._lightPhysicalBodiesCache=null,this._cleanFloorCache=new Map,this._glowClipCache=new Map,this._lightBarrierCache=null,this._glowFeatherUnits=null,this._glowRenderedSources=new Map,this._glowLastAppearance=new Map,this._glowEnteringSources=new Set,this._glowEnterRafs=new Map,this._glowFadeTimers=new Map,this._glowFeatherSuspendUntil=0,this._glowFeatherResumeTimer=0,this._glowSourceSeq=0,this._glowScreenBlend=!1,this._duplicateColumnId=null,this._duplicateColumnTimer=0,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._path=[],this._cursorPt=null,this._planSnapHover=null,this._mergeSel=null,this._openingPreset=null,this._openingRebindId=null,this._openingPresetRevision=0,this._openingHoverCandidate=null,this._openingJambBlockCm=null,this._openingDialog=null,this._openingInfo=null,this._opDrag=null,this._opMeasure=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryPointerType="mouse",this._boundaryRestoreGuard=null,this._boundaryTargetMemo=null,this._boundaryPreviewMemo=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._wallFaceGraphCache=[],this._areaSel="",this._nameSel="",this._roomDialog=!1,this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1,this._zoom=1,this._view=null,this._zoomBySpace={},this._viewModeSnap=null,this._pointers=new Map,this._panStart=null,this._panLock=null,this._pinchStart=null,this._suppressClick=!1,this._touchContacts=new Map,this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._connectedPath="",this._routeDepartureHandled=!1,this._onLocationChanged=()=>{this._connectedPath&&location.pathname!==this._connectedPath?this._leaveCardRoute():location.pathname===this._connectedPath&&(this._routeDepartureHandled=!1)},this._touchGestureGuard={capture:!0,handleEvent:t=>this._guardTouchGesture(t)},this._hdrH=118,this._booting=!0,this._bootFading=!1,this._bootSettling=!1,this._bootSettleRaf=0,this._bootLastH=-1,this._bootStart=0,this._bootLastChange=0,this._bootSoft=!1,this._tapConfirm=null,this._onboardingShown=!1,this._rulesDialog=null,this._alignDialog=null,this._settingsDialog=null,this._backupExportDialog=null,this._backupImportDialog=null,this._sunRaysCache=null,this._dayCycleTimer=0,this._dayCycleClockKey="",this._compassDrag=!1,this._importDialog=null,this._importQueue=[],this._importTotal=0,this._rulesCompiledSrc="",this._infoCard=null,this._nativeMoreInfoEntity=null,this._markerDialog=null,this._spaceDialog=null,this._keyHandler=t=>this._onKey(t),this._warmVp=null,this._warmVpArmed=!1,this._warmLongReturn=!1,this._warmRevivePending=!1,this._warmGen=++b_,this._warmKey=null,this._warmSlot=null,this._hashApplied=!1,this._navApplied=!1,this._labs={active:Object.freeze([]),space:""},this._viewPreference={},this._renderProjection="flat",this._kioskScale={icon:1,font:1},this._kioskDialog=!1,this._activityRt=new Map,this._vacRt=new Map,this._vacViewKey="",this._vacLastView=null,this._vacRaf=0,this._vacSrvTrails={},this._vacJumpOnce=!1,this._continuity=this._newContinuityController(),this._continuityHistory=[],this._continuityEpoch=0,this._continuityDataReady=!0,this._continuityPaintToken=-1,this._continuityDisposed=!1,this._renderSnapshotAt=Date.now(),this._hassSequence=0,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotSequence=-1,this._capturedSnapshotDevices=null,this._capturedSnapshotLayout=null,this._capturedSnapshotActivity="",this._capturedSnapshotConfigEpoch=-1,this._capturedSnapshotVirtual="",this._lastValidStageSize=null,this._pendingRefitSize=null,this._refitRaf=0,this._pageVisibility=t=>{if(this._continuity.visibility(t),this._dayCycleVisibility(t),"hidden"!==t.kind){if(this._vacJumpOnce=!0,!t.long){const t=Date.now();let e=!1;for(const i of this._activityRt.values())!i.flashKind||(i.expiresAt||i.flashTs+Fu)>t||(i.flashTs=0,i.flashKind=null,i.expiresAt=0,e=!0);return void(e&&this.requestUpdate())}Date.now()-this._renderSnapshotAt>1e3&&this._continuity.note("device-snapshot-stale"),this._continuityDataReady=!1,this._continuityPaintToken=-1,this._resumeSettling=!0,this._loading?this.requestUpdate():this._loadFromServer()}else this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0)},this._resumeSettling=!1,this._viewportInvalidAt=0,this._vacFit=null,this._vacAllCamerasFor=null,this._vacAllCameraCache=null,this._vacCalConfirm=null,this._kioskDots=!1,this._cyclePausedUntil=0,this._swipeStart=null,this._lastTap=0,this._onLabsSnapshot=t=>{const e=this._effectiveProjection();this._labs=t;const i=this._effectiveProjection();this._convertProjectionView(e,i),this.requestUpdate()},this._onHashChange=()=>{if(this._hasFixedFloor)return;const t=this._hashSpace();if(t&&this._model.find(e=>e.id===t)&&t!==this._space){if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._selId=null,this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),this.requestUpdate()}},this._drag=null,this._rlResize=null,this._holdFired=!1,this._retryContinuity=()=>{this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.retry(this._continuity.recoveryReason||"plan"),this._loading||this._loadFromServer()},this._cfgEpoch=0,this._modelCache=null,this._emptySpaceStateActive=!1,this._decorSnapCache=null,this._markerPreviewMemo=null,this._markerPreviewDevicesMemo=null,this._showHidden=!1,this._connHooked=null,this._connectionWasLost=!1,this._haRegistryConnection=null,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._onHaRegistryUpdate=()=>{const t=An(this.hass);t.revision===this._haRegistryRev&&this._devices.length||(this._haRegistryRev=t.revision,this._planHassMemo=null,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate())},this._onConnReady=()=>{if(this._loadTries=0,clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,function(t){const e=Mn(t);e&&(Tn(t,e),Pn(t,e))}(this.hass),this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(this._onConnReady,400));!this._connectionWasLost&&this._continuity.hasCompleteFrame?this._beginContinuityCandidate("connection-ready",!1,"plan"):(this._continuityDataReady=!1,this._continuityPaintToken=-1),this._loading||this._loadFromServer()},this._onConnLost=()=>{this._booting&&!this._continuity.hasCompleteFrame||(this._connectionWasLost=!0,this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.connectionLost())},this._signer=new ah(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=z_(()=>{if(this._serverStorage){const t=[...this._dirtyPos];this._dirtyPos.clear();for(const e of t){const t=this._layout[e];t&&(this._sentPos.set(e,t),this.hass.callWS({type:"houseplan/layout/update",device_id:e,pos:t}).then(t=>this._noteLayoutRev(t)).catch(t=>this._showToast(this._t("toast.pos_save_failed",{err:this._errText(t)}))).finally(()=>{this._sentPos.get(e)===t&&this._sentPos.delete(e)}))}this._cacheSnapshot()}else localStorage.setItem(x_,JSON.stringify(this._layout))},600),this._frame=null,this._showFar=!1,this._writesPending=0,this._writeChain=Promise.resolve(),this._undoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.undo();t&&(this._applyGeometryState(t.before)?this._showToast(this._t("history.undone",{name:t.name})):this._geometryHistory.clear())},this._redoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.redo();t&&(this._applyGeometryState(t.after)?this._showToast(this._t("history.redone",{name:t.name})):this._geometryHistory.clear())},this._saveConfigDebounced=z_(()=>{this._serverCfg&&this._writeConfig().catch(t=>{"conflict"===t?.code?(this._showToast(this._t("toast.conflict")),this._cancelPath(),this._reloadConfigOnly(!0)):this._showToast(this._t("toast.cfg_save_failed",{err:this._errText(t)}))})},500),this._draftSegmentCms=[],this._closingWallCm=null,this._savePhysicalDialog=()=>{const t=this._physicalDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=m_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?$l:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?$l:100;if(!Number.isFinite(n)||n<1||n>o)return void this._showPhysicalRange(o);if("column"===t.kind){const e=i.wall_columns.find(e=>e.id===t.id);if(!e)return;const s=m_(t.angle||"0");if("circle"!==t.shape&&(null==s||s<0||s>=90))return void this._showToast(this._t("toast.physical_angle"));const o="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:n}:{id:t.id,shape:"square",center:e.center,cm:n,angle:s};if(i.wall_columns.some(e=>e.id!==t.id&&Bl(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const a=this._geometrySnapshot();if("partition"===t.kind){const i=(e.partitions||[]).find(e=>e.id===t.id);i&&(i.cm=n)}else if("column"===t.kind){const i=(e.wall_columns||[]).find(e=>e.id===t.id);i&&(i.cm=Sl(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=m_(t.angle||"0"):delete i.angle)}else{const i=(e.room_drafts||[]).find(e=>e.id===t.id);i?.segments?.[t.segment||0]&&(i.segments[t.segment||0].cm=n)}this._recordGeometry(this._t("history.physical_edit"),a),this._physicalDialog=null,this._saveConfig()},this._deletePhysicalSelection=()=>{const t=this._physicalSel,e=this._curSpaceCfg;if(!t||!e)return;if("draft"===t.kind)return void this._deleteDraftWhole();const i=this._geometrySnapshot();if("partition"===t.kind){const i=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(i.length)return void(this._partitionDeleteDialog={id:t.id,openings:i.map(t=>JSON.parse(JSON.stringify(t)))})}const s="partition"===t.kind?"partitions":"column"===t.kind?"wall_columns":"room_drafts";e[s]=(e[s]||[]).filter(e=>e.id!==t.id),e[s].length||delete e[s],this._activeDraftId===t.id&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._confirmPartitionDelete=()=>{const t=this._partitionDeleteDialog,e=this._curSpaceCfg;if(!t||!e)return;const i=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this._partitionDeleteDialog=null,this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftWhole=()=>{const t="draft"===this._physicalDialog?.kind?this._physicalDialog.id:"draft"===this._physicalSel?.kind?this._physicalSel.id:null,e=this._curSpaceCfg;if(!t||!e||!confirm(this._t("confirm.delete_draft")))return;const i=this._geometrySnapshot();e.room_drafts=(e.room_drafts||[]).filter(e=>e.id!==t),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===t&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftSegment=()=>{const t=this._physicalDialog,e=this._curSpaceCfg;if(!t||"draft"!==t.kind||!e)return;if(!confirm(this._t("confirm.delete_draft_segment")))return;const i=(e.room_drafts||[]).findIndex(e=>e.id===t.id);if(i<0)return;const s=e.room_drafts[i],n=Math.max(0,Math.min(s.segments.length-1,t.segment||0)),o=[],a=s.points.slice(0,n+1),r=s.points.slice(n+1);if(a.length>=2&&o.push({id:s.id,points:a,segments:s.segments.slice(0,n)}),r.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:r,segments:s.segments.slice(n+1)}),2===o.length&&e.room_drafts.length>=200)return void this._showToast(this._t("toast.physical_limit"));const l=this._geometrySnapshot();e.room_drafts.splice(i,1,...o),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===s.id&&this._cancelPath(),this._physicalDialog=null,this._physicalSel=o.length?{kind:"draft",id:o[0].id}:null,this._recordGeometry(this._t("history.draft_segment_delete"),l),this._saveConfig()},this._rebindPartitionOpening=()=>{const t=this._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingRebindId=e,this._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this._openingPresetRevision},this._openingDialog=null,this._openingHoverCandidate=null)},this._keepClosedAsPartitions=()=>{if(this._wallFaceBatch)return void this._decideWallFace(!1);if(!this._contourClosed||this._pendingSplit||!this._curSpaceCfg)return;const t=this._curSpaceCfg,e=this._path.slice(0,-1);if((t.partitions||[]).length+e.length>I_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r];t.partitions||=[];const n=Date.now().toString(36);for(let i=0;it.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.contour_to_partitions"),i),this._saveConfig(),this._roomDialog=!1,this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null},this._toggleServerPlans=async()=>{const t=this._spaceDialog;if(t)if(t.pickSaved)this._spaceDialog={...t,pickSaved:!1};else{this._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.hass.callWS({type:"houseplan/plans/list"}),e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:[],savedBusy:!1}),this._showToast(this._t("toast.plans_list_failed",{err:this._errText(t)}))}}},this._aspectJob=null,this._dayCycleTick=()=>{if(!this.isConnected||"hidden"===this.ownerDocument.visibilityState)return;const t=this._dayCycleState();if(!t)return this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),void(this._dayCycleClockKey="");const e=La(t);e!==this._dayCycleClockKey&&(this._dayCycleClockKey=e,this.requestUpdate())},this._sunShown=!1,this._sunOut=!1,this._sunOutTimer=0,this._openSettingsDialog=()=>{if(!this._norm)return;const t=this._glowRadiusCm,e=this._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this._settingsDialog={colors:JSON.parse(JSON.stringify(this._fillColors)),glowRadius:e,bgColor:cs(this._settings,{bgColor:null})||null,northDeg:Ya(this._settings,{}),bgMode:Xa(this._settings,{}),sunRays:Ja(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=op(this._serverCfg,this._layout||{}),i=Math.ceil(10*e.report.maxShiftCm)/10,s=t.find(t=>null!=t?.id&&String(t.id)===e.report.maxSpace),n=t.length>1&&s?String(s.title||s.id):"";this._alignDialog={report:e.report,config:e.config,layout:e.layout,cm:i,where:n,changed:e.changed,busy:!1}},this._optimizeUndoBusy=!1,this._openBackupExport=()=>{this._settingsDialog=null,this._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._openRulesDialog=()=>{if(!this._norm)return;const t=this._settings.icon_rules,e=(t&&t.length?t:Xt).map(t=>({...t}));this._rulesDialog={rules:e,test:"",busy:!1}},this._climateCache=null,this._gearPtCache=new WeakMap}get _canEdit(){return!!this._norm&&(!0===this._serverCanWrite||!1!==this._serverCanWrite&&!0===this.hass?.user?.is_admin)}get _kiosk(){return!!this._config?.kiosk}_showKioskDots(){this._kioskDots=!0,clearTimeout(this._kioskDotsTimer),this._kioskDotsTimer=window.setTimeout(()=>this._kioskDots=!1,2500)}get _modeTransitionBusy(){return this._modeTransitionPreparing||this._modeTransition.active}_cssColor(t,e){const i=String(t||"").trim();if(!i)return e;const s=document.createElement("span");s.style.cssText=`position:absolute;visibility:hidden;color:${i}`,this.renderRoot.append(s);const n=getComputedStyle(s).color||e;return s.remove(),n}_currentModeVisual(t=this._mode){const e=this._modeTransition.presented||this._modeTransitionVisual;if(e)return{...e,viewport:{...e.viewport,viewBox:{...e.viewport.viewBox}}};const i=this._stageEl;if(!i||i.clientWidth<=0||i.clientHeight<=0)return null;const s=this.renderRoot.querySelector(".editorchrome"),n=this._viewOr(this._baseVb()),o=this.renderRoot.querySelector(".hp-paper"),a=this.renderRoot.querySelector(".hp-backdrop"),r=this.renderRoot.querySelector(".zoomwrap"),l=r?getComputedStyle(r).filter:"",c=Number(/brightness\(([^)]+)\)/.exec(l)?.[1]);return{presentedMode:t,editorChromeHeight:"view"===t?0:s?.getBoundingClientRect().height||0,stageWidth:i.clientWidth,stageHeight:i.clientHeight,viewport:_p(n,i.clientWidth),stageColor:getComputedStyle(i).backgroundColor||"rgb(255, 255, 255)",paperColor:o?getComputedStyle(o).fill:"rgb(255, 255, 255)",sceneBrightness:Number.isFinite(c)?c:1,architectureOpacity:"decor"===t?.35:1,backdropOpacity:a&&Number(getComputedStyle(a).opacity)||1,viewWeight:"view"===t?1:0,editorWeight:"view"===t?0:1,toolbarContentOpacity:"view"===t?0:1}}_viewForModeTarget(t,e,i,s,n){const o=zi(this._baseVb(),s/Math.max(1,n)),a=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),r=o.w/a,l=o.h/a,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-r/2,y:h-l/2,w:r,h:l},o)}_targetStageColor(t){return"view"!==t?"rgb(255, 255, 255)":this._cssColor(this._stageBg(this._spaceDisplayForRender()),this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"))}_targetPaperColor(t){return"view"===t&&this._spaceModel()?.bg?this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"):"rgb(255, 255, 255)"}_targetBrightness(t){return 1}_applyModeTransitionFrame(t){t.targetMode===this._mode&&(this._modeTransitionVisual=t.presented,this._view={...t.presented.viewport.viewBox},this.requestUpdate())}_settleModeTransition(t){if(t.targetMode!==this._mode)return;const e=this._modeTransitionRequest;this._view={...t.to.viewport.viewBox},this._zoom=this._modeTransitionTargetZoom,this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._lastValidStageSize=[t.to.stageWidth,t.to.stageHeight],"view"===this._mode&&(this._saveZoom(),this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate(),this.updateComplete.then(()=>{if(!this.isConnected||e!==this._modeTransitionRequest||this._modeTransitionBusy||t.targetMode!==this._mode)return;const i=this._stageEl;if(i&&i.clientWidth>0&&i.clientHeight>0&&(Math.abs(i.clientWidth-t.to.stageWidth)>.5||Math.abs(i.clientHeight-t.to.stageHeight)>.5)){const t=this._view;this._lastValidStageSize=[i.clientWidth,i.clientHeight],this._applyView(this._zoom,t?t.x+t.w/2:void 0,t?t.y+t.h/2:void 0),this.requestUpdate()}const s=this.renderRoot.activeElement;(!s||!s.isConnected||!!s.closest?.(".editorchrome, .stage"))&&this.renderRoot.querySelector(".modetab.active")?.focus?.({preventScroll:!0})})}_cancelModeTransition(t=!0){const e=!!this._modeTransition.state;this._modeTransitionRequest++,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransition.cancel(t),t&&e||(this._modeTransitionVisual=null)}_adoptMode(t){this._cancelModeTransition(!1),this._mode=t,"view"!==t&&(this._editorChromeMode=t)}_commitViewModeAtomic(t,e,i,s){if(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this._zoom=e,t){const n=this._stageEl?.clientWidth||t.stageWidth,o=Math.max(1,t.stageHeight+t.editorChromeHeight);this._view=this._viewForModeTarget(e,i,s,n,o),this._lastValidStageSize=[n,o]}else this._view=null;this._viewModeSnap=null,this._modeTransitionEditorCamera=null,this._saveZoom(),this.requestUpdate()}_prepareModeTransition(t,e,i,s,n,o){this.updateComplete.then(()=>{if(!this.isConnected||t!==this._modeTransitionRequest||this._mode!==i)return void(t===this._modeTransitionRequest&&(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this.requestUpdate()));const a=this.renderRoot.querySelector(".editorchrome"),r=a?.querySelector(".editorchrome-inner"),l="view"===i?0:r?.scrollHeight||r?.getBoundingClientRect().height||0,c=Math.max(1,e.stageHeight+e.editorChromeHeight),h=Math.max(1,c-l),d=this._stageEl?.clientWidth||e.stageWidth;if(d<=0||h<=0)return this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._applyView(s,n,o),void this.requestUpdate();const u=this._viewForModeTarget(s,n,o,d,h),p={presentedMode:i,editorChromeHeight:l,stageWidth:d,stageHeight:h,viewport:_p(u,d),stageColor:this._targetStageColor(i),paperColor:this._targetPaperColor(i),sceneBrightness:this._targetBrightness(i),architectureOpacity:"decor"===i?.35:1,backdropOpacity:"decor"===i&&"backdrop"!==this._decorTool?.5:1,viewWeight:"view"===i?1:0,editorWeight:"view"===i?0:1,toolbarContentOpacity:"view"===i?0:1};this._modeTransitionPreparing=!1;const _=this._modeTransitionForceAtomic;this._modeTransitionForceAtomic=!1,this._modeTransition.start(e,p,i,this._reducedMotion||_?0:220)})}get _hasFixedFloor(){return!!this._config&&Object.prototype.hasOwnProperty.call(this._config,"floor")}_fixedFloorState(t=this._model,e=this._loadOk){const i=this._config?.floor,s=function(t){if(!t.hasFloor)return{kind:"absent"};const e=t.floor;if("string"==typeof e)return e.length?t.spaceIds.includes(e)?{kind:"valid",id:e,source:"id"}:{kind:"invalid",reason:"unknown-id",value:e}:{kind:"invalid",reason:"empty-id",value:e};if("number"==typeof e){if(!Number.isFinite(e))return{kind:"invalid",reason:"non-finite-index",value:e};if(!Number.isInteger(e))return{kind:"invalid",reason:"fractional-index",value:e};if(e<0)return{kind:"invalid",reason:"negative-index",value:e};const i=t.spaceIds[e];return void 0===i?{kind:"invalid",reason:"out-of-range-index",value:e}:{kind:"valid",id:i,source:"index"}}return{kind:"invalid",reason:"invalid-type",value:e}}({spaceIds:t.map(t=>t.id),hasFloor:this._hasFixedFloor,floor:i});return!this._hasFixedFloor||e?s:"number"==typeof i?"valid"===s.kind||"invalid"===s.kind&&"out-of-range-index"===s.reason?{kind:"pending",value:i}:s:"valid"===s.kind||"invalid"===s.kind&&"unknown-id"!==s.reason?s:{kind:"pending",value:i}}_canCommitSpace(t,e=!1){if(e||!this._hasFixedFloor)return!0;const i=this._fixedFloorState();return"valid"===i.kind&&i.id===t}_commitSpace(t,e=!1){return!!this._canCommitSpace(t,e)&&(this._space=t,!0)}_slideTo(t,e){if(t===this._space)return!0;if(!this._canCommitSpace(t))return!1;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return!1;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;return this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._selId=null,this._physicalSel=null,this._editorSecondary.closeForNavigation(),this._physicalDialog=null,this._physicalDrag=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),i||(this._slide=e,clearTimeout(this._slideTimer),this._slideTimer=window.setTimeout(()=>{this._slideTimer=void 0,this._slide="",this.requestUpdate()},190),this.requestUpdate()),!0}_pickSpace(t){if(t===this._space)return;const e=this._model.map(t=>t.id),i=e.indexOf(this._space),s=e.indexOf(t);this._navApplied=!0,this._showFar=!1,this._frame=null,this._slideTo(t,i>=0&&s0&&Date.now()>=this._cyclePausedUntil&&this._model.length>1&&this._zoom<=1.001){const t=this._model.map(t=>t.id),e=t.indexOf(this._space);this._slideTo(t[(e+1)%t.length],"left"),this._showKioskDots()}}_syncCycleTimer(){clearInterval(this._cycleTimer),this._cycleTimer=void 0,this.isConnected&&!this._hasFixedFloor&&this._config?.kiosk&&Number(this._config.cycle)>0&&(this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle)))}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new ih(()=>{this._resumeSettling="steady"!==this._continuity.state,this._continuityEpoch++,this.isConnected&&this.requestUpdate()})}get _labsIso(){return this._labs.active.includes("iso")}get _desiredProjection(){return"view"===this._mode&&this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat"}_saveViewPreference(){try{localStorage.setItem(D_,JSON.stringify(this._viewPreference))}catch{}}_logicalViewCenter(t){const e=this._view;if(!e)return null;const i=[e.x+e.w/2,e.y+e.h/2],s="iso"===t?qp(i):i;return{x:s[0],y:s[1]}}_convertProjectionView(t,e){if(t===e)return;const i=this._logicalViewCenter(t);this._view=null;const s=i?"iso"===e?Bp([i.x,i.y],0):[i.x,i.y]:null;this._applyView(this._zoom,s?.[0],s?.[1]),this._warmPatch({vp:this._warmViewportState()}),this.requestUpdate()}_setProjection(t){if(!this._labsIso||"view"!==this._mode)return;const e=this._effectiveProjection();if(this._viewPreference={...this._viewPreference,[this._space]:t},"iso"===t){const t=this._isoSceneKey();t&&this._isoFallback.delete(t)}this._saveViewPreference();const i=this._effectiveProjection();this._convertProjectionView(e,i)}_hashSpace(){return Cp(window.location.hash||"")}connectedCallback(){this._connectedPath=location.pathname,this._routeDepartureHandled=!1,window.addEventListener("location-changed",this._onLocationChanged),window.addEventListener("popstate",this._onLocationChanged),this._continuityDisposed&&(this._continuity=this._newContinuityController(),this._continuityDisposed=!1,this._continuityPaintToken=-1);const t=(e=this.ownerDocument,rp.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=th(this.ownerDocument,this._pageVisibility),super.connectedCallback(),this._motionMedia=window.matchMedia?.("(prefers-reduced-motion: reduce)"),this._reducedMotion=!!this._motionMedia?.matches,this._motionMedia?.addEventListener?.("change",this._onMotionChange),function(t){const e=rp.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=cp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),rp.set(t,i),i.promise}(this.ownerDocument).then(t=>{t!==this._glowScreenBlend&&(this._glowScreenBlend=t,this.isConnected&&this.requestUpdate())}),this.hass&&this._ensureHaRegistryAuthority(),window.addEventListener("keydown",this._keyHandler),this._signer.start(()=>this.hass,()=>Rs(this._serverCfg)),this._syncCycleTimer(),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Fp.add(e);const i=Op(t);return"undefined"==typeof window&&e(i),()=>{Fp.delete(e)}}(h_,this._onLabsSnapshot),this._booting?this._bootWatch():this._bootFading&&(clearTimeout(this._bootTimer),this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220)),this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)),!this._loadOk&&this._serverCfg&&this.hass&&this._scheduleLoadRetry(),!this._warmSlot&&this._config&&this._warmAdopt(),this._loadOk&&this._ensureLiveSyncSubscriptions(),this._warmVp&&!this._warmRevivePending&&void 0===this._warmReviveTimer&&(this._warmRevivePending=!0,this._warmReviveTimer=window.setTimeout(()=>this._warmReviveDialog(),0)),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1,this.requestUpdate()}disconnectedCallback(){this._connectedPath&&location.pathname!==this._connectedPath&&this._leaveCardRoute(),window.removeEventListener("location-changed",this._onLocationChanged),window.removeEventListener("popstate",this._onLocationChanged),this._continuityUnsub?.(),this._continuityUnsub=void 0,this._motionMedia?.removeEventListener?.("change",this._onMotionChange),this._motionMedia=void 0,this._vacRaf&&(cancelAnimationFrame(this._vacRaf),this._vacRaf=0),this._refitRaf&&(cancelAnimationFrame(this._refitRaf),this._refitRaf=0),this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),this._dayCycleClockKey="",this._bootSettleRaf&&(cancelAnimationFrame(this._bootSettleRaf),this._bootSettleRaf=0),this._bootSettling=!1;for(const t of this._activityRt.values())clearTimeout(t.timer);window.removeEventListener("keydown",this._keyHandler),clearInterval(this._cycleTimer),clearTimeout(this._kioskDotsTimer),clearTimeout(this._kioskHoldTimer),clearTimeout(this._reloadRetry),clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),this._connHooked=null,this._haRegistryRelease?.(),this._haRegistryRelease=void 0,this._haRegistryConnection=null,this._signer.dispose(),clearTimeout(this._toastTimer),clearTimeout(this._slideTimer),this._modeTransition.dispose(),this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest++,this._slideTimer=void 0,this._slide="",clearTimeout(this._bootTimer),this._bootTimer=void 0,clearTimeout(this._bootSoftTimer),this._saveConfigDebounced.flush(),window.removeEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=void 0,clearTimeout(this._holdTimer),this._roViewport?.disconnect(),this._roViewport=void 0,this._roHdr?.disconnect(),this._roHdr=void 0,this._onWinResize&&(window.removeEventListener("resize",this._onWinResize),this._onWinResize=void 0),this._unsubCfg&&(this._unsubCfg(),this._unsubCfg=null),this._unsubLayout&&(this._unsubLayout(),this._unsubLayout=null),this._unsubVirtual&&(this._unsubVirtual(),this._unsubVirtual=null),this._unsubTrail&&(this._unsubTrail(),this._unsubTrail=void 0),this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=null,clearTimeout(this._layoutSyncTimer),clearTimeout(this._duplicateColumnTimer);for(const t of this._glowFadeTimers.values())clearTimeout(t);for(const t of this._glowEnterRafs.values())cancelAnimationFrame(t);clearTimeout(this._glowFeatherResumeTimer),this._glowFeatherResumeTimer=0,this._glowFeatherSuspendUntil=0,this._glowFadeTimers.clear(),this._glowEnterRafs.clear(),this._glowEnteringSources.clear(),this._glowRenderedSources.clear(),this._glowLastAppearance.clear(),this._glowSourceSeq=0,this._warmSnapshot(),this._warmRevivePending=!1,clearTimeout(this._warmReviveTimer),this._warmReviveTimer=void 0,this._warmRelease(),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._touchContacts.clear(),this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._editorSecondary.reset(),this._resumeSettling=!1,this._continuityHistory=[...this._continuityHistory,...this._continuity.trace].slice(-80),this._continuity.dispose(),this._continuityDisposed=!0,super.disconnectedCallback()}_onKey(t){if("Escape"===t.key&&this._vacFit)return this._vacFit=null,this._showToast(this._t("vac.cal_cancelled")),void t.stopPropagation();if("Escape"===t.key){if(this._tapConfirm)return void(this._tapConfirm=null);if(this._vacCalConfirm)return void(this._vacCalConfirm=null);if(this._decorEraseConfirm)return void(this._decorEraseConfirm=null);if(this._openingInfo)return void(this._openingInfo=null);if(this._infoCard)return void this._closeInfoCard();if(this._rulesDialog)return void(this._rulesDialog=null);if(this._alignDialog)return void(this._alignDialog=null);if(this._backupImportDialog)return void(this._backupImportDialog=null);if(this._backupExportDialog)return void(this._backupExportDialog=null);if(this._settingsDialog)return void(this._settingsDialog=null);if(this._markerDialog)return void(this._markerDialog=null);if(this._openingDialog)return void(this._openingDialog=null);if(this._physicalDialog)return void(this._physicalDialog=null);if(this._backdropDialog)return void(this._backdropDialog=null);if(this._decorShapeDialog)return void(this._decorShapeDialog=null);if(this._decorTextDialog)return void(this._decorTextDialog=null);if(this._spaceDialog&&!this._roomDialog)return this._spaceDialog=null,this._importQueue=[],void(this._importTotal=0);if(this._editorSecondary.hasOpenGroup)return t.preventDefault(),void this._editorSecondary.closeGroup(!0)}const e=t.composedPath?.()||[t.target],i=e.some(t=>t?.matches?.('input, textarea, select, [contenteditable="true"]')),s=e.some(t=>t?.classList?.contains?.("editor-secondary")),n=t.ctrlKey||t.metaKey,o=t.key.toLowerCase(),a=/^[a-z]$/.test(o),r="z"===o||!a&&"KeyZ"===t.code,l="y"===o||!a&&"KeyY"===t.code,c=n&&(r&&t.shiftKey||l),h=n&&r&&!t.shiftKey;if("decor"===this._mode){if((h||c)&&i)return;return c?(t.preventDefault(),void this._redoGeometry()):h?(t.preventDefault(),this._decorDraft?void(this._decorDraft=null):this._decorMove||this._dtDrag||this._bdDrag?void this._cancelDecorGesture():void this._undoGeometry()):"Delete"!==t.key&&"Backspace"!==t.key||!this._decorSel||i||s?void("Escape"===t.key&&(t.preventDefault(),this._decorDraft?this._decorDraft=null:this._decorMove||this._dtDrag||this._bdDrag?this._cancelDecorGesture():"furniture"===this._decorTool?(this._furnPalette=null,this._decorTool="select"):this._decorSel?this._decorSel=null:"select"!==this._decorTool?this._decorTool="select":this._setMode("view"))):(t.preventDefault(),void this._decorDeleteSel())}if(this._markup&&(!h&&!c||!i)){if(("Delete"===t.key||"Backspace"===t.key)&&this._physicalSel&&!i&&!s)return t.preventDefault(),void this._deletePhysicalSelection();if(c)return t.preventDefault(),void this._redoGeometry();if(h)return t.preventDefault(),this._rszDrag?void this._rszCancelDrag():this._wallFaceBatch?(this._roomDialogCancel(),void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint())):"draw"===this._tool&&this._path.length?void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint()):"split"===this._tool&&this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},void(this._splitSel.pts.length||(this._cursorPt=null))):void this._undoGeometry();if("Escape"===t.key)return this._physicalDrag||this._physicalRotate?(t.preventDefault(),void this._cancelPhysicalGesture()):this._roomDialog?(t.preventDefault(),void this._roomDialogCancel()):"draw"===this._tool&&this._path.length?(t.preventDefault(),void this._undoPoint()):this._physicalSel?(t.preventDefault(),void(this._physicalSel=null)):"resize"===this._tool?(t.preventDefault(),this._rszDrag?void this._rszCancelDrag():void(this._rszSel?this._rszSel=null:this._tool="draw")):"split"===this._tool?(t.preventDefault(),void(this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},this._splitSel.pts.length||(this._cursorPt=null)):this._splitSel?this._splitSel=null:this._tool="draw")):"merge"===this._tool?(t.preventDefault(),void(this._mergeSel?this._mergeSel=null:this._tool="draw")):this._wallDialog?(t.preventDefault(),void(this._wallDialog=null)):"boundary"===this._tool?(t.preventDefault(),void(this._openWallAnchor?this._cancelBoundaryAnchor():this._tool="draw")):void("opening"!==this._tool&&"wallthick"!==this._tool&&"delroom"!==this._tool&&"column"!==this._tool||(t.preventDefault(),"opening"===this._tool&&this._clearOpeningPlacement(!0),this._tool="draw"))}}_undoPoint(){if(this._path.length){if(this._contourClosed)return this._path=this._path.slice(0,-1),void(this._closingWallCm=null);if(this._activeDraftId&&this._path.length>1&&this._curSpaceCfg){const t=this._geometrySnapshot();this._path=this._path.slice(0,-1),this._draftSegmentCms=this._draftSegmentCms.slice(0,-1);const e=this._curSpaceCfg,i=(e.room_drafts||[]).findIndex(t=>t.id===this._activeDraftId);return void(i>=0&&(this._path.length<2?(e.room_drafts.splice(i,1),e.room_drafts.length||delete e.room_drafts,this._activeDraftId=null):e.room_drafts[i]={id:this._activeDraftId,points:this._path.map(t=>[t[0]/T_,t[1]/T_]),segments:this._draftSegmentCms.map(t=>({cm:t}))},this._recordGeometry(this._t("history.draft_segment_delete"),t),this._saveConfig()))}this._path=this._path.slice(0,-1)}}_undoActiveDraftPoint(){const t=this._activeDraftId,e=this._path[0]?[...this._path[0]]:null,i=this._geometryHistory.undo();if(!i)return void this._undoPoint();if(!this._applyGeometryState(i.before))return void this._geometryHistory.clear();const s=t?this._spaceModel()?.room_drafts.find(e=>e.id===t):null;s?(this._activeDraftId=s.id,this._path=s.points.map(t=>[...t]),this._draftSegmentCms=s.segments.map(t=>t.cm),this._resumeDraftBySpace[this._space]=s.id):(this._activeDraftId=null,this._path=e?[e]:[],this._draftSegmentCms=[],t&&this._resumeDraftBySpace[this._space]===t&&delete this._resumeDraftBySpace[this._space]),this._clearPlanSnapHover(),this._showToast(this._t("history.undone",{name:i.name}))}static getConfigElement(){return document.createElement("houseplan-card-editor")}static getStubConfig(){return{type:"custom:houseplan-card"}}static _warmBootReset(t){for(const t of y_.values())for(const e of t)clearTimeout(e.evict);y_.clear(),k_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of y_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:y_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){const e=this._config,i=!!e&&Object.prototype.hasOwnProperty.call(e,"floor");this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t};(i!==this._hasFixedFloor||e?.floor!==this._config.floor)&&(this._hashApplied=!1,this._navApplied=!1,this._warmVpArmed=!1),this._config.kiosk&&(this._booting=!1,this._bootFading=!1),!this._hasFixedFloor&&t.default_floor&&this._commitSpace(t.default_floor,!0);try{this._zoomBySpace=JSON.parse(localStorage.getItem(S_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(D_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Op(h_);try{const t=JSON.parse(localStorage.getItem(C_)||"null");this._kioskScale={icon:Es(t?.icon),font:Es(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem($_)||"null");t&&t.config&&Array.isArray(t.config.spaces)&&(this._serverCfg=t.config,this._cfgEpoch++,this._cfgRev=t.rev||0,this._cfgContentFingerprint=t.config_fingerprint||sh(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||sh(this._layout),this._virtualLights=_n(t.virtual_lights,this._cfgRev),this._serverStorage=!0)}catch{}this._adoptInitialSpace(this._model,this._loadOk),"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._syncCycleTimer(),this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=w_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=y_.get(t);if(!s||!s.length)return;const n=s.find(t=>t.owner===this._warmGen);if(n)return this._warmLongReturn=!!n.freed&&Date.now()-n.freed>=Jc,clearTimeout(n.evict),n.evict=0,n.freed=0,n.live=!0,this._warmSlot=n,this._warmKey=t,n.frameFingerprint&&this._continuity.adoptCompleteFrame(n.frameFingerprint),void(!this._devices.length&&n.devices?.length&&(this._devices=[...n.devices]));const{slot:o,sure:a}=((t,e,i,s)=>{const n=t=>{const e=!!i&&t.place?.deref()===i;return e&&t.idx===s?4:t.live?0:e?3:2};let o=null,a=0,r=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>a?(o=i,a=t,r=1):t===a&&r++)}return!o||r>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Jc,this._booting=!1,this._bootFading=!1,this._hdrH=o.hdrH,this._bootSoft=!0,this.isConnected&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)),this._warmKey=t,a?(clearTimeout(o.evict),o.evict=0,o.owner=this._warmGen,o.place=e?new WeakRef(e):null,o.idx=i,o.live=!0,this._warmSlot=o,this._warmVp=o.vp,o.frameFingerprint&&this._continuity.adoptCompleteFrame(o.frameFingerprint),!this._devices.length&&o.devices?.length&&(this._devices=[...o.devices]),this._warmAdoptViewport(this._config)):(this._warmSlot={owner:this._warmGen,path:location.pathname,place:e?new WeakRef(e):null,idx:i,live:!0,hdrH:o.hdrH,stageH:o.stageH,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0},s.push(this._warmSlot),this._warmTrim(s)))}_warmIdx(t){const e=t?.children;if(!e)return-1;for(let t=0;t4;){const e=t.findIndex(t=>!t.live);if(e<0)break;clearTimeout(t[e].evict),t.splice(e,1)}}_warmScheduleEvict(t,e){if(clearTimeout(t.evict),!(t.dlg||t.vp&&"view"!==t.vp.mode))return;const i=t.freed,s=t.owner;t.evict=window.setTimeout(()=>{if(t.evict=0,t.freed!==i||t.owner!==s)return;var n;t.dlg=null,t.vp=(n=t.vp)&&"view"!==n.mode?{...n,mode:"view",zoom:n.snap?.space===n.space?n.snap.zoom:n.zoom,view:null,snap:null,tool:"draw",decorTool:"select",showHidden:!1,selId:null,rszSel:null,decorSel:null}:n,t.frameFingerprint="";const o=y_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},k_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);const i=this._fixedFloorState();if(this._hashApplied||!this._model.find(t=>t.id===e.space)||"valid"===i.kind&&i.id!==e.space||this._hasFixedFloor&&"valid"!==i.kind)return void(this._warmVp=null);this._commitSpace(e.space,!0),this._navApplied=!0,this._adoptMode("view"!==e.mode&&this._canEdit&&!t.kiosk?e.mode:"view"),this._pendingNavMode="view"===e.mode||this._canEdit||t.kiosk?null:e.mode,this._zoom=e.zoom;const s=this._effectiveProjection(),n=s===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=n&&e.view?{...e.view}:null,this._viewModeSnap=n&&e.snap?{...e.snap}:null,!n&&e.logicalCenter){const t="iso"===s?Bp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var o;this._tool="openwall"===(o=e.tool)||"closewall"===o?"boundary":"opening"===(o=function(t){return"partition"===t?"draw":t}(o))?"draw":"string"==typeof o&&A_.has(o)?o:"draw",this._decorTool=e.decorTool,this._showHidden=e.showHidden,this._showFar!==e.showFar&&(this._showFar=e.showFar,this._frame=null),this._selId=e.selId,this._rszSel=e.rszSel,this._decorSel=e.decorSel,this._warmVpArmed=!0}_warmPatch(t,e=!1){if(this._config?.kiosk)return;const i=w_(this._config);if(!this._warmSlot||this._warmKey===i){if(!this._warmSlot){if(!e)return;const t=this.parentNode;this._warmKey=i,this._warmSlot={owner:this._warmGen,path:location.pathname,place:t?new WeakRef(t):null,idx:this._warmIdx(t),live:!0,hdrH:this._hdrH,stageH:0,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0};const s=y_.get(i)||[];for(s.push(this._warmSlot),y_.set(i,s),this._warmTrim(s);y_.size>8;){const t=y_.keys().next().value;if(void 0===t||t===i)break;for(const e of y_.get(t)||[])clearTimeout(e.evict);y_.delete(t)}}Object.assign(this._warmSlot,t)}}_warmViewportState(){const t=this._effectiveProjection();return{space:this._space,mode:this._mode,projection:t,activeLabsIso:this._labsIso,logicalCenter:this._logicalViewCenter(t),zoom:this._zoom,view:this._view?{...this._view}:null,snap:this._viewModeSnap?{...this._viewModeSnap}:null,tool:this._tool,decorTool:this._decorTool,showHidden:this._showHidden,showFar:this._showFar,selId:this._selId,rszSel:this._rszSel,decorSel:this._decorSel}}_warmDialogState(){const t=(t,e)=>({kind:t,space:this._space,mode:this._mode,data:e});return this._tapConfirm||this._alignDialog||this._mergeDialog||this._importDialog||this._backupExportDialog||this._backupImportDialog?null:this._openingInfo?t("openingInfo",this._openingInfo.id):this._infoCard?t("info",this._infoCard.id):this._rulesDialog?this._rulesDialog.busy?null:t("rules",this._rulesDialog):this._settingsDialog?this._settingsDialog.busy?null:t("settings",this._settingsDialog):this._markerDialog?this._markerDialog.busy?null:t("marker",this._markerDialog):this._openingDialog?t("opening",this._openingDialog):this._backdropDialog?t("backdrop",this._backdropDialog):this._decorShapeDialog?t("decorShape",this._decorShapeDialog):this._decorTextDialog?t("decorText",this._decorTextDialog):this._roomDialog?t("room",{editId:this._roomEditId,fill:this._roomFill,customFill:this._roomCustomFill,tempSrc:this._roomTempSrc,humSrc:this._roomHumSrc,srcOpen:this._roomSrcOpen,srcFilter:this._roomSrcFilter,nameScale:this._roomNameScale,labelScale:this._roomLabelScale,areaSel:this._areaSel,nameSel:this._nameSel,pendingSplit:this._pendingSplit,wallFaceBatch:this._wallFaceBatch,path:this._path}):this._spaceDialog?this._spaceDialog.busy?null:t("space",this._spaceDialog):null}_warmSnapshot(){if(this._booting||this._config?.kiosk||"steady"!==this._continuity.state)return;const t={vp:this._warmViewportState(),frameFingerprint:this._continuity.frameFingerprint,devices:this._devices};if(this._warmRevivePending||(t.dlg=this._warmDialogState()),this.isConnected&&this._warmSlot?.owner===this._warmGen){const e=this.parentNode;t.place=e?new WeakRef(e):null,t.idx=this._warmIdx(e)}this._warmPatch(t)}_warmReviveDialog(){this._warmRevivePending=!1;const t=this._warmSlot;if(this._warmReviveTimer=void 0,!t||!t.dlg)return;const e=t.dlg,i=t.freed;if(t.dlg=null,t.freed=0,clearTimeout(t.evict),t.evict=0,i&&!(Date.now()-i>k_)&&e.space===this._space&&e.mode===this._mode){switch(e.kind){case"space":this._spaceDialog={...e.data,busy:!1,savedBusy:!1};break;case"marker":this._markerDialog={...e.data,busy:!1};break;case"settings":this._settingsDialog={...e.data,busy:!1};break;case"rules":this._rulesDialog={...e.data,busy:!1};break;case"opening":this._openingDialog={...e.data};break;case"backdrop":this._backdropDialog={...e.data};break;case"decorShape":this._decorShapeDialog={...e.data};break;case"decorText":{this._decorTextDialog={...e.data};const t=String(this._decorTextDialog?.text??"").length;this._decorTextSelection={start:t,end:t};break}case"room":{const t=e.data;this._roomEditId=t.editId,this._roomFill=t.fill,this._roomCustomFill=t.customFill||null,this._roomTempSrc=t.tempSrc,this._roomHumSrc=t.humSrc,this._roomSrcOpen=t.srcOpen,this._roomSrcFilter=t.srcFilter,this._roomNameScale=t.nameScale,this._roomLabelScale=t.labelScale,this._areaSel=t.areaSel,this._nameSel=t.nameSel,this._pendingSplit=t.pendingSplit,this._wallFaceBatch=t.wallFaceBatch||null,this._path=t.path,this._wallFaceBatch&&(this._activeDraftId=this._wallFaceBatch.activeDraftId,this._draftSegmentCms=[...this._wallFaceBatch.activeCms]),this._roomDialog=!0;break}case"info":{const t=this._devices.find(t=>t.id===e.data);t&&(this._infoCard=t);break}case"openingInfo":{const t=(this._curSpaceCfg?.openings||[]).find(t=>t.id===e.data);t&&(this._openingInfo=t);break}}this.requestUpdate()}}_cacheSnapshot(){if(this._serverCfg)try{this._cfgContentFingerprint=sh(this._serverCfg),this._layoutContentFingerprint=sh(this._layout),this._virtualLights=function(t,e,i){if(t.configRev===i)return t;const s=new Set((Array.isArray(e?.markers)?e.markers:[]).filter(vn).map(t=>t.id));return{...t,configRev:i,off:new Set([...t.off].filter(t=>s.has(t)))}}(this._virtualLights,this._serverCfg,this._cfgRev),localStorage.setItem($_,JSON.stringify({config:this._serverCfg,rev:this._cfgRev,config_fingerprint:this._cfgContentFingerprint,layout:this._layout,layout_rev:this._layoutRev,layout_fingerprint:this._layoutContentFingerprint,virtual_lights:mn(this._virtualLights)}))}catch{}}_beginContinuityCandidate(t,e,i="plan"){return this._booting&&!this._continuity.hasCompleteFrame?this._continuity.token:(this._continuityDataReady=e,this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._resumeSettling=!0,this._continuity.beginCandidate(t,i))}_continuityStageValid(){const t=this._stageEl;return!!t&&t.clientWidth>0&&t.clientHeight>0}_continuityAssetsReady(){if(!this._model.length)return!1;const t=this._model.length?this._spaceModel():null;return!t?.bg?.href||this._signer.isReady(this.hass,t.bg.href)}_initialSpaceSelection(t,e=this._loadOk){const i=this._fixedFloorState(t,e);return"valid"===i.kind?{id:i.id,source:"fixed"}:this._hasFixedFloor?{id:null,source:"none"}:function(t){const e=new Set(t.spaceIds.filter(t=>!!t));if(!e.size)return{id:null,source:"none"};const i=[["hash",!1===t.acceptHash?null:t.hashSpace],["current",t.preserveCurrent?t.currentSpace:null],["saved",t.savedSpace],["default",t.defaultSpace],["first",t.spaceIds[0]]];for(const[t,s]of i)if(s&&e.has(s))return{id:s,source:t};return{id:null,source:"none"}}({spaceIds:t.map(t=>t.id),hashSpace:this._hashSpace(),acceptHash:!this._hashApplied,currentSpace:this._space,preserveCurrent:this._hashApplied||this._navApplied||this._warmVpArmed,savedSpace:this._savedNav()?.space,defaultSpace:this._config?.default_floor})}_adoptInitialSpace(t,e=this._loadOk){const i=this._initialSpaceSelection(t,e);return i.id?(this._commitSpace(i.id,!0),"hash"===i.source&&(this._hashApplied=!0),"saved"===i.source&&(this._navApplied=!0),i):i}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._fixedFloorState(i,!0);if(this._hasFixedFloor&&"valid"!==s.kind)return"";const n=this._initialSpaceSelection(i,!0).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===n)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return nh([this._cfgRev,this._cfgContentFingerprint||sh(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||sh(this._layout),this._space,this._mode,this._view,e,this._glowScreenBlend?"screen":"normal",this.hass?.themes?.darkMode??this.hass?.themes?.default_theme??""])}_settleContinuityFrame(){if(this._booting||!this._continuityStageValid())return;if(!this._continuity.hasCompleteFrame&&"steady"===this._continuity.state)return void(this._continuityAssetsReady()&&(this._renderSnapshotAt=Date.now(),this._continuity.markCompleteFrame(this._visualFrameFingerprint())));if(!this._continuityDataReady)return;if(!["holding","offline-stale","overlay-pending","overlay-visible","candidate-ready"].includes(this._continuity.state))return;const t=this._continuity.token;if(this._candidateDeviceSnapshot&&this._candidateDeviceSnapshot!==this._visibleDeviceSnapshot&&this._stagedDeviceSnapshotToken!==t)return this._stagedDeviceSnapshotToken=t,void this.requestUpdate();this._continuityPaintToken!==t&&(this._continuityPaintToken=t,this._continuity.candidateReady(t)&&this._continuity.commitAfterPaint(t,{updateComplete:()=>this.updateComplete,stageValid:()=>this.isConnected&&this._continuityStageValid(),assetsReady:()=>this._continuityAssetsReady(),frameFingerprint:()=>this._visualFrameFingerprint()}).then(e=>{e&&t===this._continuity.token?(this._resumeSettling=!1,this._renderSnapshotAt=Date.now(),this._candidateDeviceSnapshot&&(this._visibleDeviceSnapshot=this._candidateDeviceSnapshot),this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._warmSnapshot()):t===this._continuity.token&&(this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._candidateDeviceSnapshot=null,this.requestUpdate())}))}_onBackdropLoaded(t,e){this._signer.markLoaded(this.hass,t,e),this._continuity.note("asset-ready"),this._continuityPaintToken=-1,"steady"!==this._continuity.state&&this.requestUpdate()}_renderRecoveryOverlay(){if(!this._continuity.overlayVisible&&"recovery-error"!==this._continuity.state)return G;const t="connection"===this._continuity.recoveryReason;return j`
`}afterRender(){const t=this.host.root();this._blocked&&(this._openGroupId?this.closeGroup(!1):"palette"===this._currentModel?.kind&&this._currentModel.dismiss?.()),this._syncGlobalDismissListener();const e=t.querySelector(".editor-secondary"),i=this._renderedContext,s=e?.dataset.contextId||"";if(s&&i&&s!==i&&!window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches&&(this._contentAnimation?.cancel(),this._contentAnimation=e?.querySelector(".editor-secondary-content")?.animate([{opacity:.35,transform:"translateY(-4px)"},{opacity:1,transform:"translateY(0)"}],{duration:100,easing:"ease-out"})),this._renderedContext=s,i&&s!==i&&this._focusOwned){const i=s?e?.querySelector('[tabindex="0"], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled])'):t.querySelector(".editbar-tools");i?.focus?.(),this._focusOwned=!!s}if("palette"===this._currentModel?.kind&&this._currentModel.launcherId){const e=[...t.querySelectorAll("[data-editor-palette]")].find(t=>t.dataset.editorPalette===this._currentModel?.launcherId);e&&null!==e.offsetParent||this._currentModel.dismiss?.()}if(!this._openGroupId)return;const n=[...t.querySelectorAll("[data-editor-group]")].find(t=>t.dataset.editorGroup===this._openGroupId);n&&null!==n.offsetParent||this.closeGroup(!0)}handleOutsideDismiss(t){if(Wu(t,t=>t.hasAttribute("data-editor-navigation")))return"pointerdown"===t.type?this.closeForNavigation():"click"===t.type&&this._dismissPointerTarget&&this._clearDismissClick(),!1;if("click"===t.type&&this._dismissPointerTarget){return!!(t.composedPath?.()||[t.target]).includes(this._dismissPointerTarget)&&(this._clearDismissClick(),t.preventDefault(),t.stopImmediatePropagation(),!0)}const e=this._openGroupId||this._blocked||"palette"!==this._currentModel?.kind?null:this._currentModel;if("pointerdown"===t.type&&(this._openGroupId||e)){const i=Wu(t,t=>t.classList.contains("editor-secondary")),s=Wu(t,t=>!!t.dataset.editorGroup),n=Wu(t,t=>!!t.dataset.editorPalette),o=Wu(t,t=>t.classList.contains("stage"));if(!(i||s||n||"stay-open-on-canvas"===e?.dismissPolicy&&o))return t.preventDefault(),t.stopImmediatePropagation(),this._dismissPointerTarget=t.target,clearTimeout(this._dismissTimer),this._dismissTimer=window.setTimeout(()=>{this._clearDismissClick()},800),this._openGroupId?this.closeGroup(!1):e?.dismiss?.(),this._syncGlobalDismissListener(),!0}return!1}_activateGroupItem(t,e,i){if(t.id!==this._openGroupId)return;const s=t.items.find(t=>t.id===e);if(!s||s.disabled)return;const n="toggle"===s.role&&"stay-open"===s.closePolicy,o=0===i.detail;n||(this._openGroupId=null,this.host.requestUpdate(),this._syncGlobalDismissListener()),s.invoke(),!n&&o&&this.host.updateComplete().then(()=>{const e=[...this.host.root().querySelectorAll("[data-editor-group]")].find(e=>e.dataset.editorGroup===t.id&&null!==e.offsetParent);e?.focus()})}_groupKeydown(t){if(!["ArrowLeft","ArrowRight","Home","End"].includes(t.key))return;const e=[...t.currentTarget.querySelectorAll(".editor-group-item:not([disabled])")];if(!e.length)return;t.preventDefault();const i=e.indexOf(this.host.root().activeElement),s="Home"===t.key?0:"End"===t.key?e.length-1:"ArrowLeft"===t.key?i<=0?e.length-1:i-1:(i+1)%e.length;e[s]?.focus()}_clearDismissClick(){this._dismissPointerTarget=null,clearTimeout(this._dismissTimer),this._dismissTimer=void 0,this._syncGlobalDismissListener()}_syncGlobalDismissListener(){const t=!this._blocked&&"palette"===this._currentModel?.kind,e=!!this._openGroupId||t||!!this._dismissPointerTarget;e!==this._globalDismissListening&&(this._globalDismissListening=e,e?(window.addEventListener("pointerdown",this._globalDismissGuard,!0),window.addEventListener("click",this._globalDismissGuard,!0)):(window.removeEventListener("pointerdown",this._globalDismissGuard,!0),window.removeEventListener("click",this._globalDismissGuard,!0)))}}const Gu=t=>t.stopPropagation(),Vu=4.166666666666667e-9;function Ku(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Vu?t:e}const Yu=(t,e,i,s)=>Math.hypot(i-t,s-e),Xu=(t,e,i,s,n,o,a,r)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+a-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+r-(e+s)))),Ju=(t,e,i,s,n,o,a)=>{const r=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*r,h=Math.sin(i*l)*r,d=Math.cos(a*l)*r,u=Math.sin(a*l)*r,p=Math.max(Yu(t+c,e+h,n+d,o+u),Yu(t-c,e-h,n-d,o-u)),_=Math.max(Yu(t+c,e+h,n-d,o-u),Yu(t-c,e-h,n+d,o+u));return Math.min(p,_)},Zu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Qu=t=>JSON.parse(JSON.stringify(t)),tp=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),ep=(t,e,i)=>Math.min(i,Math.max(e,t)),ip=t=>Kl({spaces:[t]})[0],sp=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),a=n(e);return o0?a:1,l=Math.max(s*r*.02,1e-9),c=[];for(const e of t||[])for(const t of ci(e)||[])c.push([t[0],t[1]]);for(const t of i||[])Array.isArray(t)&&t.length>=4&&t.slice(0,4).every(Number.isFinite)&&c.push([t[0],t[1]],[t[2],t[3]]);const h=t=>c.some(e=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l),d=new Map;for(const a of t||[]){if(!a?.id)continue;const c=Qr(t,a.id,e,i,s,n,o,r);if(c)for(let t=0;t0&&u>0&&a===p&&u!==a))continue;const _=c.poly[s],g=c.poly[(s+1)%c.poly.length],m=Math.hypot(g[0]-_[0],g[1]-_[1]);if(!(m>l&&m<.5*o-1e-9*o))continue;if(h(_)||h(g))continue;const f=sp(_,g,r),v=d.get(f);v?v.targets.add(a):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([a])})}}}let u=e.slice();const p=(t,e)=>Math.hypot(t[0]-e[0],t[1]-e[1])<=2*l,_=(t,e)=>{if(!Array.isArray(t.a)||!Array.isArray(t.b)||t.a.length<2||t.b.length<2)return!1;const i=[Number(t.a[0])*r,Number(t.a[1])*r],s=[Number(t.b[0])*r,Number(t.b[1])*r];return!![...i,...s].every(Number.isFinite)&&(p(i,e.a)&&p(s,e.b)||p(i,e.b)&&p(s,e.a))};for(const t of[...d.values()].filter(t=>1===t.targets.size).sort((t,e)=>sp(t.a,t.b,r).localeCompare(sp(e.a,e.b,r)))){const e=[...t.targets][0],i=u.filter(e=>_(e,t));if(new Set(i.map(t=>t.cm)).size>1)continue;let n=!1;u=u.map(i=>_(i,t)?(n=!0,i.cm===e?i:{...i,cm:e}):i),n||(u=Ir(u,t.a,t.b,e,s,r))}return u}const op=t=>{const e=[];for(const i of t||[]){const t=ci(i);if(t?.length)for(let i=0;i{let e=0,i=0,s=0;for(const i of t.markers||[]){if("ripple"===i.display&&(i.display="icon_ripple",e++),Array.isArray(i.controls)){const t="string"==typeof i.binding&&i.binding.startsWith("entity:")?i.binding.slice(7):"",s=t?i.controls.filter(e=>e!==t):i.controls;JSON.stringify(s)!==JSON.stringify(i.controls)&&(i.controls=s.length?s:null,e++)}const t=i.vacuum;t&&tp(t,"trail")&&(["never","cleaning","always"].includes(t.trail_mode)||(t.trail_mode=!1===t.trail?"never":"cleaning"),delete t.trail,e++)}for(const n of t.spaces||[]){const t=n.settings;"glow"===t?.fill_mode&&("boolean"!=typeof t.glow_enabled&&(t.glow_enabled=!0),t.fill_mode="none",e++,i++);for(const t of n.rooms||[]){const i=t.settings;"glow"===i?.fill_mode&&("boolean"!=typeof i.glow&&(i.glow=!0),delete i.fill_mode,e++,s++)}if(tp(n,"segments")&&(delete n.segments,e++),tp(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(tp(n,"plan_scale_x")||(n.plan_scale_x=t),tp(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);tp(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?ep(o,.1,1e3):5,e++);const a=Number(n.cell_cm),r=Number.isFinite(a)&&a>0?a:5;for(const t of n.wall_columns||[])if("circle"===t.shape)tp(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&tp(t,"angle")){const i=((Number(t.angle)||0)%90+90)%90;t.angle!==i&&(t.angle=i,e++)}for(const t of n.decor||[]){if(tp(t,"width")){const i=Number(t.width);(tp(t,"width_cm")||Number.isFinite(i))&&(tp(t,"width_cm")||(t.width_cm=Number(ep(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(tp(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),tp(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(ep(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(tp(t,"scale")||tp(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1]));if(!(tp(t,"entity")||tp(t,"attr")||tp(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,a=s||n?"":Yi(t.entity,o);if(s||a){if(a){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+a+i.slice(e+2):`${i}${i?" ":""}${a}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let r=a.total;for(const t of i.spaces||[]){const e=ip(t);if(!e)continue;if(!zc(t.open_spans).length){const i=Bc(e.rooms,null,ql,.02*Zl,!0);i.length&&(t.open_spans=qc(i,ql),r++)}}const l=Qu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,a=0,r=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Zu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Vu||s))return;n++,t>a&&(a=t);const o=t*Jl*e;o>r&&(r=o,l=i)};for(const t of i){const e=Zu(t),i=null!=t?.id?String(t.id):"";for(const s of t.rooms||[]){o++;let t=0;if(s.poly?.length)s.poly=s.poly.map(e=>{const i=[Ku(e[0]),Ku(e[1])];return t=Math.max(t,Yu(e[0],e[1],i[0],i[1])),i});else if(null!=s.x&&null!=s.y){const e=s.x,i=s.y,n=s.w||0,o=s.h||0,a=Ku(e+n),r=Ku(i+o),l=Ku(e),c=Ku(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Xu(e,i,n,o,l,c,h,d),s.x=l,s.y=c,s.w=h,s.h=d}p(t,e,i)}for(const s of t.room_drafts||[]){o++;let t=0;const n=(s.points||[]).map(e=>{const i=[Ku(e[0]),Ku(e[1])];return t=Math.max(t,Yu(e[0],e[1],i[0],i[1])),i}),a=n.length?[n[0]]:[],r=[];for(let t=0;t+1t.points?.length>=2),h+=e-t.room_drafts.length,t.room_drafts.length||delete t.room_drafts}for(const s of t.partitions||[]){o++;const n=[Ku(s.a[0]),Ku(s.a[1])],a=[Ku(s.b[0]),Ku(s.b[1])];let r=Math.max(Yu(s.a[0],s.a[1],n[0],n[1]),Yu(s.b[0],s.b[1],a[0],a[1]));const l=Yu(n[0],n[1],a[0],a[1]),c=(t.openings||[]).filter(t=>"partition"===t.host?.kind&&t.host.id===s.id).every(t=>{const e=Number(t.length),i=Number(t.host.t),s=i*l;return Number.isFinite(e)&&e>0&&Number.isFinite(i)&&i>=0&&i<=1&&s-e/2>=-Vu&&s+e/2<=l+Vu});l>Vu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Ku(s.center[0]),Ku(s.center[1])],n=Yu(s.center[0],s.center[1],t[0],t[1]);s.center=t,p(n,e,i)}for(const s of t.decor||[]){o++;let t=0;if("line"===s.kind){const e=[Ku(s.x1),Ku(s.y1)],i=[Ku(s.x2),Ku(s.y2)];t=Math.max(Yu(s.x1,s.y1,e[0],e[1]),Yu(s.x2,s.y2,i[0],i[1])),s.x1=e[0],s.y1=e[1],s.x2=i[0],s.y2=i[1]}else{const e=Ku(s.x),i=Ku(s.y);if(null!=s.w&&null!=s.h){const n=Ku(s.x+s.w),o=Ku(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Xu(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Yu(s.x,s.y,e,i);s.x=e,s.y=i}p(t,e,i)}for(const s of t.openings||[]){if(o++,"partition"===s.host?.kind){const n=(t.partitions||[]).find(t=>t.id===s.host.id),o=Number(s.host.t);if(!n||!Number.isFinite(o)||o<0||o>1)continue;const a=n.b[0]-n.a[0],r=n.b[1]-n.a[1];if(Math.hypot(a,r)<=Vu)continue;const l=n.a[0]+a*o,h=n.a[1]+r*o;let d=180*Math.atan2(r,a)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Ju(s.x,s.y,Number.isFinite(u)?u:d,Number(s.length)||0,l,h,d);s.x=l,s.y=h,s.angle=d,_&&c++,p(g,e,i,_);continue}const n=ui([s.x,s.y],t.rooms||[],.025,{step:Ql,length:Number(s.length)||0});if(!n)continue;const a=Number(s.angle),r=!(Number.isFinite(a)&&a===n.angle),l=Ju(s.x,s.y,Number.isFinite(a)?a:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,r&&c++,p(l,e,i,r)}}for(const[t,e]of Object.entries(s)){if(!e||"object"!=typeof e)continue;const i=e;if("number"!=typeof i.x||"number"!=typeof i.y)continue;o++;const n=Ku(i.x),a=Ku(i.y),r=Yu(i.x,i.y,n,a);s[t]={...i,x:n,y:a};const l="string"==typeof i.s?i.s:"";p(r,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:a,maxShiftCm:r,maxSpace:l,rotated:c,removedDrafts:h},changed:n>0}}(i.spaces||[],e||{});i.spaces=c.spaces;const h={...c.report};let d=0,u=0,p=0;for(let t=0;t[t.id,t.open_to||[]]),walls:e.walls||[]}),o=ip(e),a=ip(s);if(!o||!a)continue;const r=op(o.rooms),c=op(a.rooms),_=.02*Zl;let g=Xc(zc(e.open_spans),r,c,ql);const m=g.length;g=Yc(g,a.rooms,ql,_),g=g.map(t=>{const e=Fc(t,ql),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=e[2]-e[0],r=e[3]-e[1],l=Math.hypot(a,r)||1,d=c.map(([t,e])=>[t[0],t[1],e[0],e[1]]).filter(t=>{const e=t[2]-t[0],s=t[3]-t[1],c=Math.hypot(e,s)||1;return Math.abs(a*s-r*e)/(l*c)<=1e-6&&Oc(o,t).d<=4*_&&Oc(i,t).d<=4*_&&Oc(n,t).d<=4*_}).sort((t,e)=>Math.hypot(e[2]-e[0],e[3]-e[1])-Math.hypot(t[2]-t[0],t[3]-t[1]))[0];if(h.total++,!d)return t;const u=[[d[0],d[1]],[d[2],d[3]]],p=Nc(i,d,u,Zl,2*_),g=Nc(n,d,u,Zl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Zl)return t;const m=Math.max(Math.hypot(p[0]-i[0],p[1]-i[1]),Math.hypot(g[0]-n[0],g[1]-n[1]));if(m>1e-6*Zl){h.moved++;const t=m/ql;t>h.maxShift&&(h.maxShift=t);const e=m/Zl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ic(p,g,ql)}),g=Yc(g,a.rooms,ql,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Fc(t,ql));g.length?s.open_spans=g:delete s.open_spans,jc(s.rooms||[],a.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ar(e.walls,r,c,Ql,ql);y=np(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=il(a.rooms,y,f,Ql,Number(s.cell_cm)>0?Number(s.cell_cm):5,Zl,ql),y=Pr(y,s.rooms||[],Ql,1,f.map(t=>[t[0]/ql,t[1]/ql,t[2]/ql,t[3]/ql])),d+=Math.max(0,v-y.length),y.length?s.walls=y:delete s.walls;const b=JSON.stringify({spans:s.open_spans||[],links:(s.rooms||[]).map(t=>[t.id,t.open_to||[]]),walls:s.walls||[]});b!==n&&p++}const _=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n;o<6&&_&&(i.model_version=6);const g=JSON.stringify(i)!==s||JSON.stringify(c.layout)!==n,m=Number.isInteger(Number(i.model_version))?Number(i.model_version):o;return{config:i,layout:c.layout,report:{...h,modelFrom:o,modelTo:m,migrated:r,glowSpacesMigrated:a.glowSpaces,glowRoomsMigrated:a.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class rp{constructor(t=50){this._undo=[],this._redo=[],this._limit=Math.max(30,Math.floor(t))}get canUndo(){return this._undo.length>0}get canRedo(){return this._redo.length>0}get undoName(){return this._undo[this._undo.length-1]?.name??null}get redoName(){return this._redo[this._redo.length-1]?.name??null}get size(){return this._undo.length}push(t){this._undo.push(t),this._undo.length>this._limit&&this._undo.splice(0,this._undo.length-this._limit),this._redo=[]}undo(){const t=this._undo.pop()??null;return t&&this._redo.push(t),t}redo(){const t=this._redo.pop()??null;return t&&this._undo.push(t),t}clear(){this._undo=[],this._redo=[]}}const lp=new WeakMap;const cp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function hp(t){const e=t.defaultView;if(!e||!e.CSS?.supports?.("mix-blend-mode","screen"))return!1;const i=[128,32,16],s=[16,64,128],n=[9,19,29],o=`\n \n \n \n \n \n `,a=e.URL.createObjectURL(new Blob([o],{type:"image/svg+xml"}));try{const o=await new Promise((t,i)=>{const s=new e.Image,n=e.setTimeout(()=>i(new Error("SVG blend probe timeout")),1e3);s.onload=()=>{e.clearTimeout(n),t(s)},s.onerror=()=>{e.clearTimeout(n),i(new Error("SVG blend probe failed"))},s.src=a}),r=t.createElement("canvas");r.width=4,r.height=1;const l=r.getContext("2d",{willReadFrequently:!0});if(!l)return!1;l.drawImage(o,0,0,4,1);const c=l.getImageData(0,0,4,1).data;return cp(c,i,0)&&cp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&cp(c,s,8)&&cp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const dp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},up=t=>Math.max(0,Math.min(1,t)),pp=(t,e,i)=>t+(e-t)*i,_p=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function gp(t,e){return{centerX:t.x+t.w/2,centerY:t.y+t.h/2,pixelsPerUnit:e>0&&t.w>0?e/t.w:1,viewBox:{...t}}}function mp(t,e,i){const s=Math.max(1e-9,t.pixelsPerUnit),n=Math.max(1e-9,e/s),o=Math.max(1e-9,i/s);return{x:t.centerX-n/2,y:t.centerY-o/2,w:n,h:o}}function fp(t){const e=t.trim(),i=/^rgba?\(\s*([\d.]+)[, ]+([\d.]+)[, ]+([\d.]+)(?:\s*[,/]\s*([\d.]+))?\s*\)$/i.exec(e);if(i)return[Number(i[1]),Number(i[2]),Number(i[3]),null==i[4]?1:Number(i[4])];const s=/^#([0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];return s?[parseInt(s.slice(0,2),16),parseInt(s.slice(2,4),16),parseInt(s.slice(4,6),16),8===s.length?parseInt(s.slice(6,8),16)/255:1]:null}function vp(t,e,i){const s=fp(t),n=fp(e);if(!s||!n)return i<.5?t:e;const o=up(i);return`rgba(${Math.round(pp(s[0],n[0],o))}, ${Math.round(pp(s[1],n[1],o))}, ${Math.round(pp(s[2],n[2],o))}, ${pp(s[3],n[3],o).toFixed(3)})`}function yp(t,e,i){const s=(t=>{const e=up(t);if(0===e||1===e)return e;let i=0,s=1,n=e;for(let t=0;t<12;t++)n=(i+s)/2,_p(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=up((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:yp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(a):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(a),n}cancel(t=!0){this._raf&&this._clock.cancelFrame(this._raf),this._raf=0;const e=this._state;this._state=null,this._token++,e&&t&&(e.phase="settling",e.presented=e.to,this._hooks.frame(e),this._hooks.settled(e))}dispose(){this.cancel(!1)}}const wp="houseplan_card_labs_v1",kp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function xp(t){const e=/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/.exec(String(t||"").trim());if(!e)return null;const i=e.slice(1).map(Number);return i.every(t=>Number.isSafeInteger(t))?i:null}function $p(t,e){for(let i=0;i<3;i++)if(t[i]!==e[i])return t[i]t.split(",")).map(t=>t.trim()).filter(Boolean)}function Pp(t,e,i,s=kp){const n=function(t,e=kp){const i=xp(t),s=new Map;if(!i||!Mp(e))return s;for(const t of e){const e=xp(t.since),n=xp(t.expires);$p(i,e)>=0&&$p(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(Mp(s)?s.map(t=>t.id):[]),a=new Set(function(t){if(!t)return[];try{const e=JSON.parse(t);return Array.isArray(e)?e.filter(t=>"string"==typeof t):[]}catch{return[]}}(e).filter(t=>n.has(t)));let r=!1;const l=t=>{if("off"===t)return a.clear(),void(r=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(r=!0,e||!n.has(i)?a.delete(i):a.add(i))};for(const e of Tp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Tp(Cp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Dp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Rp={active:Object.freeze([]),space:""},Ap="",Ip=!1,Fp="";const Ep=new Set;function zp(){if("undefined"==typeof window)return Rp;const t=Pp(window.location,function(){try{return window.localStorage.getItem(wp)}catch{return null}}(),Ap);void 0!==t.persist&&function(t){try{window.localStorage.setItem(wp,t)}catch{}}(t.persist),Rp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Ep)t(Rp);return Rp}function Op(){zp()}function Hp(t){return Ap=t,"undefined"==typeof window?Rp:(Ip||(Ip=!0,window.addEventListener("hashchange",Op),window.addEventListener("popstate",Op)),zp())}const Np=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Lp=64;function Bp(t){return[t.rotDeg,t.tiltDeg,t.xyScale,t.zScale,t.origin[0],t.origin[1]].every(Number.isFinite)&&Math.abs(t.xyScale)>1e-12&&Math.abs(Math.cos(t.tiltDeg*Math.PI/180))>1e-12}function qp(t,e,i=Np){if(!(Bp(i)&&Number.isFinite(t[0])&&Number.isFinite(t[1])&&Number.isFinite(e)))throw new Error("invalid isometric projection input");const s=i.rotDeg*Math.PI/180,n=i.tiltDeg*Math.PI/180,o=t[0]-i.origin[0],a=t[1]-i.origin[1],r=(o*Math.cos(s)-a*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+a*Math.cos(s))*i.xyScale;return[i.origin[0]+r,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function jp(t,e=Np){if(!Bp(e)||!Number.isFinite(t[0])||!Number.isFinite(t[1]))throw new Error("invalid isometric projection input");const i=e.rotDeg*Math.PI/180,s=e.tiltDeg*Math.PI/180,n=(t[0]-e.origin[0])/e.xyScale,o=(t[1]-e.origin[1])/(e.xyScale*Math.cos(s));return[e.origin[0]+n*Math.cos(i)+o*Math.sin(i),e.origin[1]-n*Math.sin(i)+o*Math.cos(i)]}function Wp(t=Np){return`matrix(${function(t=Np){if(!Bp(t))throw new Error("invalid isometric camera");const e=t.rotDeg*Math.PI/180,i=t.tiltDeg*Math.PI/180,s=t.xyScale*Math.cos(e),n=-t.xyScale*Math.sin(e),o=t.xyScale*Math.sin(e)*Math.cos(i),a=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,a,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-a*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Up(t,e=Np){const{rect:i,wallHeight:s}=t,n=t.openingHeight??s,o=t.floorDepth??0;if(!(i.w>=0)||!(i.h>=0)||!Number.isFinite(s)||!Number.isFinite(n)||!Number.isFinite(o)||s<0||n<0||o<0)throw new Error("invalid isometric frame");const a=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],r=Math.max(s,n),l=a.flatMap(t=>[qp(t,-o,e),qp(t,r,e)]),c=l.map(t=>t[0]),h=l.map(t=>t[1]),d=Math.min(...c),u=Math.min(...h);return{x:d,y:u,w:Math.max(...c)-d,h:Math.max(...h)-u}}const Gp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Vp(t){let e=0;for(let i=0;iArray.isArray(t)&&Number.isFinite(t[0])&&Number.isFinite(t[1])).map(t=>[Number(t[0]),Number(t[1])]),i=e[e.length-1];return e.length>1&&e[0][0]===i[0]&&e[0][1]===i[1]&&e.pop(),e}(t);if(i.length<3)return[];const s=!e;return Vp(i)>0===s?i:[...i].reverse()}function Yp(t,e,i){return t.length?`M ${t.map(t=>Gp(qp(t,i,e))).join(" L ")} Z`:""}function Xp(t,e,i){const s=e[1]-t[1],n=-(e[0]-t[0]),o=i.rotDeg*Math.PI/180;return s*Math.sin(o)+n*Math.cos(o)}function Jp(t,e,i=Np){if(!Number.isFinite(e)||e<0)throw new Error("invalid floor edge height");const s=(t||[]).map(t=>(t||[]).map((t,e)=>function(t,e){const i=Kp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Vp(t))>=1e-9)).filter(t=>t.length&&Vp(t[0])>0);s.sort((t,e)=>{const i=t[0][0],s=e[0][0];return i[0]-s[0]||i[1]-s[1]||Math.abs(Vp(e[0]))-Math.abs(Vp(t[0]))});const n=[],o=[];let a=0;for(let t=0;tt.depth-e.depth||t.component-e.component||t.edge-e.edge),{footprintPath:n.join(" "),sides:o,componentCount:s.length,edgeCount:a}}function Zp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Qp=t=>t.every(Number.isFinite);function t_(t,e,i,s){const n=t[0]*i,o=t[1]*s,a=e*Math.PI/180;return[n*Math.cos(a)-o*Math.sin(a),n*Math.sin(a)+o*Math.cos(a)]}function e_(t,e,i,s,n,o,a){const r=t.flipH?-1:1,l=t.flipV?-1:1,c=function(t,e){return[t[0]+e[0],t[1]+e[1]]}([t.x+t.face.ox,t.y+t.face.oy],t_(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:t_(s,t.angle,r,l),quarterVector:t_([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const i_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function s_(t,e,i=Np){const s=Math.max(0,Math.min(1,Number.isFinite(e)?e:0));return t.leaves.map(e=>{const n=function(t,e){const i=t.turnDeg*e*Math.PI/180;return[t.hinge[0]+t.closedVector[0]*Math.cos(i)+t.quarterVector[0]*Math.sin(i),t.hinge[1]+t.closedVector[1]*Math.cos(i)+t.quarterVector[1]*Math.sin(i)]}(e,s),o=qp(e.hinge,e.bottom,i),a=qp(n,e.bottom,i),r=qp(n,e.top,i),l=qp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${i_(o)} L ${i_(a)} L ${i_(r)} L ${i_(l)} Z`,shadowD:`M ${i_(qp(e.hinge,0,i))} L ${i_(qp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const n_={window:120,door:90,passage:90,gate:300};function o_(t){return n_[t]}function a_(t,e){const i=[t[0],t[1]],s=[e[0],e[1]];return function(t,e){return t[0]-e[0]||t[1]-e[1]}(i,s)<=0?{a:i,b:s}:{a:s,b:i}}function r_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=a_(t.a,t.b);if(Math.hypot(s.b[0]-s.a[0],s.b[1]-s.a[1])<=1e-9)return;const n=function(t,e){const i=t=>(Math.abs(t)<=5e-10?0:Math.round(1e6*t)/1e6).toFixed(6);return`${i(t[0])},${i(t[1])}>${i(e[0])},${i(e[1])}`}(s.a,s.b),o=e.get(n);if(o)return o.physicalHalfWidth=Math.max(o.physicalHalfWidth,t.half||0),o.sourceOrder=Math.min(o.sourceOrder,i),void(t.partitionHost&&(o.partitionHost&&o.partitionHost.id!==t.partitionHost.id?o.ambiguousPartitionHost=!0:o.partitionHost=t.partitionHost));e.set(n,{segmentKey:n,a:s.a,b:s.b,physicalHalfWidth:Math.max(0,t.half||0),sourceOrder:i,...t.partitionHost?{partitionHost:t.partitionHost}:{}})}),[...e.values()]}function l_(t,e){if(Math.abs(t.distance-e.distance)>1e-9)return t.distance-e.distance;if(Math.abs(t.perpendicular-e.perpendicular)>1e-9)return t.perpendicular-e.perpendicular;return(t.target.segmentKeye.target.segmentKey?1:0)||t.target.sourceOrder-e.target.sourceOrder}function c_(t){const e=r_(t.intervals).map(e=>{const i=function(t,e){const i=e.b[0]-e.a[0],s=e.b[1]-e.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,r=(t[0]-e.a[0])*o+(t[1]-e.a[1])*a,l=Math.max(0,Math.min(n,r)),c=e.a[0]+l*o,h=e.a[1]+l*a;return{along:l,length:n,x:c,y:h,distance:Math.hypot(t[0]-c,t[1]-h),perpendicular:Math.abs((t[0]-e.a[0])*a-(t[1]-e.a[1])*o)}}(t.pointer,e);return{target:e,...i,envelope:Math.max(t.baseTolerance,e.physicalHalfWidth+t.bodyPointerPadding)}}).filter(t=>t.distance<=t.envelope+1e-9).filter(e=>!function(t,e,i,s,n){const o=e.b[0]-e.a[0],a=e.b[1]-e.a[1],r=Math.hypot(o,a);if(!(r>1e-9))return!1;const l=o/r,c=a/r;for(const o of i){if(!o.open&&o.kind)continue;const i=a_(o.a,o.b),a=i.b[0]-i.a[0],r=i.b[1]-i.a[1],h=Math.hypot(a,r);if(!(h>1e-9))continue;const d=a/h,u=r/h;if(Math.abs(l*u-c*d)>1e-6)continue;if(Math.abs((i.a[0]-e.a[0])*c-(i.a[1]-e.a[1])*l)>n)continue;const p=(t[0]-i.a[0])*d+(t[1]-i.a[1])*u,_=1e-9;if(!(p<=_||p>=h-_)&&Math.abs((t[0]-i.a[0])*u-(t[1]-i.a[1])*d)<=s+1e-9)return!0}return!1}(t.pointer,e.target,t.intervals,e.envelope,Math.max(1e-9,Math.min(t.baseTolerance,.04*t.gridStep)))),i=e.filter(e=>!!e.target.partitionHost&&t.renderedLength+2*e.target.physicalHalfWidth>e.length+1e-9).sort(l_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(l_);let n=s[0];if(!n)return{candidate:null,jambBlockedTarget:i[0]?.target||null};const o=s.filter(t=>Math.abs(t.distance-n.distance)<=1e-9&&Math.abs(t.perpendicular-n.perpendicular)<=1e-9),a=o.filter(t=>t.target.partitionHost);if(a.length){if(1!==new Set(a.map(t=>t.target.partitionHost.id)).size||a.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=a[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),r=e/s,l=i/s;if(!o.every(e=>{const i=e.target.b[0]-e.target.a[0],s=e.target.b[1]-e.target.a[1],n=Math.hypot(i,s),o=i/n,a=s/n,c=Math.abs(r*a-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*r);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:r,length:l}=n,c=r.b[0]-r.a[0],h=r.b[1]-r.a[1],d=c/l,u=h/l,p=r.partitionHost?r.physicalHalfWidth:0,_=Math.min(Math.max(0,t.renderedLength)/2+p,l/2);let g=n.along;const m=Math.max(t.gridStep,1e-9),f=l/2;g=Math.abs(g-f)<=m/2?f:Math.round(g/m)*m,g=Math.max(_,Math.min(l-_,g));const v=r.a[0]+d*g,y=r.a[1]+u*g,b=Math.max(0,t.renderedLength)/2,w=g-b,k=g+b,x=Math.max(0,w),$=Math.max(0,l-k),S=[r.a[0]+d*(w-x/2),r.a[1]+u*(w-x/2)],M=[r.a[0]+d*(k+$/2),r.a[1]+u*(k+$/2)];let C=180*Math.atan2(h,c)/Math.PI;C>=90?C-=180:C<-90&&(C+=180);const D=Math.abs(g-f)<=1e-9;return{candidate:{presetRevision:t.preset.revision,geometryRevision:t.geometryRevision,pointer:[t.pointer[0],t.pointer[1]],type:t.preset.type,lengthCm:t.preset.lengthCm,flipH:t.preset.flipH,flipV:t.preset.flipV,x:v,y:y,angle:C,renderedLength:t.renderedLength,target:r,...r.partitionHost?{host:{...r.partitionHost,t:l>0?g/l:0}}:{},measure:{labels:[{distance:x,midpoint:S},{distance:$,midpoint:M}],guide:D?{x:v,y:y,angle:C}:null}},jambBlockedTarget:null}}function h_(t,e,i,s,n=1e-6){return t.presetRevision===i&&t.geometryRevision===s&&Math.hypot(t.pointer[0]-e[0],t.pointer[1]-e[1])<=n}const d_="1.65.0-beta.7",u_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},p_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},__=2e3,g_=1e3,m_=1500,f_=t=>{const e=String(t??"").trim().replace(",",".");if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e))return null;const i=Number(e);return Number.isFinite(i)?i:null},v_=(t,e)=>{if(!t.has(e))return{hit:!1};const i=t.get(e);return t.delete(e),t.set(e,i),{hit:!0,value:i}},y_=(t,e,i,s)=>{for(t.delete(e),t.set(e,i);t.size>s;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},b_=new Map;let w_=0;const k_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let x_=1e4;const $_="houseplan_card_layout_v1",S_="houseplan_card_cfg_v1",M_="houseplan_card_zoom_v1",C_="houseplan_card_nav_v1",D_="houseplan_card_kiosk_v1",T_="houseplan_card_view_v1",P_=1e3,R_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],A_=(t,e)=>{const i=Math.min(t.x,e.x),s=Math.min(t.y,e.y);return{x:i,y:s,w:Math.max(t.x+t.w,e.x+e.w)-i,h:Math.max(t.y+t.h,e.y+e.h)-s}},I_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),F_=2e3,E_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},z_=t=>{history.pushState(null,"",t),E_(window,"location-changed",{replace:!1})},O_=(t,e)=>{let i,s=null;const n=(...n)=>{clearTimeout(i),s=n,i=window.setTimeout(()=>{i=void 0;const e=s;s=null,e&&t(...e)},e)};return n.flush=()=>{if(void 0===i)return;clearTimeout(i),i=void 0;const e=s;s=null,e&&t(...e)},n.cancel=()=>{clearTimeout(i),i=void 0,s=null},n.pending=()=>void 0!==i,n},H_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class N_ extends ht{constructor(){super(...arguments),this._space="f1",this._layout={},this._serverStorage=!1,this._loadOk=!1,this._serverCanWrite=null,this._loading=!1,this._loadTries=0,this._serverCfg=null,this._cfgRev=0,this._cfgContentFingerprint="",this._unsubCfg=null,this._unsubLayout=null,this._unsubVirtual=null,this._liveSyncAttempt=null,this._liveSyncGeneration=0,this._liveSyncConnection=null,this._layoutRev=0,this._layoutContentFingerprint="",this._virtualLights=_n(null),this._canOptimizeUndo=!1,this._undoKind=null,this._devices=[],this._regSignature="",this._defPos={},this._newSyncKey="",this._tip=null,this._hoverRoom=null,this._pointerModality=new Nu(this,()=>this._syncPointerHoverTargets()),this._devicePressAnimations=new Map,this._selId=null,this._toast="",this._mode="view",this._pendingNavMode=null,this._decorTool="select",this._decorStyle={...ir},this._decorDraft=null,this._decorMove=null,this._decorSel=null,this._decorEraseConfirm=null,this._decorTextDialog=null,this._decorShapeDialog=null,this._backdropDialog=null,this._decorTextSelection={start:0,end:0},this._furnPalette=null,this._dtBox=null,this._dtDrag=null,this._bdDrag=null,this._slide="",this._reducedMotion=!1,this._onMotionChange=t=>{this._reducedMotion=t.matches,this._cancelDevicePressFeedback(),t.matches&&this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:t.matches&&this._modeTransition.active&&this._cancelModeTransition(!0),this.requestUpdate()},this._editorChromeMode="plan",this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest=0,this._modeTransitionTargetZoom=1,this._modeTransitionEditorCamera=null,this._modeTransition=new bp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Uu({root:()=>this.renderRoot,requestUpdate:()=>this.requestUpdate(),updateComplete:()=>this.updateComplete,clearTip:()=>{this._tip=null}}),this._editorSecondaryCopy={groupActive:(t,e)=>this._t("editor.group_active",{group:t,item:e}),openGroup:t=>this._t("editor.open_group",{group:t}),disabledAction:(t,e)=>this._t("editor.disabled_action",{action:t,reason:e})},this._tool="draw",this._geometryHistory=new rp(50),this._wallDialog=null,this._drawWallField=null,this._activeDraftId=null,this._resumeDraftBySpace={},this._physicalSel=null,this._physicalDialog=null,this._partitionDeleteDialog=null,this._physicalDrag=null,this._physicalRotate=null,this._physicalLastTap=null,this._physicalPickCycle=null,this._wallUnionCache=null,this._isoGeometryCache=new Map,this._isoFallback=new Set,this._openingTunnelCache=null,this._openingWallIndexCache=new Map,this._openingPlacementIntervalsCache=null,this._planSnapGeometryCache=null,this._planStructuralGeometryCache=null,this._physicalBodiesCache=null,this._lightPhysicalBodiesCache=null,this._cleanFloorCache=new Map,this._glowClipCache=new Map,this._lightBarrierCache=null,this._glowFeatherUnits=null,this._glowRenderedSources=new Map,this._glowLastAppearance=new Map,this._glowEnteringSources=new Set,this._glowEnterRafs=new Map,this._glowFadeTimers=new Map,this._glowFeatherSuspendUntil=0,this._glowFeatherResumeTimer=0,this._glowSourceSeq=0,this._glowScreenBlend=!1,this._duplicateColumnId=null,this._duplicateColumnTimer=0,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._path=[],this._cursorPt=null,this._planSnapHover=null,this._mergeSel=null,this._openingPreset=null,this._openingRebindId=null,this._openingPresetRevision=0,this._openingHoverCandidate=null,this._openingJambBlockCm=null,this._openingDialog=null,this._openingInfo=null,this._opDrag=null,this._opMeasure=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryPointerType="mouse",this._boundaryRestoreGuard=null,this._boundaryTargetMemo=null,this._boundaryPreviewMemo=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._wallFaceGraphCache=[],this._areaSel="",this._nameSel="",this._roomDialog=!1,this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1,this._zoom=1,this._view=null,this._zoomBySpace={},this._viewModeSnap=null,this._pointers=new Map,this._panStart=null,this._panLock=null,this._pinchStart=null,this._suppressClick=!1,this._touchContacts=new Map,this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._connectedPath="",this._routeDepartureHandled=!1,this._onLocationChanged=()=>{this._connectedPath&&location.pathname!==this._connectedPath?this._leaveCardRoute():location.pathname===this._connectedPath&&(this._routeDepartureHandled=!1)},this._touchGestureGuard={capture:!0,handleEvent:t=>this._guardTouchGesture(t)},this._hdrH=118,this._booting=!0,this._bootFading=!1,this._bootSettling=!1,this._bootSettleRaf=0,this._bootLastH=-1,this._bootStart=0,this._bootLastChange=0,this._bootSoft=!1,this._tapConfirm=null,this._onboardingShown=!1,this._rulesDialog=null,this._alignDialog=null,this._settingsDialog=null,this._backupExportDialog=null,this._backupImportDialog=null,this._sunRaysCache=null,this._dayCycleTimer=0,this._dayCycleClockKey="",this._compassDrag=!1,this._importDialog=null,this._importQueue=[],this._importTotal=0,this._rulesCompiledSrc="",this._infoCard=null,this._nativeMoreInfoEntity=null,this._markerDialog=null,this._spaceDialog=null,this._keyHandler=t=>this._onKey(t),this._warmVp=null,this._warmVpArmed=!1,this._warmLongReturn=!1,this._warmRevivePending=!1,this._warmGen=++w_,this._warmKey=null,this._warmSlot=null,this._hashApplied=!1,this._navApplied=!1,this._labs={active:Object.freeze([]),space:""},this._viewPreference={},this._renderProjection="flat",this._kioskScale={icon:1,font:1},this._kioskDialog=!1,this._activityRt=new Map,this._vacRt=new Map,this._vacViewKey="",this._vacLastView=null,this._vacRaf=0,this._vacSrvTrails={},this._vacJumpOnce=!1,this._continuity=this._newContinuityController(),this._continuityHistory=[],this._continuityEpoch=0,this._continuityDataReady=!0,this._continuityPaintToken=-1,this._continuityDisposed=!1,this._renderSnapshotAt=Date.now(),this._hassSequence=0,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotSequence=-1,this._capturedSnapshotDevices=null,this._capturedSnapshotLayout=null,this._capturedSnapshotActivity="",this._capturedSnapshotConfigEpoch=-1,this._capturedSnapshotVirtual="",this._lastValidStageSize=null,this._pendingRefitSize=null,this._refitRaf=0,this._pageVisibility=t=>{if(this._continuity.visibility(t),this._dayCycleVisibility(t),"hidden"===t.kind)return this._clearTransientHover(!0),this._cancelDevicePressFeedback(),void(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0));if(this._vacJumpOnce=!0,!t.long){const t=Date.now();let e=!1;for(const i of this._activityRt.values())!i.flashKind||(i.expiresAt||i.flashTs+Fu)>t||(i.flashTs=0,i.flashKind=null,i.expiresAt=0,e=!0);return void(e&&this.requestUpdate())}Date.now()-this._renderSnapshotAt>1e3&&this._continuity.note("device-snapshot-stale"),this._continuityDataReady=!1,this._continuityPaintToken=-1,this._resumeSettling=!0,this._loading?this.requestUpdate():this._loadFromServer()},this._resumeSettling=!1,this._viewportInvalidAt=0,this._vacFit=null,this._vacAllCamerasFor=null,this._vacAllCameraCache=null,this._vacCalConfirm=null,this._kioskDots=!1,this._cyclePausedUntil=0,this._swipeStart=null,this._lastTap=0,this._onLabsSnapshot=t=>{const e=this._effectiveProjection();this._labs=t;const i=this._effectiveProjection();this._convertProjectionView(e,i),this.requestUpdate()},this._onHashChange=()=>{if(this._hasFixedFloor)return;const t=this._hashSpace();if(t&&this._model.find(e=>e.id===t)&&t!==this._space){if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._selId=null,this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),this.requestUpdate()}},this._drag=null,this._rlResize=null,this._holdFired=!1,this._retryContinuity=()=>{this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.retry(this._continuity.recoveryReason||"plan"),this._loading||this._loadFromServer()},this._cfgEpoch=0,this._modelCache=null,this._emptySpaceStateActive=!1,this._decorSnapCache=null,this._markerPreviewMemo=null,this._markerPreviewDevicesMemo=null,this._showHidden=!1,this._connHooked=null,this._connectionWasLost=!1,this._haRegistryConnection=null,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._onHaRegistryUpdate=()=>{const t=An(this.hass);t.revision===this._haRegistryRev&&this._devices.length||(this._haRegistryRev=t.revision,this._planHassMemo=null,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate())},this._onConnReady=()=>{if(this._loadTries=0,clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,function(t){const e=Mn(t);e&&(Tn(t,e),Pn(t,e))}(this.hass),this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(this._onConnReady,400));!this._connectionWasLost&&this._continuity.hasCompleteFrame?this._beginContinuityCandidate("connection-ready",!1,"plan"):(this._continuityDataReady=!1,this._continuityPaintToken=-1),this._loading||this._loadFromServer()},this._onConnLost=()=>{this._booting&&!this._continuity.hasCompleteFrame||(this._connectionWasLost=!0,this._continuityDataReady=!1,this._continuityPaintToken=-1,this._continuity.connectionLost())},this._signer=new ah(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=O_(()=>{if(this._serverStorage){const t=[...this._dirtyPos];this._dirtyPos.clear();for(const e of t){const t=this._layout[e];t&&(this._sentPos.set(e,t),this.hass.callWS({type:"houseplan/layout/update",device_id:e,pos:t}).then(t=>this._noteLayoutRev(t)).catch(t=>this._showToast(this._t("toast.pos_save_failed",{err:this._errText(t)}))).finally(()=>{this._sentPos.get(e)===t&&this._sentPos.delete(e)}))}this._cacheSnapshot()}else localStorage.setItem($_,JSON.stringify(this._layout))},600),this._frame=null,this._showFar=!1,this._writesPending=0,this._writeChain=Promise.resolve(),this._undoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.undo();t&&(this._applyGeometryState(t.before)?this._showToast(this._t("history.undone",{name:t.name})):this._geometryHistory.clear())},this._redoGeometry=()=>{if(this._cancelBoundaryAnchor())return;if(this._physicalDrag||this._physicalRotate)return void this._cancelPhysicalGesture();if(this._decorDraft)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove||this._dtDrag||this._bdDrag)return void this._cancelDecorGesture();if(this._rszDrag)return void this._rszCancelDrag();const t=this._geometryHistory.redo();t&&(this._applyGeometryState(t.after)?this._showToast(this._t("history.redone",{name:t.name})):this._geometryHistory.clear())},this._saveConfigDebounced=O_(()=>{this._serverCfg&&this._writeConfig().catch(t=>{"conflict"===t?.code?(this._showToast(this._t("toast.conflict")),this._cancelPath(),this._reloadConfigOnly(!0)):this._showToast(this._t("toast.cfg_save_failed",{err:this._errText(t)}))})},500),this._draftSegmentCms=[],this._closingWallCm=null,this._savePhysicalDialog=()=>{const t=this._physicalDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=f_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?$l:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?$l:100;if(!Number.isFinite(n)||n<1||n>o)return void this._showPhysicalRange(o);if("column"===t.kind){const e=i.wall_columns.find(e=>e.id===t.id);if(!e)return;const s=f_(t.angle||"0");if("circle"!==t.shape&&(null==s||s<0||s>=90))return void this._showToast(this._t("toast.physical_angle"));const o="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:n}:{id:t.id,shape:"square",center:e.center,cm:n,angle:s};if(i.wall_columns.some(e=>e.id!==t.id&&Bl(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const a=this._geometrySnapshot();if("partition"===t.kind){const i=(e.partitions||[]).find(e=>e.id===t.id);i&&(i.cm=n)}else if("column"===t.kind){const i=(e.wall_columns||[]).find(e=>e.id===t.id);i&&(i.cm=Sl(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=f_(t.angle||"0"):delete i.angle)}else{const i=(e.room_drafts||[]).find(e=>e.id===t.id);i?.segments?.[t.segment||0]&&(i.segments[t.segment||0].cm=n)}this._recordGeometry(this._t("history.physical_edit"),a),this._physicalDialog=null,this._saveConfig()},this._deletePhysicalSelection=()=>{const t=this._physicalSel,e=this._curSpaceCfg;if(!t||!e)return;if("draft"===t.kind)return void this._deleteDraftWhole();const i=this._geometrySnapshot();if("partition"===t.kind){const i=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(i.length)return void(this._partitionDeleteDialog={id:t.id,openings:i.map(t=>JSON.parse(JSON.stringify(t)))})}const s="partition"===t.kind?"partitions":"column"===t.kind?"wall_columns":"room_drafts";e[s]=(e[s]||[]).filter(e=>e.id!==t.id),e[s].length||delete e[s],this._activeDraftId===t.id&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._confirmPartitionDelete=()=>{const t=this._partitionDeleteDialog,e=this._curSpaceCfg;if(!t||!e)return;const i=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this._partitionDeleteDialog=null,this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftWhole=()=>{const t="draft"===this._physicalDialog?.kind?this._physicalDialog.id:"draft"===this._physicalSel?.kind?this._physicalSel.id:null,e=this._curSpaceCfg;if(!t||!e||!confirm(this._t("confirm.delete_draft")))return;const i=this._geometrySnapshot();e.room_drafts=(e.room_drafts||[]).filter(e=>e.id!==t),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===t&&this._cancelPath(),this._physicalSel=null,this._physicalDialog=null,this._recordGeometry(this._t("history.physical_delete"),i),this._saveConfig()},this._deleteDraftSegment=()=>{const t=this._physicalDialog,e=this._curSpaceCfg;if(!t||"draft"!==t.kind||!e)return;if(!confirm(this._t("confirm.delete_draft_segment")))return;const i=(e.room_drafts||[]).findIndex(e=>e.id===t.id);if(i<0)return;const s=e.room_drafts[i],n=Math.max(0,Math.min(s.segments.length-1,t.segment||0)),o=[],a=s.points.slice(0,n+1),r=s.points.slice(n+1);if(a.length>=2&&o.push({id:s.id,points:a,segments:s.segments.slice(0,n)}),r.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:r,segments:s.segments.slice(n+1)}),2===o.length&&e.room_drafts.length>=200)return void this._showToast(this._t("toast.physical_limit"));const l=this._geometrySnapshot();e.room_drafts.splice(i,1,...o),e.room_drafts.length||delete e.room_drafts,this._activeDraftId===s.id&&this._cancelPath(),this._physicalDialog=null,this._physicalSel=o.length?{kind:"draft",id:o[0].id}:null,this._recordGeometry(this._t("history.draft_segment_delete"),l),this._saveConfig()},this._rebindPartitionOpening=()=>{const t=this._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingRebindId=e,this._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this._openingPresetRevision},this._openingDialog=null,this._openingHoverCandidate=null)},this._keepClosedAsPartitions=()=>{if(this._wallFaceBatch)return void this._decideWallFace(!1);if(!this._contourClosed||this._pendingSplit||!this._curSpaceCfg)return;const t=this._curSpaceCfg,e=this._path.slice(0,-1);if((t.partitions||[]).length+e.length>F_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r];t.partitions||=[];const n=Date.now().toString(36);for(let i=0;it.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.contour_to_partitions"),i),this._saveConfig(),this._roomDialog=!1,this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null},this._toggleServerPlans=async()=>{const t=this._spaceDialog;if(t)if(t.pickSaved)this._spaceDialog={...t,pickSaved:!1};else{this._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.hass.callWS({type:"houseplan/plans/list"}),e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,saved:[],savedBusy:!1}),this._showToast(this._t("toast.plans_list_failed",{err:this._errText(t)}))}}},this._aspectJob=null,this._dayCycleTick=()=>{if(!this.isConnected||"hidden"===this.ownerDocument.visibilityState)return;const t=this._dayCycleState();if(!t)return this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),void(this._dayCycleClockKey="");const e=La(t);e!==this._dayCycleClockKey&&(this._dayCycleClockKey=e,this.requestUpdate())},this._sunShown=!1,this._sunOut=!1,this._sunOutTimer=0,this._openSettingsDialog=()=>{if(!this._norm)return;const t=this._glowRadiusCm,e=this._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this._settingsDialog={colors:JSON.parse(JSON.stringify(this._fillColors)),glowRadius:e,bgColor:cs(this._settings,{bgColor:null})||null,northDeg:Ya(this._settings,{}),bgMode:Xa(this._settings,{}),sunRays:Ja(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=ap(this._serverCfg,this._layout||{}),i=Math.ceil(10*e.report.maxShiftCm)/10,s=t.find(t=>null!=t?.id&&String(t.id)===e.report.maxSpace),n=t.length>1&&s?String(s.title||s.id):"";this._alignDialog={report:e.report,config:e.config,layout:e.layout,cm:i,where:n,changed:e.changed,busy:!1}},this._optimizeUndoBusy=!1,this._openBackupExport=()=>{this._settingsDialog=null,this._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._openRulesDialog=()=>{if(!this._norm)return;const t=this._settings.icon_rules,e=(t&&t.length?t:Xt).map(t=>({...t}));this._rulesDialog={rules:e,test:"",busy:!1}},this._climateCache=null,this._gearPtCache=new WeakMap}get _canEdit(){return!!this._norm&&(!0===this._serverCanWrite||!1!==this._serverCanWrite&&!0===this.hass?.user?.is_admin)}get _kiosk(){return!!this._config?.kiosk}_showKioskDots(){this._kioskDots=!0,clearTimeout(this._kioskDotsTimer),this._kioskDotsTimer=window.setTimeout(()=>this._kioskDots=!1,2500)}get _modeTransitionBusy(){return this._modeTransitionPreparing||this._modeTransition.active}_cssColor(t,e){const i=String(t||"").trim();if(!i)return e;const s=document.createElement("span");s.style.cssText=`position:absolute;visibility:hidden;color:${i}`,this.renderRoot.append(s);const n=getComputedStyle(s).color||e;return s.remove(),n}_currentModeVisual(t=this._mode){const e=this._modeTransition.presented||this._modeTransitionVisual;if(e)return{...e,viewport:{...e.viewport,viewBox:{...e.viewport.viewBox}}};const i=this._stageEl;if(!i||i.clientWidth<=0||i.clientHeight<=0)return null;const s=this.renderRoot.querySelector(".editorchrome"),n=this._viewOr(this._baseVb()),o=this.renderRoot.querySelector(".hp-paper"),a=this.renderRoot.querySelector(".hp-backdrop"),r=this.renderRoot.querySelector(".zoomwrap"),l=r?getComputedStyle(r).filter:"",c=Number(/brightness\(([^)]+)\)/.exec(l)?.[1]);return{presentedMode:t,editorChromeHeight:"view"===t?0:s?.getBoundingClientRect().height||0,stageWidth:i.clientWidth,stageHeight:i.clientHeight,viewport:gp(n,i.clientWidth),stageColor:getComputedStyle(i).backgroundColor||"rgb(255, 255, 255)",paperColor:o?getComputedStyle(o).fill:"rgb(255, 255, 255)",sceneBrightness:Number.isFinite(c)?c:1,architectureOpacity:"decor"===t?.35:1,backdropOpacity:a&&Number(getComputedStyle(a).opacity)||1,viewWeight:"view"===t?1:0,editorWeight:"view"===t?0:1,toolbarContentOpacity:"view"===t?0:1}}_viewForModeTarget(t,e,i,s,n){const o=zi(this._baseVb(),s/Math.max(1,n)),a=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),r=o.w/a,l=o.h/a,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-r/2,y:h-l/2,w:r,h:l},o)}_targetStageColor(t){return"view"!==t?"rgb(255, 255, 255)":this._cssColor(this._stageBg(this._spaceDisplayForRender()),this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"))}_targetPaperColor(t){return"view"===t&&this._spaceModel()?.bg?this._cssColor("var(--ha-card-background, var(--card-background-color, #111))","rgb(17, 17, 17)"):"rgb(255, 255, 255)"}_targetBrightness(t){return 1}_applyModeTransitionFrame(t){t.targetMode===this._mode&&(this._modeTransitionVisual=t.presented,this._view={...t.presented.viewport.viewBox},this.requestUpdate())}_settleModeTransition(t){if(t.targetMode!==this._mode)return;const e=this._modeTransitionRequest;this._view={...t.to.viewport.viewBox},this._zoom=this._modeTransitionTargetZoom,this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._lastValidStageSize=[t.to.stageWidth,t.to.stageHeight],"view"===this._mode&&(this._saveZoom(),this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate(),this.updateComplete.then(()=>{if(!this.isConnected||e!==this._modeTransitionRequest||this._modeTransitionBusy||t.targetMode!==this._mode)return;const i=this._stageEl;if(i&&i.clientWidth>0&&i.clientHeight>0&&(Math.abs(i.clientWidth-t.to.stageWidth)>.5||Math.abs(i.clientHeight-t.to.stageHeight)>.5)){const t=this._view;this._lastValidStageSize=[i.clientWidth,i.clientHeight],this._applyView(this._zoom,t?t.x+t.w/2:void 0,t?t.y+t.h/2:void 0),this.requestUpdate()}const s=this.renderRoot.activeElement;(!s||!s.isConnected||!!s.closest?.(".editorchrome, .stage"))&&this.renderRoot.querySelector(".modetab.active")?.focus?.({preventScroll:!0})})}_cancelModeTransition(t=!0){const e=!!this._modeTransition.state;this._modeTransitionRequest++,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransition.cancel(t),t&&e||(this._modeTransitionVisual=null)}_adoptMode(t){this._cancelModeTransition(!1),this._mode=t,"view"!==t&&(this._editorChromeMode=t)}_commitViewModeAtomic(t,e,i,s){if(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this._zoom=e,t){const n=this._stageEl?.clientWidth||t.stageWidth,o=Math.max(1,t.stageHeight+t.editorChromeHeight);this._view=this._viewForModeTarget(e,i,s,n,o),this._lastValidStageSize=[n,o]}else this._view=null;this._viewModeSnap=null,this._modeTransitionEditorCamera=null,this._saveZoom(),this.requestUpdate()}_prepareModeTransition(t,e,i,s,n,o){this.updateComplete.then(()=>{if(!this.isConnected||t!==this._modeTransitionRequest||this._mode!==i)return void(t===this._modeTransitionRequest&&(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._modeTransitionForceAtomic=!1,this.requestUpdate()));const a=this.renderRoot.querySelector(".editorchrome"),r=a?.querySelector(".editorchrome-inner"),l="view"===i?0:r?.scrollHeight||r?.getBoundingClientRect().height||0,c=Math.max(1,e.stageHeight+e.editorChromeHeight),h=Math.max(1,c-l),d=this._stageEl?.clientWidth||e.stageWidth;if(d<=0||h<=0)return this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._applyView(s,n,o),void this.requestUpdate();const u=this._viewForModeTarget(s,n,o,d,h),p={presentedMode:i,editorChromeHeight:l,stageWidth:d,stageHeight:h,viewport:gp(u,d),stageColor:this._targetStageColor(i),paperColor:this._targetPaperColor(i),sceneBrightness:this._targetBrightness(i),architectureOpacity:"decor"===i?.35:1,backdropOpacity:"decor"===i&&"backdrop"!==this._decorTool?.5:1,viewWeight:"view"===i?1:0,editorWeight:"view"===i?0:1,toolbarContentOpacity:"view"===i?0:1};this._modeTransitionPreparing=!1;const _=this._modeTransitionForceAtomic;this._modeTransitionForceAtomic=!1,this._modeTransition.start(e,p,i,this._reducedMotion||_?0:220)})}get _hasFixedFloor(){return!!this._config&&Object.prototype.hasOwnProperty.call(this._config,"floor")}_fixedFloorState(t=this._model,e=this._loadOk){const i=this._config?.floor,s=function(t){if(!t.hasFloor)return{kind:"absent"};const e=t.floor;if("string"==typeof e)return e.length?t.spaceIds.includes(e)?{kind:"valid",id:e,source:"id"}:{kind:"invalid",reason:"unknown-id",value:e}:{kind:"invalid",reason:"empty-id",value:e};if("number"==typeof e){if(!Number.isFinite(e))return{kind:"invalid",reason:"non-finite-index",value:e};if(!Number.isInteger(e))return{kind:"invalid",reason:"fractional-index",value:e};if(e<0)return{kind:"invalid",reason:"negative-index",value:e};const i=t.spaceIds[e];return void 0===i?{kind:"invalid",reason:"out-of-range-index",value:e}:{kind:"valid",id:i,source:"index"}}return{kind:"invalid",reason:"invalid-type",value:e}}({spaceIds:t.map(t=>t.id),hasFloor:this._hasFixedFloor,floor:i});return!this._hasFixedFloor||e?s:"number"==typeof i?"valid"===s.kind||"invalid"===s.kind&&"out-of-range-index"===s.reason?{kind:"pending",value:i}:s:"valid"===s.kind||"invalid"===s.kind&&"unknown-id"!==s.reason?s:{kind:"pending",value:i}}_canCommitSpace(t,e=!1){if(e||!this._hasFixedFloor)return!0;const i=this._fixedFloorState();return"valid"===i.kind&&i.id===t}_commitSpace(t,e=!1){return!!this._canCommitSpace(t,e)&&(t!==this._space&&(this._clearTransientHover(!0),this._cancelDevicePressFeedback()),this._space=t,!0)}_slideTo(t,e){if(t===this._space)return!0;if(!this._canCommitSpace(t))return!1;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return!1;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;return this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._commitSpace(t),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._tool="draw",this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._selId=null,this._physicalSel=null,this._editorSecondary.closeForNavigation(),this._physicalDialog=null,this._physicalDrag=null,"plan"===this._mode&&"draw"===this._tool&&this._resumeLastDraft(),this._restoreZoom(),i||(this._slide=e,clearTimeout(this._slideTimer),this._slideTimer=window.setTimeout(()=>{this._slideTimer=void 0,this._slide="",this.requestUpdate()},190),this.requestUpdate()),!0}_pickSpace(t){if(t===this._space)return;const e=this._model.map(t=>t.id),i=e.indexOf(this._space),s=e.indexOf(t);this._navApplied=!0,this._showFar=!1,this._frame=null,this._slideTo(t,i>=0&&s0&&Date.now()>=this._cyclePausedUntil&&this._model.length>1&&this._zoom<=1.001){const t=this._model.map(t=>t.id),e=t.indexOf(this._space);this._slideTo(t[(e+1)%t.length],"left"),this._showKioskDots()}}_syncCycleTimer(){clearInterval(this._cycleTimer),this._cycleTimer=void 0,this.isConnected&&!this._hasFixedFloor&&this._config?.kiosk&&Number(this._config.cycle)>0&&(this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle)))}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new ih(()=>{this._resumeSettling="steady"!==this._continuity.state,this._continuityEpoch++,this.isConnected&&this.requestUpdate()})}get _labsIso(){return this._labs.active.includes("iso")}get _desiredProjection(){return"view"===this._mode&&this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat"}_saveViewPreference(){try{localStorage.setItem(T_,JSON.stringify(this._viewPreference))}catch{}}_logicalViewCenter(t){const e=this._view;if(!e)return null;const i=[e.x+e.w/2,e.y+e.h/2],s="iso"===t?jp(i):i;return{x:s[0],y:s[1]}}_convertProjectionView(t,e){if(t===e)return;const i=this._logicalViewCenter(t);this._view=null;const s=i?"iso"===e?qp([i.x,i.y],0):[i.x,i.y]:null;this._applyView(this._zoom,s?.[0],s?.[1]),this._warmPatch({vp:this._warmViewportState()}),this.requestUpdate()}_setProjection(t){if(!this._labsIso||"view"!==this._mode)return;const e=this._effectiveProjection();if(this._viewPreference={...this._viewPreference,[this._space]:t},"iso"===t){const t=this._isoSceneKey();t&&this._isoFallback.delete(t)}this._saveViewPreference();const i=this._effectiveProjection();this._convertProjectionView(e,i)}_hashSpace(){return Dp(window.location.hash||"")}connectedCallback(){this._connectedPath=location.pathname,this._routeDepartureHandled=!1,window.addEventListener("location-changed",this._onLocationChanged),window.addEventListener("popstate",this._onLocationChanged),this._continuityDisposed&&(this._continuity=this._newContinuityController(),this._continuityDisposed=!1,this._continuityPaintToken=-1);const t=(e=this.ownerDocument,lp.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=th(this.ownerDocument,this._pageVisibility),super.connectedCallback(),this._pointerModality.connect(this.ownerDocument.defaultView);const i=this.ownerDocument.defaultView?.MutationObserver;i&&(this._pointerHoverObserver=new i(t=>{for(const e of t)for(const t of e.addedNodes)this._syncPointerHoverSubtree(t)}),this._pointerHoverObserver.observe(this.renderRoot,{childList:!0,subtree:!0})),this._motionMedia=window.matchMedia?.("(prefers-reduced-motion: reduce)"),this._reducedMotion=!!this._motionMedia?.matches,this._motionMedia?.addEventListener?.("change",this._onMotionChange),function(t){const e=lp.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=hp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),lp.set(t,i),i.promise}(this.ownerDocument).then(t=>{t!==this._glowScreenBlend&&(this._glowScreenBlend=t,this.isConnected&&this.requestUpdate())}),this.hass&&this._ensureHaRegistryAuthority(),window.addEventListener("keydown",this._keyHandler),this._signer.start(()=>this.hass,()=>Rs(this._serverCfg)),this._syncCycleTimer(),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Ep.add(e);const i=Hp(t);return"undefined"==typeof window&&e(i),()=>{Ep.delete(e)}}(d_,this._onLabsSnapshot),this._booting?this._bootWatch():this._bootFading&&(clearTimeout(this._bootTimer),this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220)),this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)),!this._loadOk&&this._serverCfg&&this.hass&&this._scheduleLoadRetry(),!this._warmSlot&&this._config&&this._warmAdopt(),this._loadOk&&this._ensureLiveSyncSubscriptions(),this._warmVp&&!this._warmRevivePending&&void 0===this._warmReviveTimer&&(this._warmRevivePending=!0,this._warmReviveTimer=window.setTimeout(()=>this._warmReviveDialog(),0)),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1,this.requestUpdate()}disconnectedCallback(){this._connectedPath&&location.pathname!==this._connectedPath&&this._leaveCardRoute(),window.removeEventListener("location-changed",this._onLocationChanged),window.removeEventListener("popstate",this._onLocationChanged),this._continuityUnsub?.(),this._continuityUnsub=void 0,this._motionMedia?.removeEventListener?.("change",this._onMotionChange),this._motionMedia=void 0,this._vacRaf&&(cancelAnimationFrame(this._vacRaf),this._vacRaf=0),this._refitRaf&&(cancelAnimationFrame(this._refitRaf),this._refitRaf=0),this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0),this._dayCycleClockKey="",this._bootSettleRaf&&(cancelAnimationFrame(this._bootSettleRaf),this._bootSettleRaf=0),this._bootSettling=!1;for(const t of this._activityRt.values())clearTimeout(t.timer);window.removeEventListener("keydown",this._keyHandler),clearInterval(this._cycleTimer),clearTimeout(this._kioskDotsTimer),clearTimeout(this._kioskHoldTimer),clearTimeout(this._reloadRetry),clearTimeout(this._loadRetryTimer),this._loadRetryTimer=void 0,this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),this._connHooked=null,this._haRegistryRelease?.(),this._haRegistryRelease=void 0,this._haRegistryConnection=null,this._signer.dispose(),clearTimeout(this._toastTimer),clearTimeout(this._slideTimer),this._modeTransition.dispose(),this._modeTransitionVisual=null,this._modeTransitionPreparing=!1,this._modeTransitionForceAtomic=!1,this._modeTransitionRequest++,this._slideTimer=void 0,this._slide="",clearTimeout(this._bootTimer),this._bootTimer=void 0,clearTimeout(this._bootSoftTimer),this._saveConfigDebounced.flush(),window.removeEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=void 0,clearTimeout(this._holdTimer),this._roViewport?.disconnect(),this._roViewport=void 0,this._roHdr?.disconnect(),this._roHdr=void 0,this._onWinResize&&(window.removeEventListener("resize",this._onWinResize),this._onWinResize=void 0),this._unsubCfg&&(this._unsubCfg(),this._unsubCfg=null),this._unsubLayout&&(this._unsubLayout(),this._unsubLayout=null),this._unsubVirtual&&(this._unsubVirtual(),this._unsubVirtual=null),this._unsubTrail&&(this._unsubTrail(),this._unsubTrail=void 0),this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=null,clearTimeout(this._layoutSyncTimer),clearTimeout(this._duplicateColumnTimer);for(const t of this._glowFadeTimers.values())clearTimeout(t);for(const t of this._glowEnterRafs.values())cancelAnimationFrame(t);clearTimeout(this._glowFeatherResumeTimer),this._glowFeatherResumeTimer=0,this._glowFeatherSuspendUntil=0,this._glowFadeTimers.clear(),this._glowEnterRafs.clear(),this._glowEnteringSources.clear(),this._glowRenderedSources.clear(),this._glowLastAppearance.clear(),this._glowSourceSeq=0,this._warmSnapshot(),this._warmRevivePending=!1,clearTimeout(this._warmReviveTimer),this._warmReviveTimer=void 0,this._warmRelease(),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._touchContacts.clear(),this._touchSequenceMultitouch=!1,this._touchClickBlockUntil=0,this._clearTransientHover(!0),this._cancelDevicePressFeedback(),this._pointerHoverObserver?.disconnect(),this._pointerHoverObserver=void 0,this._pointerModality.disconnect(),this._editorSecondary.reset(),this._resumeSettling=!1,this._continuityHistory=[...this._continuityHistory,...this._continuity.trace].slice(-80),this._continuity.dispose(),this._continuityDisposed=!0,super.disconnectedCallback()}_onKey(t){if("Escape"===t.key&&this._vacFit)return this._vacFit=null,this._showToast(this._t("vac.cal_cancelled")),void t.stopPropagation();if("Escape"===t.key){if(this._tapConfirm)return void(this._tapConfirm=null);if(this._vacCalConfirm)return void(this._vacCalConfirm=null);if(this._decorEraseConfirm)return void(this._decorEraseConfirm=null);if(this._openingInfo)return void(this._openingInfo=null);if(this._infoCard)return void this._closeInfoCard();if(this._rulesDialog)return void(this._rulesDialog=null);if(this._alignDialog)return void(this._alignDialog=null);if(this._backupImportDialog)return void(this._backupImportDialog=null);if(this._backupExportDialog)return void(this._backupExportDialog=null);if(this._settingsDialog)return void(this._settingsDialog=null);if(this._markerDialog)return void(this._markerDialog=null);if(this._openingDialog)return void(this._openingDialog=null);if(this._physicalDialog)return void(this._physicalDialog=null);if(this._backdropDialog)return void(this._backdropDialog=null);if(this._decorShapeDialog)return void(this._decorShapeDialog=null);if(this._decorTextDialog)return void(this._decorTextDialog=null);if(this._spaceDialog&&!this._roomDialog)return this._spaceDialog=null,this._importQueue=[],void(this._importTotal=0);if(this._editorSecondary.hasOpenGroup)return t.preventDefault(),void this._editorSecondary.closeGroup(!0)}const e=t.composedPath?.()||[t.target],i=e.some(t=>t?.matches?.('input, textarea, select, [contenteditable="true"]')),s=e.some(t=>t?.classList?.contains?.("editor-secondary")),n=t.ctrlKey||t.metaKey,o=t.key.toLowerCase(),a=/^[a-z]$/.test(o),r="z"===o||!a&&"KeyZ"===t.code,l="y"===o||!a&&"KeyY"===t.code,c=n&&(r&&t.shiftKey||l),h=n&&r&&!t.shiftKey;if("decor"===this._mode){if((h||c)&&i)return;return c?(t.preventDefault(),void this._redoGeometry()):h?(t.preventDefault(),this._decorDraft?void(this._decorDraft=null):this._decorMove||this._dtDrag||this._bdDrag?void this._cancelDecorGesture():void this._undoGeometry()):"Delete"!==t.key&&"Backspace"!==t.key||!this._decorSel||i||s?void("Escape"===t.key&&(t.preventDefault(),this._decorDraft?this._decorDraft=null:this._decorMove||this._dtDrag||this._bdDrag?this._cancelDecorGesture():"furniture"===this._decorTool?(this._furnPalette=null,this._decorTool="select"):this._decorSel?this._decorSel=null:"select"!==this._decorTool?this._decorTool="select":this._setMode("view"))):(t.preventDefault(),void this._decorDeleteSel())}if(this._markup&&(!h&&!c||!i)){if(("Delete"===t.key||"Backspace"===t.key)&&this._physicalSel&&!i&&!s)return t.preventDefault(),void this._deletePhysicalSelection();if(c)return t.preventDefault(),void this._redoGeometry();if(h)return t.preventDefault(),this._rszDrag?void this._rszCancelDrag():this._wallFaceBatch?(this._roomDialogCancel(),void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint())):"draw"===this._tool&&this._path.length?void(this._activeDraftId&&this._path.length>1?this._undoActiveDraftPoint():this._undoPoint()):"split"===this._tool&&this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},void(this._splitSel.pts.length||(this._cursorPt=null))):void this._undoGeometry();if("Escape"===t.key)return this._physicalDrag||this._physicalRotate?(t.preventDefault(),void this._cancelPhysicalGesture()):this._roomDialog?(t.preventDefault(),void this._roomDialogCancel()):"draw"===this._tool&&this._path.length?(t.preventDefault(),void this._undoPoint()):this._physicalSel?(t.preventDefault(),void(this._physicalSel=null)):"resize"===this._tool?(t.preventDefault(),this._rszDrag?void this._rszCancelDrag():void(this._rszSel?this._rszSel=null:this._tool="draw")):"split"===this._tool?(t.preventDefault(),void(this._splitSel?.pts?.length?(this._splitSel={...this._splitSel,pts:this._splitSel.pts.slice(0,-1)},this._splitSel.pts.length||(this._cursorPt=null)):this._splitSel?this._splitSel=null:this._tool="draw")):"merge"===this._tool?(t.preventDefault(),void(this._mergeSel?this._mergeSel=null:this._tool="draw")):this._wallDialog?(t.preventDefault(),void(this._wallDialog=null)):"boundary"===this._tool?(t.preventDefault(),void(this._openWallAnchor?this._cancelBoundaryAnchor():this._tool="draw")):void("opening"!==this._tool&&"wallthick"!==this._tool&&"delroom"!==this._tool&&"column"!==this._tool||(t.preventDefault(),"opening"===this._tool&&this._clearOpeningPlacement(!0),this._tool="draw"))}}_undoPoint(){if(this._path.length){if(this._contourClosed)return this._path=this._path.slice(0,-1),void(this._closingWallCm=null);if(this._activeDraftId&&this._path.length>1&&this._curSpaceCfg){const t=this._geometrySnapshot();this._path=this._path.slice(0,-1),this._draftSegmentCms=this._draftSegmentCms.slice(0,-1);const e=this._curSpaceCfg,i=(e.room_drafts||[]).findIndex(t=>t.id===this._activeDraftId);return void(i>=0&&(this._path.length<2?(e.room_drafts.splice(i,1),e.room_drafts.length||delete e.room_drafts,this._activeDraftId=null):e.room_drafts[i]={id:this._activeDraftId,points:this._path.map(t=>[t[0]/P_,t[1]/P_]),segments:this._draftSegmentCms.map(t=>({cm:t}))},this._recordGeometry(this._t("history.draft_segment_delete"),t),this._saveConfig()))}this._path=this._path.slice(0,-1)}}_undoActiveDraftPoint(){const t=this._activeDraftId,e=this._path[0]?[...this._path[0]]:null,i=this._geometryHistory.undo();if(!i)return void this._undoPoint();if(!this._applyGeometryState(i.before))return void this._geometryHistory.clear();const s=t?this._spaceModel()?.room_drafts.find(e=>e.id===t):null;s?(this._activeDraftId=s.id,this._path=s.points.map(t=>[...t]),this._draftSegmentCms=s.segments.map(t=>t.cm),this._resumeDraftBySpace[this._space]=s.id):(this._activeDraftId=null,this._path=e?[e]:[],this._draftSegmentCms=[],t&&this._resumeDraftBySpace[this._space]===t&&delete this._resumeDraftBySpace[this._space]),this._clearPlanSnapHover(),this._showToast(this._t("history.undone",{name:i.name}))}static getConfigElement(){return document.createElement("houseplan-card-editor")}static getStubConfig(){return{type:"custom:houseplan-card"}}static _warmBootReset(t){for(const t of b_.values())for(const e of t)clearTimeout(e.evict);b_.clear(),x_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of b_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:b_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){const e=this._config,i=!!e&&Object.prototype.hasOwnProperty.call(e,"floor");this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t};(i!==this._hasFixedFloor||e?.floor!==this._config.floor)&&(this._hashApplied=!1,this._navApplied=!1,this._warmVpArmed=!1),this._config.kiosk&&(this._booting=!1,this._bootFading=!1),!this._hasFixedFloor&&t.default_floor&&this._commitSpace(t.default_floor,!0);try{this._zoomBySpace=JSON.parse(localStorage.getItem(M_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(T_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Hp(d_);try{const t=JSON.parse(localStorage.getItem(D_)||"null");this._kioskScale={icon:Es(t?.icon),font:Es(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(S_)||"null");t&&t.config&&Array.isArray(t.config.spaces)&&(this._serverCfg=t.config,this._cfgEpoch++,this._cfgRev=t.rev||0,this._cfgContentFingerprint=t.config_fingerprint||sh(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||sh(this._layout),this._virtualLights=_n(t.virtual_lights,this._cfgRev),this._serverStorage=!0)}catch{}this._adoptInitialSpace(this._model,this._loadOk),"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._syncCycleTimer(),this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=k_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=b_.get(t);if(!s||!s.length)return;const n=s.find(t=>t.owner===this._warmGen);if(n)return this._warmLongReturn=!!n.freed&&Date.now()-n.freed>=Jc,clearTimeout(n.evict),n.evict=0,n.freed=0,n.live=!0,this._warmSlot=n,this._warmKey=t,n.frameFingerprint&&this._continuity.adoptCompleteFrame(n.frameFingerprint),void(!this._devices.length&&n.devices?.length&&(this._devices=[...n.devices]));const{slot:o,sure:a}=((t,e,i,s)=>{const n=t=>{const e=!!i&&t.place?.deref()===i;return e&&t.idx===s?4:t.live?0:e?3:2};let o=null,a=0,r=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>a?(o=i,a=t,r=1):t===a&&r++)}return!o||r>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Jc,this._booting=!1,this._bootFading=!1,this._hdrH=o.hdrH,this._bootSoft=!0,this.isConnected&&(clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)),this._warmKey=t,a?(clearTimeout(o.evict),o.evict=0,o.owner=this._warmGen,o.place=e?new WeakRef(e):null,o.idx=i,o.live=!0,this._warmSlot=o,this._warmVp=o.vp,o.frameFingerprint&&this._continuity.adoptCompleteFrame(o.frameFingerprint),!this._devices.length&&o.devices?.length&&(this._devices=[...o.devices]),this._warmAdoptViewport(this._config)):(this._warmSlot={owner:this._warmGen,path:location.pathname,place:e?new WeakRef(e):null,idx:i,live:!0,hdrH:o.hdrH,stageH:o.stageH,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0},s.push(this._warmSlot),this._warmTrim(s)))}_warmIdx(t){const e=t?.children;if(!e)return-1;for(let t=0;t4;){const e=t.findIndex(t=>!t.live);if(e<0)break;clearTimeout(t[e].evict),t.splice(e,1)}}_warmScheduleEvict(t,e){if(clearTimeout(t.evict),!(t.dlg||t.vp&&"view"!==t.vp.mode))return;const i=t.freed,s=t.owner;t.evict=window.setTimeout(()=>{if(t.evict=0,t.freed!==i||t.owner!==s)return;var n;t.dlg=null,t.vp=(n=t.vp)&&"view"!==n.mode?{...n,mode:"view",zoom:n.snap?.space===n.space?n.snap.zoom:n.zoom,view:null,snap:null,tool:"draw",decorTool:"select",showHidden:!1,selId:null,rszSel:null,decorSel:null}:n,t.frameFingerprint="";const o=b_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},x_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);const i=this._fixedFloorState();if(this._hashApplied||!this._model.find(t=>t.id===e.space)||"valid"===i.kind&&i.id!==e.space||this._hasFixedFloor&&"valid"!==i.kind)return void(this._warmVp=null);this._commitSpace(e.space,!0),this._navApplied=!0,this._adoptMode("view"!==e.mode&&this._canEdit&&!t.kiosk?e.mode:"view"),this._pendingNavMode="view"===e.mode||this._canEdit||t.kiosk?null:e.mode,this._zoom=e.zoom;const s=this._effectiveProjection(),n=s===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=n&&e.view?{...e.view}:null,this._viewModeSnap=n&&e.snap?{...e.snap}:null,!n&&e.logicalCenter){const t="iso"===s?qp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var o;this._tool="openwall"===(o=e.tool)||"closewall"===o?"boundary":"opening"===(o=function(t){return"partition"===t?"draw":t}(o))?"draw":"string"==typeof o&&I_.has(o)?o:"draw",this._decorTool=e.decorTool,this._showHidden=e.showHidden,this._showFar!==e.showFar&&(this._showFar=e.showFar,this._frame=null),this._selId=e.selId,this._rszSel=e.rszSel,this._decorSel=e.decorSel,this._warmVpArmed=!0}_warmPatch(t,e=!1){if(this._config?.kiosk)return;const i=k_(this._config);if(!this._warmSlot||this._warmKey===i){if(!this._warmSlot){if(!e)return;const t=this.parentNode;this._warmKey=i,this._warmSlot={owner:this._warmGen,path:location.pathname,place:t?new WeakRef(t):null,idx:this._warmIdx(t),live:!0,hdrH:this._hdrH,stageH:0,vp:null,frameFingerprint:"",devices:null,dlg:null,freed:0,evict:0};const s=b_.get(i)||[];for(s.push(this._warmSlot),b_.set(i,s),this._warmTrim(s);b_.size>8;){const t=b_.keys().next().value;if(void 0===t||t===i)break;for(const e of b_.get(t)||[])clearTimeout(e.evict);b_.delete(t)}}Object.assign(this._warmSlot,t)}}_warmViewportState(){const t=this._effectiveProjection();return{space:this._space,mode:this._mode,projection:t,activeLabsIso:this._labsIso,logicalCenter:this._logicalViewCenter(t),zoom:this._zoom,view:this._view?{...this._view}:null,snap:this._viewModeSnap?{...this._viewModeSnap}:null,tool:this._tool,decorTool:this._decorTool,showHidden:this._showHidden,showFar:this._showFar,selId:this._selId,rszSel:this._rszSel,decorSel:this._decorSel}}_warmDialogState(){const t=(t,e)=>({kind:t,space:this._space,mode:this._mode,data:e});return this._tapConfirm||this._alignDialog||this._mergeDialog||this._importDialog||this._backupExportDialog||this._backupImportDialog?null:this._openingInfo?t("openingInfo",this._openingInfo.id):this._infoCard?t("info",this._infoCard.id):this._rulesDialog?this._rulesDialog.busy?null:t("rules",this._rulesDialog):this._settingsDialog?this._settingsDialog.busy?null:t("settings",this._settingsDialog):this._markerDialog?this._markerDialog.busy?null:t("marker",this._markerDialog):this._openingDialog?t("opening",this._openingDialog):this._backdropDialog?t("backdrop",this._backdropDialog):this._decorShapeDialog?t("decorShape",this._decorShapeDialog):this._decorTextDialog?t("decorText",this._decorTextDialog):this._roomDialog?t("room",{editId:this._roomEditId,fill:this._roomFill,customFill:this._roomCustomFill,tempSrc:this._roomTempSrc,humSrc:this._roomHumSrc,srcOpen:this._roomSrcOpen,srcFilter:this._roomSrcFilter,nameScale:this._roomNameScale,labelScale:this._roomLabelScale,areaSel:this._areaSel,nameSel:this._nameSel,pendingSplit:this._pendingSplit,wallFaceBatch:this._wallFaceBatch,path:this._path}):this._spaceDialog?this._spaceDialog.busy?null:t("space",this._spaceDialog):null}_warmSnapshot(){if(this._booting||this._config?.kiosk||"steady"!==this._continuity.state)return;const t={vp:this._warmViewportState(),frameFingerprint:this._continuity.frameFingerprint,devices:this._devices};if(this._warmRevivePending||(t.dlg=this._warmDialogState()),this.isConnected&&this._warmSlot?.owner===this._warmGen){const e=this.parentNode;t.place=e?new WeakRef(e):null,t.idx=this._warmIdx(e)}this._warmPatch(t)}_warmReviveDialog(){this._warmRevivePending=!1;const t=this._warmSlot;if(this._warmReviveTimer=void 0,!t||!t.dlg)return;const e=t.dlg,i=t.freed;if(t.dlg=null,t.freed=0,clearTimeout(t.evict),t.evict=0,i&&!(Date.now()-i>x_)&&e.space===this._space&&e.mode===this._mode){switch(e.kind){case"space":this._spaceDialog={...e.data,busy:!1,savedBusy:!1};break;case"marker":this._markerDialog={...e.data,busy:!1};break;case"settings":this._settingsDialog={...e.data,busy:!1};break;case"rules":this._rulesDialog={...e.data,busy:!1};break;case"opening":this._openingDialog={...e.data};break;case"backdrop":this._backdropDialog={...e.data};break;case"decorShape":this._decorShapeDialog={...e.data};break;case"decorText":{this._decorTextDialog={...e.data};const t=String(this._decorTextDialog?.text??"").length;this._decorTextSelection={start:t,end:t};break}case"room":{const t=e.data;this._roomEditId=t.editId,this._roomFill=t.fill,this._roomCustomFill=t.customFill||null,this._roomTempSrc=t.tempSrc,this._roomHumSrc=t.humSrc,this._roomSrcOpen=t.srcOpen,this._roomSrcFilter=t.srcFilter,this._roomNameScale=t.nameScale,this._roomLabelScale=t.labelScale,this._areaSel=t.areaSel,this._nameSel=t.nameSel,this._pendingSplit=t.pendingSplit,this._wallFaceBatch=t.wallFaceBatch||null,this._path=t.path,this._wallFaceBatch&&(this._activeDraftId=this._wallFaceBatch.activeDraftId,this._draftSegmentCms=[...this._wallFaceBatch.activeCms]),this._roomDialog=!0;break}case"info":{const t=this._devices.find(t=>t.id===e.data);t&&(this._infoCard=t);break}case"openingInfo":{const t=(this._curSpaceCfg?.openings||[]).find(t=>t.id===e.data);t&&(this._openingInfo=t);break}}this.requestUpdate()}}_cacheSnapshot(){if(this._serverCfg)try{this._cfgContentFingerprint=sh(this._serverCfg),this._layoutContentFingerprint=sh(this._layout),this._virtualLights=function(t,e,i){if(t.configRev===i)return t;const s=new Set((Array.isArray(e?.markers)?e.markers:[]).filter(vn).map(t=>t.id));return{...t,configRev:i,off:new Set([...t.off].filter(t=>s.has(t)))}}(this._virtualLights,this._serverCfg,this._cfgRev),localStorage.setItem(S_,JSON.stringify({config:this._serverCfg,rev:this._cfgRev,config_fingerprint:this._cfgContentFingerprint,layout:this._layout,layout_rev:this._layoutRev,layout_fingerprint:this._layoutContentFingerprint,virtual_lights:mn(this._virtualLights)}))}catch{}}_beginContinuityCandidate(t,e,i="plan"){return this._booting&&!this._continuity.hasCompleteFrame?this._continuity.token:(this._continuityDataReady=e,this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._resumeSettling=!0,this._continuity.beginCandidate(t,i))}_continuityStageValid(){const t=this._stageEl;return!!t&&t.clientWidth>0&&t.clientHeight>0}_continuityAssetsReady(){if(!this._model.length)return!1;const t=this._model.length?this._spaceModel():null;return!t?.bg?.href||this._signer.isReady(this.hass,t.bg.href)}_initialSpaceSelection(t,e=this._loadOk){const i=this._fixedFloorState(t,e);return"valid"===i.kind?{id:i.id,source:"fixed"}:this._hasFixedFloor?{id:null,source:"none"}:function(t){const e=new Set(t.spaceIds.filter(t=>!!t));if(!e.size)return{id:null,source:"none"};const i=[["hash",!1===t.acceptHash?null:t.hashSpace],["current",t.preserveCurrent?t.currentSpace:null],["saved",t.savedSpace],["default",t.defaultSpace],["first",t.spaceIds[0]]];for(const[t,s]of i)if(s&&e.has(s))return{id:s,source:t};return{id:null,source:"none"}}({spaceIds:t.map(t=>t.id),hashSpace:this._hashSpace(),acceptHash:!this._hashApplied,currentSpace:this._space,preserveCurrent:this._hashApplied||this._navApplied||this._warmVpArmed,savedSpace:this._savedNav()?.space,defaultSpace:this._config?.default_floor})}_adoptInitialSpace(t,e=this._loadOk){const i=this._initialSpaceSelection(t,e);return i.id?(this._commitSpace(i.id,!0),"hash"===i.source&&(this._hashApplied=!0),"saved"===i.source&&(this._navApplied=!0),i):i}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._fixedFloorState(i,!0);if(this._hasFixedFloor&&"valid"!==s.kind)return"";const n=this._initialSpaceSelection(i,!0).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===n)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return nh([this._cfgRev,this._cfgContentFingerprint||sh(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||sh(this._layout),this._space,this._mode,this._view,e,this._glowScreenBlend?"screen":"normal",this.hass?.themes?.darkMode??this.hass?.themes?.default_theme??""])}_settleContinuityFrame(){if(this._booting||!this._continuityStageValid())return;if(!this._continuity.hasCompleteFrame&&"steady"===this._continuity.state)return void(this._continuityAssetsReady()&&(this._renderSnapshotAt=Date.now(),this._continuity.markCompleteFrame(this._visualFrameFingerprint())));if(!this._continuityDataReady)return;if(!["holding","offline-stale","overlay-pending","overlay-visible","candidate-ready"].includes(this._continuity.state))return;const t=this._continuity.token;if(this._candidateDeviceSnapshot&&this._candidateDeviceSnapshot!==this._visibleDeviceSnapshot&&this._stagedDeviceSnapshotToken!==t)return this._stagedDeviceSnapshotToken=t,void this.requestUpdate();this._continuityPaintToken!==t&&(this._continuityPaintToken=t,this._continuity.candidateReady(t)&&this._continuity.commitAfterPaint(t,{updateComplete:()=>this.updateComplete,stageValid:()=>this.isConnected&&this._continuityStageValid(),assetsReady:()=>this._continuityAssetsReady(),frameFingerprint:()=>this._visualFrameFingerprint()}).then(e=>{e&&t===this._continuity.token?(this._resumeSettling=!1,this._renderSnapshotAt=Date.now(),this._candidateDeviceSnapshot&&(this._visibleDeviceSnapshot=this._candidateDeviceSnapshot),this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._warmSnapshot()):t===this._continuity.token&&(this._continuityPaintToken=-1,this._stagedDeviceSnapshotToken=-1,this._candidateDeviceSnapshot=null,this.requestUpdate())}))}_onBackdropLoaded(t,e){this._signer.markLoaded(this.hass,t,e),this._continuity.note("asset-ready"),this._continuityPaintToken=-1,"steady"!==this._continuity.state&&this.requestUpdate()}_renderRecoveryOverlay(){if(!this._continuity.overlayVisible&&"recovery-error"!==this._continuity.state)return G;const t="connection"===this._continuity.recoveryReason;return j`
t.stopPropagation()} @click=${t=>t.stopPropagation()} @@ -4737,8 +4754,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t(t?"continuity.restore_connection":"continuity.restore_plan")} ${"recovery-error"===this._continuity.state?j``:G} -
`}houseplanContinuityTrace(){return[...this._continuityHistory,...this._continuity.trace].slice(-80).map(t=>({...t,...t.stage?{stage:[...t.stage]}:{}}))}getCardSize(){return 12}get _norm(){return!(!this._serverCfg||!this._serverCfg.spaces.length)}_cfgFingerprint(){const t=this._serverCfg?.spaces||[];let e=t.length+":";for(const i of t){e+=(i.id||"")+","+(i.plan_aspect||"")+","+(i.plan_url||"").length+","+(i.plan_x??"")+","+(i.plan_y??"")+","+(i.plan_scale??"")+","+(i.plan_scale_x??"")+","+(i.plan_scale_y??"")+","+(i.plan_angle??"")+","+(i.rooms?.length||0)+","+(i.openings?.length||0)+","+(i.decor?.length||0)+";";for(const t of i.rooms||[]){const i=t.poly?.[0],s=t.poly?.[t.poly.length-1];e+=(t.poly?.length||0)+"."+(t.id||"")+"."+(t.open_to||[]).join("+")+"."+(t.area||"")+"."+JSON.stringify(t.settings||0)+"."+(t.x??"")+","+(t.y??"")+","+(t.w??"")+","+(t.h??"")+","+(i?i[0]+"/"+i[1]:"")+","+(s?s[0]+"/"+s[1]:"")+";"}}return e}get _model(){if(!this._serverCfg)return[];const t=this._cfgEpoch+"|"+this._cfgFingerprint();if(this._modelCache&&this._modelCache.key===t)return this._modelCache.model;const e=this._buildModel();return this._modelCache={key:t,model:e},e}_buildModel(){if(!this._serverCfg)return[];const t=this._renderCfg;return Kl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return this._hasFixedFloor?rh(this._model,this._space):(t=this._model,e=this._space,t.find(t=>t.id===e)??t[0]);var t,e}_spaceModelById(t){return rh(this._model,t)}_syncEmptySpaceState(){if(!!this._serverCfg&&0===this._serverCfg.spaces.length){if(!this._emptySpaceStateActive){this._emptySpaceStateActive=!0;for(const t of this._pointers.keys())for(const e of this.renderRoot.querySelectorAll("*"))try{e.hasPointerCapture?.(t)&&e.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null,this._drag=null,this._rlResize=null,this._vacFit=null,this._compassDrag=!1,this._cancelModeTransition(!1),this._mode="view",this._clearGeometryGesture(),this._geometryHistory.clear(),this._resumeDraftBySpace={},this._tip=null,this._hoverRoom=null,this._openingInfo=null,this._closeInfoCard(),this._markerDialog=null,this._physicalDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._roomDialog=!1,"edit"===this._spaceDialog?.mode&&(this._spaceDialog=null),this._editorSecondary.closeForNavigation(),this._saveConfigDebounced.cancel(),this._frame=null,this._planSnapGeometryCache=null,this._decorSnapCache=null,this._commitSpace("",!0)}}else this._emptySpaceStateActive=!1}get _areaToSpace(){const t={};for(const e of this._model)for(const i of e.rooms)i.area&&(t[i.area]={space:e.id,room:i});return t}get _settings(){return this._serverCfg?.settings||{}}get _showAll(){return this._settings.filter_seeded?this._showHidden:!!this._settings.show_all}_toggleShowAll(){if(this._serverCfg){if(this._settings.filter_seeded)return this._showHidden=!this._showHidden,void this.requestUpdate();this._serverCfg={...this._serverCfg,settings:{...this._serverCfg.settings,show_all:!this._settings.show_all}},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}}_seedHiddenDevices(){if(!this._serverCfg||!this._norm||!this._canEdit)return;const t=this._serverCfg,e=function(t){const e=t.hass,i=t.registry||An(e),s=zn(e,i),{areaToSpace:n,markers:o,settings:a,excluded:r,iconRules:l}=t,c=!1!==a.group_lights,h=vo(o),d=mo(s,c).filter(t=>!yo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=Bn(s),_=new Set(o.map(t=>t.binding)),g=[];for(const t of Object.values(s.devices)){const o=t.area_id;if(!o||!n[o])continue;if("service"===t.entry_type)continue;if(_.has("device:"+t.id))continue;if("active"!==Ln(e,"device:"+t.id,i).kind)continue;const a=p[t.id]||[],h=qn(s,t,a);let d=r.has(h)||"Group"===t.model||/scene/i.test(t.model||"")||/bridge/i.test((t.model||"")+(t.name||""))||"myheat"===h&&!!t.via_device_id;if(!d&&c&&u.has(o)){const e=(t.name_by_user||t.name||"").trim();"mdi:lightbulb"===fo(s,e,t.model,a,l)&&(d=!0)}d&&g.push("device:"+t.id)}return g}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,firstSpaceId:this._model[0]?.id||"",iconRules:this._iconRules});if(!e.length&&t.settings?.filter_seeded)return;t.markers=t.markers||[];const i=[];for(const s of e){const e="h"+s.slice(s.indexOf(":")+1);t.markers.push({id:e,binding:s,hidden:!0}),i.push(s.slice(s.indexOf(":")+1))}const s={...t.settings||{},filter_seeded:!0};delete s.show_all,i.length&&Array.isArray(s.new_device_ids)&&(s.new_device_ids=s.new_device_ids.filter(t=>!i.includes(t))),t.settings=s,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}get _iconRules(){const t=this._settings.icon_rules;if(!t||!Array.isArray(t)||!t.length)return;const e=JSON.stringify(t);return e!==this._rulesCompiledSrc&&(this._rulesCompiledSrc=e,this._rulesCompiled=Jt(t)),this._rulesCompiled}get _fillColors(){return ds(this._settings)}get _excluded(){const t=this._settings.exclude_integrations;return t?new Set(t):Yt}willUpdate(t){t.has("_serverCfg")&&this._cfgEpoch++,this._syncEmptySpaceState(),t.has("hass")&&this.hass&&(this._hassSequence++,this._renderSnapshotAt=Date.now(),this._continuity.note("hass-snapshot"),this._ensureHaRegistryAuthority(),this._planHassMemo=null,this._hookConnection(),!this._loadOk&&!this._loading&&this._loadTries<8&&this._loadFromServer(),this._maybeRebuildDevices(),this._vacTick(),this._activityTick()),this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._continuity.refreshCompleteFrame(this._visualFrameFingerprint()),this._captureRenderDeviceSnapshot()}updated(){this._syncDayCycleClock(),this._warmSnapshot(),this._dtMeasure();const t=this._stageEl;t&&!this._roViewport&&(this._roViewport=new ResizeObserver(()=>this._refitView()),this._roViewport.observe(t)),t&&this._booting&&!this._bootTimer&&this._bootWatch();const e=this.renderRoot.querySelector(".hdr");if(e&&t&&!this._roHdr){const i=()=>{const e=this.renderRoot.querySelector("ha-card");if(!e)return;const i=t.getBoundingClientRect().top-e.getBoundingClientRect().top,s=Math.min(Math.max(e.getBoundingClientRect().top,0),120),n=Math.round(i+s);n>=0&&n!==this._hdrH&&(this._hdrH=n),n>=0&&!this._booting&&!this._config?.kiosk&&t.clientHeight>0&&this._warmPatch({hdrH:n,stageH:t.clientHeight})};this._roHdr=new ResizeObserver(()=>requestAnimationFrame(i)),this._roHdr.observe(e),this._onWinResize=()=>requestAnimationFrame(i),window.addEventListener("resize",this._onWinResize),i()}if(t&&!this._view&&this._refitView(),this._editorSecondary.afterRender(),this._settleContinuityFrame(),this._serverStorage&&this._loadOk&&0===this._model.length&&!this._spaceDialog&&!this._importDialog&&!this._onboardingShown){this._onboardingShown=!0;const t=function(t){const e=t?.floors;if(!e||"object"!=typeof e)return[];const i=[];for(const t of Object.values(e))t&&t.floor_id&&i.push({id:t.floor_id,name:t.name||t.floor_id,level:t.level??null});return i.sort((t,e)=>{const i=t.level??1e9,s=e.level??1e9;return i!==s?i-s:t.name.localeCompare(e.name)}),i}(this.hass);t.length?this._importDialog={floors:t.map(t=>({...t,checked:!0}))}:this._openSpaceDialog("create")}}_adoptStructuralResponses(t,e,i){const s=t?.config,n=s&&Array.isArray(s.spaces)?s:null,o=sh(n),a=o!==(this._cfgContentFingerprint||sh(this._serverCfg));if(a&&(this._geometryHistory.clear(),this._serverCfg&&this._clearGeometryGesture(),this._serverCfg=n,this._cfgContentFingerprint=o),this._cfgRev=t?.rev??this._cfgRev,t&&("virtual_lights"in t||"config"in t)){const e=gn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);fn(e)!==fn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let r=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=sh(t);r=s!==(this._layoutContentFingerprint||sh(this._layout)),r&&(this._layout=t,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev}return this._canOptimizeUndo=!(!t?.can_optimize_undo&&!e?.can_optimize_undo),this._undoKind=t?.undo_kind||e?.undo_kind||null,"boolean"==typeof t?.can_write&&(this._serverCanWrite=t.can_write),a&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),r&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:a,layoutChanged:r}}_resumePendingNavMode(){if(!this._pendingNavMode||!this._canEdit||this._config?.kiosk)return!1;const t=this._pendingNavMode;return this._pendingNavMode=null,this._setMode(t,!1),!0}async _loadFromServer(){this._loading=!0,this._loadTries++;const t=this._space,e=!!this._view;try{const[i,s]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]),n=i?.config&&Array.isArray(i.config.spaces)?i.config:null,o=sh(n)!==(this._cfgContentFingerprint||sh(this._serverCfg))||sh(s?.layout??{})!==(this._layoutContentFingerprint||sh(this._layout));if(o){if(!await this._signer.prepareImage(this.hass,this._candidateBackdrop(n)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0)}o&&this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._beginContinuityCandidate("structural-response",!0),this._connectionWasLost=!1,this._serverStorage=!0,"boolean"==typeof i?.can_write&&(this._serverCanWrite=i.can_write),this._canOptimizeUndo=!(!i?.can_optimize_undo&&!s?.can_optimize_undo),this._adoptStructuralResponses(i,s),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._warmVpArmed&&this._space===this._warmVp?.space?this._warmVpArmed=!1:e&&this._space===t||this._restoreZoom(),this._loadOk=!0,this.hass.callWS({type:"houseplan/trail/get"}).then(t=>{this._vacSrvTrails=t?.trails||{},this.requestUpdate()}).catch(()=>{}),this._ensureLiveSyncSubscriptions()}catch(t){if(this._serverCfg)this._scheduleLoadRetry(!0);else if(this._loadTries>=8){this._serverStorage=!1;try{this._layout=JSON.parse(localStorage.getItem(x_)||"{}")||{}}catch{this._layout={}}}}finally{this._loading=!1,this._continuityDataReady=!0,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}}_ensureLiveSyncSubscriptions(){const t=this.hass?.connection;if(!t)return;if(t!==this._liveSyncConnection&&(this._unsubCfg?.(),this._unsubCfg=null,this._unsubLayout?.(),this._unsubLayout=null,this._unsubTrail?.(),this._unsubTrail=void 0,this._unsubVirtual?.(),this._unsubVirtual=null,this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=t),this._liveSyncAttempt)return;const e=this._liveSyncGeneration,i=[],s=(s,n,o,a)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(a,o);e===this._liveSyncGeneration&&this.isConnected&&this.hass?.connection===t&&!s()?n(i):i?.()})};if(s(()=>this._unsubCfg,t=>{this._unsubCfg=t},"houseplan_config_updated",t=>{const e=Number(t?.data?.rev??-1);e!==this._cfgRev&&this._reloadConfigOnly(!1,e)}),s(()=>this._unsubTrail,t=>{this._unsubTrail=t},"houseplan_trail_updated",async()=>{try{const t=await this.hass.callWS({type:"houseplan/trail/get"});this._vacSrvTrails=t?.trails||{},this.requestUpdate()}catch{}}),s(()=>this._unsubLayout,t=>{this._unsubLayout=t},"houseplan_layout_updated",t=>this._onLayoutEvent(Number(t?.data?.rev??-1))),s(()=>this._unsubVirtual,t=>{this._unsubVirtual=t},"houseplan_virtual_light_updated",t=>{const e=bn(this._virtualLights,t?.data);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}),!i.length)return;const n=function(t){return Promise.allSettled(t.map(t=>Promise.resolve().then(t)))}(i).then(()=>{});this._liveSyncAttempt=n,n.finally(()=>{this._liveSyncAttempt===n&&(this._liveSyncAttempt=null)})}async _reloadConfigOnly(t=!1,e){if(!t){if(void 0!==e&&e<=this._cfgRev)return;if(this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(()=>this._reloadConfigOnly(!1,e),400))}this._beginContinuityCandidate("config-reload",!1);try{const t=await this.hass.callWS({type:"houseplan/config/get"}),e=t?.config&&Array.isArray(t.config.spaces)?t.config:null;if(sh(e)!==(this._cfgContentFingerprint||sh(this._serverCfg))&&!await this._signer.prepareImage(this.hass,this._candidateBackdrop(e)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0);const i=this._space;this._adoptStructuralResponses(t),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._space!==i&&this._restoreZoom(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}catch(t){this._showToast(this._t("toast.cfg_reload_failed",{err:this._errText(t)}))}finally{this._continuityDataReady=!0,this.requestUpdate()}}_scheduleLoadRetry(t=!1){if(void 0!==this._loadRetryTimer)return;const e=Math.min(8e3,500*2**Math.min(4,Math.max(1,this._loadTries-7)));this._loadRetryTimer=window.setTimeout(()=>{this._loadRetryTimer=void 0,!t&&this._loadOk||this._loading||!this.hass||this._loadFromServer()},e)}_ensureHaRegistryAuthority(){const t=this.hass?.connection||null;t&&t!==this._haRegistryConnection&&(this._haRegistryRelease?.(),this._haRegistryConnection=t,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._haRegistryRelease=Rn(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return An(this.hass)}get _planHass(){const t=this._haRegistry,e=Fn(this.hass,t),i=this._planHassMemo;if(i&&i.hass===this.hass&&i.sig===e)return i.active;const s=zn(this.hass,t),n=On(this.hass,t);return this._planHassMemo={hass:this.hass,sig:e,active:s,full:n},s}_captureRenderDeviceSnapshot(){if(!this.hass)return;const t=Date.now(),e=[...this._activityRt.entries()].map(([e,i])=>`${e}:${i.gen}:${i.flashTs}:`+(i.flashKind&&(i.expiresAt||i.flashTs+Fu)>t?1:0)).join("|"),i=fn(this._virtualLights);if(this._capturedSnapshotSequence===this._hassSequence&&this._capturedSnapshotDevices===this._devices&&this._capturedSnapshotLayout===this._layout&&this._capturedSnapshotConfigEpoch===this._cfgEpoch&&this._capturedSnapshotVirtual===i&&this._capturedSnapshotActivity===e)return;const s=this._planHass,n=new Map,o=new Map,a=new Set(["sun.sun"]);this._vacFit?.source&&a.add(this._vacFit.source);const r=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void a.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?r.add(s):"entity"===i&&a.add(s)};for(const t of this._model)for(const e of t.rooms)e.area&&l.add(e.area),c(e.settings?.temp_source),c(e.settings?.hum_source);for(const t of this._serverCfg?.spaces||[])for(const e of t.openings||[])for(const t of gi(e))a.add(t);for(const t of this._serverCfg?.spaces||[])for(const e of t.decor||[])if("text"===e.kind){for(const t of String(e.text||"").matchAll(/\{([^{}\r\n]+)\}/g)){const e=Ki(t[1]);e?.entity&&a.add(e.entity)}e.entity&&a.add(e.entity),o.set(`decor:${t.id}:${e.id}`,Qi(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!yo(s,t,vo(this._markers))))}const h=ro(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(vu(t.id,e),_u(s,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._devices,lightSources:h,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}));if(this._isVacDev(t)){const e=this._vacSource(t,s),i=e?bh(s?.states?.[e]?.attributes):null,n=this._vacRt.get(t.id);o.set(`vacuum:${t.id}`,{source:e,telemetry:i,mapId:i?this._vacMapId(t,i,s):null,runtime:n?{trail:n.trail,lastTs:n.lastTs,moving:n.moving,jump:n.jump}:null,server:this._vacSrvTrails[t.id]||null})}}const d=fu({sourceSequence:this._hassSequence,hass:s,devices:this._devices,presentations:n,positions:(u=this._model.length>0,p=this._devices,_=t=>this._livePos(t),u?new Map(p.map(t=>[t.id,_(t)])):new Map),facts:o,entityIds:a,deviceIds:r,areaIds:l});var u,p,_;this._capturedSnapshotSequence=this._hassSequence,this._capturedSnapshotDevices=this._devices,this._capturedSnapshotLayout=this._layout,this._capturedSnapshotActivity=e,this._capturedSnapshotConfigEpoch=this._cfgEpoch,this._capturedSnapshotVirtual=i,this._visibleDeviceSnapshot&&"steady"!==this._continuity.state?this._candidateDeviceSnapshot=d:(this._visibleDeviceSnapshot=d,this._candidateDeviceSnapshot=null)}get _renderDeviceSnapshot(){return this._stagedDeviceSnapshotToken===this._continuity.token?this._candidateDeviceSnapshot||this._visibleDeviceSnapshot:this._visibleDeviceSnapshot||this._candidateDeviceSnapshot}get _renderPlanHass(){return this._renderDeviceSnapshot?.hass||this._planHass}get _renderDevices(){return this._renderDeviceSnapshot?.devices||this._devices}get _fullRegistryHass(){return this._planHass,this._planHassMemo?.full||this.hass}_bindingStatus(t){return Ln(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=An(t);return{access:e.access,authoritative:e.authoritative,revision:e.revision,lastSuccess:e.lastSuccess,error:e.error}}(this.hass),e={active:0,ha_disabled:0,orphaned:0,unverified:0};for(const t of this._markers)t.removed||"virtual"===t.binding||e[this._bindingStatus(t.binding).kind]++;return{registry:{...t,lastSuccessAgeMs:t.lastSuccess?Math.max(0,Date.now()-t.lastSuccess):null},bindings:e}}_openBindingInHa(t){const[e,i]=t.split(":");if(i)if("device"!==e){if("entity"===e){const t=this._fullRegistryHass.entities?.[i];t?.device_id&&E_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else E_("/config/devices/device/"+encodeURIComponent(i))}_bindingHasHaPage(t){const[e,i]=t.split(":");return!!i&&("device"===e||"entity"===e&&!!this._fullRegistryHass.entities?.[i]?.device_id)}_toggleMarkerDialogVisibility(){const t=this._markerDialog;if(!t)return;const e="ha"===t.bindingMode?this._bindingStatus(t.binding):null,i=t.hideFromPlan||"ha_disabled"===e?.kind;i&&"ha_disabled"===e?.kind?this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device")):i&&"unverified"===e?.kind?this._showToast(this._t("toast.ha_binding_unverified")):this._markerDialog={...t,hideFromPlan:!i}}_hookConnection(){const t=this.hass?.connection;t&&t!==this._connHooked&&(this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),t.addEventListener?.("ready",this._onConnReady),t.addEventListener?.("disconnected",this._onConnLost),t.addEventListener?.("reconnect-error",this._onConnLost),this._connHooked=t)}_display(t){return this._signer.display(this.hass,t)}_resign(){this._signer.resign(this.hass,Rs(this._serverCfg))}_onLayoutEvent(t){t<=this._layoutRev||(clearTimeout(this._layoutSyncTimer),this._layoutSyncTimer=window.setTimeout(()=>{t<=this._layoutRev||this._reloadLayoutOnly()},200))}_noteLayoutRev(t){const e=t?.rev;"number"==typeof e&&e>this._layoutRev&&(this._layoutRev=e)}async _reloadLayoutOnly(){if(!this._serverStorage||!this.hass?.callWS)return;this._beginContinuityCandidate("layout-reload",!1);const t=new Map;for(const e of this._dirtyPos)this._layout[e]&&t.set(e,this._layout[e]);this._persistLayout.pending()&&this._persistLayout.flush();for(const[e,i]of this._sentPos)t.set(e,i);try{const e=await this.hass.callWS({type:"houseplan/layout/get"}),i={...e?.layout||{}};for(const[e,s]of t)i[e]=s;const s=sh(i);s!==(this._layoutContentFingerprint||sh(this._layout))&&(this._layout=i,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev,this._canOptimizeUndo=!!e?.can_optimize_undo,this._undoKind=e?.undo_kind||null,this._cacheSnapshot(),this.requestUpdate()}catch{}finally{this._continuityDataReady=!0,this.requestUpdate()}}_maybeRebuildDevices(){const t=this.hass;if(!t?.devices||!t?.entities||!t?.areas)return;const e=this._haRegistry,i=Fn(t,e)+":"+Object.keys(t.areas).length+":"+(this._norm?"n":"l")+":"+na(t,this._config?.language);if(i===this._regSignature&&this._devices.length)return;this._regSignature=i;const s=new Map(this._devices.map(t=>[t.id,t.bindingStatus?.kind||"active"]));this._devices=ko({hass:t,registry:e,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||"",loc:t=>this._t(t),iconRules:this._iconRules});const n=this._markers.filter(t=>!t.removed&&"virtual"!==t.binding).map(t=>t.binding).sort(),o=e.revision+":"+n.join("|");if(e.authoritative&&o!==this._haBindingCacheKey){const i=new Map;for(const s of n)i.set(s,Ln(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Hn(),i=Date.now();for(const[s,n]of t)"active"===n.kind?e[s]={kind:"active",ts:i}:"ha_disabled"===n.kind&&(e[s]={kind:"ha_disabled",reason:n.reason,ts:i});const s=Object.fromEntries(Object.entries(e).sort((t,e)=>e[1].ts-t[1].ts).slice(0,1500));Sn=s;try{localStorage.setItem($n,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const a=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())a.has(t)||this._vacRt.delete(t);if(this._infoCard){const t=this._devices.find(t=>t.id===this._infoCard.id);this._infoCard=t&&"ha_disabled"!==t.bindingStatus?.kind?t:null}const r=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));r&&("ha_disabled"!==this._infoCard?.bindingStatus?.kind&&"ha_disabled"!==this._devices.find(t=>t.id===this._infoCard?.id)?.bindingStatus?.kind||this._closeInfoCard(),this._drag&&"ha_disabled"===this._devices.find(t=>t.id===this._drag.id)?.bindingStatus?.kind&&(this._drag=null),clearTimeout(this._holdTimer),this._holdFired=!1,this._tip=null,this._tapConfirm=null),this._nativeMoreInfoEntity&&!this._planEntityAvailable(this._nativeMoreInfoEntity)&&(F_(this,"hass-more-info",{entityId:null}),this._nativeMoreInfoEntity=null)}_syncNewDevices(){if(!this._norm||!this._loadOk||!this._serverCfg)return;const t=this._devices.filter(t=>!t.marker&&!t.virtual).map(t=>t.id).sort(),e=t.join(",");if(e===this._newSyncKey)return;this._newSyncKey=e;const i=this._settings,{fresh:s,known:n}=function(t,e){if(!Array.isArray(e))return{fresh:[],known:[...t]};const i=new Set(e),s=t.filter(t=>!i.has(t));return{fresh:s,known:s.length?[...e,...s]:e}}(t,i.known_devices);if(!Array.isArray(i.known_devices)||s.length){const t=[...new Set([...i.new_device_ids||[],...s])];this._serverCfg={...this._serverCfg,settings:{...i,known_devices:n,new_device_ids:t}},this._saveConfig()}}get _newIds(){const t=this._settings.new_device_ids;return new Set(Array.isArray(t)?t:[])}_ackNewDevice(t){if(!this._newIds.has(t)||!this._serverCfg)return;const e=this._settings;this._serverCfg={...this._serverCfg,settings:{...e,new_device_ids:(e.new_device_ids||[]).filter(e=>e!==t)}},this._saveConfig(),this.requestUpdate()}get _markers(){return this._serverCfg?.markers||[]}_roomLqi(t){if(!t)return null;const e=[];for(const i of this._renderDevices){if(i.area!==t||i.virtual)continue;const s=ho(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return Ei(e)}_roomBounds(t){if(t.poly&&t.poly.length){const e=t.poly.map(t=>t[0]),i=t.poly.map(t=>t[1]),s=Math.min(...e),n=Math.min(...i);return{x:s,y:n,w:Math.max(...e)-s,h:Math.max(...i)-n}}return{x:t.x??0,y:t.y??0,w:t.w??0,h:t.h??0}}_defaultPositions(){const t={},e=this._config?.icon_size??2.5;for(const i of this._model){const s=e/100*gc(i)*1.3;for(const e of i.rooms){if(!e.area)continue;const n=this._devices.filter(t=>t.area===e.area&&t.space===i.id);if(!n.length)continue;const o=this._roomBounds(e),a=.1*Math.min(o.w,o.h),r=o.w-2*a,l=o.h-2*a,c=Math.max(1,Math.round(Math.sqrt(n.length*r/Math.max(l,1)))),h=Math.ceil(n.length/c),d=r/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+a+d*(e%c+.5),y:o.y+a+u*(Math.floor(e/c)+.5)}));Oi(p,o,s,.5*a),n.forEach((e,i)=>t[e.id]=ec(p[i]))}}return t}_pos(t){const e=this._renderDeviceSnapshot?.positions.get(t.id);return e?{x:e.x,y:e.y}:this._livePos(t)}_livePos(t){const e=this._spaceModelById(t.space),i=this._layout[t.id];if(i)if(this._norm){if(i.s===t.space)return{x:i.x*T_,y:i.y*T_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?ec(_c(e)):{x:500,y:500}}_savePos(t,e,i){if(this._spaceModelById(t.space)){if(this._norm){const s=this._gridPitch,n=Math.round(e/s)*s,o=Math.round(i/s)*s,a=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:sc(n/T_),y:sc(o/T_),...a?{k:a}:{}}}}else this._layout={...this._layout,[t.id]:{x:Math.round(e),y:Math.round(i)}};this._dirtyPos.add(t.id),this._persistLayout()}}_visualSamples(t){return cu(this._renderPlanHass,t,this._renderDevices,void 0,this._fullRegistryHass).samples}_devicePresentation(t,e=!1!==this._config?.show_signal,i=!1){const s=i?null:this._renderDeviceSnapshot?.presentations.get(vu(t.id,e));return s||_u(this._renderPlanHass,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,designPreview:i,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._renderDevices,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion})}_deviceVisual(t){return this._devicePresentation(t).visual}_stateClass(t,e=this._deviceVisual(t)){const i=this._devicePresentation(t);return i.effectiveHidden?"":("icon_ripple"!==i.display||!1===this._config?.live_states||"alarm"===e.status||e.activity,pu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=po(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:uo(this._renderPlanHass,t.entities)}_bindingEntities(t){if("virtual"===t||!t)return[];const e=this._bindingStatus(t);return"active"===e.kind?e.enabledEntityIds:e.allEntityIds}_bindingHasClimate(t){return this._bindingEntities(t).some(t=>t.startsWith("climate."))}_bindingHasAlarm(t){return this._bindingEntities(t).some(t=>{const e=this._planHass?.states?.[t]||this.hass?.states?.[t],i=this._fullRegistryHass.entities[t]||this.hass?.entities?.[t];return Ls(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&_o(this.hass,t.primary)?go(this.hass,t.entities):null}_deviceBindingActive(t,e=!0){if(t.virtual||"virtual"===t.bindingKind)return!0;if(!t.bindingKind||!t.bindingRef)return!1;const i=this._bindingStatus(`${t.bindingKind}:${t.bindingRef}`);return"active"===i.kind||(e&&this._showToast(this._t("ha_disabled"===i.kind?"toast.ha_disabled_action":"toast.ha_binding_unverified")),!1)}_openMoreInfo(t){t?this._planEntityAvailable(t)?(this._nativeMoreInfoEntity=t,F_(this,"hass-more-info",{entityId:t})):this._showToast(this._t("toast.ha_disabled_action")):this._showToast(this._t("toast.no_entity"))}_interruptViewGesture(t,e){if(clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),void 0!==t)for(const i of[e,this._stageEl])try{i?.hasPointerCapture?.(t)&&i.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null}_closeInfoCard(){this._interruptViewGesture(),this._holdFired=!1,this._infoCard=null}_ctxDevice(t,e){"view"===this._mode&&(t.preventDefault(),t.stopPropagation(),this._deviceBindingActive(e)&&(e.primary?this._openMoreInfo(e.primary):this._infoCard=e))}_clickDevice(t,e){if(t.stopPropagation(),this._drag?.moved||this._suppressClick||this._holdFired)return;if("plan"===this._mode)return;if("devices"===this._mode)return void this._openMarkerDialog(e);const i=this._devices.find(t=>t.id===e.id);if(!i)return;const s=Yh(i.tapAction,i.primary?.split(".")[0]),n=(t,e)=>{i.marker?.tap_confirm?this._tapConfirm={kind:"run",text:t,exec:e}:e()};if("toggle"===s){const t=this._toggleIntent(i);if(!t||!ed(t))return;const e=t=>{const e=ed(t);if(!e)return;if("virtual-light"===e.kind)return void this.hass.callWS({type:"houseplan/virtual_light/toggle",marker_id:e.markerId}).then(t=>{const e=bn(this._virtualLights,t);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}).catch(t=>this._showToast(this._t("toast.virtual_light_toggle_failed",{err:this._errText(t)})));const{command:i}=e;this.hass.callService(i.domain,i.service,i.data).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))},s=((o=t).targets.length?o.targets:o.skippedTargets).map(t=>t.name||t.entityId||t.ref).join(", ")||i.name;if(i.marker?.tap_confirm){const n=this._toggleConfirmationLines(t);if(!n.length)return;this._tapConfirm={kind:"toggle",text:this._t("confirm.tap_toggle",{name:s}),lines:n,initialIntent:t,deviceId:i.id,exec:()=>{const s=this._devices.find(t=>t.id===i.id),n=s?this._toggleIntent(s):null;n&&id(t,n)?e(n):this._showToast(this._t("toast.tap_target_changed"))}}}else e(t);return}var o;if("info"===s)return this._interruptViewGesture(),void(this._infoCard=i);if(this._deviceBindingActive(i)){if("run"===s){const t=i.marker?.tap_target||"",e=function(t){const e=String(t||"").split(".")[0];return"automation"===e?{domain:"automation",service:"trigger"}:"script"===e?{domain:"script",service:"turn_on"}:"scene"===e?{domain:"scene",service:"turn_on"}:null}(t),s=this.hass.states[t];if(!e||!s)return void this._showToast(this._t("toast.run_target_missing"));const o=s.attributes?.friendly_name||t;return void n(this._t("confirm.tap_run",{name:o}),()=>{this._deviceBindingActive(i)&&this._planEntityAvailable(t)&&this.hass.callService(e.domain,e.service,{entity_id:t}).then(()=>{this._stampActivity(i.id,"event",this._activitySourceKey(i)),this.requestUpdate(),this._showToast(this._t("toast.run_started",{name:o}))}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))})}"more-info"===s&&i.primary?this._openMoreInfo(i.primary):this._infoCard=i}}_keyDevice(t,e){"Enter"!==t.key&&" "!==t.key||"view"!==this._mode&&"devices"!==this._mode||(t.preventDefault(),this._clickDevice(t,e))}_t(t,e){return oa(na(this.hass,this._config?.language),t,e)}get _colorPickerLabels(){return{title:this._t("color_picker.title"),hue:this._t("color_picker.hue"),saturation:this._t("color_picker.saturation"),value:this._t("color_picker.value"),hex:this._t("color_picker.hex"),invalidHex:this._t("color_picker.invalid_hex")}}_help(t){const e=`${t}.aria`,i=na(this.hass,this._config?.language);return aa(i,t)&&aa(i,e)?j``:G}get _stageEl(){return this.renderRoot.querySelector(".stage")}_contentItems(t){const e=[];for(const i of this._devices){if(i.space!==t.id||i.hidden)continue;const s=this._pos(i);e.push({minX:s.x,minY:s.y,maxX:s.x,maxY:s.y})}if(t.id===this._space){for(const t of this._openingsR){const i=Number(t.angle)*Math.PI/180,s=Math.cos(i)*t.rlen/2,n=Math.sin(i)*t.rlen/2,o=ac([[t.rx-s,t.ry-n],[t.rx+s,t.ry+n]]);o&&e.push(o)}const i=this._decorH;for(const t of this._decorList){const s=ac("line"===t.kind?[[t.x1*T_,t.y1*i],[t.x2*T_,t.y2*i]]:"text"===t.kind?[[t.x*T_,t.y*i]]:hr({x:t.x*T_,y:t.y*i,w:t.w*T_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=ac(i);t&&e.push(t)}}return lc(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:T_,h:T_};return{rect:t,all:t,outliers:0}}const e=this._frame,i="view"!==this._mode;if(e&&e.id===t.id&&this._bdDrag)return e;if(e&&e.id===t.id&&e.model===t&&e.layout===this._layout&&e.devs===this._devices&&e.far===this._showFar&&e.grow===i)return e;const s=uc(this._contentItems(t));let n=s.all||pc(t),o=this._showFar?n:s.core||pc(t);return e&&e.id===t.id&&i&&e.grow&&(o=R_(e.rect,o),n=R_(e.all,n)),this._frame={id:t.id,model:t,layout:this._layout,devs:this._devices,far:this._showFar,grow:i,rect:o,all:n,outliers:s.outliers},this._frame}_isoSource(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._openPairs().flatMap(t=>t.segs),s=this._openingsR.map((t,e)=>({id:String(t.id||e),sourceIndex:e,type:t.type,x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen>0?t.rlen:900,flipH:!!t.flip_h,flipV:!!t.flip_v}));return{key:`${t.id}|${function(t){let e=2166136261;const i=t=>{if("number"!=typeof t)if("string"!=typeof t)if("boolean"!=typeof t)if(Array.isArray(t)){e=Jp(e,t.length);for(const e of t)i(e)}else{if(t&&"object"==typeof t){const e=t;for(const t of Object.keys(e).sort())i(t),i(e[t]);return}e=Jp(e,-1)}else e=Jp(e,t?1:0);else for(const i of t)e=Jp(e,i.codePointAt(0)||0);else e=Jp(e,t)};return i(t),e.toString(36)}({rooms:t.rooms,walls:e,openCuts:i,openings:s,partitions:t.partitions,roomDrafts:t.room_drafts,columns:t.wall_columns,cellCm:this._cellCm,gridPitch:this._gridPitch,wallKeyPitch:this._wallKeyPitch,camera:Np,wallHeight:Hp,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),a=e.length||n.length?ul(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,n):null;if((e.length||n.length)&&!a)throw new Error("wall boolean geometry failed");const r=a?.paperGeom??function(t,e,i,s,n,o,a=1){try{const r=hl(t,e,i,s,n,o,a);return r?r.shell?.length?si(r.centre,r.shell):r.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?hd(i.partitionHost,s):e.length||"gate"===t.type?bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length,flip_v:s}):{ox:0,oy:0,cm:0,side:-1};return function(t,e=64){if(!(Zp([t.x,t.y,t.angle,t.length,t.face.ox,t.face.oy,e])&&t.length>0&&e>0))throw new Error("invalid isometric opening input");const i=t.length/2;let s;if("passage"===t.type)s=[];else if("gate"===t.type){const n=t.flipV?-1:1,o=t.face.side*n*10;s=[t_(t,0,[-i,0],[i,0],o,0,.88*e),t_(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[t_(t,0,[-i,0],[i,0],-90,.27*e,.78*e),t_(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[t_(t,0,[-i,0],[t.length,0],-90,0,.92*e)];return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaves:Object.freeze(s.map(t=>Object.freeze(t)))}}({...t,face:n})});return{walls:a?.geom||[],floor:r,openings:Object.freeze(c)}}}}_isoSceneKey(){if(!this._labsIso||"view"!==this._mode)return null;try{return this._isoSource()?.key??null}catch{return`${this._space}|invalid`}}_isoScene(){const t=this._isoSource();if(!t)return null;const e=this._isoGeometryCache.get(t.key);if(e)return{key:t.key,...e};const i=this._frameOf().rect,s=t.build(),n=function(t){let e=1/0,i=1/0,s=-1/0,n=-1/0;for(const o of t)for(const t of o.leaves){const o=Math.hypot(t.closedVector[0],t.closedVector[1]);e=Math.min(e,t.hinge[0]-o),i=Math.min(i,t.hinge[1]-o),s=Math.max(s,t.hinge[0]+o),n=Math.max(n,t.hinge[1]+o)}return Zp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Wp({rect:n?R_(i,n):i,wallHeight:Hp,openingHeight:Hp,floorDepth:10}),a=function(t,e=Np,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let a=0;for(let r=0;r<(t||[]).length;r++){const l=t[r];for(let t=0;t<(l||[]).length;t++){const c=Vp(l[t],t>0);if(!(c.length<3||Math.abs(Gp(c))<1e-9)){s.push(Kp(c,e,i)),a+=c.length;for(let s=0;st.depth-e.depth||t.polygon-e.polygon||t.ring-e.ring||t.edge-e.edge),{topPath:s.join(" "),sides:n,contactPath:o.join(" "),edgeCount:a}}(s.walls),r={geometry:a,floor:Xp(s.floor,10),openings:s.openings,frame:o};return v_(this._isoGeometryCache,t.key,r,8),{key:t.key,...r}}_effectiveProjection(){if("iso"!==this._desiredProjection||!this._model.length)return"flat";const t=this._isoSceneKey()||`${this._space}|invalid`;if(this._isoFallback.has(t))return"flat";try{const t=this._isoScene();return t?(e="iso",i=t.key,s=this._isoFallback,"iso"===e&&i&&!s.has(i)?"iso":"flat"):"flat"}catch(e){if(!this._isoFallback.has(t)){this._isoFallback.add(t);const i=t.split("|");console.warn(`HOUSEPLAN ISO FALLBACK: #89, space ${this._space}, fingerprint ${i[i.length-1]}, ${e instanceof Error?e.message:"renderer error"}`)}return"flat"}var e,i,s}_scenePoint(t){return"iso"===this._renderProjection?Bp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=qp([t.x,t.y]),i=qp([t.x+t.w,t.y+t.h]);return{x:e[0],y:e[1],w:i[0]-e[0],h:i[1]-e[1]}}_baseVb(){if("iso"===this._effectiveProjection()){if(!this._spaceDisplayForRender().showBorders){const t=Wp({rect:this._frameOf().rect,wallHeight:Hp});return[t.x,t.y,t.w,t.h]}const t=this._isoScene()?.frame??this._frameOf().rect;return[t.x,t.y,t.w,t.h]}const t=this._frameOf().rect;return[t.x,t.y,t.w,t.h]}get _outliers(){return this._showFar?0:this._frameOf().outliers}_fitFar(){this._showFar=!0,this._frame=null,this._resetZoom()}_fitAll(){this._showFar=!0,this._frame=null,this._resetZoom()}_renderFarHint(){return this._kiosk||"view"!==this._mode||this._booting||!this._outliers?G:j`
+
`}houseplanContinuityTrace(){return[...this._continuityHistory,...this._continuity.trace].slice(-80).map(t=>({...t,...t.stage?{stage:[...t.stage]}:{}}))}getCardSize(){return 12}get _norm(){return!(!this._serverCfg||!this._serverCfg.spaces.length)}_cfgFingerprint(){const t=this._serverCfg?.spaces||[];let e=t.length+":";for(const i of t){e+=(i.id||"")+","+(i.plan_aspect||"")+","+(i.plan_url||"").length+","+(i.plan_x??"")+","+(i.plan_y??"")+","+(i.plan_scale??"")+","+(i.plan_scale_x??"")+","+(i.plan_scale_y??"")+","+(i.plan_angle??"")+","+(i.rooms?.length||0)+","+(i.openings?.length||0)+","+(i.decor?.length||0)+";";for(const t of i.rooms||[]){const i=t.poly?.[0],s=t.poly?.[t.poly.length-1];e+=(t.poly?.length||0)+"."+(t.id||"")+"."+(t.open_to||[]).join("+")+"."+(t.area||"")+"."+JSON.stringify(t.settings||0)+"."+(t.x??"")+","+(t.y??"")+","+(t.w??"")+","+(t.h??"")+","+(i?i[0]+"/"+i[1]:"")+","+(s?s[0]+"/"+s[1]:"")+";"}}return e}get _model(){if(!this._serverCfg)return[];const t=this._cfgEpoch+"|"+this._cfgFingerprint();if(this._modelCache&&this._modelCache.key===t)return this._modelCache.model;const e=this._buildModel();return this._modelCache={key:t,model:e},e}_buildModel(){if(!this._serverCfg)return[];const t=this._renderCfg;return Kl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return this._hasFixedFloor?rh(this._model,this._space):(t=this._model,e=this._space,t.find(t=>t.id===e)??t[0]);var t,e}_spaceModelById(t){return rh(this._model,t)}_syncEmptySpaceState(){if(!!this._serverCfg&&0===this._serverCfg.spaces.length){if(!this._emptySpaceStateActive){this._emptySpaceStateActive=!0;for(const t of this._pointers.keys())for(const e of this.renderRoot.querySelectorAll("*"))try{e.hasPointerCapture?.(t)&&e.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null,this._drag=null,this._rlResize=null,this._vacFit=null,this._compassDrag=!1,this._cancelModeTransition(!1),this._mode="view",this._clearGeometryGesture(),this._geometryHistory.clear(),this._resumeDraftBySpace={},this._tip=null,this._hoverRoom=null,this._openingInfo=null,this._closeInfoCard(),this._markerDialog=null,this._physicalDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._roomDialog=!1,"edit"===this._spaceDialog?.mode&&(this._spaceDialog=null),this._editorSecondary.closeForNavigation(),this._saveConfigDebounced.cancel(),this._frame=null,this._planSnapGeometryCache=null,this._decorSnapCache=null,this._commitSpace("",!0)}}else this._emptySpaceStateActive=!1}get _areaToSpace(){const t={};for(const e of this._model)for(const i of e.rooms)i.area&&(t[i.area]={space:e.id,room:i});return t}get _settings(){return this._serverCfg?.settings||{}}get _showAll(){return this._settings.filter_seeded?this._showHidden:!!this._settings.show_all}_toggleShowAll(){if(this._serverCfg){if(this._settings.filter_seeded)return this._showHidden=!this._showHidden,void this.requestUpdate();this._serverCfg={...this._serverCfg,settings:{...this._serverCfg.settings,show_all:!this._settings.show_all}},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}}_seedHiddenDevices(){if(!this._serverCfg||!this._norm||!this._canEdit)return;const t=this._serverCfg,e=function(t){const e=t.hass,i=t.registry||An(e),s=zn(e,i),{areaToSpace:n,markers:o,settings:a,excluded:r,iconRules:l}=t,c=!1!==a.group_lights,h=vo(o),d=mo(s,c).filter(t=>!yo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=Bn(s),_=new Set(o.map(t=>t.binding)),g=[];for(const t of Object.values(s.devices)){const o=t.area_id;if(!o||!n[o])continue;if("service"===t.entry_type)continue;if(_.has("device:"+t.id))continue;if("active"!==Ln(e,"device:"+t.id,i).kind)continue;const a=p[t.id]||[],h=qn(s,t,a);let d=r.has(h)||"Group"===t.model||/scene/i.test(t.model||"")||/bridge/i.test((t.model||"")+(t.name||""))||"myheat"===h&&!!t.via_device_id;if(!d&&c&&u.has(o)){const e=(t.name_by_user||t.name||"").trim();"mdi:lightbulb"===fo(s,e,t.model,a,l)&&(d=!0)}d&&g.push("device:"+t.id)}return g}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,firstSpaceId:this._model[0]?.id||"",iconRules:this._iconRules});if(!e.length&&t.settings?.filter_seeded)return;t.markers=t.markers||[];const i=[];for(const s of e){const e="h"+s.slice(s.indexOf(":")+1);t.markers.push({id:e,binding:s,hidden:!0}),i.push(s.slice(s.indexOf(":")+1))}const s={...t.settings||{},filter_seeded:!0};delete s.show_all,i.length&&Array.isArray(s.new_device_ids)&&(s.new_device_ids=s.new_device_ids.filter(t=>!i.includes(t))),t.settings=s,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate()}get _iconRules(){const t=this._settings.icon_rules;if(!t||!Array.isArray(t)||!t.length)return;const e=JSON.stringify(t);return e!==this._rulesCompiledSrc&&(this._rulesCompiledSrc=e,this._rulesCompiled=Jt(t)),this._rulesCompiled}get _fillColors(){return ds(this._settings)}get _excluded(){const t=this._settings.exclude_integrations;return t?new Set(t):Yt}willUpdate(t){t.has("_serverCfg")&&this._cfgEpoch++,this._syncEmptySpaceState(),t.has("hass")&&this.hass&&(this._hassSequence++,this._renderSnapshotAt=Date.now(),this._continuity.note("hass-snapshot"),this._ensureHaRegistryAuthority(),this._planHassMemo=null,this._hookConnection(),!this._loadOk&&!this._loading&&this._loadTries<8&&this._loadFromServer(),this._maybeRebuildDevices(),this._vacTick(),this._activityTick()),this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._continuity.refreshCompleteFrame(this._visualFrameFingerprint()),this._captureRenderDeviceSnapshot()}updated(){this._pruneDevicePressFeedback(),this._syncDayCycleClock(),this._warmSnapshot(),this._dtMeasure();const t=this._stageEl;t&&!this._roViewport&&(this._roViewport=new ResizeObserver(()=>this._refitView()),this._roViewport.observe(t)),t&&this._booting&&!this._bootTimer&&this._bootWatch();const e=this.renderRoot.querySelector(".hdr");if(e&&t&&!this._roHdr){const i=()=>{const e=this.renderRoot.querySelector("ha-card");if(!e)return;const i=t.getBoundingClientRect().top-e.getBoundingClientRect().top,s=Math.min(Math.max(e.getBoundingClientRect().top,0),120),n=Math.round(i+s);n>=0&&n!==this._hdrH&&(this._hdrH=n),n>=0&&!this._booting&&!this._config?.kiosk&&t.clientHeight>0&&this._warmPatch({hdrH:n,stageH:t.clientHeight})};this._roHdr=new ResizeObserver(()=>requestAnimationFrame(i)),this._roHdr.observe(e),this._onWinResize=()=>requestAnimationFrame(i),window.addEventListener("resize",this._onWinResize),i()}if(t&&!this._view&&this._refitView(),this._editorSecondary.afterRender(),this._settleContinuityFrame(),this._serverStorage&&this._loadOk&&0===this._model.length&&!this._spaceDialog&&!this._importDialog&&!this._onboardingShown){this._onboardingShown=!0;const t=function(t){const e=t?.floors;if(!e||"object"!=typeof e)return[];const i=[];for(const t of Object.values(e))t&&t.floor_id&&i.push({id:t.floor_id,name:t.name||t.floor_id,level:t.level??null});return i.sort((t,e)=>{const i=t.level??1e9,s=e.level??1e9;return i!==s?i-s:t.name.localeCompare(e.name)}),i}(this.hass);t.length?this._importDialog={floors:t.map(t=>({...t,checked:!0}))}:this._openSpaceDialog("create")}}_adoptStructuralResponses(t,e,i){const s=t?.config,n=s&&Array.isArray(s.spaces)?s:null,o=sh(n),a=o!==(this._cfgContentFingerprint||sh(this._serverCfg));if(a&&(this._geometryHistory.clear(),this._serverCfg&&this._clearGeometryGesture(),this._serverCfg=n,this._cfgContentFingerprint=o),this._cfgRev=t?.rev??this._cfgRev,t&&("virtual_lights"in t||"config"in t)){const e=gn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);fn(e)!==fn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let r=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=sh(t);r=s!==(this._layoutContentFingerprint||sh(this._layout)),r&&(this._layout=t,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev}return this._canOptimizeUndo=!(!t?.can_optimize_undo&&!e?.can_optimize_undo),this._undoKind=t?.undo_kind||e?.undo_kind||null,"boolean"==typeof t?.can_write&&(this._serverCanWrite=t.can_write),a&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),r&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:a,layoutChanged:r}}_resumePendingNavMode(){if(!this._pendingNavMode||!this._canEdit||this._config?.kiosk)return!1;const t=this._pendingNavMode;return this._pendingNavMode=null,this._setMode(t,!1),!0}async _loadFromServer(){this._loading=!0,this._loadTries++;const t=this._space,e=!!this._view;try{const[i,s]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]),n=i?.config&&Array.isArray(i.config.spaces)?i.config:null,o=sh(n)!==(this._cfgContentFingerprint||sh(this._serverCfg))||sh(s?.layout??{})!==(this._layoutContentFingerprint||sh(this._layout));if(o){if(!await this._signer.prepareImage(this.hass,this._candidateBackdrop(n)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0)}o&&this._continuity.hasCompleteFrame&&"steady"===this._continuity.state&&this._beginContinuityCandidate("structural-response",!0),this._connectionWasLost=!1,this._serverStorage=!0,"boolean"==typeof i?.can_write&&(this._serverCanWrite=i.can_write),this._canOptimizeUndo=!(!i?.can_optimize_undo&&!s?.can_optimize_undo),this._adoptStructuralResponses(i,s),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._warmVpArmed&&this._space===this._warmVp?.space?this._warmVpArmed=!1:e&&this._space===t||this._restoreZoom(),this._loadOk=!0,this.hass.callWS({type:"houseplan/trail/get"}).then(t=>{this._vacSrvTrails=t?.trails||{},this.requestUpdate()}).catch(()=>{}),this._ensureLiveSyncSubscriptions()}catch(t){if(this._serverCfg)this._scheduleLoadRetry(!0);else if(this._loadTries>=8){this._serverStorage=!1;try{this._layout=JSON.parse(localStorage.getItem($_)||"{}")||{}}catch{this._layout={}}}}finally{this._loading=!1,this._continuityDataReady=!0,this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}}_ensureLiveSyncSubscriptions(){const t=this.hass?.connection;if(!t)return;if(t!==this._liveSyncConnection&&(this._unsubCfg?.(),this._unsubCfg=null,this._unsubLayout?.(),this._unsubLayout=null,this._unsubTrail?.(),this._unsubTrail=void 0,this._unsubVirtual?.(),this._unsubVirtual=null,this._liveSyncGeneration++,this._liveSyncAttempt=null,this._liveSyncConnection=t),this._liveSyncAttempt)return;const e=this._liveSyncGeneration,i=[],s=(s,n,o,a)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(a,o);e===this._liveSyncGeneration&&this.isConnected&&this.hass?.connection===t&&!s()?n(i):i?.()})};if(s(()=>this._unsubCfg,t=>{this._unsubCfg=t},"houseplan_config_updated",t=>{const e=Number(t?.data?.rev??-1);e!==this._cfgRev&&this._reloadConfigOnly(!1,e)}),s(()=>this._unsubTrail,t=>{this._unsubTrail=t},"houseplan_trail_updated",async()=>{try{const t=await this.hass.callWS({type:"houseplan/trail/get"});this._vacSrvTrails=t?.trails||{},this.requestUpdate()}catch{}}),s(()=>this._unsubLayout,t=>{this._unsubLayout=t},"houseplan_layout_updated",t=>this._onLayoutEvent(Number(t?.data?.rev??-1))),s(()=>this._unsubVirtual,t=>{this._unsubVirtual=t},"houseplan_virtual_light_updated",t=>{const e=bn(this._virtualLights,t?.data);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}),!i.length)return;const n=function(t){return Promise.allSettled(t.map(t=>Promise.resolve().then(t)))}(i).then(()=>{});this._liveSyncAttempt=n,n.finally(()=>{this._liveSyncAttempt===n&&(this._liveSyncAttempt=null)})}async _reloadConfigOnly(t=!1,e){if(!t){if(void 0!==e&&e<=this._cfgRev)return;if(this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),this._cfgWriting)return clearTimeout(this._reloadRetry),void(this._reloadRetry=window.setTimeout(()=>this._reloadConfigOnly(!1,e),400))}this._beginContinuityCandidate("config-reload",!1);try{const t=await this.hass.callWS({type:"houseplan/config/get"}),e=t?.config&&Array.isArray(t.config.spaces)?t.config:null;if(sh(e)!==(this._cfgContentFingerprint||sh(this._serverCfg))&&!await this._signer.prepareImage(this.hass,this._candidateBackdrop(e)))return this._continuity.note("asset-failed"),void this._scheduleLoadRetry(!0);const i=this._space;this._adoptStructuralResponses(t),this._adoptInitialSpace(this._model,!0),this._resumePendingNavMode(),this._cacheSnapshot(),this._space!==i&&this._restoreZoom(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}catch(t){this._showToast(this._t("toast.cfg_reload_failed",{err:this._errText(t)}))}finally{this._continuityDataReady=!0,this.requestUpdate()}}_scheduleLoadRetry(t=!1){if(void 0!==this._loadRetryTimer)return;const e=Math.min(8e3,500*2**Math.min(4,Math.max(1,this._loadTries-7)));this._loadRetryTimer=window.setTimeout(()=>{this._loadRetryTimer=void 0,!t&&this._loadOk||this._loading||!this.hass||this._loadFromServer()},e)}_ensureHaRegistryAuthority(){const t=this.hass?.connection||null;t&&t!==this._haRegistryConnection&&(this._haRegistryRelease?.(),this._haRegistryConnection=t,this._haRegistryRev=-1,this._haBindingCacheKey="",this._planHassMemo=null,this._haRegistryRelease=Rn(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return An(this.hass)}get _planHass(){const t=this._haRegistry,e=Fn(this.hass,t),i=this._planHassMemo;if(i&&i.hass===this.hass&&i.sig===e)return i.active;const s=zn(this.hass,t),n=On(this.hass,t);return this._planHassMemo={hass:this.hass,sig:e,active:s,full:n},s}_captureRenderDeviceSnapshot(){if(!this.hass)return;const t=Date.now(),e=[...this._activityRt.entries()].map(([e,i])=>`${e}:${i.gen}:${i.flashTs}:`+(i.flashKind&&(i.expiresAt||i.flashTs+Fu)>t?1:0)).join("|"),i=fn(this._virtualLights);if(this._capturedSnapshotSequence===this._hassSequence&&this._capturedSnapshotDevices===this._devices&&this._capturedSnapshotLayout===this._layout&&this._capturedSnapshotConfigEpoch===this._cfgEpoch&&this._capturedSnapshotVirtual===i&&this._capturedSnapshotActivity===e)return;const s=this._planHass,n=new Map,o=new Map,a=new Set(["sun.sun"]);this._vacFit?.source&&a.add(this._vacFit.source);const r=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void a.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?r.add(s):"entity"===i&&a.add(s)};for(const t of this._model)for(const e of t.rooms)e.area&&l.add(e.area),c(e.settings?.temp_source),c(e.settings?.hum_source);for(const t of this._serverCfg?.spaces||[])for(const e of t.openings||[])for(const t of gi(e))a.add(t);for(const t of this._serverCfg?.spaces||[])for(const e of t.decor||[])if("text"===e.kind){for(const t of String(e.text||"").matchAll(/\{([^{}\r\n]+)\}/g)){const e=Ki(t[1]);e?.entity&&a.add(e.entity)}e.entity&&a.add(e.entity),o.set(`decor:${t.id}:${e.id}`,Qi(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!yo(s,t,vo(this._markers))))}const h=ro(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(vu(t.id,e),_u(s,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._devices,lightSources:h,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}));if(this._isVacDev(t)){const e=this._vacSource(t,s),i=e?bh(s?.states?.[e]?.attributes):null,n=this._vacRt.get(t.id);o.set(`vacuum:${t.id}`,{source:e,telemetry:i,mapId:i?this._vacMapId(t,i,s):null,runtime:n?{trail:n.trail,lastTs:n.lastTs,moving:n.moving,jump:n.jump}:null,server:this._vacSrvTrails[t.id]||null})}}const d=fu({sourceSequence:this._hassSequence,hass:s,devices:this._devices,presentations:n,positions:(u=this._model.length>0,p=this._devices,_=t=>this._livePos(t),u?new Map(p.map(t=>[t.id,_(t)])):new Map),facts:o,entityIds:a,deviceIds:r,areaIds:l});var u,p,_;this._capturedSnapshotSequence=this._hassSequence,this._capturedSnapshotDevices=this._devices,this._capturedSnapshotLayout=this._layout,this._capturedSnapshotActivity=e,this._capturedSnapshotConfigEpoch=this._cfgEpoch,this._capturedSnapshotVirtual=i,this._visibleDeviceSnapshot&&"steady"!==this._continuity.state?this._candidateDeviceSnapshot=d:(this._visibleDeviceSnapshot=d,this._candidateDeviceSnapshot=null)}get _renderDeviceSnapshot(){return this._stagedDeviceSnapshotToken===this._continuity.token?this._candidateDeviceSnapshot||this._visibleDeviceSnapshot:this._visibleDeviceSnapshot||this._candidateDeviceSnapshot}get _renderPlanHass(){return this._renderDeviceSnapshot?.hass||this._planHass}get _renderDevices(){return this._renderDeviceSnapshot?.devices||this._devices}get _fullRegistryHass(){return this._planHass,this._planHassMemo?.full||this.hass}_bindingStatus(t){return Ln(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=An(t);return{access:e.access,authoritative:e.authoritative,revision:e.revision,lastSuccess:e.lastSuccess,error:e.error}}(this.hass),e={active:0,ha_disabled:0,orphaned:0,unverified:0};for(const t of this._markers)t.removed||"virtual"===t.binding||e[this._bindingStatus(t.binding).kind]++;return{registry:{...t,lastSuccessAgeMs:t.lastSuccess?Math.max(0,Date.now()-t.lastSuccess):null},bindings:e}}_openBindingInHa(t){const[e,i]=t.split(":");if(i)if("device"!==e){if("entity"===e){const t=this._fullRegistryHass.entities?.[i];t?.device_id&&z_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else z_("/config/devices/device/"+encodeURIComponent(i))}_bindingHasHaPage(t){const[e,i]=t.split(":");return!!i&&("device"===e||"entity"===e&&!!this._fullRegistryHass.entities?.[i]?.device_id)}_toggleMarkerDialogVisibility(){const t=this._markerDialog;if(!t)return;const e="ha"===t.bindingMode?this._bindingStatus(t.binding):null,i=t.hideFromPlan||"ha_disabled"===e?.kind;i&&"ha_disabled"===e?.kind?this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device")):i&&"unverified"===e?.kind?this._showToast(this._t("toast.ha_binding_unverified")):this._markerDialog={...t,hideFromPlan:!i}}_hookConnection(){const t=this.hass?.connection;t&&t!==this._connHooked&&(this._connHooked?.removeEventListener?.("ready",this._onConnReady),this._connHooked?.removeEventListener?.("disconnected",this._onConnLost),this._connHooked?.removeEventListener?.("reconnect-error",this._onConnLost),t.addEventListener?.("ready",this._onConnReady),t.addEventListener?.("disconnected",this._onConnLost),t.addEventListener?.("reconnect-error",this._onConnLost),this._connHooked=t)}_display(t){return this._signer.display(this.hass,t)}_resign(){this._signer.resign(this.hass,Rs(this._serverCfg))}_onLayoutEvent(t){t<=this._layoutRev||(clearTimeout(this._layoutSyncTimer),this._layoutSyncTimer=window.setTimeout(()=>{t<=this._layoutRev||this._reloadLayoutOnly()},200))}_noteLayoutRev(t){const e=t?.rev;"number"==typeof e&&e>this._layoutRev&&(this._layoutRev=e)}async _reloadLayoutOnly(){if(!this._serverStorage||!this.hass?.callWS)return;this._beginContinuityCandidate("layout-reload",!1);const t=new Map;for(const e of this._dirtyPos)this._layout[e]&&t.set(e,this._layout[e]);this._persistLayout.pending()&&this._persistLayout.flush();for(const[e,i]of this._sentPos)t.set(e,i);try{const e=await this.hass.callWS({type:"houseplan/layout/get"}),i={...e?.layout||{}};for(const[e,s]of t)i[e]=s;const s=sh(i);s!==(this._layoutContentFingerprint||sh(this._layout))&&(this._layout=i,this._layoutContentFingerprint=s),this._layoutRev=e?.rev??this._layoutRev,this._canOptimizeUndo=!!e?.can_optimize_undo,this._undoKind=e?.undo_kind||null,this._cacheSnapshot(),this.requestUpdate()}catch{}finally{this._continuityDataReady=!0,this.requestUpdate()}}_maybeRebuildDevices(){const t=this.hass;if(!t?.devices||!t?.entities||!t?.areas)return;const e=this._haRegistry,i=Fn(t,e)+":"+Object.keys(t.areas).length+":"+(this._norm?"n":"l")+":"+na(t,this._config?.language);if(i===this._regSignature&&this._devices.length)return;this._regSignature=i;const s=new Map(this._devices.map(t=>[t.id,t.bindingStatus?.kind||"active"]));this._devices=ko({hass:t,registry:e,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),markers:this._markers,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||"",loc:t=>this._t(t),iconRules:this._iconRules});const n=this._markers.filter(t=>!t.removed&&"virtual"!==t.binding).map(t=>t.binding).sort(),o=e.revision+":"+n.join("|");if(e.authoritative&&o!==this._haBindingCacheKey){const i=new Map;for(const s of n)i.set(s,Ln(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Nn(),i=Date.now();for(const[s,n]of t)"active"===n.kind?e[s]={kind:"active",ts:i}:"ha_disabled"===n.kind&&(e[s]={kind:"ha_disabled",reason:n.reason,ts:i});const s=Object.fromEntries(Object.entries(e).sort((t,e)=>e[1].ts-t[1].ts).slice(0,1500));Sn=s;try{localStorage.setItem($n,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const a=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())a.has(t)||this._vacRt.delete(t);if(this._infoCard){const t=this._devices.find(t=>t.id===this._infoCard.id);this._infoCard=t&&"ha_disabled"!==t.bindingStatus?.kind?t:null}const r=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));r&&("ha_disabled"!==this._infoCard?.bindingStatus?.kind&&"ha_disabled"!==this._devices.find(t=>t.id===this._infoCard?.id)?.bindingStatus?.kind||this._closeInfoCard(),this._drag&&"ha_disabled"===this._devices.find(t=>t.id===this._drag.id)?.bindingStatus?.kind&&(this._drag=null),clearTimeout(this._holdTimer),this._holdFired=!1,this._tip=null,this._tapConfirm=null),this._nativeMoreInfoEntity&&!this._planEntityAvailable(this._nativeMoreInfoEntity)&&(E_(this,"hass-more-info",{entityId:null}),this._nativeMoreInfoEntity=null)}_syncNewDevices(){if(!this._norm||!this._loadOk||!this._serverCfg)return;const t=this._devices.filter(t=>!t.marker&&!t.virtual).map(t=>t.id).sort(),e=t.join(",");if(e===this._newSyncKey)return;this._newSyncKey=e;const i=this._settings,{fresh:s,known:n}=function(t,e){if(!Array.isArray(e))return{fresh:[],known:[...t]};const i=new Set(e),s=t.filter(t=>!i.has(t));return{fresh:s,known:s.length?[...e,...s]:e}}(t,i.known_devices);if(!Array.isArray(i.known_devices)||s.length){const t=[...new Set([...i.new_device_ids||[],...s])];this._serverCfg={...this._serverCfg,settings:{...i,known_devices:n,new_device_ids:t}},this._saveConfig()}}get _newIds(){const t=this._settings.new_device_ids;return new Set(Array.isArray(t)?t:[])}_ackNewDevice(t){if(!this._newIds.has(t)||!this._serverCfg)return;const e=this._settings;this._serverCfg={...this._serverCfg,settings:{...e,new_device_ids:(e.new_device_ids||[]).filter(e=>e!==t)}},this._saveConfig(),this.requestUpdate()}get _markers(){return this._serverCfg?.markers||[]}_roomLqi(t){if(!t)return null;const e=[];for(const i of this._renderDevices){if(i.area!==t||i.virtual)continue;const s=ho(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return Ei(e)}_roomBounds(t){if(t.poly&&t.poly.length){const e=t.poly.map(t=>t[0]),i=t.poly.map(t=>t[1]),s=Math.min(...e),n=Math.min(...i);return{x:s,y:n,w:Math.max(...e)-s,h:Math.max(...i)-n}}return{x:t.x??0,y:t.y??0,w:t.w??0,h:t.h??0}}_defaultPositions(){const t={},e=this._config?.icon_size??2.5;for(const i of this._model){const s=e/100*gc(i)*1.3;for(const e of i.rooms){if(!e.area)continue;const n=this._devices.filter(t=>t.area===e.area&&t.space===i.id);if(!n.length)continue;const o=this._roomBounds(e),a=.1*Math.min(o.w,o.h),r=o.w-2*a,l=o.h-2*a,c=Math.max(1,Math.round(Math.sqrt(n.length*r/Math.max(l,1)))),h=Math.ceil(n.length/c),d=r/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+a+d*(e%c+.5),y:o.y+a+u*(Math.floor(e/c)+.5)}));Oi(p,o,s,.5*a),n.forEach((e,i)=>t[e.id]=ec(p[i]))}}return t}_pos(t){const e=this._renderDeviceSnapshot?.positions.get(t.id);return e?{x:e.x,y:e.y}:this._livePos(t)}_livePos(t){const e=this._spaceModelById(t.space),i=this._layout[t.id];if(i)if(this._norm){if(i.s===t.space)return{x:i.x*P_,y:i.y*P_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?ec(_c(e)):{x:500,y:500}}_savePos(t,e,i){if(this._spaceModelById(t.space)){if(this._norm){const s=this._gridPitch,n=Math.round(e/s)*s,o=Math.round(i/s)*s,a=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:sc(n/P_),y:sc(o/P_),...a?{k:a}:{}}}}else this._layout={...this._layout,[t.id]:{x:Math.round(e),y:Math.round(i)}};this._dirtyPos.add(t.id),this._persistLayout()}}_visualSamples(t){return cu(this._renderPlanHass,t,this._renderDevices,void 0,this._fullRegistryHass).samples}_devicePresentation(t,e=!1!==this._config?.show_signal,i=!1){const s=i?null:this._renderDeviceSnapshot?.presentations.get(vu(t.id,e));return s||_u(this._renderPlanHass,t,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:e,designPreview:i,activityRuntime:this._activityRt.get(t.id),sourceDetails:!1,lightDevices:this._renderDevices,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion})}_deviceVisual(t){return this._devicePresentation(t).visual}_stateClass(t,e=this._deviceVisual(t)){const i=this._devicePresentation(t);return i.effectiveHidden?"":("icon_ripple"!==i.display||!1===this._config?.live_states||"alarm"===e.status||e.activity,pu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=po(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:uo(this._renderPlanHass,t.entities)}_bindingEntities(t){if("virtual"===t||!t)return[];const e=this._bindingStatus(t);return"active"===e.kind?e.enabledEntityIds:e.allEntityIds}_bindingHasClimate(t){return this._bindingEntities(t).some(t=>t.startsWith("climate."))}_bindingHasAlarm(t){return this._bindingEntities(t).some(t=>{const e=this._planHass?.states?.[t]||this.hass?.states?.[t],i=this._fullRegistryHass.entities[t]||this.hass?.entities?.[t];return Ls(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&_o(this.hass,t.primary)?go(this.hass,t.entities):null}_deviceBindingActive(t,e=!0){if(t.virtual||"virtual"===t.bindingKind)return!0;if(!t.bindingKind||!t.bindingRef)return!1;const i=this._bindingStatus(`${t.bindingKind}:${t.bindingRef}`);return"active"===i.kind||(e&&this._showToast(this._t("ha_disabled"===i.kind?"toast.ha_disabled_action":"toast.ha_binding_unverified")),!1)}_openMoreInfo(t){t?this._planEntityAvailable(t)?(this._nativeMoreInfoEntity=t,E_(this,"hass-more-info",{entityId:t})):this._showToast(this._t("toast.ha_disabled_action")):this._showToast(this._t("toast.no_entity"))}_interruptViewGesture(t,e){if(clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),void 0!==t)for(const i of[e,this._stageEl])try{i?.hasPointerCapture?.(t)&&i.releasePointerCapture(t)}catch{}this._pointers.clear(),this._panStart=null,this._panLock=null,this._pinchStart=null,this._swipeStart=null}_closeInfoCard(){this._interruptViewGesture(),this._holdFired=!1,this._infoCard=null}_ctxDevice(t,e){"view"===this._mode&&(t.preventDefault(),t.stopPropagation(),this._deviceBindingActive(e)&&(e.primary?this._openMoreInfo(e.primary):this._infoCard=e))}_clickDevice(t,e){if(t.stopPropagation(),this._drag?.moved||this._suppressClick||this._holdFired)return;if("plan"===this._mode)return;if("devices"===this._mode)return void this._openMarkerDialog(e);const i=this._devices.find(t=>t.id===e.id);if(!i)return;const s=Yh(i.tapAction,i.primary?.split(".")[0]),n=(t,e)=>{i.marker?.tap_confirm?this._tapConfirm={kind:"run",text:t,exec:e}:e()};if("toggle"===s){const t=this._toggleIntent(i);if(!t||!ed(t))return;const e=t=>{const e=ed(t);if(!e)return;if("virtual-light"===e.kind)return this._startDevicePressFeedback(i.id),void this.hass.callWS({type:"houseplan/virtual_light/toggle",marker_id:e.markerId}).then(t=>{const e=bn(this._virtualLights,t);e!==this._virtualLights&&(this._virtualLights=e,this._capturedSnapshotVirtual="",this._cacheSnapshot(),this.requestUpdate())}).catch(t=>this._showToast(this._t("toast.virtual_light_toggle_failed",{err:this._errText(t)})));const{command:s}=e;this._startDevicePressFeedback(i.id),this.hass.callService(s.domain,s.service,s.data).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))},s=((o=t).targets.length?o.targets:o.skippedTargets).map(t=>t.name||t.entityId||t.ref).join(", ")||i.name;if(i.marker?.tap_confirm){const n=this._toggleConfirmationLines(t);if(!n.length)return;this._tapConfirm={kind:"toggle",text:this._t("confirm.tap_toggle",{name:s}),lines:n,initialIntent:t,deviceId:i.id,exec:()=>{const s=this._devices.find(t=>t.id===i.id),n=s?this._toggleIntent(s):null;n&&id(t,n)?e(n):this._showToast(this._t("toast.tap_target_changed"))}}}else e(t);return}var o;if("info"===s)return this._interruptViewGesture(),void(this._infoCard=i);if(this._deviceBindingActive(i)){if("run"===s){const t=i.marker?.tap_target||"",e=function(t){const e=String(t||"").split(".")[0];return"automation"===e?{domain:"automation",service:"trigger"}:"script"===e?{domain:"script",service:"turn_on"}:"scene"===e?{domain:"scene",service:"turn_on"}:null}(t),s=this.hass.states[t];if(!e||!s)return void this._showToast(this._t("toast.run_target_missing"));const o=s.attributes?.friendly_name||t;return void n(this._t("confirm.tap_run",{name:o}),()=>{this._deviceBindingActive(i)&&this._planEntityAvailable(t)&&(this._startDevicePressFeedback(i.id),this.hass.callService(e.domain,e.service,{entity_id:t}).then(()=>{this._stampActivity(i.id,"event",this._activitySourceKey(i)),this.requestUpdate(),this._showToast(this._t("toast.run_started",{name:o}))}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)}))))})}"more-info"===s&&i.primary?this._openMoreInfo(i.primary):this._infoCard=i}}_keyDevice(t,e){"Enter"!==t.key&&" "!==t.key||"view"!==this._mode&&"devices"!==this._mode||(t.preventDefault(),this._clickDevice(t,e))}_startDevicePressFeedback(t){const e=[...this.renderRoot.querySelectorAll(".dev[data-id]")].find(e=>e.dataset.id===t),i=e?.querySelector(".device-shell");if(!i||"function"!=typeof i.animate)return;const s=Number.parseFloat(this.ownerDocument.defaultView?.getComputedStyle(i).scale||""),n=Number.isFinite(s)?Math.max(.95,Math.min(1,s)):1;this._devicePressAnimations.get(t)?.cancel();const o=this._reducedMotion?[{outlineColor:"transparent",outlineStyle:"solid",outlineWidth:"0px"},{outlineColor:"var(--hp-accent, #3ea6ff)",outlineStyle:"solid",outlineWidth:"2px",outlineOffset:"2px",offset:.5},{outlineColor:"transparent",outlineStyle:"solid",outlineWidth:"0px"}]:[{scale:String(n)},{scale:"0.95",offset:.5},{scale:"1"}],a=i.animate(o,{duration:200,easing:"cubic-bezier(.22,.61,.36,1)"});this._devicePressAnimations.set(t,a);const r=()=>{this._devicePressAnimations.get(t)===a&&this._devicePressAnimations.delete(t)};a.addEventListener("finish",r,{once:!0}),a.addEventListener("cancel",r,{once:!0})}_cancelDevicePressFeedback(){for(const t of this._devicePressAnimations.values())t.cancel();this._devicePressAnimations.clear()}_pruneDevicePressFeedback(){if(!this._devicePressAnimations.size)return;const t=new Set([...this.renderRoot.querySelectorAll(".dev[data-id]")].map(t=>t.dataset.id||""));for(const[e,i]of this._devicePressAnimations)t.has(e)||(i.cancel(),this._devicePressAnimations.delete(e))}_t(t,e){return oa(na(this.hass,this._config?.language),t,e)}get _colorPickerLabels(){return{title:this._t("color_picker.title"),hue:this._t("color_picker.hue"),saturation:this._t("color_picker.saturation"),value:this._t("color_picker.value"),hex:this._t("color_picker.hex"),invalidHex:this._t("color_picker.invalid_hex")}}_help(t){const e=`${t}.aria`,i=na(this.hass,this._config?.language);return aa(i,t)&&aa(i,e)?j``:G}get _stageEl(){return this.renderRoot.querySelector(".stage")}_contentItems(t){const e=[];for(const i of this._devices){if(i.space!==t.id||i.hidden)continue;const s=this._pos(i);e.push({minX:s.x,minY:s.y,maxX:s.x,maxY:s.y})}if(t.id===this._space){for(const t of this._openingsR){const i=Number(t.angle)*Math.PI/180,s=Math.cos(i)*t.rlen/2,n=Math.sin(i)*t.rlen/2,o=ac([[t.rx-s,t.ry-n],[t.rx+s,t.ry+n]]);o&&e.push(o)}const i=this._decorH;for(const t of this._decorList){const s=ac("line"===t.kind?[[t.x1*P_,t.y1*i],[t.x2*P_,t.y2*i]]:"text"===t.kind?[[t.x*P_,t.y*i]]:hr({x:t.x*P_,y:t.y*i,w:t.w*P_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=ac(i);t&&e.push(t)}}return lc(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:P_,h:P_};return{rect:t,all:t,outliers:0}}const e=this._frame,i="view"!==this._mode;if(e&&e.id===t.id&&this._bdDrag)return e;if(e&&e.id===t.id&&e.model===t&&e.layout===this._layout&&e.devs===this._devices&&e.far===this._showFar&&e.grow===i)return e;const s=uc(this._contentItems(t));let n=s.all||pc(t),o=this._showFar?n:s.core||pc(t);return e&&e.id===t.id&&i&&e.grow&&(o=A_(e.rect,o),n=A_(e.all,n)),this._frame={id:t.id,model:t,layout:this._layout,devs:this._devices,far:this._showFar,grow:i,rect:o,all:n,outliers:s.outliers},this._frame}_isoSource(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._openPairs().flatMap(t=>t.segs),s=this._openingsR.map((t,e)=>({id:String(t.id||e),sourceIndex:e,type:t.type,x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen>0?t.rlen:900,flipH:!!t.flip_h,flipV:!!t.flip_v}));return{key:`${t.id}|${function(t){let e=2166136261;const i=t=>{if("number"!=typeof t)if("string"!=typeof t)if("boolean"!=typeof t)if(Array.isArray(t)){e=Zp(e,t.length);for(const e of t)i(e)}else{if(t&&"object"==typeof t){const e=t;for(const t of Object.keys(e).sort())i(t),i(e[t]);return}e=Zp(e,-1)}else e=Zp(e,t?1:0);else for(const i of t)e=Zp(e,i.codePointAt(0)||0);else e=Zp(e,t)};return i(t),e.toString(36)}({rooms:t.rooms,walls:e,openCuts:i,openings:s,partitions:t.partitions,roomDrafts:t.room_drafts,columns:t.wall_columns,cellCm:this._cellCm,gridPitch:this._gridPitch,wallKeyPitch:this._wallKeyPitch,camera:Np,wallHeight:Lp,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),a=e.length||n.length?ul(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,n):null;if((e.length||n.length)&&!a)throw new Error("wall boolean geometry failed");const r=a?.paperGeom??function(t,e,i,s,n,o,a=1){try{const r=hl(t,e,i,s,n,o,a);return r?r.shell?.length?si(r.centre,r.shell):r.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?hd(i.partitionHost,s):e.length||"gate"===t.type?bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length,flip_v:s}):{ox:0,oy:0,cm:0,side:-1};return function(t,e=64){if(!(Qp([t.x,t.y,t.angle,t.length,t.face.ox,t.face.oy,e])&&t.length>0&&e>0))throw new Error("invalid isometric opening input");const i=t.length/2;let s;if("passage"===t.type)s=[];else if("gate"===t.type){const n=t.flipV?-1:1,o=t.face.side*n*10;s=[e_(t,0,[-i,0],[i,0],o,0,.88*e),e_(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[e_(t,0,[-i,0],[i,0],-90,.27*e,.78*e),e_(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[e_(t,0,[-i,0],[t.length,0],-90,0,.92*e)];return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaves:Object.freeze(s.map(t=>Object.freeze(t)))}}({...t,face:n})});return{walls:a?.geom||[],floor:r,openings:Object.freeze(c)}}}}_isoSceneKey(){if(!this._labsIso||"view"!==this._mode)return null;try{return this._isoSource()?.key??null}catch{return`${this._space}|invalid`}}_isoScene(){const t=this._isoSource();if(!t)return null;const e=this._isoGeometryCache.get(t.key);if(e)return{key:t.key,...e};const i=this._frameOf().rect,s=t.build(),n=function(t){let e=1/0,i=1/0,s=-1/0,n=-1/0;for(const o of t)for(const t of o.leaves){const o=Math.hypot(t.closedVector[0],t.closedVector[1]);e=Math.min(e,t.hinge[0]-o),i=Math.min(i,t.hinge[1]-o),s=Math.max(s,t.hinge[0]+o),n=Math.max(n,t.hinge[1]+o)}return Qp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Up({rect:n?A_(i,n):i,wallHeight:Lp,openingHeight:Lp,floorDepth:10}),a=function(t,e=Np,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let a=0;for(let r=0;r<(t||[]).length;r++){const l=t[r];for(let t=0;t<(l||[]).length;t++){const c=Kp(l[t],t>0);if(!(c.length<3||Math.abs(Vp(c))<1e-9)){s.push(Yp(c,e,i)),a+=c.length;for(let s=0;st.depth-e.depth||t.polygon-e.polygon||t.ring-e.ring||t.edge-e.edge),{topPath:s.join(" "),sides:n,contactPath:o.join(" "),edgeCount:a}}(s.walls),r={geometry:a,floor:Jp(s.floor,10),openings:s.openings,frame:o};return y_(this._isoGeometryCache,t.key,r,8),{key:t.key,...r}}_effectiveProjection(){if("iso"!==this._desiredProjection||!this._model.length)return"flat";const t=this._isoSceneKey()||`${this._space}|invalid`;if(this._isoFallback.has(t))return"flat";try{const t=this._isoScene();return t?(e="iso",i=t.key,s=this._isoFallback,"iso"===e&&i&&!s.has(i)?"iso":"flat"):"flat"}catch(e){if(!this._isoFallback.has(t)){this._isoFallback.add(t);const i=t.split("|");console.warn(`HOUSEPLAN ISO FALLBACK: #89, space ${this._space}, fingerprint ${i[i.length-1]}, ${e instanceof Error?e.message:"renderer error"}`)}return"flat"}var e,i,s}_scenePoint(t){return"iso"===this._renderProjection?qp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=jp([t.x,t.y]),i=jp([t.x+t.w,t.y+t.h]);return{x:e[0],y:e[1],w:i[0]-e[0],h:i[1]-e[1]}}_baseVb(){if("iso"===this._effectiveProjection()){if(!this._spaceDisplayForRender().showBorders){const t=Up({rect:this._frameOf().rect,wallHeight:Lp});return[t.x,t.y,t.w,t.h]}const t=this._isoScene()?.frame??this._frameOf().rect;return[t.x,t.y,t.w,t.h]}const t=this._frameOf().rect;return[t.x,t.y,t.w,t.h]}get _outliers(){return this._showFar?0:this._frameOf().outliers}_fitFar(){this._showFar=!0,this._frame=null,this._resetZoom()}_fitAll(){this._showFar=!0,this._frame=null,this._resetZoom()}_renderFarHint(){return this._kiosk||"view"!==this._mode||this._booting||!this._outliers?G:j`
${this._t("canvas.far_objects",{n:this._outliers})} @@ -4746,7 +4763,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 style="left:${r.toFixed(1)}%;top:${l.toFixed(1)}%" @click=${t=>{t.stopPropagation(),this._fitAll()}}> - `}_stageAspect(){const t=this._stageEl,e=this._baseVb();return t&&t.clientHeight?t.clientWidth/t.clientHeight:e[2]/e[3]}_viewOr(t){return this._view&&this._view.w?this._view:zi(t,this._stageAspect())}_roomLabelReferenceViewWidth(t){if(!this._markup)return t.w;const e=this._stageEl,i=this.renderRoot.querySelector(".editorchrome");if(!e||e.clientWidth<=0||e.clientHeight<=0)return t.w;const s=e.clientHeight+(i?.getBoundingClientRect().height||0);return s<=0?t.w:this._viewForModeTarget(this._zoom,void 0,void 0,e.clientWidth,s).w}_screenToVb(t,e){const i=this._stageEl,s=this._viewOr(this._baseVb()),n=i?.clientWidth||1,o=i?.clientHeight||1;return[s.x+t/n*s.w,s.y+e/o*s.h]}_clampView(t,e){const i=(t,e,i,s)=>{const n=1*Math.max(e,s),o=i-n,a=i+s-e+n;return Math.max(Math.min(o,a),Math.min(Math.max(o,a),t))};return{w:t.w,h:t.h,x:i(t.x,t.w,e.x,e.w),y:i(t.y,t.h,e.y,e.h)}}_applyView(t,e,i){const s=this._baseVb(),n=zi(s,this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),a=n.w/o,r=n.h/o,l=this._viewOr(s),c=e??l.x+l.w/2,h=i??l.y+l.h/2,d=this._clampView({x:c-a/2,y:h-r/2,w:a,h:r},n);return!(this._view&&Math.abs(this._zoom-o)<1e-9&&Math.abs(this._view.x-d.x)<1e-6&&Math.abs(this._view.y-d.y)<1e-6&&Math.abs(this._view.w-d.w)<1e-6&&Math.abs(this._view.h-d.h)<1e-6)&&("opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=o,this._view=d,!0)}_bootWatch(){clearTimeout(this._bootTimer),this._bootStart=Date.now(),this._bootLastH=-1,this._bootLastChange=this._bootStart;const t=()=>{if(!this._booting)return;const e=Date.now(),i=this._stageEl?this._stageEl.clientHeight:0;i!==this._bootLastH&&(this._bootLastH=i,this._bootLastChange=e);const s=e-this._bootStart;s>=1200||s>=700&&i>0&&e-this._bootLastChange>=250?this._bootSettled():this._bootTimer=window.setTimeout(t,100)};this._bootTimer=window.setTimeout(t,100)}_bootSettled(){this._booting&&!this._bootSettling&&(this._bootSettling=!0,this._refitView(),this._bootSettleRaf=requestAnimationFrame(()=>{this._bootSettleRaf=0,this._finishBootSettled()}))}_finishBootSettled(){if(!this._booting)return;this._refitView(),this._booting=!1,this._bootSettling=!1;const t=this._stageEl?.clientHeight??0;!this._config?.kiosk&&t>0&&this._warmPatch({hdrH:this._hdrH,stageH:t,vp:this._warmViewportState()},!0),this._bootFading=!0,this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220),this._bootSoft=!0,clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},g_)}_bootSoftCancel(){this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoft=!1)}_beginResumeSettle(){this._booting||this._resumeSettling||(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0),this._viewportInvalidAt=0,this._beginContinuityCandidate("warm-resume",!1),this._loading?this.requestUpdate():this._loadFromServer())}_refitView(){if(this._modeTransitionBusy)return;const t=this._stageEl;if(!t||"visible"!==document.visibilityState||t.clientWidth<=0||t.clientHeight<=0)return void(this._viewportInvalidAt||(this._viewportInvalidAt=Date.now()));const e=[t.clientWidth,t.clientHeight],i=this._lastValidStageSize,s=!!i&&Math.abs(i[0]-e[0])<=.5&&Math.abs(i[1]-e[1])<=.5,n=this._viewportInvalidAt?Date.now()-this._viewportInvalidAt:0;if(this._viewportInvalidAt=0,!i)return this._lastValidStageSize=e,void(this._view||this._applyView(this._zoom));s?this._pendingRefitSize=null:(this._pendingRefitSize=e,this._refitRaf||(this._refitRaf=requestAnimationFrame(()=>{this._refitRaf=0;const t=this._pendingRefitSize;this._pendingRefitSize=null;const e=this._stageEl;if(!t||!e||e.clientWidth<=0||e.clientHeight<=0)return;if(Math.abs(e.clientWidth-t[0])>.5||Math.abs(e.clientHeight-t[1])>.5)return void this._refitView();const i=this._lastValidStageSize;if(i&&Math.abs(i[0]-t[0])<=.5&&Math.abs(i[1]-t[1])<=.5)return;this._lastValidStageSize=t;const s=this._view;n>=Jc?this._beginContinuityCandidate("stage-size-restored",!0,"stage-size"):this._continuity.hasCompleteFrame&&this._beginContinuityCandidate("stage-resize",!0,"stage-size"),this._applyView(this._zoom,s?s.x+s.w/2:void 0,s?s.y+s.h/2:void 0)})))}_zoomAt(t,e,i){const s=this._stageEl;if(!s)return;const n=zi(this._baseVb(),this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const a=s.clientWidth,r=s.clientHeight,l=this._screenToVb(t,e),c=n.w/o,h=n.h/o;this._zoom=o,this._view=this._clampView({x:l[0]-t/a*c,y:l[1]-e/r*h,w:c,h:h},n)}_onWheel(t){const e=this._stageEl;if(!e)return;t.preventDefault();const i=e.getBoundingClientRect(),s=t.deltaY<0?1.15:1/1.15;this._zoomAt(t.clientX-i.left,t.clientY-i.top,this._zoom*s),this._saveZoom()}_stepZoom(t){const e=this._stageEl;e&&(this._zoomAt(e.clientWidth/2,e.clientHeight/2,this._zoom*(t>0?1.4:1/1.4)),this._saveZoom())}_resetZoom(){const t=this._baseVb();"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=1,this._view=zi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(S_,JSON.stringify(this._zoomBySpace))}catch{}}}_restoreZoom(){const t=this._zoomBySpace[this._space]||1;this._zoom=t;const e=this._stageEl;if(e&&e.clientHeight){const e=this._baseVb();return this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),void this.requestUpdate()}this._view=null,requestAnimationFrame(()=>{if(!this._stageEl)return;const e=this._baseVb();this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),this.requestUpdate()})}_stagePointerDown(t){if(this._vacFit)return;if(this._kiosk&&(this._cyclePausedUntil=Date.now()+6e4,0===this._pointers.size?(this._swipeStart={x:t.clientX,y:t.clientY,id:t.pointerId},t.target.closest?.(".dev, .roomlabel, .oplock")||(clearTimeout(this._kioskHoldTimer),this._kioskHoldTimer=window.setTimeout(()=>{this._kioskDialog=!0,this._swipeStart=null},3e3))):(this._swipeStart=null,clearTimeout(this._kioskHoldTimer))),this._drag)return;if(this._markup&&t.target.closest?.(".roomlabel, .rlhandle, .rszhandle, .dev, .oplock, .op-hit, button"))return;if("devices"===this._mode&&t.target.closest(".dev"))return;if("decor"===this._mode&&this._decorPointerDown(t))return;this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});const e=this._viewOr(this._baseVb());if(1===this._pointers.size)this._panStart={sx:t.clientX,sy:t.clientY,vx:e.x,vy:e.y},this._panLock=null,this._suppressClick=!1;else if(2===this._pointers.size){this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);this._pinchStart={dist:e,zoom:this._zoom},this._panStart=null,this._panLock=null}}get _swipeZone(){return!this._hasFixedFloor&&this._kiosk&&this._zoom<=1.001&&this._model.length>1}_stagePointerMove(t){if(this._physicalRotate?.pid!==t.pointerId)if(this._physicalDrag?.pid!==t.pointerId)if(this._dtDrag?.pid!==t.pointerId)if(this._bdDrag?.pid!==t.pointerId){if(this._decorDraft?.pid===t.pointerId){const e=this._decorDraft;let i=this._decorSnap(this._svgPoint(t),t.pointerType);if(t.shiftKey&&("rect"===e.kind||"ellipse"===e.kind)){const t=i[0]-e.a[0],s=i[1]-e.a[1],n=Math.max(Math.abs(t),Math.abs(s));i=this._snap([e.a[0]+(t<0?-n:n),e.a[1]+(s<0?-n:n)])}return void(this._decorDraft={...e,b:i})}if(this._decorMove?.pid!==t.pointerId)if(this._pointers.has(t.pointerId)){if(this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),this._markup&&1===this._pointers.size&&this._markupMove(t),this._pinchStart&&this._pointers.size>=2){"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)/(this._pinchStart.dist||1),i=this._stageEl.getBoundingClientRect(),s=(t[0].x+t[1].x)/2-i.left,n=(t[0].y+t[1].y)/2-i.top;this._zoomAt(s,n,this._pinchStart.zoom*e),this._suppressClick=!0,this._saveZoom()}else if(this._panStart){const e=t.clientX-this._panStart.sx,i=t.clientY-this._panStart.sy;Math.abs(e)+Math.abs(i)>4&&(this._suppressClick=!0,clearTimeout(this._holdTimer),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover()),null===this._panLock&&Math.abs(e)+Math.abs(i)>8&&(this._panLock=this._swipeZone&&Math.abs(e)>1.5*Math.abs(i)?"swipe":"pan");const s=this._stageEl;if("pan"===this._panLock&&s){const t=this._baseVb(),n=this._viewOr(t),o=zi(t,this._stageAspect());this._view=this._clampView({x:this._panStart.vx-e/(s.clientWidth||1)*n.w,y:this._panStart.vy-i/(s.clientHeight||1)*n.h,w:n.w,h:n.h},o)}}}else this._markupMove(t);else this._decorMoveUpdate(t)}else this._bdMove(t);else this._dtMove(t);else this._physicalMove(t);else this._physicalRotateMove(t)}_stagePointerLeave(t){this._markup&&("opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover())}_stagePointerUp(t){if(this._kiosk){clearTimeout(this._kioskHoldTimer);const e=this._swipeStart;if(this._swipeStart=null,e&&e.id===t.pointerId){const i=t.clientX-e.x,s=t.clientY-e.y;if(Math.abs(i)+Math.abs(s)<8){const t=Date.now();t-this._lastTap<350&&this._resetZoom(),this._lastTap=t}const n="pan"===this._panLock?null:function(t,e,i,s,n,o=60){if(i>1.001||s.length<2)return null;if(Math.abs(t)t.id),this._space);n&&this._slideTo(n,i<0?"left":"right")&&(this._saveNav(),this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._showKioskDots())}}if(this._physicalDrag?.pid===t.pointerId)return void this._physicalUp(t);if(this._physicalRotate?.pid===t.pointerId)return void this._physicalRotateUp(t);if(this._dtDrag?.pid===t.pointerId)return void this._dtUp();if(this._bdDrag?.pid===t.pointerId)return void this._bdUp();if(this._decorDraft?.pid===t.pointerId)return void this._decorCommitDraft();if(this._decorMove?.pid===t.pointerId)return this._decorMove.moved&&(this._recordGeometry(this._t("history.decor_move"),this._decorMove.before),this._saveConfig()),void(this._decorMove=null);const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null,setTimeout(()=>this._suppressClick=!1,0)),e&&0===this._pointers.size&&this.requestUpdate()}_clickRoom(t){!this._suppressClick&&t.area&&E_("/config/areas/area/"+t.area)}_pointerDown(t,e){if("plan"===this._mode)return;if("view"===this._mode){this._holdFired=!1,clearTimeout(this._holdTimer);const i=t.pointerId,s=t.currentTarget;return void(this._holdTimer=window.setTimeout(()=>{this._holdFired=!0,this._interruptViewGesture(i,s),this._infoCard=e},600))}if("ha_disabled"===e.bindingStatus?.kind)return;t.preventDefault();const i=this._pos(e);this._drag={id:e.id,sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},O_(t),this._tip=null}_pointerMove(t,e){if(!this._drag||this._drag.id!==e.id)return;const i=this.renderRoot.querySelector(".stage");if(!i)return;const s=this._baseVb(),n=i.getBoundingClientRect(),o=this._viewOr(s),a=(t.clientX-this._drag.sx)/n.width*o.w,r=(t.clientY-this._drag.sy)/n.height*o.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0,clearTimeout(this._holdTimer));const l=ic(this._drag.ox+a),c=ic(this._drag.oy+r);this._savePos(e,l,c)}_pointerUp(t,e){if(clearTimeout(this._holdTimer),!this._drag||this._drag.id!==e.id)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&(this._selId=e.id,window.setTimeout(()=>this._drag=null,0))}_showToast(t){for(const t of this.renderRoot.querySelectorAll("hp-dialog"))t.closeTransientOverlays("toast");this._toast=t,clearTimeout(this._toastTimer),this._toastTimer=window.setTimeout(()=>{this._toast=""},3500)}get _noHover(){return N_._noHoverMq||N_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(N_._touchSeen=!0,this._tip&&(this._tip=null))}_guardTouchGesture(t){if(this._editorSecondary.handleOutsideDismiss(t))return;if("click"===t.type){if(!this._suppressClick&&!this._touchSequenceMultitouch&&Date.now()>this._touchClickBlockUntil)return;return t.preventDefault(),void t.stopImmediatePropagation()}const e=t;if("touch"===e.pointerType)if(this._notePointer(e),"pointerdown"!==t.type){if("pointermove"===t.type){const t=this._touchContacts.get(e.pointerId);if(!t)return;const i={...t,x:e.clientX,y:e.clientY};if(this._touchContacts.set(e.pointerId,i),this._touchSequenceMultitouch&&"view"===this._mode&&!this._vacFit&&this._pinchStart&&[...this._touchContacts.values()].every(t=>t.inStage)){this._pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=[...this._touchContacts.values()];if(t.length>=2&&this._stageEl){const[e,i]=t,s=Math.hypot(e.x-i.x,e.y-i.y)/(this._pinchStart.dist||1),n=this._stageEl.getBoundingClientRect();this._zoomAt((e.x+i.x)/2-n.left,(e.y+i.y)/2-n.top,this._pinchStart.zoom*s),this._saveZoom()}}return}if("pointerup"===t.type||"pointercancel"===t.type){if(this._touchContacts.delete(e.pointerId),this._touchSequenceMultitouch){if(this._touchClickBlockUntil=Date.now()+500,this._pointers.delete(e.pointerId),!this._vacFit&&this._pointers.size>=2){const[t,e]=[...this._pointers.values()];this._pinchStart={dist:Math.hypot(t.x-e.x,t.y-e.y),zoom:this._zoom}}else this._pinchStart=null;0===this._pointers.size&&(this._panStart=null,this._panLock=null)}0===this._touchContacts.size&&(this._touchSequenceMultitouch=!1)}}else if(this._touchContacts.set(e.pointerId,{x:e.clientX,y:e.clientY,inStage:!!e.target?.closest?.(".stage")}),this._touchContacts.size>=2){this._touchSequenceMultitouch=!0,this._touchClickBlockUntil=Number.POSITIVE_INFINITY,clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),this._swipeStart=null;const t=[...this._touchContacts.values()];if("view"===this._mode&&!this._vacFit&&t.every(t=>t.inStage)){this._pointers=new Map([...this._touchContacts].map(([t,e])=>[t,{x:e.x,y:e.y}]));const[e,i]=t;this._pinchStart={dist:Math.hypot(e.x-i.x,e.y-i.y),zoom:this._zoom},this._panStart=null,this._panLock=null}else this._vacFit&&(this._pointers.clear(),this._pinchStart=null,this._panStart=null,this._panLock=null)}}_showTip(t,e,i,s,n,o){this._noHover||this._drag||(this._tip={x:t.clientX,y:t.clientY,title:e,meta:i,lqi:s,temp:n,hum:o})}get _gridPitch(){return Zl}get _cellCm(){const t=Number(this._curSpaceCfg?.cell_cm);return Number.isFinite(t)&&t>0?t:5}_fmtLen(t,e){const i=function(t,e,i,s){return Math.hypot(e[0]-t[0],e[1]-t[1])/i*s}(t,e,this._gridPitch,this._cellCm);return ri(i,"mi"===this.hass?.config?.unit_system?.length)}get _curSpaceCfg(){const t=this._rszPreview;return t&&t.space===this._space?t.sp:this._serverCfg?.spaces.find(t=>t.id===this._space)}get _renderCfg(){const t=this._rszPreview;return t&&this._serverCfg?{...this._serverCfg,spaces:this._serverCfg.spaces.map(e=>e.id===t.space?t.sp:e)}:this._serverCfg}get _spaceH(){return this._curSpaceCfg,T_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*T_,t[1]*e,t[2]*T_,t[3]*e])}_savedNav(){if(this._hasFixedFloor)return null;try{return JSON.parse(localStorage.getItem(M_)||"null")}catch{return null}}_saveNav(){if(!this._hasFixedFloor)try{localStorage.setItem(M_,JSON.stringify({space:this._space}))}catch{}}_leaveCardRoute(){if(this._routeDepartureHandled)return;this._routeDepartureHandled=!0,"view"!==this._mode&&this._setMode("view",!1),this._pendingNavMode=null,this._geometryHistory.clear(),this._activeDraftId=null,this._resumeDraftBySpace={},this._draftSegmentCms=[],this._closingWallCm=null,this._drawWallField=null,this._showHidden=!1,this._tapConfirm=null,this._vacCalConfirm=null,this._decorEraseConfirm=null,this._openingInfo=null,this._closeInfoCard(),this._rulesDialog=null,this._alignDialog=null,this._backupImportDialog=null,this._backupExportDialog=null,this._settingsDialog=null,this._markerDialog=null,this._openingDialog=null,this._physicalDialog=null,this._wallDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._mergeDialog=null,this._roomDialog=!1,this._spaceDialog=null,this._importDialog=null;const t=this._warmSlot;t?.owner===this._warmGen&&(t.vp=this._warmViewportState(),t.dlg=null,t.frameFingerprint="",clearTimeout(t.evict),t.evict=0),this._saveNav()}_setMode(t,e=!0){this._pendingNavMode=null;const i=this._spaceModel();if(!i)return this._cancelModeTransition(!1),void(this._mode="view");if(this._kiosk&&"view"!==t)return;if(this._mode===t){if(!e&&"view"===t&&this._modeTransitionBusy){const e=this._currentModeVisual(t),i=this._modeTransitionTargetZoom,s=this._modeTransitionTargetCenterX,n=this._modeTransitionTargetCenterY;this._cancelModeTransition(!1),this._commitViewModeAtomic(e,i,s,n)}return}if(this._bootSoftCancel(),("plan"===t||"decor"===t)&&!this._norm)return void this._showToast(this._t("toast.markup_needs_server"));if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;const s=this._mode,n=this._effectiveProjection(),o=this._currentModeVisual(s),a=this._modeTransitionBusy,r=o&&"view"!==s&&"view"!==t?{...o,toolbarContentOpacity:this._reducedMotion?1:.35}:o;this._cancelModeTransition(!1),this._editorSecondary.closeForNavigation(),(this._decorMove||this._dtDrag||this._bdDrag)&&this._cancelDecorGesture();const l=!i.bg&&"view"===t!=("view"===s),c=a&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(a?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:a?this._modeTransitionTargetCenterX:r?.viewport.centerX,u=c?c.centerY:a?this._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===s&&"view"!==t&&!a){const e=this._view;if(this._viewModeSnap={space:this._space,zoom:this._zoom,cx:e?this._logicalViewCenter(n)?.x:void 0,cy:e?this._logicalViewCenter(n)?.y:void 0},"iso"===n){const e=this._logicalViewCenter("iso");d=e?.x,u=e?.y,this._view=null,this._mode=t,this._applyView(this._zoom,e?.x,e?.y)}l&&(h=1,d=void 0,u=void 0)}if("plan"===s&&this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._mode=t,this._editorChromeMode="view"===t?s:t,"view"===t){"view"===s||a||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this._viewModeSnap;if(t&&t.space===this._space){h=t.zoom;const e=this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat",i=null!=t.cx&&null!=t.cy&&"iso"===e?Bp([t.cx,t.cy],0):null;d=i?.[0]??t.cx,u=i?.[1]??t.cy}else t&&(h=this._zoomBySpace[this._space]||1,d=void 0,u=void 0)}else this._modeTransitionEditorCamera={zoom:h,centerX:d,centerY:u};this._modeTransitionTargetZoom=h,this._modeTransitionTargetCenterX=d,this._modeTransitionTargetCenterY=u,("iso"===n||"view"===t&&this._labsIso&&"iso"===this._viewPreference[this._space])&&(this._modeTransitionForceAtomic=!0);const p=++this._modeTransitionRequest;e?r?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=r,this._prepareModeTransition(p,r,t,h,d,u)):(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._zoom=h,this._view=null,requestAnimationFrame(()=>{this.isConnected&&p===this._modeTransitionRequest&&this._mode===t&&(this._applyView(h,d,u),"view"===t&&(this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate())})):"view"===t&&this._commitViewModeAtomic(r,h,d,u),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._tool="draw",this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._selId=null,this._physicalSel=null,this._physicalDialog=null,this._physicalDrag=null,this._rszSel=null,this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._tip=null,this._hoverRoom=null,this._decorDraft=null,this._decorSel=null,this._decorMove=null,this._backdropDialog=null,this._decorTool="select",this._bdDrag=null,this._dtDrag=null,this._dtBox=null,"plan"===t&&(this._primeDrawWallField(),this._resumeLastDraft()),this._saveNav()}_primeDrawWallField(){null===this._drawWallField&&(this._drawWallField=fr(_r,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?fr(_r,this._imperial):this._drawWallField}get _drawWallCm(){const t=m_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?$l:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?$l:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:fr(t,this._imperial),unit:this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_draftSegmentCount(t=this._curSpaceCfg){return(t?.room_drafts||[]).reduce((t,e)=>t+(Array.isArray(e.segments)?e.segments.length:0),0)}_finishWallChain(){if("draw"!==this._tool||this._wallFaceBatch||this._roomDialog)return!0;const t=this._curSpaceCfg;if(!t||this._path.length<2)return this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0;const e=Sd(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>I_)return this._showToast(this._t("toast.physical_limit")),!1;const s=this._geometrySnapshot();t.partitions||=[];const n=Date.now().toString(36);for(let s=0;st.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.wall_chain_finish"),s),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0}_activateMarkupTool(t){t!==this._tool&&(this._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this._tool||this._finishWallChain())&&(this._cancelPath(),this._tool=t,"draw"===t&&this._resumeLastDraft(),"resize"===t&&(this._rszSel=null),"boundary"!==t&&"wallthick"!==t||(this._wallDialog=null)))}_limitReached(t){const e=this._curSpaceCfg;if(!e)return!0;const i="draft"===t?(e.room_drafts||[]).length>=200:"partition"===t?(e.partitions||[]).length>=I_:(e.wall_columns||[]).length>=500;return i&&this._showToast(this._t("toast.physical_limit")),i}_svgPoint(t){const e=this.renderRoot.querySelector(".stage").getBoundingClientRect();return this._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this._gridPitch;return[ic(ai(t[0],e)),ic(ai(t[1],e))]}_snapDrawPoint(t,e=!1){const i=this._path[this._path.length-1],s=e&&i?function(t,e,i,s=1/0){if(!(i>0&&t?.every(Number.isFinite)&&e?.every(Number.isFinite)))return[e[0],e[1]];const n=e[0]-t[0],o=e[1]-t[1];if(Math.abs(n)+Math.abs(o)<=1e-12)return[t[0],t[1]];const a=Math.PI/4;let r=Math.atan2(o,n);r<0&&(r+=2*Math.PI);const l=Math.floor(r/a+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((n*c+o*h)/(i*d)));if(Number.isFinite(s)&&s>=0){const e=(t,e)=>{if(!e)return 1/0;const n=e>0?s-t:t+s;return Math.max(0,Math.floor((n+1e-9*i)/i))};u=Math.min(u,e(t[0],c),e(t[1],h))}return[t[0]+c*u*i,t[1]+h*u*i]}(i,t,this._gridPitch,Xl):t;return this._snap(s)}_planSnapOpeningCuts(t,e){if(!this._openingsR.length)return[];const i=this._openingWallIndexFor(t,e).value,s=[];for(const e of this._roomWallOpeningInputs(this._openingsR,t)){const t=yl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,a=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-a,e.x+o,e.y+a])}return s}_planSnapGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planSnapGeometryCache?.key===e)return this._planSnapGeometryCache;const i=this._openCuts(),s=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:[...i,...this._planSnapOpeningCuts(t,i)],partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this._gridPitch});return this._planSnapGeometryCache={key:e,value:s},this._planSnapGeometryCache}_planStructuralGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planStructuralGeometryCache?.key===e)return this._planStructuralGeometryCache;const i=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:this._openCuts(),epsilon:2e-4*this._gridPitch});return this._planStructuralGeometryCache={key:e,value:i},this._planStructuralGeometryCache}_planSnapContextKey(t){const e=this._path[0],i=this._path[this._path.length-1];return[t,this._tool,this._path.length,e?`${e[0]},${e[1]}`:"",i?`${i[0]},${i[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const i=this._planSnapGeometrySnapshot(),s=this._path[this._path.length-1],n="draw"===this._tool&&this._path.length>=3?[{point:this._path[0],key:"closure:first-point"}]:[],o=function(t,e,i){if(!(pd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const a=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>pd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(wd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!kd(a,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:a})}if(o)return o;let r=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],a=Ns([e[0],e[1]],t);if(a>i.tolerance)continue;const l=xd(o,e,i.gridStep);!wd(l,n,s)&&kd(a,o.key,r)&&(r={kind:"line",point:l,key:o.key,distance:a,segment:o})}return r}(i.value,t,{tolerance:this._cssPxToRender(12),gridStep:this._gridPitch,excludePoints:s?[s]:[],extraEndpoints:n,epsilon:2e-4*this._gridPitch});return{point:o?[...o.point]:this._snapDrawPoint(t,e),candidate:o,contextKey:this._planSnapContextKey(i.key)}}get _activePlanSnapCandidate(){if(!this._markup||"draw"!==this._tool)return null;const t=this._planSnapHover;if(!t)return null;const e=this._planSnapGeometrySnapshot();return t.contextKey===this._planSnapContextKey(e.key)?t.candidate:null}_clearPlanSnapHover(t=!0){this._planSnapHover=null,this._syncPlanSnapActiveMarker(null),t&&(this._cursorPt=null)}_samePt(t,e){return mi(t,e)}_dropLegacySegments(){for(const t of this._serverCfg?.markers||[])"ripple"===t.display&&(t.display="icon_ripple");for(const t of this._serverCfg?.spaces||[]){delete t.segments;const e=new Set,i=t=>"string"==typeof t&&t.length>=1&&t.length<=64&&!e.has(t),s=t=>(e.add(t),!0),n=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=Yl);if(Array.isArray(t.partitions)&&(t.partitions=t.partitions.filter(t=>t&&i(t.id)&&n(t.a)&&n(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&s(t.id)).map(t=>({...t,cm:Math.max(1,Math.min(100,Number(t.cm)||15))})),t.partitions.length||delete t.partitions),Array.isArray(t.wall_columns)&&(t.wall_columns=t.wall_columns.filter(t=>t&&i(t.id)&&n(t.center)&&s(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Sl(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Ml(t.angle)}})),t.wall_columns.length||delete t.wall_columns),Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t&&i(t.id)&&Array.isArray(t.points)&&t.points.length>=2&&t.points.every(n)&&s(t.id)).map(t=>{const e=[[Number(t.points[0][0]),Number(t.points[0][1])]],i=[];for(let s=1;st.points.length>=2),t.room_drafts.length||delete t.room_drafts),Array.isArray(t.walls)){const e=zc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Pr(t.walls,t.rooms||[],Ql,1,e),t.walls.length||delete t.walls}}}get _cfgWriting(){return this._writesPending>0}_writeConfig(){this._writesPending++,this._writeChain=this._writeChain.catch(()=>{}).then(async()=>{if(!this._serverCfg)return;this._dropLegacySegments();const t=await this.hass.callWS({type:"houseplan/config/set",config:this._serverCfg,expected_rev:this._cfgRev});this._cfgRev=t?.rev??this._cfgRev+1});return this._writeChain.finally(()=>{this._writesPending--})}_saveConfig(){this._cfgEpoch++,this._saveConfigDebounced()}_geometrySnapshot(t=this._space){const e=this._serverCfg?.spaces.find(e=>e.id===t);if(!e)return null;const i=t=>JSON.parse(JSON.stringify(t)),s={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==e[t]&&(s[t]=e[t]);return{spaceId:t,rooms:i(e.rooms||[]),...Array.isArray(e.openings)?{openings:i(e.openings)}:{},...Array.isArray(e.walls)?{walls:i(e.walls)}:{},...Array.isArray(e.open_spans)?{open_spans:i(e.open_spans)}:{},...Array.isArray(e.room_drafts)?{room_drafts:i(e.room_drafts)}:{},...Array.isArray(e.partitions)?{partitions:i(e.partitions)}:{},...Array.isArray(e.wall_columns)?{wall_columns:i(e.wall_columns)}:{},...Array.isArray(e.decor)?{decor:i(e.decor)}:{},plan_transform:s}}_recordGeometry(t,e){if(!e)return;const i=this._geometrySnapshot(e.spaceId);i&&JSON.stringify(e)!==JSON.stringify(i)&&(this._geometryHistory.push({name:t,before:e,after:i}),this.requestUpdate())}_clearGeometryGesture(){this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._wallDialog=null,this._physicalDialog=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._openingDialog=null,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._decorDraft=null,this._decorMove=null,this._dtDrag=null,this._bdDrag=null}_cancelBoundaryAnchor(){return!("boundary"!==this._tool||!this._openWallAnchor)&&(this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this.requestUpdate(),!0)}_stagePointerCancel(t){if(clearTimeout(this._kioskHoldTimer),this._swipeStart?.id===t.pointerId&&(this._swipeStart=null),this._physicalDrag?.pid===t.pointerId||this._physicalRotate?.pid===t.pointerId)return void this._cancelPhysicalGesture();if(this._decorDraft?.pid===t.pointerId)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove?.pid===t.pointerId||this._dtDrag?.pid===t.pointerId||this._bdDrag?.pid===t.pointerId)return void this._cancelDecorGesture();this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null),e&&0===this._pointers.size&&this.requestUpdate()}_applyGeometryState(t){if(!this._canCommitSpace(t.spaceId))return!1;const e=this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(!e)return!1;const i=t=>JSON.parse(JSON.stringify(t));e.rooms=i(t.rooms),void 0!==t.openings?e.openings=i(t.openings):delete e.openings,void 0!==t.walls?e.walls=i(t.walls):delete e.walls,void 0!==t.open_spans?e.open_spans=i(t.open_spans):delete e.open_spans,void 0!==t.room_drafts?e.room_drafts=i(t.room_drafts):delete e.room_drafts,void 0!==t.partitions?e.partitions=i(t.partitions):delete e.partitions,void 0!==t.wall_columns?e.wall_columns=i(t.wall_columns):delete e.wall_columns,void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];return Object.assign(e,i(t.plan_transform||{})),this._clearGeometryGesture(),this._space!==t.spaceId&&(this._commitSpace(t.spaceId),this._saveNav(),this._restoreZoom()),this._modelCache=null,this._frame=null,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_roomAt(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&bi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&Ci(t,i)})}_pointInRoom(t,e){return e.poly?fi(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!ya(t))return!0;const e=t.length,i=.001;for(let s=0;s=500)return this._showToast(this._t("toast.physical_limit")),!1;const t=this._curSpaceCfg;return!(!this._activeDraftId&&(t?.room_drafts||[]).length>=200||this._draftSegmentCount(t)>=2e3||(t?.partitions||[]).length+this._path.length>I_)||(this._showToast(this._t("toast.physical_limit")),!1)}_markupClick(t){if(this._vacFit)return;if(!this._markup)return;const e=this._spaceModel();if(!e)return void this._clearGeometryGesture();if(this._suppressClick)return;if(this._drag||this._rlResize)return;const i=t.composedPath?.()||[];if(i.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(i.some(t=>t?.classList?.contains?.("physical-hit")))return void("boundary"===this._tool&&this._showToast(this._t("toast.boundary_blocked")));const s=this._svgPoint(t);if("select"===this._tool)return void(this._physicalSel=null);if("resize"===this._tool){if(this._rszDrag||i.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(s,t));return void(this._rszSel=t?.id||null)}if("delroom"===this._tool)return void this._deleteRoomClick(s);if("opening"===this._tool)return void this._openingClick(s);if("merge"===this._tool)return void this._mergeClick(s);if("wallthick"===this._tool)return void this._wallThickClick(s);if("boundary"===this._tool)return void this._boundaryClick(s);if("split"===this._tool)return void this._splitClick(s);if("column"===this._tool)return void this._columnClick(s);let n=this._resolvePlanDrawPoint(s,t.shiftKey).point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this._path.length<3)return;n=[...this._path[0]]}if(!this._path.length){const t=this._draftEndAt(n);return t?(this._activeDraftId=t.draft.id,this._resumeDraftBySpace[this._space]=t.draft.id,this._path=t.reverse?[...t.draft.points].reverse().map(t=>[...t]):t.draft.points.map(t=>[...t]),void(this._draftSegmentCms=t.reverse?[...t.draft.segments].reverse().map(t=>t.cm):t.draft.segments.map(t=>t.cm))):(this._activeDraftId=null,this._draftSegmentCms=[],void(this._path=[n]))}const o=this._path[this._path.length-1];if(this._samePt(n,o))return;const a=this._draftEndAt(n,this._activeDraftId||void 0);if(a)return void this._mergeDraftEndpoint(a);if(!this._canAppendRoomDraftPoint())return;const r=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(r)}_draftEndAt(t,e){const i=this._spaceModel();if(!i)return null;const s=this._viewOr(this._baseVb()),n=Math.max(.15*this._gridPitch,this._stageEl?.clientWidth?s.w/this._stageEl.clientWidth*12:0);for(const s of i.room_drafts||[]){if(s.id===e)continue;if(s.points.length<2)continue;const i=s.points[0],o=s.points[s.points.length-1];if(Math.hypot(t[0]-o[0],t[1]-o[1])<=n)return{draft:s,reverse:!1};if(Math.hypot(t[0]-i[0],t[1]-i[1])<=n)return{draft:s,reverse:!0}}return null}_mergeDraftEndpoint(t){const e=this._curSpaceCfg;if(!e||!this._path.length)return;const i=this._path.map(t=>[...t]),s=this._wallGraphSources(i),n=Array.isArray(e.room_drafts)?e.room_drafts:[],o=this._activeDraftId?n.find(t=>t.id===this._activeDraftId):null,a=n.find(e=>e.id===t.draft.id);if(!a)return;const r=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(a.segments||[]).map(t=>({...t})):[...a.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,r[0]),d=h?null:this._drawWallCm;if(!h&&null==d)return void this._showPhysicalRange(100);const u=this._draftSegmentCms.map((t,e)=>({...o?.segments?.[e]||{},cm:t})),p=[...this._path.map(t=>[...t]),...h?r.slice(1):r],_=[...u,...null==d?[]:[{cm:d}],...l],g=p.length>=4&&this._samePt(p[0],p[p.length-1]),m=p,f=_;if(m.length>500)return void this._showToast(this._t("toast.physical_limit"));const v=(o?.segments?.length||0)+(a.segments?.length||0);if(this._draftSegmentCount(e)-v+f.length>2e3)return void this._showToast(this._t("toast.physical_limit"));if(g){const t=m.slice(0,-1);if(this._contourSelfIntersects(t)||Ti(t)<=1e-6)return void this._showToast(this._t("toast.contour_cannot_close"));const e=this._overlapRoom(t);if(e)return void this._showToast(this._t("toast.room_overlap",{name:e.name||""}))}const y=this._geometrySnapshot(),b=this._activeDraftId||t.draft.id,w={...o||a,id:b,points:m.map(t=>[t[0]/T_,t[1]/T_]),segments:f};e.room_drafts=n.filter(e=>e.id!==t.draft.id&&(!this._activeDraftId||e.id!==this._activeDraftId)),e.room_drafts.push(w),this._activeDraftId=b,this._resumeDraftBySpace[this._space]=b,this._draftSegmentCms=f.map(t=>Number(t.cm)),this._path=m,this._physicalSel=null,this._recordGeometry(this._t("history.draft_merge"),y),this._saveConfig(),null!=d&&this._offerWallFaces(i,i.length-1,s)}_persistActiveDraftSegment(){if(this._path.length<2||!this._curSpaceCfg)return;const t=this._drawWallCm;if(null==t)return;this._draftSegmentCms=[...this._draftSegmentCms,t];const e=this._geometrySnapshot(),i=this._curSpaceCfg;i.room_drafts||=[],this._activeDraftId||(this._activeDraftId="draft-"+Date.now().toString(36)),this._resumeDraftBySpace[this._space]=this._activeDraftId;const s=i.room_drafts.findIndex(t=>t.id===this._activeDraftId),n={...s>=0?i.room_drafts[s]:{},id:this._activeDraftId,points:this._path.map(t=>[t[0]/T_,t[1]/T_]),segments:this._draftSegmentCms.map((t,e)=>({...s>=0?i.room_drafts[s]?.segments?.[e]:{},cm:t}))};s>=0?i.room_drafts[s]=n:i.room_drafts.push(n),this._recordGeometry(this._t("history.draft_segment"),e),this._saveConfig()}_activeWallSourceKey(t){return`active:${this._activeDraftId||"session"}:${t}`}_wallGraphSources(t){const e=this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}));for(let i=0;i+1t.key===i);if(s>=0){const[t]=this._wallFaceGraphCache.splice(s,1);return this._wallFaceGraphCache.push(t),t.value}const n=function(t,e=.001){const i=Number.isFinite(e)&&e>0?e:$d,s=Gd(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Pd(t.a,i),s=Pd(t.b,i);n.set(e,t.a),n.set(s,t.b),o.has(e)||o.set(e,new Set),o.has(s)||o.set(s,new Set),o.get(e).add(s),o.get(s).add(e)}const r=new Map;for(const[t,e]of o){const i=n.get(t);r.set(t,[...e].sort((t,e)=>{const s=n.get(t),o=n.get(e);return Math.atan2(s[1]-i[1],s[0]-i[0])-Math.atan2(o[1]-i[1],o[0]-i[0])||t.localeCompare(e)}))}const l=new Set,c=new Map,h=(t,e)=>`${t}>${e}`;for(const t of s){const e=[Pd(t.a,i),Pd(t.b,i)];for(const[t,o]of[e,[e[1],e[0]]]){if(l.has(h(t,o)))continue;const e=[],d=[];let u=t,p=o,_=!1;for(let i=0;i<=2*s.length+2;i++){const i=h(u,p);if(l.has(i)){_=u===t&&p===o;break}l.add(i),e.push(u),d.push(Rd(u,p));const s=r.get(p)||[],n=s.indexOf(u);if(n<0||!s.length)break;if(u=p,p=s[(n-1+s.length)%s.length],u===t&&p===o){_=!0;break}}if(!_||new Set(e).size<3||new Set(e).size!==e.length)continue;const g=e.map(t=>n.get(t)),m=Dd(g);if(!(m>i*i))continue;const f=Ad(Id(e,n,i)),v=new Set;for(const t of d)for(const e of a.get(t)?.sourceKeys||[])v.add(e);const y={ring:g,key:f,area:m,atomKeys:[...d],sourceKeys:[...v].sort((t,e)=>t.localeCompare(e))};c.has(f)||c.set(f,y)}}return{atoms:s,faces:[...c.values()].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key))}}(t,e);return this._wallFaceGraphCache.push({key:i,value:n}),this._wallFaceGraphCache.length>4&&this._wallFaceGraphCache.shift(),n}_offerWallFaces(t,e=this._path.length-2,i){if(this._path.length<2||this._wallFaceBatch||this._roomDialog)return;const s=this._spaceModel();if(!s)return;const n=this._activeWallSourceKey(e),o=2e-4*this._gridPitch;let a;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);a=function(t,e,i){const s=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!s.has(t.key)&&t.sourceKeys.includes(i))}(this._wallFaceGraph(e,o),this._wallFaceGraph(s,o),n)}catch{return}if(!a.length)return;for(const t of s.rooms){const e=ci(t);if(!t.id||!e)continue;const i=Ii(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Ti(s)>=Ti(n)?s:n,r=o===s?n:s,l=[...a].sort((t,e)=>Math.abs(t.area-Ti(r))-Math.abs(e.area-Ti(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:r},consumeAllActive:!0}])}const r=a.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));r.length&&this._beginWallFaceBatch(r)}_beginWallFaceBatch(t){this._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this._path.map(t=>[...t]),activeCms:[...this._draftSegmentCms],activeDraftId:this._activeDraftId},this._clearPlanSnapHover(),this._nameSel="",this._areaSel="",this._resetRoomDialogFields(),this._roomDialog=!0}_columnClick(t){const e=this._snap(t),i=this._drawWallCm;if(null==i)return void this._showPhysicalRange($l);if(!this._curSpaceCfg||this._limitReached("column"))return;const s=this._spaceModel();if(!s)return;const n={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Sl(i),angle:0},o=(s.wall_columns||[]).find(t=>Bl(t,n,.02*this._gridPitch));if(o)return clearTimeout(this._duplicateColumnTimer),this._duplicateColumnId=o.id,this._duplicateColumnTimer=window.setTimeout(()=>{this._duplicateColumnId=null},900),void this._showToast(this._t("toast.column_duplicate"));const a=this._geometrySnapshot(),r=this._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...n,center:[e[0]/T_,e[1]/T_]}),this._recordGeometry(this._t("history.column_add"),a),this._saveConfig()}_openPhysicalDialog(t,e,i){const s=this._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),length:this._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Ml(i.angle):0)})}else{const n=s.room_drafts.find(t=>t.id===e),o=Math.max(0,Math.min(n?.segments.length?n.segments.length-1:0,i||0));n?.segments[o]&&(this._physicalDialog={kind:t,id:e,segment:o,cm:fr(n.segments[o].cm,this._imperial),length:this._fmtLen(n.points[o],n.points[o+1])})}}_physicalDown(t,e,i){const s=this._spaceModel();if(!s)return;t.stopPropagation(),O_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Hl(n,Pl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);e&&Hl(n,e)&&o.push({kind:"partition",id:t.id})}o.some(t=>t.kind===e&&t.id===i)||o.unshift({kind:e,id:i});const a=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===a&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%o.length:Math.max(0,o.findIndex(t=>t.kind===e&&t.id===i));this._physicalPickCycle={signature:a,index:c,x:t.clientX,y:t.clientY,at:r},e=o[c].kind,i=o[c].id;const h="partition"===e?s.partitions.find(t=>t.id===i):s.wall_columns.find(t=>t.id===i);h&&(this._physicalSel={kind:e,id:i},this._physicalDrag={pid:t.pointerId,kind:e,id:i,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(h)),delta:[0,0]})}_clampPhysicalDelta(t,e,i){const s="partition"===t?[e.a,e.b]:[e.center],n=s.map(t=>t[0]),o=s.map(t=>t[1]);return[Math.max(-Yl*T_-Math.min(...n),Math.min(Yl*T_-Math.max(...n),i[0])),Math.max(-Yl*T_-Math.min(...o),Math.min(Yl*T_-Math.max(...o),i[1]))]}_physicalMove(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t),s="partition"===e.kind?e.base.a:e.base.center,n=this._snap([s[0]+i[0]-e.start[0],s[1]+i[1]-e.start[1]]),o=this._clampPhysicalDelta(e.kind,e.base,[n[0]-s[0],n[1]-s[1]]);this._physicalDrag={...e,delta:o,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const i=this._spaceModel();if(!this._curSpaceCfg||!i)return;const s=this._curSpaceCfg;if("partition"===e.kind){const t=(s.partitions||[]).find(t=>t.id===e.id),i=e.base;if(t){const n={...i,a:[i.a[0]+e.delta[0],i.a[1]+e.delta[1]],b:[i.b[0]+e.delta[0],i.b[1]+e.delta[1]]};t.a=[n.a[0]/T_,n.a[1]/T_],t.b=[n.b[0]/T_,n.b[1]/T_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=ad(t,[n],T_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,ud(t,i,T_))}}}else{const t=(s.wall_columns||[]).find(t=>t.id===e.id),n=e.base,o={...n,center:[n.center[0]+e.delta[0],n.center[1]+e.delta[1]]};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/T_,(n.center[1]+e.delta[1])/T_])}this._recordGeometry(this._t("history.physical_move"),e.before),this._saveConfig()}_registerPhysicalTap(t,e,i){const s=performance.now(),n=this._physicalLastTap?.kind===t&&this._physicalLastTap.id===e&&this._physicalLastTap.segment===i&&s-this._physicalLastTap.at<=360;this._physicalLastTap={kind:t,id:e,segment:i,at:s},n&&(this._physicalLastTap=null,this._openPhysicalDialog(t,e,i))}_cancelPhysicalGesture(){this._physicalDrag=null,this._physicalRotate=null,this.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this._spaceModel())return;t.preventDefault(),t.stopPropagation(),O_(t);const i=this._svgPoint(t);this._physicalSel={kind:"column",id:e.id},this._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,baseAngle:Ml(e.angle),angle:Ml(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const i=this._svgPoint(t),s=180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,n=e.baseAngle+s-e.startAngle,o=Ml(t.shiftKey?n:5*Math.round(n/5));this._physicalRotate={...e,angle:o,moved:e.moved||Math.abs(n-e.baseAngle)>=.5}}_physicalRotateUp(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this._physicalRotate=null;const i=this._spaceModel();if(!e.moved||!this._curSpaceCfg||!i)return;const s=i.wall_columns.find(t=>t.id===e.id);if(!s||"square"!==s.shape)return;const n={...s,angle:e.angle};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,n,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));const o=this._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);o&&(o.angle=e.angle,this._recordGeometry(this._t("history.physical_edit"),e.before),this._saveConfig())}_rszRooms(){const t=[],e=this._spaceModel();if(!e)return t;for(const i of e.rooms){const e=i.id?ci(i):null;e&&t.push({id:i.id,poly:e})}return t}_rszOpenings(){return this._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen}))}_rszOpts(){return{minDim:this._cmToUnits(30),eps:.05*this._gridPitch}}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszApplyPreview(t,e){const i=this._rszDrag,s=this._serverCfg?.spaces.find(t=>t.id===this._space);if(!i||!s)return;const n=JSON.parse(i.snap),o={...s,rooms:n.rooms,openings:n.openings,walls:n.walls,open_spans:n.open_spans};Array.isArray(n.open_spans)&&n.open_spans.length||delete o.open_spans;const a=this._spaceH;for(const[e,i]of Object.entries(t)){const t=o.rooms.find(t=>t.id===e);t&&(t.poly=i.map(t=>[t[0]/T_,t[1]/a]),delete t.x,delete t.y,delete t.w,delete t.h)}for(const[t,i]of Object.entries(e)){const e=(o.openings||[]).find(e=>e.id===t);e&&(e.x=i[0]/T_,e.y=i[1]/a)}const r=[],l=[];for(const t of i.changed){const e=i.rooms.find(e=>e.id===t),s=o.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const n=s.poly.map(t=>[t[0]*T_,t[1]*a]);if(e.poly.length===n.length)for(let t=0;tt.id===e);if(!s||!s.poly||s.poly.length<3)return null;if(i<0||i>=s.poly.length)return null;const n=[...s.poly[i]],o=[...s.poly[(i+1)%s.poly.length]];return{roomId:e,edge:i,a:n,b:o,n:_a(s.poly,i)}}(s,e,i);n&&(this._rszDrag={kind:"edge",pid:t.pointerId,roomId:e,plan:n,rooms:s,openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszCornerDown(t,e,i,s){"resize"!==this._tool||this._rszDrag||(t.stopPropagation(),t.preventDefault(),O_(t),this._rszDrag={kind:"scale",pid:t.pointerId,roomId:e,fixed:s,span0:Math.hypot(i[0]-s[0],i[1]-s[1])||1,rooms:this._rszRooms(),openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszMove(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t);if("edge"===e.kind){const t=e.plan,s=(i[0]-t.a[0])*t.n[0]+(i[1]-t.a[1])*t.n[1],n=this._snap([t.a[0]+t.n[0]*s,t.a[1]+t.n[1]*s]);let o=(n[0]-t.a[0])*t.n[0]+(n[1]-t.a[1])*t.n[1];if(o=function(t,e,i,s,n,o){if(!Number.isFinite(s)||Math.abs(s)<1e-9)return 0;const a=Math.sign(s);let r=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&r>1e-9;s++,r-=l){const s=a*r;if(Sa(t,e,i,s,o))return s}return 0}(e.rooms,e.openings,t,o,this._gridPitch,this._rszOpts()),o===e.d&&e.moved)return;e.d=o,e.moved=!0;const a=ka(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(a.polys),this._rszApplyPreview(a.polys,a.openings),this._rszLive=this._rszEdgeLabels(a,t)}else{const t=e.fixed,s=this._snap(i);let n=Math.hypot(s[0]-t[0],s[1]-t[1])/(e.span0||1);if(n=Math.max(.05,Math.min(20,n)),n=function(t,e,i,s,n,o){if(!Number.isFinite(n)||n<=0)return 1;if(Ca(t,e,i,s,n,o))return n;let a=1,r=n;for(let n=0;n<28;n++){const n=(a+r)/2;Ca(t,e,i,s,n,o)?a=n:r=n}return a}(e.rooms,e.openings,e.roomId,t,n,this._rszOpts()),n===e.k&&e.moved)return;e.k=n,e.moved=!0;const o=e.rooms.find(t=>t.id===e.roomId),a=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),r=Ma(o,e.openings,a,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:r.poly},r.openings),this._rszLive=this._rszScaleLabels(r.poly)}this.requestUpdate()}_rszUp(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._rszPreview;this._rszDrag=null,this._rszLive=null,this._rszPreview=null;if(!(e.moved&&("edge"===e.kind?Math.abs(e.d)>1e-9:Math.abs(e.k-1)>1e-9))||!i)return this._cfgEpoch++,void this.requestUpdate();const s=JSON.parse(e.snap),n=this._curSpaceCfg;if(n){n.rooms=i.sp.rooms,n.openings=i.sp.openings,Array.isArray(i.sp.walls)&&(i.sp.walls.length?n.walls=i.sp.walls:delete n.walls),Array.isArray(i.sp.open_spans)&&i.sp.open_spans.length?n.open_spans=i.sp.open_spans:delete n.open_spans;for(const t of e.changed){const e=n.rooms.find(e=>e.id===t);e?.poly&&(e.poly=va(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Pr(n.walls,n.rooms||[],Ql,1,this._cfgOpenCuts()),n.walls.length||delete n.walls)}this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._recordGeometry(this._t("history.resize_room"),s),this._saveConfig(),this.requestUpdate()}_rszCancelDrag(){this._rszDrag&&(this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._cfgEpoch++,this.requestUpdate())}_rszPointerCancel(t){const e=this._rszDrag;e&&e.pid===t.pointerId&&(t.stopPropagation(),this._rszCancelDrag())}_rszEdgeLabels(t,e){const i=this._rszDrag,s=[],n=t.polys[e.roomId]||i.rooms.find(t=>t.id===e.roomId).poly,o=n.length,a=e.edge,r=(a+1)%o;for(const[t,e]of[[n[(a-1+o)%o],n[a]],[n[a],n[r]],[n[r],n[(r+1)%o]]])s.push({x:(t[0]+e[0])/2,y:(t[1]+e[1])/2,text:this._fmtLen(t,e)});const l="mi"===this.hass?.config?.unit_system?.length,c=Object.keys(t.polys).length?Object.keys(t.polys):[e.roomId],h=this._spaceWalls,d=this._openPairs().flatMap(t=>t.segs),u=this._physicalBodiesR();for(const e of c){const n=t.polys[e]||i.rooms.find(t=>t.id===e).poly,o=h.length&&ol(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||n,a=xi(o),r=u.length?Ol(zl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(o,this._gridPitch,this._cellCm);s.push({x:a[0],y:a[1],text:Ta(r,l),area:!0})}return s}_rszScaleLabels(t){const e="mi"===this.hass?.config?.unit_system?.length,i=t.map(t=>t[0]),s=t.map(t=>t[1]),n=Math.max(...i)-Math.min(...i),o=Math.max(...s)-Math.min(...s),a=this._spaceWalls,r=a.length&&this._rszSel&&ol([{id:this._rszSel,poly:t}],this._rszSel,a,[],this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||t,l=xi(r),c=this._physicalBodiesR(),h=c.length?Ol(zl(r,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(r,this._gridPitch,this._cellCm);return[{x:Math.min(...i),y:Math.min(...s),text:`${this._fmtLen([0,0],[n,0])} × ${this._fmtLen([0,0],[o,0])}`},{x:l[0],y:l[1],text:Ta(h,e),area:!0}]}_renderResizeLayer(t){const e=Math.max(.013*t.w,5),i=e/2,s=t=>t.toFixed(1),n=`M ${s(-.7*i)} 0 H ${s(.7*i)} M 0 ${s(-.22*i)} V ${s(-i)} M ${s(-.32*i)} ${s(-.6*i)} L 0 ${s(-i)} L ${s(.32*i)} ${s(-.6*i)} M 0 ${s(.22*i)} V ${s(i)} M ${s(-.32*i)} ${s(.6*i)} L 0 ${s(i)} L ${s(.32*i)} ${s(.6*i)}`,o=[],a=this._rszRooms();for(const t of a)for(let i=0;i`}_stageAspect(){const t=this._stageEl,e=this._baseVb();return t&&t.clientHeight?t.clientWidth/t.clientHeight:e[2]/e[3]}_viewOr(t){return this._view&&this._view.w?this._view:zi(t,this._stageAspect())}_roomLabelReferenceViewWidth(t){if(!this._markup)return t.w;const e=this._stageEl,i=this.renderRoot.querySelector(".editorchrome");if(!e||e.clientWidth<=0||e.clientHeight<=0)return t.w;const s=e.clientHeight+(i?.getBoundingClientRect().height||0);return s<=0?t.w:this._viewForModeTarget(this._zoom,void 0,void 0,e.clientWidth,s).w}_screenToVb(t,e){const i=this._stageEl,s=this._viewOr(this._baseVb()),n=i?.clientWidth||1,o=i?.clientHeight||1;return[s.x+t/n*s.w,s.y+e/o*s.h]}_clampView(t,e){const i=(t,e,i,s)=>{const n=1*Math.max(e,s),o=i-n,a=i+s-e+n;return Math.max(Math.min(o,a),Math.min(Math.max(o,a),t))};return{w:t.w,h:t.h,x:i(t.x,t.w,e.x,e.w),y:i(t.y,t.h,e.y,e.h)}}_applyView(t,e,i){const s=this._baseVb(),n=zi(s,this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,t)),a=n.w/o,r=n.h/o,l=this._viewOr(s),c=e??l.x+l.w/2,h=i??l.y+l.h/2,d=this._clampView({x:c-a/2,y:h-r/2,w:a,h:r},n);return!(this._view&&Math.abs(this._zoom-o)<1e-9&&Math.abs(this._view.x-d.x)<1e-6&&Math.abs(this._view.y-d.y)<1e-6&&Math.abs(this._view.w-d.w)<1e-6&&Math.abs(this._view.h-d.h)<1e-6)&&("opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=o,this._view=d,!0)}_bootWatch(){clearTimeout(this._bootTimer),this._bootStart=Date.now(),this._bootLastH=-1,this._bootLastChange=this._bootStart;const t=()=>{if(!this._booting)return;const e=Date.now(),i=this._stageEl?this._stageEl.clientHeight:0;i!==this._bootLastH&&(this._bootLastH=i,this._bootLastChange=e);const s=e-this._bootStart;s>=1200||s>=700&&i>0&&e-this._bootLastChange>=250?this._bootSettled():this._bootTimer=window.setTimeout(t,100)};this._bootTimer=window.setTimeout(t,100)}_bootSettled(){this._booting&&!this._bootSettling&&(this._bootSettling=!0,this._refitView(),this._bootSettleRaf=requestAnimationFrame(()=>{this._bootSettleRaf=0,this._finishBootSettled()}))}_finishBootSettled(){if(!this._booting)return;this._refitView(),this._booting=!1,this._bootSettling=!1;const t=this._stageEl?.clientHeight??0;!this._config?.kiosk&&t>0&&this._warmPatch({hdrH:this._hdrH,stageH:t,vp:this._warmViewportState()},!0),this._bootFading=!0,this._bootTimer=window.setTimeout(()=>{this._bootFading=!1},220),this._bootSoft=!0,clearTimeout(this._bootSoftTimer),this._bootSoftTimer=window.setTimeout(()=>{this._bootSoft=!1},m_)}_bootSoftCancel(){this._bootSoft&&(clearTimeout(this._bootSoftTimer),this._bootSoft=!1)}_beginResumeSettle(){this._booting||this._resumeSettling||(this._modeTransitionPreparing?this._modeTransitionForceAtomic=!0:this._cancelModeTransition(!0),this._viewportInvalidAt=0,this._beginContinuityCandidate("warm-resume",!1),this._loading?this.requestUpdate():this._loadFromServer())}_refitView(){if(this._modeTransitionBusy)return;const t=this._stageEl;if(!t||"visible"!==document.visibilityState||t.clientWidth<=0||t.clientHeight<=0)return void(this._viewportInvalidAt||(this._viewportInvalidAt=Date.now()));const e=[t.clientWidth,t.clientHeight],i=this._lastValidStageSize,s=!!i&&Math.abs(i[0]-e[0])<=.5&&Math.abs(i[1]-e[1])<=.5,n=this._viewportInvalidAt?Date.now()-this._viewportInvalidAt:0;if(this._viewportInvalidAt=0,!i)return this._lastValidStageSize=e,void(this._view||this._applyView(this._zoom));s?this._pendingRefitSize=null:(this._pendingRefitSize=e,this._refitRaf||(this._refitRaf=requestAnimationFrame(()=>{this._refitRaf=0;const t=this._pendingRefitSize;this._pendingRefitSize=null;const e=this._stageEl;if(!t||!e||e.clientWidth<=0||e.clientHeight<=0)return;if(Math.abs(e.clientWidth-t[0])>.5||Math.abs(e.clientHeight-t[1])>.5)return void this._refitView();const i=this._lastValidStageSize;if(i&&Math.abs(i[0]-t[0])<=.5&&Math.abs(i[1]-t[1])<=.5)return;this._lastValidStageSize=t;const s=this._view;n>=Jc?this._beginContinuityCandidate("stage-size-restored",!0,"stage-size"):this._continuity.hasCompleteFrame&&this._beginContinuityCandidate("stage-resize",!0,"stage-size"),this._applyView(this._zoom,s?s.x+s.w/2:void 0,s?s.y+s.h/2:void 0)})))}_zoomAt(t,e,i){const s=this._stageEl;if(!s)return;const n=zi(this._baseVb(),this._stageAspect()),o=Math.min(N_.ZOOM_MAX,Math.max(N_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const a=s.clientWidth,r=s.clientHeight,l=this._screenToVb(t,e),c=n.w/o,h=n.h/o;this._zoom=o,this._view=this._clampView({x:l[0]-t/a*c,y:l[1]-e/r*h,w:c,h:h},n)}_onWheel(t){const e=this._stageEl;if(!e)return;t.preventDefault();const i=e.getBoundingClientRect(),s=t.deltaY<0?1.15:1/1.15;this._zoomAt(t.clientX-i.left,t.clientY-i.top,this._zoom*s),this._saveZoom()}_stepZoom(t){const e=this._stageEl;e&&(this._zoomAt(e.clientWidth/2,e.clientHeight/2,this._zoom*(t>0?1.4:1/1.4)),this._saveZoom())}_resetZoom(){const t=this._baseVb();"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1)),this._zoom=1,this._view=zi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(M_,JSON.stringify(this._zoomBySpace))}catch{}}}_restoreZoom(){const t=this._zoomBySpace[this._space]||1;this._zoom=t;const e=this._stageEl;if(e&&e.clientHeight){const e=this._baseVb();return this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),void this.requestUpdate()}this._view=null,requestAnimationFrame(()=>{if(!this._stageEl)return;const e=this._baseVb();this._applyView(t,e[0]+e[2]/2,e[1]+e[3]/2),this.requestUpdate()})}_stagePointerDown(t){if(this._vacFit)return;if(this._kiosk&&(this._cyclePausedUntil=Date.now()+6e4,0===this._pointers.size?(this._swipeStart={x:t.clientX,y:t.clientY,id:t.pointerId},t.target.closest?.(".dev, .roomlabel, .oplock")||(clearTimeout(this._kioskHoldTimer),this._kioskHoldTimer=window.setTimeout(()=>{this._kioskDialog=!0,this._swipeStart=null},3e3))):(this._swipeStart=null,clearTimeout(this._kioskHoldTimer))),this._drag)return;if(this._markup&&t.target.closest?.(".roomlabel, .rlhandle, .rszhandle, .dev, .oplock, .op-hit, button"))return;if("devices"===this._mode&&t.target.closest(".dev"))return;if("decor"===this._mode&&this._decorPointerDown(t))return;this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});const e=this._viewOr(this._baseVb());if(1===this._pointers.size)this._panStart={sx:t.clientX,sy:t.clientY,vx:e.x,vy:e.y},this._panLock=null,this._suppressClick=!1;else if(2===this._pointers.size){this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y);this._pinchStart={dist:e,zoom:this._zoom},this._panStart=null,this._panLock=null}}get _swipeZone(){return!this._hasFixedFloor&&this._kiosk&&this._zoom<=1.001&&this._model.length>1}_stagePointerMove(t){if(this._physicalRotate?.pid!==t.pointerId)if(this._physicalDrag?.pid!==t.pointerId)if(this._dtDrag?.pid!==t.pointerId)if(this._bdDrag?.pid!==t.pointerId){if(this._decorDraft?.pid===t.pointerId){const e=this._decorDraft;let i=this._decorSnap(this._svgPoint(t),t.pointerType);if(t.shiftKey&&("rect"===e.kind||"ellipse"===e.kind)){const t=i[0]-e.a[0],s=i[1]-e.a[1],n=Math.max(Math.abs(t),Math.abs(s));i=this._snap([e.a[0]+(t<0?-n:n),e.a[1]+(s<0?-n:n)])}return void(this._decorDraft={...e,b:i})}if(this._decorMove?.pid!==t.pointerId)if(this._pointers.has(t.pointerId)){if(this._pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),this._markup&&1===this._pointers.size&&this._markupMove(t),this._pinchStart&&this._pointers.size>=2){"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const t=[...this._pointers.values()],e=Math.hypot(t[0].x-t[1].x,t[0].y-t[1].y)/(this._pinchStart.dist||1),i=this._stageEl.getBoundingClientRect(),s=(t[0].x+t[1].x)/2-i.left,n=(t[0].y+t[1].y)/2-i.top;this._zoomAt(s,n,this._pinchStart.zoom*e),this._suppressClick=!0,this._saveZoom()}else if(this._panStart){const e=t.clientX-this._panStart.sx,i=t.clientY-this._panStart.sy;Math.abs(e)+Math.abs(i)>4&&(this._suppressClick=!0,clearTimeout(this._holdTimer),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover()),null===this._panLock&&Math.abs(e)+Math.abs(i)>8&&(this._panLock=this._swipeZone&&Math.abs(e)>1.5*Math.abs(i)?"swipe":"pan");const s=this._stageEl;if("pan"===this._panLock&&s){const t=this._baseVb(),n=this._viewOr(t),o=zi(t,this._stageAspect());this._view=this._clampView({x:this._panStart.vx-e/(s.clientWidth||1)*n.w,y:this._panStart.vy-i/(s.clientHeight||1)*n.h,w:n.w,h:n.h},o)}}}else this._markupMove(t);else this._decorMoveUpdate(t)}else this._bdMove(t);else this._dtMove(t);else this._physicalMove(t);else this._physicalRotateMove(t)}_stagePointerLeave(t){this._markup&&("opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover())}_stagePointerUp(t){if(this._kiosk){clearTimeout(this._kioskHoldTimer);const e=this._swipeStart;if(this._swipeStart=null,e&&e.id===t.pointerId){const i=t.clientX-e.x,s=t.clientY-e.y;if(Math.abs(i)+Math.abs(s)<8){const t=Date.now();t-this._lastTap<350&&this._resetZoom(),this._lastTap=t}const n="pan"===this._panLock?null:function(t,e,i,s,n,o=60){if(i>1.001||s.length<2)return null;if(Math.abs(t)t.id),this._space);n&&this._slideTo(n,i<0?"left":"right")&&(this._saveNav(),this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._showKioskDots())}}if(this._physicalDrag?.pid===t.pointerId)return void this._physicalUp(t);if(this._physicalRotate?.pid===t.pointerId)return void this._physicalRotateUp(t);if(this._dtDrag?.pid===t.pointerId)return void this._dtUp();if(this._bdDrag?.pid===t.pointerId)return void this._bdUp();if(this._decorDraft?.pid===t.pointerId)return void this._decorCommitDraft();if(this._decorMove?.pid===t.pointerId)return this._decorMove.moved&&(this._recordGeometry(this._t("history.decor_move"),this._decorMove.before),this._saveConfig()),void(this._decorMove=null);const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null,setTimeout(()=>this._suppressClick=!1,0)),e&&0===this._pointers.size&&this.requestUpdate()}_clickRoom(t){!this._suppressClick&&t.area&&z_("/config/areas/area/"+t.area)}_pointerDown(t,e){if("plan"===this._mode)return;if("view"===this._mode){this._holdFired=!1,clearTimeout(this._holdTimer);const i=t.pointerId,s=t.currentTarget;return void(this._holdTimer=window.setTimeout(()=>{this._holdFired=!0,this._interruptViewGesture(i,s),this._infoCard=e},600))}if("ha_disabled"===e.bindingStatus?.kind)return;t.preventDefault();const i=this._pos(e);this._drag={id:e.id,sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},H_(t),this._tip=null}_pointerMove(t,e){if(!this._drag||this._drag.id!==e.id)return;const i=this.renderRoot.querySelector(".stage");if(!i)return;const s=this._baseVb(),n=i.getBoundingClientRect(),o=this._viewOr(s),a=(t.clientX-this._drag.sx)/n.width*o.w,r=(t.clientY-this._drag.sy)/n.height*o.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0,clearTimeout(this._holdTimer));const l=ic(this._drag.ox+a),c=ic(this._drag.oy+r);this._savePos(e,l,c)}_pointerUp(t,e){if(clearTimeout(this._holdTimer),!this._drag||this._drag.id!==e.id)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&(this._selId=e.id,window.setTimeout(()=>this._drag=null,0))}_showToast(t){for(const t of this.renderRoot.querySelectorAll("hp-dialog"))t.closeTransientOverlays("toast");this._toast=t,clearTimeout(this._toastTimer),this._toastTimer=window.setTimeout(()=>{this._toast=""},3500)}_syncPointerHoverTargets(){const t=this._pointerModality.hoverEnabled;for(const e of this.renderRoot.querySelectorAll("hp-dialog, hp-help, hp-color-opacity"))e.toggleAttribute("data-pointer-hover",t)}_syncPointerHoverSubtree(t){if(t.nodeType!==Node.ELEMENT_NODE)return;const e=t,i=this._pointerModality.hoverEnabled;e.matches("hp-dialog, hp-help, hp-color-opacity")&&e.toggleAttribute("data-pointer-hover",i);for(const t of e.querySelectorAll("hp-dialog, hp-help, hp-color-opacity"))t.toggleAttribute("data-pointer-hover",i)}_clearTransientHover(t=!1){t&&this._pointerModality.suspend(),this._tip&&(this._tip=null),this._hoverRoom&&(this._hoverRoom=null)}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse";const e=this._pointerModality.modality,i=this._pointerModality.note(t);"touch"!==i&&"pen"!==i||e===i&&!this._tip&&!this._hoverRoom||this._clearTransientHover()}_guardTouchGesture(t){if(this._editorSecondary.handleOutsideDismiss(t))return;if("click"===t.type){if(!this._suppressClick&&!this._touchSequenceMultitouch&&Date.now()>this._touchClickBlockUntil)return;return t.preventDefault(),void t.stopImmediatePropagation()}const e=t;if(this._notePointer(e),"touch"===e.pointerType)if("pointerdown"!==t.type){if("pointermove"===t.type){const t=this._touchContacts.get(e.pointerId);if(!t)return;const i={...t,x:e.clientX,y:e.clientY};if(this._touchContacts.set(e.pointerId,i),this._touchSequenceMultitouch&&"view"===this._mode&&!this._vacFit&&this._pinchStart&&[...this._touchContacts.values()].every(t=>t.inStage)){this._pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=[...this._touchContacts.values()];if(t.length>=2&&this._stageEl){const[e,i]=t,s=Math.hypot(e.x-i.x,e.y-i.y)/(this._pinchStart.dist||1),n=this._stageEl.getBoundingClientRect();this._zoomAt((e.x+i.x)/2-n.left,(e.y+i.y)/2-n.top,this._pinchStart.zoom*s),this._saveZoom()}}return}if("pointerup"===t.type||"pointercancel"===t.type||"lostpointercapture"===t.type){if(this._clearTransientHover(),this._touchContacts.delete(e.pointerId),this._touchSequenceMultitouch){if(this._touchClickBlockUntil=Date.now()+500,this._pointers.delete(e.pointerId),!this._vacFit&&this._pointers.size>=2){const[t,e]=[...this._pointers.values()];this._pinchStart={dist:Math.hypot(t.x-e.x,t.y-e.y),zoom:this._zoom}}else this._pinchStart=null;0===this._pointers.size&&(this._panStart=null,this._panLock=null)}0===this._touchContacts.size&&(this._touchSequenceMultitouch=!1)}}else if(this._touchContacts.set(e.pointerId,{x:e.clientX,y:e.clientY,inStage:!!e.target?.closest?.(".stage")}),this._touchContacts.size>=2){this._clearTransientHover(),this._touchSequenceMultitouch=!0,this._touchClickBlockUntil=Number.POSITIVE_INFINITY,clearTimeout(this._holdTimer),clearTimeout(this._kioskHoldTimer),this._swipeStart=null;const t=[...this._touchContacts.values()];if("view"===this._mode&&!this._vacFit&&t.every(t=>t.inStage)){this._pointers=new Map([...this._touchContacts].map(([t,e])=>[t,{x:e.x,y:e.y}]));const[e,i]=t;this._pinchStart={dist:Math.hypot(e.x-i.x,e.y-i.y),zoom:this._zoom},this._panStart=null,this._panLock=null}else this._vacFit&&(this._pointers.clear(),this._pinchStart=null,this._panStart=null,this._panLock=null)}}_showTip(t,e,i,s,n,o){this._notePointer(t),this._pointerModality.hoverEnabled&&(this._drag||(this._tip={x:t.clientX,y:t.clientY,title:e,meta:i,lqi:s,temp:n,hum:o}))}get _gridPitch(){return Zl}get _cellCm(){const t=Number(this._curSpaceCfg?.cell_cm);return Number.isFinite(t)&&t>0?t:5}_fmtLen(t,e){const i=function(t,e,i,s){return Math.hypot(e[0]-t[0],e[1]-t[1])/i*s}(t,e,this._gridPitch,this._cellCm);return ri(i,"mi"===this.hass?.config?.unit_system?.length)}get _curSpaceCfg(){const t=this._rszPreview;return t&&t.space===this._space?t.sp:this._serverCfg?.spaces.find(t=>t.id===this._space)}get _renderCfg(){const t=this._rszPreview;return t&&this._serverCfg?{...this._serverCfg,spaces:this._serverCfg.spaces.map(e=>e.id===t.space?t.sp:e)}:this._serverCfg}get _spaceH(){return this._curSpaceCfg,P_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*P_,t[1]*e,t[2]*P_,t[3]*e])}_savedNav(){if(this._hasFixedFloor)return null;try{return JSON.parse(localStorage.getItem(C_)||"null")}catch{return null}}_saveNav(){if(!this._hasFixedFloor)try{localStorage.setItem(C_,JSON.stringify({space:this._space}))}catch{}}_leaveCardRoute(){if(this._routeDepartureHandled)return;this._routeDepartureHandled=!0,"view"!==this._mode&&this._setMode("view",!1),this._pendingNavMode=null,this._geometryHistory.clear(),this._activeDraftId=null,this._resumeDraftBySpace={},this._draftSegmentCms=[],this._closingWallCm=null,this._drawWallField=null,this._showHidden=!1,this._tapConfirm=null,this._vacCalConfirm=null,this._decorEraseConfirm=null,this._openingInfo=null,this._closeInfoCard(),this._rulesDialog=null,this._alignDialog=null,this._backupImportDialog=null,this._backupExportDialog=null,this._settingsDialog=null,this._markerDialog=null,this._openingDialog=null,this._physicalDialog=null,this._wallDialog=null,this._backdropDialog=null,this._decorShapeDialog=null,this._decorTextDialog=null,this._mergeDialog=null,this._roomDialog=!1,this._spaceDialog=null,this._importDialog=null;const t=this._warmSlot;t?.owner===this._warmGen&&(t.vp=this._warmViewportState(),t.dlg=null,t.frameFingerprint="",clearTimeout(t.evict),t.evict=0),this._saveNav()}_setMode(t,e=!0){this._pendingNavMode=null;const i=this._spaceModel();if(!i)return this._cancelModeTransition(!1),void(this._mode="view");if(this._kiosk&&"view"!==t)return;if(this._mode===t){if(!e&&"view"===t&&this._modeTransitionBusy){const e=this._currentModeVisual(t),i=this._modeTransitionTargetZoom,s=this._modeTransitionTargetCenterX,n=this._modeTransitionTargetCenterY;this._cancelModeTransition(!1),this._commitViewModeAtomic(e,i,s,n)}return}if(this._bootSoftCancel(),("plan"===t||"decor"===t)&&!this._norm)return void this._showToast(this._t("toast.markup_needs_server"));if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._clearTransientHover(!0),this._cancelDevicePressFeedback();const s=this._mode,n=this._effectiveProjection(),o=this._currentModeVisual(s),a=this._modeTransitionBusy,r=o&&"view"!==s&&"view"!==t?{...o,toolbarContentOpacity:this._reducedMotion?1:.35}:o;this._cancelModeTransition(!1),this._editorSecondary.closeForNavigation(),(this._decorMove||this._dtDrag||this._bdDrag)&&this._cancelDecorGesture();const l=!i.bg&&"view"===t!=("view"===s),c=a&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(a?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:a?this._modeTransitionTargetCenterX:r?.viewport.centerX,u=c?c.centerY:a?this._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===s&&"view"!==t&&!a){const e=this._view;if(this._viewModeSnap={space:this._space,zoom:this._zoom,cx:e?this._logicalViewCenter(n)?.x:void 0,cy:e?this._logicalViewCenter(n)?.y:void 0},"iso"===n){const e=this._logicalViewCenter("iso");d=e?.x,u=e?.y,this._view=null,this._mode=t,this._applyView(this._zoom,e?.x,e?.y)}l&&(h=1,d=void 0,u=void 0)}if("plan"===s&&this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._mode=t,this._editorChromeMode="view"===t?s:t,"view"===t){"view"===s||a||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this._viewModeSnap;if(t&&t.space===this._space){h=t.zoom;const e=this._labsIso&&"iso"===this._viewPreference[this._space]?"iso":"flat",i=null!=t.cx&&null!=t.cy&&"iso"===e?qp([t.cx,t.cy],0):null;d=i?.[0]??t.cx,u=i?.[1]??t.cy}else t&&(h=this._zoomBySpace[this._space]||1,d=void 0,u=void 0)}else this._modeTransitionEditorCamera={zoom:h,centerX:d,centerY:u};this._modeTransitionTargetZoom=h,this._modeTransitionTargetCenterX=d,this._modeTransitionTargetCenterY=u,("iso"===n||"view"===t&&this._labsIso&&"iso"===this._viewPreference[this._space])&&(this._modeTransitionForceAtomic=!0);const p=++this._modeTransitionRequest;e?r?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=r,this._prepareModeTransition(p,r,t,h,d,u)):(this._modeTransitionPreparing=!1,this._modeTransitionVisual=null,this._zoom=h,this._view=null,requestAnimationFrame(()=>{this.isConnected&&p===this._modeTransitionRequest&&this._mode===t&&(this._applyView(h,d,u),"view"===t&&(this._viewModeSnap=null,this._modeTransitionEditorCamera=null),this.requestUpdate())})):"view"===t&&this._commitViewModeAtomic(r,h,d,u),this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._tool="draw",this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._selId=null,this._physicalSel=null,this._physicalDialog=null,this._physicalDrag=null,this._rszSel=null,this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._tip=null,this._hoverRoom=null,this._decorDraft=null,this._decorSel=null,this._decorMove=null,this._backdropDialog=null,this._decorTool="select",this._bdDrag=null,this._dtDrag=null,this._dtBox=null,"plan"===t&&(this._primeDrawWallField(),this._resumeLastDraft()),this._saveNav()}_primeDrawWallField(){null===this._drawWallField&&(this._drawWallField=fr(_r,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?fr(_r,this._imperial):this._drawWallField}get _drawWallCm(){const t=f_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?$l:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?$l:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:fr(t,this._imperial),unit:this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_draftSegmentCount(t=this._curSpaceCfg){return(t?.room_drafts||[]).reduce((t,e)=>t+(Array.isArray(e.segments)?e.segments.length:0),0)}_finishWallChain(){if("draw"!==this._tool||this._wallFaceBatch||this._roomDialog)return!0;const t=this._curSpaceCfg;if(!t||this._path.length<2)return this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0;const e=Sd(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>F_)return this._showToast(this._t("toast.physical_limit")),!1;const s=this._geometrySnapshot();t.partitions||=[];const n=Date.now().toString(36);for(let s=0;st.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),this._recordGeometry(this._t("history.wall_chain_finish"),s),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),!0}_activateMarkupTool(t){t!==this._tool&&(this._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this._tool||this._finishWallChain())&&(this._cancelPath(),this._tool=t,"draw"===t&&this._resumeLastDraft(),"resize"===t&&(this._rszSel=null),"boundary"!==t&&"wallthick"!==t||(this._wallDialog=null)))}_limitReached(t){const e=this._curSpaceCfg;if(!e)return!0;const i="draft"===t?(e.room_drafts||[]).length>=200:"partition"===t?(e.partitions||[]).length>=F_:(e.wall_columns||[]).length>=500;return i&&this._showToast(this._t("toast.physical_limit")),i}_svgPoint(t){const e=this.renderRoot.querySelector(".stage").getBoundingClientRect();return this._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this._gridPitch;return[ic(ai(t[0],e)),ic(ai(t[1],e))]}_snapDrawPoint(t,e=!1){const i=this._path[this._path.length-1],s=e&&i?function(t,e,i,s=1/0){if(!(i>0&&t?.every(Number.isFinite)&&e?.every(Number.isFinite)))return[e[0],e[1]];const n=e[0]-t[0],o=e[1]-t[1];if(Math.abs(n)+Math.abs(o)<=1e-12)return[t[0],t[1]];const a=Math.PI/4;let r=Math.atan2(o,n);r<0&&(r+=2*Math.PI);const l=Math.floor(r/a+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((n*c+o*h)/(i*d)));if(Number.isFinite(s)&&s>=0){const e=(t,e)=>{if(!e)return 1/0;const n=e>0?s-t:t+s;return Math.max(0,Math.floor((n+1e-9*i)/i))};u=Math.min(u,e(t[0],c),e(t[1],h))}return[t[0]+c*u*i,t[1]+h*u*i]}(i,t,this._gridPitch,Xl):t;return this._snap(s)}_planSnapOpeningCuts(t,e){if(!this._openingsR.length)return[];const i=this._openingWallIndexFor(t,e).value,s=[];for(const e of this._roomWallOpeningInputs(this._openingsR,t)){const t=yl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,a=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-a,e.x+o,e.y+a])}return s}_planSnapGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planSnapGeometryCache?.key===e)return this._planSnapGeometryCache;const i=this._openCuts(),s=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:[...i,...this._planSnapOpeningCuts(t,i)],partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this._gridPitch});return this._planSnapGeometryCache={key:e,value:s},this._planSnapGeometryCache}_planStructuralGeometrySnapshot(){const t=this._spaceModel();if(!t)return{key:`${this._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this._space,this._cfgEpoch,this._activeDraftId||"",t.rooms.length,t.room_drafts.length,t.partitions.length].join("|");if(this._planStructuralGeometryCache?.key===e)return this._planStructuralGeometryCache;const i=bd({space:t,activeDraftId:this._activeDraftId,roomCuts:this._openCuts(),epsilon:2e-4*this._gridPitch});return this._planStructuralGeometryCache={key:e,value:i},this._planStructuralGeometryCache}_planSnapContextKey(t){const e=this._path[0],i=this._path[this._path.length-1];return[t,this._tool,this._path.length,e?`${e[0]},${e[1]}`:"",i?`${i[0]},${i[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const i=this._planSnapGeometrySnapshot(),s=this._path[this._path.length-1],n="draw"===this._tool&&this._path.length>=3?[{point:this._path[0],key:"closure:first-point"}]:[],o=function(t,e,i){if(!(pd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const a=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>pd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(wd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!kd(a,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:a})}if(o)return o;let r=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],a=Hs([e[0],e[1]],t);if(a>i.tolerance)continue;const l=xd(o,e,i.gridStep);!wd(l,n,s)&&kd(a,o.key,r)&&(r={kind:"line",point:l,key:o.key,distance:a,segment:o})}return r}(i.value,t,{tolerance:this._cssPxToRender(12),gridStep:this._gridPitch,excludePoints:s?[s]:[],extraEndpoints:n,epsilon:2e-4*this._gridPitch});return{point:o?[...o.point]:this._snapDrawPoint(t,e),candidate:o,contextKey:this._planSnapContextKey(i.key)}}get _activePlanSnapCandidate(){if(!this._markup||"draw"!==this._tool)return null;const t=this._planSnapHover;if(!t)return null;const e=this._planSnapGeometrySnapshot();return t.contextKey===this._planSnapContextKey(e.key)?t.candidate:null}_clearPlanSnapHover(t=!0){this._planSnapHover=null,this._syncPlanSnapActiveMarker(null),t&&(this._cursorPt=null)}_samePt(t,e){return mi(t,e)}_dropLegacySegments(){for(const t of this._serverCfg?.markers||[])"ripple"===t.display&&(t.display="icon_ripple");for(const t of this._serverCfg?.spaces||[]){delete t.segments;const e=new Set,i=t=>"string"==typeof t&&t.length>=1&&t.length<=64&&!e.has(t),s=t=>(e.add(t),!0),n=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=Yl);if(Array.isArray(t.partitions)&&(t.partitions=t.partitions.filter(t=>t&&i(t.id)&&n(t.a)&&n(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&s(t.id)).map(t=>({...t,cm:Math.max(1,Math.min(100,Number(t.cm)||15))})),t.partitions.length||delete t.partitions),Array.isArray(t.wall_columns)&&(t.wall_columns=t.wall_columns.filter(t=>t&&i(t.id)&&n(t.center)&&s(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Sl(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Ml(t.angle)}})),t.wall_columns.length||delete t.wall_columns),Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t&&i(t.id)&&Array.isArray(t.points)&&t.points.length>=2&&t.points.every(n)&&s(t.id)).map(t=>{const e=[[Number(t.points[0][0]),Number(t.points[0][1])]],i=[];for(let s=1;st.points.length>=2),t.room_drafts.length||delete t.room_drafts),Array.isArray(t.walls)){const e=zc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Pr(t.walls,t.rooms||[],Ql,1,e),t.walls.length||delete t.walls}}}get _cfgWriting(){return this._writesPending>0}_writeConfig(){this._writesPending++,this._writeChain=this._writeChain.catch(()=>{}).then(async()=>{if(!this._serverCfg)return;this._dropLegacySegments();const t=await this.hass.callWS({type:"houseplan/config/set",config:this._serverCfg,expected_rev:this._cfgRev});this._cfgRev=t?.rev??this._cfgRev+1});return this._writeChain.finally(()=>{this._writesPending--})}_saveConfig(){this._cfgEpoch++,this._saveConfigDebounced()}_geometrySnapshot(t=this._space){const e=this._serverCfg?.spaces.find(e=>e.id===t);if(!e)return null;const i=t=>JSON.parse(JSON.stringify(t)),s={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==e[t]&&(s[t]=e[t]);return{spaceId:t,rooms:i(e.rooms||[]),...Array.isArray(e.openings)?{openings:i(e.openings)}:{},...Array.isArray(e.walls)?{walls:i(e.walls)}:{},...Array.isArray(e.open_spans)?{open_spans:i(e.open_spans)}:{},...Array.isArray(e.room_drafts)?{room_drafts:i(e.room_drafts)}:{},...Array.isArray(e.partitions)?{partitions:i(e.partitions)}:{},...Array.isArray(e.wall_columns)?{wall_columns:i(e.wall_columns)}:{},...Array.isArray(e.decor)?{decor:i(e.decor)}:{},plan_transform:s}}_recordGeometry(t,e){if(!e)return;const i=this._geometrySnapshot(e.spaceId);i&&JSON.stringify(e)!==JSON.stringify(i)&&(this._geometryHistory.push({name:t,before:e,after:i}),this.requestUpdate())}_clearGeometryGesture(){this._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this._mergeSel=null,this._mergeDialog=null,this._splitSel=null,this._pendingSplit=null,this._wallFaceBatch=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._wallDialog=null,this._physicalDialog=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._openingDialog=null,this._rszSel=null,this._rszDrag=null,this._rszPreview=null,this._rszLive=null,this._decorDraft=null,this._decorMove=null,this._dtDrag=null,this._bdDrag=null}_cancelBoundaryAnchor(){return!("boundary"!==this._tool||!this._openWallAnchor)&&(this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._clearPlanSnapHover(),this.requestUpdate(),!0)}_stagePointerCancel(t){if(clearTimeout(this._kioskHoldTimer),this._swipeStart?.id===t.pointerId&&(this._swipeStart=null),this._physicalDrag?.pid===t.pointerId||this._physicalRotate?.pid===t.pointerId)return void this._cancelPhysicalGesture();if(this._decorDraft?.pid===t.pointerId)return this._decorDraft=null,void this.requestUpdate();if(this._decorMove?.pid===t.pointerId||this._dtDrag?.pid===t.pointerId||this._bdDrag?.pid===t.pointerId)return void this._cancelDecorGesture();this._cancelBoundaryAnchor(),"opening"===this._tool?(this._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this._tool&&this._clearPlanSnapHover();const e=!!this._pinchStart||!!this._panStart;this._pointers.delete(t.pointerId),this._pointers.size<2&&(this._pinchStart=null),0===this._pointers.size&&(this._panStart=null,this._panLock=null),e&&0===this._pointers.size&&this.requestUpdate()}_applyGeometryState(t){if(!this._canCommitSpace(t.spaceId))return!1;const e=this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(!e)return!1;const i=t=>JSON.parse(JSON.stringify(t));e.rooms=i(t.rooms),void 0!==t.openings?e.openings=i(t.openings):delete e.openings,void 0!==t.walls?e.walls=i(t.walls):delete e.walls,void 0!==t.open_spans?e.open_spans=i(t.open_spans):delete e.open_spans,void 0!==t.room_drafts?e.room_drafts=i(t.room_drafts):delete e.room_drafts,void 0!==t.partitions?e.partitions=i(t.partitions):delete e.partitions,void 0!==t.wall_columns?e.wall_columns=i(t.wall_columns):delete e.wall_columns,void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];return Object.assign(e,i(t.plan_transform||{})),this._clearGeometryGesture(),this._space!==t.spaceId&&(this._commitSpace(t.spaceId),this._saveNav(),this._restoreZoom()),this._modelCache=null,this._frame=null,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_roomAt(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&bi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=ci(e);return!!i&&Ci(t,i)})}_pointInRoom(t,e){return e.poly?fi(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!ya(t))return!0;const e=t.length,i=.001;for(let s=0;s=500)return this._showToast(this._t("toast.physical_limit")),!1;const t=this._curSpaceCfg;return!(!this._activeDraftId&&(t?.room_drafts||[]).length>=200||this._draftSegmentCount(t)>=2e3||(t?.partitions||[]).length+this._path.length>F_)||(this._showToast(this._t("toast.physical_limit")),!1)}_markupClick(t){if(this._vacFit)return;if(!this._markup)return;const e=this._spaceModel();if(!e)return void this._clearGeometryGesture();if(this._suppressClick)return;if(this._drag||this._rlResize)return;const i=t.composedPath?.()||[];if(i.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(i.some(t=>t?.classList?.contains?.("physical-hit")))return void("boundary"===this._tool&&this._showToast(this._t("toast.boundary_blocked")));const s=this._svgPoint(t);if("select"===this._tool)return void(this._physicalSel=null);if("resize"===this._tool){if(this._rszDrag||i.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(s,t));return void(this._rszSel=t?.id||null)}if("delroom"===this._tool)return void this._deleteRoomClick(s);if("opening"===this._tool)return void this._openingClick(s);if("merge"===this._tool)return void this._mergeClick(s);if("wallthick"===this._tool)return void this._wallThickClick(s);if("boundary"===this._tool)return void this._boundaryClick(s);if("split"===this._tool)return void this._splitClick(s);if("column"===this._tool)return void this._columnClick(s);let n=this._resolvePlanDrawPoint(s,t.shiftKey).point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this._path.length<3)return;n=[...this._path[0]]}if(!this._path.length){const t=this._draftEndAt(n);return t?(this._activeDraftId=t.draft.id,this._resumeDraftBySpace[this._space]=t.draft.id,this._path=t.reverse?[...t.draft.points].reverse().map(t=>[...t]):t.draft.points.map(t=>[...t]),void(this._draftSegmentCms=t.reverse?[...t.draft.segments].reverse().map(t=>t.cm):t.draft.segments.map(t=>t.cm))):(this._activeDraftId=null,this._draftSegmentCms=[],void(this._path=[n]))}const o=this._path[this._path.length-1];if(this._samePt(n,o))return;const a=this._draftEndAt(n,this._activeDraftId||void 0);if(a)return void this._mergeDraftEndpoint(a);if(!this._canAppendRoomDraftPoint())return;const r=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(r)}_draftEndAt(t,e){const i=this._spaceModel();if(!i)return null;const s=this._viewOr(this._baseVb()),n=Math.max(.15*this._gridPitch,this._stageEl?.clientWidth?s.w/this._stageEl.clientWidth*12:0);for(const s of i.room_drafts||[]){if(s.id===e)continue;if(s.points.length<2)continue;const i=s.points[0],o=s.points[s.points.length-1];if(Math.hypot(t[0]-o[0],t[1]-o[1])<=n)return{draft:s,reverse:!1};if(Math.hypot(t[0]-i[0],t[1]-i[1])<=n)return{draft:s,reverse:!0}}return null}_mergeDraftEndpoint(t){const e=this._curSpaceCfg;if(!e||!this._path.length)return;const i=this._path.map(t=>[...t]),s=this._wallGraphSources(i),n=Array.isArray(e.room_drafts)?e.room_drafts:[],o=this._activeDraftId?n.find(t=>t.id===this._activeDraftId):null,a=n.find(e=>e.id===t.draft.id);if(!a)return;const r=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(a.segments||[]).map(t=>({...t})):[...a.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,r[0]),d=h?null:this._drawWallCm;if(!h&&null==d)return void this._showPhysicalRange(100);const u=this._draftSegmentCms.map((t,e)=>({...o?.segments?.[e]||{},cm:t})),p=[...this._path.map(t=>[...t]),...h?r.slice(1):r],_=[...u,...null==d?[]:[{cm:d}],...l],g=p.length>=4&&this._samePt(p[0],p[p.length-1]),m=p,f=_;if(m.length>500)return void this._showToast(this._t("toast.physical_limit"));const v=(o?.segments?.length||0)+(a.segments?.length||0);if(this._draftSegmentCount(e)-v+f.length>2e3)return void this._showToast(this._t("toast.physical_limit"));if(g){const t=m.slice(0,-1);if(this._contourSelfIntersects(t)||Ti(t)<=1e-6)return void this._showToast(this._t("toast.contour_cannot_close"));const e=this._overlapRoom(t);if(e)return void this._showToast(this._t("toast.room_overlap",{name:e.name||""}))}const y=this._geometrySnapshot(),b=this._activeDraftId||t.draft.id,w={...o||a,id:b,points:m.map(t=>[t[0]/P_,t[1]/P_]),segments:f};e.room_drafts=n.filter(e=>e.id!==t.draft.id&&(!this._activeDraftId||e.id!==this._activeDraftId)),e.room_drafts.push(w),this._activeDraftId=b,this._resumeDraftBySpace[this._space]=b,this._draftSegmentCms=f.map(t=>Number(t.cm)),this._path=m,this._physicalSel=null,this._recordGeometry(this._t("history.draft_merge"),y),this._saveConfig(),null!=d&&this._offerWallFaces(i,i.length-1,s)}_persistActiveDraftSegment(){if(this._path.length<2||!this._curSpaceCfg)return;const t=this._drawWallCm;if(null==t)return;this._draftSegmentCms=[...this._draftSegmentCms,t];const e=this._geometrySnapshot(),i=this._curSpaceCfg;i.room_drafts||=[],this._activeDraftId||(this._activeDraftId="draft-"+Date.now().toString(36)),this._resumeDraftBySpace[this._space]=this._activeDraftId;const s=i.room_drafts.findIndex(t=>t.id===this._activeDraftId),n={...s>=0?i.room_drafts[s]:{},id:this._activeDraftId,points:this._path.map(t=>[t[0]/P_,t[1]/P_]),segments:this._draftSegmentCms.map((t,e)=>({...s>=0?i.room_drafts[s]?.segments?.[e]:{},cm:t}))};s>=0?i.room_drafts[s]=n:i.room_drafts.push(n),this._recordGeometry(this._t("history.draft_segment"),e),this._saveConfig()}_activeWallSourceKey(t){return`active:${this._activeDraftId||"session"}:${t}`}_wallGraphSources(t){const e=this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}));for(let i=0;i+1t.key===i);if(s>=0){const[t]=this._wallFaceGraphCache.splice(s,1);return this._wallFaceGraphCache.push(t),t.value}const n=function(t,e=.001){const i=Number.isFinite(e)&&e>0?e:$d,s=Gd(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Pd(t.a,i),s=Pd(t.b,i);n.set(e,t.a),n.set(s,t.b),o.has(e)||o.set(e,new Set),o.has(s)||o.set(s,new Set),o.get(e).add(s),o.get(s).add(e)}const r=new Map;for(const[t,e]of o){const i=n.get(t);r.set(t,[...e].sort((t,e)=>{const s=n.get(t),o=n.get(e);return Math.atan2(s[1]-i[1],s[0]-i[0])-Math.atan2(o[1]-i[1],o[0]-i[0])||t.localeCompare(e)}))}const l=new Set,c=new Map,h=(t,e)=>`${t}>${e}`;for(const t of s){const e=[Pd(t.a,i),Pd(t.b,i)];for(const[t,o]of[e,[e[1],e[0]]]){if(l.has(h(t,o)))continue;const e=[],d=[];let u=t,p=o,_=!1;for(let i=0;i<=2*s.length+2;i++){const i=h(u,p);if(l.has(i)){_=u===t&&p===o;break}l.add(i),e.push(u),d.push(Rd(u,p));const s=r.get(p)||[],n=s.indexOf(u);if(n<0||!s.length)break;if(u=p,p=s[(n-1+s.length)%s.length],u===t&&p===o){_=!0;break}}if(!_||new Set(e).size<3||new Set(e).size!==e.length)continue;const g=e.map(t=>n.get(t)),m=Dd(g);if(!(m>i*i))continue;const f=Ad(Id(e,n,i)),v=new Set;for(const t of d)for(const e of a.get(t)?.sourceKeys||[])v.add(e);const y={ring:g,key:f,area:m,atomKeys:[...d],sourceKeys:[...v].sort((t,e)=>t.localeCompare(e))};c.has(f)||c.set(f,y)}}return{atoms:s,faces:[...c.values()].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key))}}(t,e);return this._wallFaceGraphCache.push({key:i,value:n}),this._wallFaceGraphCache.length>4&&this._wallFaceGraphCache.shift(),n}_offerWallFaces(t,e=this._path.length-2,i){if(this._path.length<2||this._wallFaceBatch||this._roomDialog)return;const s=this._spaceModel();if(!s)return;const n=this._activeWallSourceKey(e),o=2e-4*this._gridPitch;let a;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);a=function(t,e,i){const s=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!s.has(t.key)&&t.sourceKeys.includes(i))}(this._wallFaceGraph(e,o),this._wallFaceGraph(s,o),n)}catch{return}if(!a.length)return;for(const t of s.rooms){const e=ci(t);if(!t.id||!e)continue;const i=Ii(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Ti(s)>=Ti(n)?s:n,r=o===s?n:s,l=[...a].sort((t,e)=>Math.abs(t.area-Ti(r))-Math.abs(e.area-Ti(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:r},consumeAllActive:!0}])}const r=a.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));r.length&&this._beginWallFaceBatch(r)}_beginWallFaceBatch(t){this._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this._path.map(t=>[...t]),activeCms:[...this._draftSegmentCms],activeDraftId:this._activeDraftId},this._clearPlanSnapHover(),this._nameSel="",this._areaSel="",this._resetRoomDialogFields(),this._roomDialog=!0}_columnClick(t){const e=this._snap(t),i=this._drawWallCm;if(null==i)return void this._showPhysicalRange($l);if(!this._curSpaceCfg||this._limitReached("column"))return;const s=this._spaceModel();if(!s)return;const n={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Sl(i),angle:0},o=(s.wall_columns||[]).find(t=>Bl(t,n,.02*this._gridPitch));if(o)return clearTimeout(this._duplicateColumnTimer),this._duplicateColumnId=o.id,this._duplicateColumnTimer=window.setTimeout(()=>{this._duplicateColumnId=null},900),void this._showToast(this._t("toast.column_duplicate"));const a=this._geometrySnapshot(),r=this._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...n,center:[e[0]/P_,e[1]/P_]}),this._recordGeometry(this._t("history.column_add"),a),this._saveConfig()}_openPhysicalDialog(t,e,i){const s=this._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),length:this._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this._physicalDialog={kind:t,id:e,cm:fr(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Ml(i.angle):0)})}else{const n=s.room_drafts.find(t=>t.id===e),o=Math.max(0,Math.min(n?.segments.length?n.segments.length-1:0,i||0));n?.segments[o]&&(this._physicalDialog={kind:t,id:e,segment:o,cm:fr(n.segments[o].cm,this._imperial),length:this._fmtLen(n.points[o],n.points[o+1])})}}_physicalDown(t,e,i){const s=this._spaceModel();if(!s)return;t.stopPropagation(),H_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Nl(n,Pl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);e&&Nl(n,e)&&o.push({kind:"partition",id:t.id})}o.some(t=>t.kind===e&&t.id===i)||o.unshift({kind:e,id:i});const a=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===a&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%o.length:Math.max(0,o.findIndex(t=>t.kind===e&&t.id===i));this._physicalPickCycle={signature:a,index:c,x:t.clientX,y:t.clientY,at:r},e=o[c].kind,i=o[c].id;const h="partition"===e?s.partitions.find(t=>t.id===i):s.wall_columns.find(t=>t.id===i);h&&(this._physicalSel={kind:e,id:i},this._physicalDrag={pid:t.pointerId,kind:e,id:i,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(h)),delta:[0,0]})}_clampPhysicalDelta(t,e,i){const s="partition"===t?[e.a,e.b]:[e.center],n=s.map(t=>t[0]),o=s.map(t=>t[1]);return[Math.max(-Yl*P_-Math.min(...n),Math.min(Yl*P_-Math.max(...n),i[0])),Math.max(-Yl*P_-Math.min(...o),Math.min(Yl*P_-Math.max(...o),i[1]))]}_physicalMove(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t),s="partition"===e.kind?e.base.a:e.base.center,n=this._snap([s[0]+i[0]-e.start[0],s[1]+i[1]-e.start[1]]),o=this._clampPhysicalDelta(e.kind,e.base,[n[0]-s[0],n[1]-s[1]]);this._physicalDrag={...e,delta:o,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){const e=this._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const i=this._spaceModel();if(!this._curSpaceCfg||!i)return;const s=this._curSpaceCfg;if("partition"===e.kind){const t=(s.partitions||[]).find(t=>t.id===e.id),i=e.base;if(t){const n={...i,a:[i.a[0]+e.delta[0],i.a[1]+e.delta[1]],b:[i.b[0]+e.delta[0],i.b[1]+e.delta[1]]};t.a=[n.a[0]/P_,n.a[1]/P_],t.b=[n.b[0]/P_,n.b[1]/P_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=ad(t,[n],P_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,ud(t,i,P_))}}}else{const t=(s.wall_columns||[]).find(t=>t.id===e.id),n=e.base,o={...n,center:[n.center[0]+e.delta[0],n.center[1]+e.delta[1]]};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/P_,(n.center[1]+e.delta[1])/P_])}this._recordGeometry(this._t("history.physical_move"),e.before),this._saveConfig()}_registerPhysicalTap(t,e,i){const s=performance.now(),n=this._physicalLastTap?.kind===t&&this._physicalLastTap.id===e&&this._physicalLastTap.segment===i&&s-this._physicalLastTap.at<=360;this._physicalLastTap={kind:t,id:e,segment:i,at:s},n&&(this._physicalLastTap=null,this._openPhysicalDialog(t,e,i))}_cancelPhysicalGesture(){this._physicalDrag=null,this._physicalRotate=null,this.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this._spaceModel())return;t.preventDefault(),t.stopPropagation(),H_(t);const i=this._svgPoint(t);this._physicalSel={kind:"column",id:e.id},this._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,baseAngle:Ml(e.angle),angle:Ml(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const i=this._svgPoint(t),s=180*Math.atan2(i[1]-e.center[1],i[0]-e.center[0])/Math.PI,n=e.baseAngle+s-e.startAngle,o=Ml(t.shiftKey?n:5*Math.round(n/5));this._physicalRotate={...e,angle:o,moved:e.moved||Math.abs(n-e.baseAngle)>=.5}}_physicalRotateUp(t){const e=this._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this._physicalRotate=null;const i=this._spaceModel();if(!e.moved||!this._curSpaceCfg||!i)return;const s=i.wall_columns.find(t=>t.id===e.id);if(!s||"square"!==s.shape)return;const n={...s,angle:e.angle};if(i.wall_columns.some(t=>t.id!==e.id&&Bl(t,n,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));const o=this._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);o&&(o.angle=e.angle,this._recordGeometry(this._t("history.physical_edit"),e.before),this._saveConfig())}_rszRooms(){const t=[],e=this._spaceModel();if(!e)return t;for(const i of e.rooms){const e=i.id?ci(i):null;e&&t.push({id:i.id,poly:e})}return t}_rszOpenings(){return this._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen}))}_rszOpts(){return{minDim:this._cmToUnits(30),eps:.05*this._gridPitch}}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszApplyPreview(t,e){const i=this._rszDrag,s=this._serverCfg?.spaces.find(t=>t.id===this._space);if(!i||!s)return;const n=JSON.parse(i.snap),o={...s,rooms:n.rooms,openings:n.openings,walls:n.walls,open_spans:n.open_spans};Array.isArray(n.open_spans)&&n.open_spans.length||delete o.open_spans;const a=this._spaceH;for(const[e,i]of Object.entries(t)){const t=o.rooms.find(t=>t.id===e);t&&(t.poly=i.map(t=>[t[0]/P_,t[1]/a]),delete t.x,delete t.y,delete t.w,delete t.h)}for(const[t,i]of Object.entries(e)){const e=(o.openings||[]).find(e=>e.id===t);e&&(e.x=i[0]/P_,e.y=i[1]/a)}const r=[],l=[];for(const t of i.changed){const e=i.rooms.find(e=>e.id===t),s=o.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const n=s.poly.map(t=>[t[0]*P_,t[1]*a]);if(e.poly.length===n.length)for(let t=0;tt.id===e);if(!s||!s.poly||s.poly.length<3)return null;if(i<0||i>=s.poly.length)return null;const n=[...s.poly[i]],o=[...s.poly[(i+1)%s.poly.length]];return{roomId:e,edge:i,a:n,b:o,n:_a(s.poly,i)}}(s,e,i);n&&(this._rszDrag={kind:"edge",pid:t.pointerId,roomId:e,plan:n,rooms:s,openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszCornerDown(t,e,i,s){"resize"!==this._tool||this._rszDrag||(t.stopPropagation(),t.preventDefault(),H_(t),this._rszDrag={kind:"scale",pid:t.pointerId,roomId:e,fixed:s,span0:Math.hypot(i[0]-s[0],i[1]-s[1])||1,rooms:this._rszRooms(),openings:this._rszOpenings(),snap:this._rszSnapshot(),moved:!1,d:0,k:1,changed:[]})}_rszMove(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._svgPoint(t);if("edge"===e.kind){const t=e.plan,s=(i[0]-t.a[0])*t.n[0]+(i[1]-t.a[1])*t.n[1],n=this._snap([t.a[0]+t.n[0]*s,t.a[1]+t.n[1]*s]);let o=(n[0]-t.a[0])*t.n[0]+(n[1]-t.a[1])*t.n[1];if(o=function(t,e,i,s,n,o){if(!Number.isFinite(s)||Math.abs(s)<1e-9)return 0;const a=Math.sign(s);let r=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&r>1e-9;s++,r-=l){const s=a*r;if(Sa(t,e,i,s,o))return s}return 0}(e.rooms,e.openings,t,o,this._gridPitch,this._rszOpts()),o===e.d&&e.moved)return;e.d=o,e.moved=!0;const a=ka(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(a.polys),this._rszApplyPreview(a.polys,a.openings),this._rszLive=this._rszEdgeLabels(a,t)}else{const t=e.fixed,s=this._snap(i);let n=Math.hypot(s[0]-t[0],s[1]-t[1])/(e.span0||1);if(n=Math.max(.05,Math.min(20,n)),n=function(t,e,i,s,n,o){if(!Number.isFinite(n)||n<=0)return 1;if(Ca(t,e,i,s,n,o))return n;let a=1,r=n;for(let n=0;n<28;n++){const n=(a+r)/2;Ca(t,e,i,s,n,o)?a=n:r=n}return a}(e.rooms,e.openings,e.roomId,t,n,this._rszOpts()),n===e.k&&e.moved)return;e.k=n,e.moved=!0;const o=e.rooms.find(t=>t.id===e.roomId),a=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),r=Ma(o,e.openings,a,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:r.poly},r.openings),this._rszLive=this._rszScaleLabels(r.poly)}this.requestUpdate()}_rszUp(t){const e=this._rszDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const i=this._rszPreview;this._rszDrag=null,this._rszLive=null,this._rszPreview=null;if(!(e.moved&&("edge"===e.kind?Math.abs(e.d)>1e-9:Math.abs(e.k-1)>1e-9))||!i)return this._cfgEpoch++,void this.requestUpdate();const s=JSON.parse(e.snap),n=this._curSpaceCfg;if(n){n.rooms=i.sp.rooms,n.openings=i.sp.openings,Array.isArray(i.sp.walls)&&(i.sp.walls.length?n.walls=i.sp.walls:delete n.walls),Array.isArray(i.sp.open_spans)&&i.sp.open_spans.length?n.open_spans=i.sp.open_spans:delete n.open_spans;for(const t of e.changed){const e=n.rooms.find(e=>e.id===t);e?.poly&&(e.poly=va(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Pr(n.walls,n.rooms||[],Ql,1,this._cfgOpenCuts()),n.walls.length||delete n.walls)}this._suppressClick=!0,setTimeout(()=>this._suppressClick=!1,0),this._recordGeometry(this._t("history.resize_room"),s),this._saveConfig(),this.requestUpdate()}_rszCancelDrag(){this._rszDrag&&(this._rszDrag=null,this._rszLive=null,this._rszPreview=null,this._cfgEpoch++,this.requestUpdate())}_rszPointerCancel(t){const e=this._rszDrag;e&&e.pid===t.pointerId&&(t.stopPropagation(),this._rszCancelDrag())}_rszEdgeLabels(t,e){const i=this._rszDrag,s=[],n=t.polys[e.roomId]||i.rooms.find(t=>t.id===e.roomId).poly,o=n.length,a=e.edge,r=(a+1)%o;for(const[t,e]of[[n[(a-1+o)%o],n[a]],[n[a],n[r]],[n[r],n[(r+1)%o]]])s.push({x:(t[0]+e[0])/2,y:(t[1]+e[1])/2,text:this._fmtLen(t,e)});const l="mi"===this.hass?.config?.unit_system?.length,c=Object.keys(t.polys).length?Object.keys(t.polys):[e.roomId],h=this._spaceWalls,d=this._openPairs().flatMap(t=>t.segs),u=this._physicalBodiesR();for(const e of c){const n=t.polys[e]||i.rooms.find(t=>t.id===e).poly,o=h.length&&ol(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||n,a=xi(o),r=u.length?Ol(zl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(o,this._gridPitch,this._cellCm);s.push({x:a[0],y:a[1],text:Ta(r,l),area:!0})}return s}_rszScaleLabels(t){const e="mi"===this.hass?.config?.unit_system?.length,i=t.map(t=>t[0]),s=t.map(t=>t[1]),n=Math.max(...i)-Math.min(...i),o=Math.max(...s)-Math.min(...s),a=this._spaceWalls,r=a.length&&this._rszSel&&ol([{id:this._rszSel,poly:t}],this._rszSel,a,[],this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||t,l=xi(r),c=this._physicalBodiesR(),h=c.length?Ol(zl(r,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Da(r,this._gridPitch,this._cellCm);return[{x:Math.min(...i),y:Math.min(...s),text:`${this._fmtLen([0,0],[n,0])} × ${this._fmtLen([0,0],[o,0])}`},{x:l[0],y:l[1],text:Ta(h,e),area:!0}]}_renderResizeLayer(t){const e=Math.max(.013*t.w,5),i=e/2,s=t=>t.toFixed(1),n=`M ${s(-.7*i)} 0 H ${s(.7*i)} M 0 ${s(-.22*i)} V ${s(-i)} M ${s(-.32*i)} ${s(-.6*i)} L 0 ${s(-i)} L ${s(.32*i)} ${s(-.6*i)} M 0 ${s(.22*i)} V ${s(i)} M ${s(-.32*i)} ${s(.6*i)} L 0 ${s(i)} L ${s(.32*i)} ${s(.6*i)}`,o=[],a=this._rszRooms();for(const t of a)for(let i=0;ithis._rszEdgeDown(e,t.id,i)} @pointermove=${t=>this._rszMove(t)} @pointerup=${t=>this._rszUp(t)} @@ -4756,7 +4773,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 @pointermove=${t=>this._rszMove(t)} @pointerup=${t=>this._rszUp(t)} @pointercancel=${t=>this._rszPointerCancel(t)} - @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}return W`${o}`}get _openingsR(){const t=this._curSpaceCfg,e=this._spaceH,i=this._spaceModel();return i?(t?.openings||[]).flatMap(t=>{const s={...t,rx:t.x*T_,ry:t.y*e,rlen:t.length*T_};if(!t.host)return[s];const n=ad(t,i.partitions,T_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,a]=n.resolved.center;const r=this._physicalDrag;return r?.moved&&"partition"===r.kind&&r.id===t.host.id&&(o+=r.delta[0],a+=r.delta[1]),[{...t,rx:o,ry:a,rlen:n.resolved.length,angle:n.resolved.angle,partitionHost:n.resolved}]}):[]}_partitionOpeningCuts(t=this._spaceModel(),e=()=>!0){if(!t)return[];const i=this._curSpaceCfg?.id===t.id&&this._curSpaceCfg?.openings||[],s=[];for(const n of i){if(!n.host||!e(n))continue;const i=ad(n,t.partitions,T_,this._cellCm,this._gridPitch);i.resolved&&s.push(cd(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=tl(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);return t.flatMap(t=>{const e={x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen};return t.host?t.partitionHost&&dd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?hd(t.partitionHost,i):bl(e,{x:t.rx,y:t.ry,angle:t.angle,length:t.rlen,flip_v:i})}_cmToUnits(t){return t/this._cellCm*this._gridPitch}get _decorList(){const t=this._curSpaceCfg;return Array.isArray(t?.decor)?t.decor:[]}get _decorH(){return T_}_decorResolvedStyle(t){return function(t,e,i,s=ir){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,a=Rt(o?.color,s.color);return{color:a,opacity:sr(o?.opacity,s.opacity),widthCm:lr(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?a:s.fillColor),fillOpacity:n&&o?.fill?sr(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ir)}_decorWidthUnits(t){return((t,e,i,s=ir.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return ar(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:ar(s,e,i)})(t,this._cellCm,this._gridPitch,ir.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:rr(ts*es(t),this._cellCm,this._gridPitch)}return rr(ts,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return ts;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?ar(e,this._cellCm,this._gridPitch):ts*es(t)}_decorSmallField(t){return Math.round(100*(this._imperial?t/2.54:t))/100}_decorSmallCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(100,e)):.1}_decorTextCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(p_,e)):.1}_decorLargeField(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_decorLargeCm(t){const e=this._imperial?30.48*t:100*t;return Number.isFinite(e)?Math.max(.1,Math.min(Yl*this._cellCm,e)):.1}_angleField(t){const e=Number(t);return Number.isFinite(e)?String(Number(e.toFixed(3))):"0"}_decorBoxOf(t){return"rect"!==t.kind&&"ellipse"!==t.kind&&"furniture"!==t.kind?null:{x:t.x*T_,y:t.y*this._decorH,w:t.w*T_,h:t.h*this._decorH,angle:nr(t.angle)||void 0}}_decorSnapGeometry(t){const e=this._spaceModel();if(!e)return{points:[],segments:[]};const i=t||"",s=this._decorSnapCache;if(s&&s.epoch===this._cfgEpoch&&s.space===this._space&&s.height===this._decorH&&s.exclude===i)return s.geometry;const n=[];for(const e of this._decorList)if(e.id!==t)if("line"===e.kind){const t=[e.x1*T_,e.y1*this._decorH],i=[e.x2*T_,e.y2*this._decorH];n.push({points:[t,i,[(t[0]+i[0])/2,(t[1]+i[1])/2]],segments:[{a:t,b:i}]})}else if("text"===e.kind)n.push({points:[[e.x*T_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(dr(t))}for(const t of e.rooms){const e=ci(t);e?.length&&n.push({points:e.flatMap((t,i)=>{const s=e[(i+1)%e.length];return[t,[(t[0]+s[0])/2,(t[1]+s[1])/2]]}),segments:e.map((t,i)=>({a:t,b:e[(i+1)%e.length]}))})}const o=function(t){return{points:t.flatMap(t=>t.points),segments:t.flatMap(t=>t.segments)}}(n);return this._decorSnapCache={epoch:this._cfgEpoch,space:this._space,height:this._decorH,exclude:i,geometry:o},o}_decorSnap(t,e="mouse",i){const s=this._stageEl,n=this._viewOr(this._baseVb()),o="touch"===e||"pen"===e?14:8,a=s?n.w/Math.max(1,s.clientWidth)*o:this._gridPitch;return function(t,e,i,s){const n=s(t);let o=null;for(const n of e.points){const e=s(n),a=Math.hypot(e[0]-t[0],e[1]-t[1]);a<=i&&(!o||athis._snap(t)).point}_replaceDecor(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>i.id===t?{...i,...e}:i),this.requestUpdate())}_cancelDecorGesture(){const t=this._decorMove?.before||this._dtDrag?.before||this._bdDrag?.before,e=t&&this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(t&&e){const i=t=>JSON.parse(JSON.stringify(t));void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];Object.assign(e,i(t.plan_transform||{})),this._cfgEpoch++}this._decorMove=null,this._dtDrag=null,this._bdDrag=null,this.requestUpdate()}_decorPointerDown(t){const e=this._decorTool;if("select"===e||"erase"===e?t.target.closest?.(".dshape"):null)return!0;if("line"===e||"rect"===e||"ellipse"===e){t.preventDefault();const i=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorDraft={kind:e,a:i,b:i,pid:t.pointerId},O_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/T_),y:sc(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:rr(ts,this._cellCm,this._gridPitch)},this._decorTextSelection={start:0,end:0},!0}if("furniture"===e)return!!this._furnPalette&&(t.preventDefault(),this._furnPlace(this._svgPoint(t),t.shiftKey),!0);if("select"===e&&(this._decorSel=null),this._bdMovable){const e=this._bdRect,i=this._svgPoint(t),s=e.x+e.w/2,n=e.y+e.h/2,o=-nr(e.angle)*Math.PI/180,a=i[0]-s,r=i[1]-n,l=[s+a*Math.cos(o)-r*Math.sin(o),n+a*Math.sin(o)+r*Math.cos(o)];if(l[0]>=e.x&&l[0]<=e.x+e.w&&l[1]>=e.y&&l[1]<=e.y+e.h)return t.preventDefault(),this._bdStart(t)}return!1}_decorCommitDraft(){const t=this._decorDraft;if(this._decorDraft=null,!t)return;const e=.5*this._gridPitch;if(!function(t,e,i,s){const n=Math.abs(i[0]-e[0]),o=Math.abs(i[1]-e[1]);return"line"===t?Math.hypot(n,o)>=s:n>=s&&o>=s}(t.kind,t.a,t.b,e))return;const i=T_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),a="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),r=sc;let l;if("line"===t.kind)l={id:a,kind:"line",x1:r(t.a[0]/i),y1:r(t.a[1]/s),x2:r(t.b[0]/i),y2:r(t.b[1]/s),...cr(n,!1)};else{const e=r(Math.min(t.a[0],t.b[0])/i),o=r(Math.min(t.a[1],t.b[1])/s),c=Math.abs(t.b[0]-t.a[0])/i,h=Math.abs(t.b[1]-t.a[1])/s;l={id:a,kind:t.kind,x:e,y:o,w:c,h:h,...cr(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=a,this._recordGeometry(this._t("history.decor_add"),o),this._saveConfig(),this.requestUpdate()}_decorShapeDown(t,e){if("decor"!==this._mode)return;const i=this._decorTool;if("text"===i){if("text"!==e.kind)return;return t.stopPropagation(),t.preventDefault(),void this._decorOpenText(e)}"select"!==i&&"erase"!==i||(t.stopPropagation(),t.preventDefault(),"erase"!==i?(this._decorSel=e.id,this._decorMove={id:e.id,start:this._svgPoint(t),orig:JSON.parse(JSON.stringify(e)),pid:t.pointerId,moved:!1,before:this._geometrySnapshot()},O_(t)):this._decorEraseConfirm={id:e.id,kind:e.kind})}_decorMoveUpdate(t){const e=this._decorMove;if("furniture"===e.orig?.kind)return void this._furnMoveUpdate(t);const i=this._svgPoint(t),s=e.orig,n=("line"===s.kind?s.x1:s.x)*T_,o=("line"===s.kind?s.y1:s.y)*this._decorH,a=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let r=(a[0]-n)/T_,l=(a[1]-o)/this._decorH;const c=e.orig,h="line"===c.kind?Math.min(c.x1,c.x2):c.x,d="line"===c.kind?Math.min(c.y1,c.y2):c.y,u="line"===c.kind?Math.abs(c.x2-c.x1):c.w||0,p="line"===c.kind?Math.abs(c.y2-c.y1):c.h||0,_=Yl;r=Math.max(-_-h,Math.min(_-h-u,r)),l=Math.max(-_-d,Math.min(_-d-p,l)),(r||l)&&(e.moved=!0);this._curSpaceCfg.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i=e.orig;return"line"===t.kind?{...t,x1:i.x1+r,y1:i.y1+l,x2:i.x2+r,y2:i.y2+l}:{...t,x:i.x+r,y:i.y+l}}),this.requestUpdate()}_decorShapeDbl(t,e){"decor"===this._mode&&"select"===this._decorTool&&(t.preventDefault(),t.stopPropagation(),this._decorMove=null,this._decorSel=e.id,this._openDecorProperties(e))}_openDecorProperties(t){if("decor"!==this._mode||"select"!==this._decorTool)return;if("text"===t.kind)return void this._decorOpenText(t);if(!["line","rect","ellipse","furniture"].includes(t.kind))return;const e=this._decorResolvedStyle(t),i="line"===t.kind?t:null,s=this._decorBoxOf(t);this._decorShapeDialog={id:t.id,kind:t.kind,color:e.color,opacity:e.opacity,widthCm:e.widthCm,angle:this._angleField(nr(i?zs([i.x1*T_,i.y1*this._decorH],[i.x2*T_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*T_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:rr(s.w,this._cellCm,this._gridPitch),sizeHCm:rr(s.h,this._cellCm,this._gridPitch)}:{},..."furniture"===t.kind?{symbol:t.symbol}:{},..."rect"===t.kind||"ellipse"===t.kind?{fill:e.fill,fillColor:e.fillColor,fillOpacity:e.fillOpacity}:{}}}_decorOpenText(t){if("text"!==t.kind)return;let e=String(t.text??"");const i=[...e.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Yi(t.entity,n),a=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!a){const t=e.indexOf("{}");e=t>=0?e.slice(0,t)+o+e.slice(t+2):`${e}${e?" ":""}${o}`}this._decorTextDialog={id:t.id,x:t.x,y:t.y,text:e,color:Rt(t.color,this._decorStyle.color),opacity:sr(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:a||void 0},this._decorTextSelection={start:e.length,end:e.length}}_decorRememberTextSelection(t){this._decorTextSelection={start:t.selectionStart??t.value.length,end:t.selectionEnd??t.value.length}}_decorInsertLiveVariable(t){const e=this._decorTextDialog;if(!e)return;const i=Yi(e.pickerEntity,t);if(!i)return;const s=e.text,n=Math.max(0,Math.min(s.length,this._decorTextSelection.start)),o=Math.max(n,Math.min(s.length,this._decorTextSelection.end));if(s.length-(o-n)+i.length>200)return;const a=s.slice(0,n)+i+s.slice(o),r=n+i.length;this._decorTextSelection={start:r,end:r},this._decorTextDialog={...e,text:a,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(r,r))})}_decorSaveText(){const t=this._decorTextDialog,e=String(t?.text??"").replace(/\r\n?/g,"\n").trim();if(!t||!e)return void(this._decorTextDialog=null);const i=this._geometrySnapshot(),s=this._curSpaceCfg,n={color:t.color,opacity:sr(t.opacity),size_cm:Number(Math.max(.1,Math.min(p_,t.sizeCm)).toFixed(4)),...nr(t.angle)?{angle:nr(t.angle)}:{}};if(t.id)s.decor=this._decorList.map(i=>{if(i.id!==t.id)return i;if("text"!==i.kind)return i;if(t.preserveLegacy){const{angle:t,size:s,scale:o,...a}=i;return{...a,text:e,...n}}const{entity:s,attr:o,unit:a,...r}=i,{angle:l,size:c,scale:h,...d}=r;return{...d,text:e,...n}});else{const i="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5);s.decor=[...this._decorList,{id:i,kind:"text",x:t.x,y:t.y,text:e,...n}],this._decorSel=i}this._decorTextDialog=null,this._recordGeometry(this._t(t.id?"history.decor_edit":"history.decor_add"),i),this._saveConfig(),this.requestUpdate()}_decorSaveShape(){const t=this._decorShapeDialog;if(!t)return;const e=this._geometrySnapshot(),i={color:t.color,opacity:sr(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:sr(t.fillOpacity,.25)};this._curSpaceCfg.decor=this._decorList.map(e=>{if(e.id!==t.id)return e;const s="rect"===t.kind||"ellipse"===t.kind,n=cr(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*T_,s=(e.y1+e.y2)/2*this._decorH,o=ar(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),a=nr(t.angle)*Math.PI/180,r=Math.cos(a)*o/2,l=Math.sin(a)*o/2,c=this._snap([i-r,s-l]),h=this._snap([i+r,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:sc(c[0]/T_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/T_),y2:sc(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*T_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(ar(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),a=Math.max(this._gridPitch,ai(ar(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),r=e.x*T_+i/2,l=e.y*this._decorH+s/2,c=nr(t.angle),h=or({x:r-o/2,y:l-a/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:sc(h[0]/T_),y:sc(h[1]/this._decorH),w:o/T_,h:a/this._decorH,..."furniture"===e.kind&&t.symbol?{symbol:t.symbol}:{},...c?{angle:c}:{}}}return e}),this._decorStyle={...i,fill:"rect"===t.kind||"ellipse"===t.kind?i.fill:this._decorStyle.fill,fillColor:"rect"===t.kind||"ellipse"===t.kind?i.fillColor:this._decorStyle.fillColor,fillOpacity:"rect"===t.kind||"ellipse"===t.kind?i.fillOpacity:this._decorStyle.fillOpacity},this._decorShapeDialog=null,this._recordGeometry(this._t("history.decor_edit"),e),this._saveConfig(),this.requestUpdate()}get _dtSel(){return"decor"===this._mode&&"select"===this._decorTool&&this._decorSel&&this._decorList.find(t=>t.id===this._decorSel)||null}_dtPivot(t){return"line"===t.kind?[(t.x1+t.x2)/2*T_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*T_,(t.y+t.h/2)*this._decorH]:[t.x*T_,t.y*this._decorH]}_dtApply(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const s={...i};"text"===i.kind&&void 0!==e.textSizeCm&&(delete s.size,delete s.scale);const n={...s};return void 0!==e.textSizeCm&&(n.size_cm=Number(Math.max(.1,Math.min(p_,e.textSizeCm)).toFixed(4))),void 0!==e.angle&&(e.angle?n.angle=Number(e.angle.toFixed(2)):delete n.angle),n}),this._cfgEpoch++,this.requestUpdate())}_dtStart(t,e,i,s){const n=this._dtSel;if(!n)return;t.stopPropagation(),t.preventDefault();const[o,a]=this._dtPivot(n),r=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:a,r0:Math.hypot(r[0]-o,r[1]-a),a0:180*Math.atan2(r[1]-a,r[0]-o)/Math.PI,textSizeCm0:"text"===n.kind?this._decorTextSizeCm(n):1,angle0:"line"===n.kind?0:Number(n.angle)||0,sgx:i?.[0],sgy:i?.[1],orig:l||void 0,origShape:JSON.parse(JSON.stringify(n)),before:this._geometrySnapshot(),lineEnd:s,moved:!1},O_(t)}_dtMove(t){const e=this._dtDrag;if(!e)return;const i=this._svgPoint(t);if(void 0!==e.lineEnd&&"line"===e.origShape.kind){const s=this._decorSnap(i,t.pointerType,e.id),n=sc(s[0]/T_),o=sc(s[1]/this._decorH),a=e.origShape,r=0===e.lineEnd?a.x1:a.x2,l=0===e.lineEnd?a.y1:a.y2;return(Math.abs(n-r)>1e-9||Math.abs(o-l)>1e-9)&&(e.moved=!0),void this._replaceDecor(e.id,0===e.lineEnd?{x1:n,y1:o}:{x2:n,y2:o})}if("scale"===e.kind&&e.orig){const s=ur(e.orig,e.sgx??1,e.sgy??1,i[0],i[1],!t.shiftKey,this._gridPitch,this._gridPitch),n=Math.abs(s.x-e.orig.x)>1e-6||Math.abs(s.y-e.orig.y)>1e-6||Math.abs(s.w-e.orig.w)>1e-6||Math.abs(s.h-e.orig.h)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._decorApplyBox(e.id,s)}if("scale"===e.kind){const t=Math.hypot(i[0]-e.ax,i[1]-e.ay);if(e.r0<1e-6)return;const s=Math.max(.1,Math.min(p_,e.textSizeCm0*(t/e.r0))),n=Math.abs(s-e.textSizeCm0)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._dtApply(e.id,{textSizeCm:s})}const s=180*Math.atan2(i[1]-e.ay,i[0]-e.ax)/Math.PI;let n=e.angle0+(s-e.a0);t.shiftKey||(n=5*Math.round(n/5)),n=(n%360+360)%360,n>180&&(n-=360);const o=Math.abs(n-e.angle0)>1e-6;(o||e.moved)&&(e.moved||=o,this._dtApply(e.id,{angle:n}))}_dtUp(){const t=this._dtDrag;this._dtDrag=null,t?.moved&&(this._recordGeometry(this._t("history.decor_transform"),t.before),this._saveConfig()),this.requestUpdate()}_dtMeasure(){const t=this._dtSel;if(!t)return void(this._dtBox&&(this._dtBox=null,this.requestUpdate()));let e;if("line"===t.kind){const i=t.x1*T_,s=t.y1*this._decorH,n=t.x2*T_,o=t.y2*this._decorH;e={id:t.id,x:Math.min(i,n),y:Math.min(s,o),w:Math.abs(n-i),h:Math.abs(o-s)}}else if("furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind)e={id:t.id,x:t.x*T_,y:t.y*this._decorH,w:t.w*T_,h:t.h*this._decorH};else{const i=this.renderRoot.querySelector(`text.dtext[data-id="${t.id}"]`);if(!i||"function"!=typeof i.getBBox)return;let s;try{s=i.getBBox()}catch{return}if(!s||!s.width&&!s.height)return;e={id:t.id,x:s.x,y:s.y,w:s.width,h:s.height}}const i=this._dtBox;i&&i.id===e.id&&Math.abs(i.x-e.x)<.01&&Math.abs(i.y-e.y)<.01&&Math.abs(i.w-e.w)<.01&&Math.abs(i.h-e.h)<.01||(this._dtBox=e,this.requestUpdate())}_deleteDecor(t){if(!this._decorList.some(e=>e.id===t))return;const e=this._geometrySnapshot();this._curSpaceCfg.decor=this._decorList.filter(e=>e.id!==t),this._decorSel===t&&(this._decorSel=null),this._recordGeometry(this._t("history.decor_delete"),e),this._saveConfig(),this.requestUpdate()}_decorDeleteSel(){this._decorSel&&this._deleteDecor(this._decorSel)}_confirmDecorErase(){const t=this._decorEraseConfirm;this._decorEraseConfirm=null,t&&this._deleteDecor(t.id)}get _furnWalls(){const t=this._rawPhysicalBodiesR().flatMap(t=>t.map((e,i)=>{const s=t[(i+1)%t.length];return[e[0],e[1],s[0],s[1]]}));return[...this._segments,...t]}get _furnWallReach(){return 6*this._gridPitch}_furnFieldValue(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_furnFieldToCm(t){return e=this._imperial?30.48*t:100*t,Number.isFinite(e)?Math.max(1,Math.min(1e4,e)):1;var e}_furnPick(t){const e=function(t){const e=xc(t);return e?{w:e.w,h:e.h}:{w:60,h:60}}(t);this._furnPalette={symbol:t,w:e.w,h:e.h}}_furnPlace(t,e=!1){const i=this._furnPalette,s=this._curSpaceCfg;if(!i||!s)return;const n=T_,o=this._decorH,a=Dc(Sc(i.w,this._cellCm,this._gridPitch,n)),r=Dc(Sc(i.h,this._cellCm,this._gridPitch,n)),l=this._geometrySnapshot(),c=this._decorSnap(t);let h=c[0],d=c[1],u=0;const p=e?null:Ac(h,d,r*o,this._furnWalls,this._furnWallReach,this._gridPitch);p&&(h=p.cx,d=p.cy,u=p.angle);const _="df"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),g={id:_,kind:"furniture",symbol:i.symbol,x:sc(h/n-a/2),y:sc(d/o-r/2),w:a,h:r,...cr(this._decorStyle,!1)};u&&(g.angle=Number(u.toFixed(2))),s.decor=[...this._decorList,g],this._decorSel=_,this._decorTool="select",this._furnPalette=null,this._recordGeometry(this._t("history.decor_add"),l),this._saveConfig(),this.requestUpdate()}_furnMoveUpdate(t){const e=this._decorMove;if("furniture"!==e.orig.kind)return;const i=e.orig,s=this._curSpaceCfg;if(!s)return;const n=T_,o=this._decorH,a=this._svgPoint(t),r=(i.x+i.w/2)*n+(a[0]-e.start[0]),l=(i.y+i.h/2)*o+(a[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Ac(r,l,i.h*o,this._furnWalls,this._furnWallReach,this._gridPitch);if(u)c=u.cx/n-i.w/2,h=u.cy/o-i.h/2,d=u.angle;else{const s=this._decorSnap([r-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=sc(c),h=sc(h),(Math.abs(c-i.x)>1e-9||Math.abs(h-i.y)>1e-9||Math.abs(d-(Number(i.angle)||0))>1e-9)&&(e.moved=!0),s.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i={...t,x:c,y:h};return d?i.angle=Number(d.toFixed(2)):delete i.angle,i}),this.requestUpdate()}_decorApplyBox(t,e){const i=this._curSpaceCfg;if(!i)return;const s=T_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=or(e,i.angle,t=>this._snap(t));return{...i,x:sc(o[0]/s),y:sc(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Yl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Yl,e.h/n))}}),this._cfgEpoch++,this.requestUpdate()}get _furnLive(){const t=this._dtDrag;if(!t||"scale"!==t.kind||!t.orig)return null;const e=this._decorList.find(e=>e.id===t.id);if(!e||"furniture"!==e.kind)return null;const i=T_,s=this._decorH,n=e.w*i,o=e.h*s,a=function(t,e,i,s,n){const o=t+i/2,a=e+s/2,r=(Number(n)||0)*Math.PI/180,l=Math.cos(r),c=Math.sin(r),h=(t,e)=>{const i=t-o,s=e-a;return[o+i*l-s*c,a+i*c+s*l]};return[h(t,e),h(t+i,e),h(t+i,e+s),h(t,e+s)]}(e.x*i,e.y*s,n,o,Number(e.angle)||0),r=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=r(a[0],a[1]),c=r(a[0],a[3]);return[{x:l[0],y:l[1],text:this._fmtLen([0,0],[n,0])},{x:c[0],y:c[1],text:this._fmtLen([0,0],[0,o])}]}_renderFurnPalette(){const t=this._furnPalette,e=this._t(this._imperial?"gs.unit_ft":"gs.unit_m");return j`
t.stopPropagation()}> + @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}return W`${o}`}get _openingsR(){const t=this._curSpaceCfg,e=this._spaceH,i=this._spaceModel();return i?(t?.openings||[]).flatMap(t=>{const s={...t,rx:t.x*P_,ry:t.y*e,rlen:t.length*P_};if(!t.host)return[s];const n=ad(t,i.partitions,P_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,a]=n.resolved.center;const r=this._physicalDrag;return r?.moved&&"partition"===r.kind&&r.id===t.host.id&&(o+=r.delta[0],a+=r.delta[1]),[{...t,rx:o,ry:a,rlen:n.resolved.length,angle:n.resolved.angle,partitionHost:n.resolved}]}):[]}_partitionOpeningCuts(t=this._spaceModel(),e=()=>!0){if(!t)return[];const i=this._curSpaceCfg?.id===t.id&&this._curSpaceCfg?.openings||[],s=[];for(const n of i){if(!n.host||!e(n))continue;const i=ad(n,t.partitions,P_,this._cellCm,this._gridPitch);i.resolved&&s.push(cd(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=tl(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);return t.flatMap(t=>{const e={x:t.rx,y:t.ry,angle:Number(t.angle)||0,length:t.rlen};return t.host?t.partitionHost&&dd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?hd(t.partitionHost,i):bl(e,{x:t.rx,y:t.ry,angle:t.angle,length:t.rlen,flip_v:i})}_cmToUnits(t){return t/this._cellCm*this._gridPitch}get _decorList(){const t=this._curSpaceCfg;return Array.isArray(t?.decor)?t.decor:[]}get _decorH(){return P_}_decorResolvedStyle(t){return function(t,e,i,s=ir){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,a=Rt(o?.color,s.color);return{color:a,opacity:sr(o?.opacity,s.opacity),widthCm:lr(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?a:s.fillColor),fillOpacity:n&&o?.fill?sr(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ir)}_decorWidthUnits(t){return((t,e,i,s=ir.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return ar(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:ar(s,e,i)})(t,this._cellCm,this._gridPitch,ir.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:rr(ts*es(t),this._cellCm,this._gridPitch)}return rr(ts,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return ts;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?ar(e,this._cellCm,this._gridPitch):ts*es(t)}_decorSmallField(t){return Math.round(100*(this._imperial?t/2.54:t))/100}_decorSmallCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(100,e)):.1}_decorTextCm(t){const e=this._imperial?2.54*t:t;return Number.isFinite(e)?Math.max(.1,Math.min(__,e)):.1}_decorLargeField(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_decorLargeCm(t){const e=this._imperial?30.48*t:100*t;return Number.isFinite(e)?Math.max(.1,Math.min(Yl*this._cellCm,e)):.1}_angleField(t){const e=Number(t);return Number.isFinite(e)?String(Number(e.toFixed(3))):"0"}_decorBoxOf(t){return"rect"!==t.kind&&"ellipse"!==t.kind&&"furniture"!==t.kind?null:{x:t.x*P_,y:t.y*this._decorH,w:t.w*P_,h:t.h*this._decorH,angle:nr(t.angle)||void 0}}_decorSnapGeometry(t){const e=this._spaceModel();if(!e)return{points:[],segments:[]};const i=t||"",s=this._decorSnapCache;if(s&&s.epoch===this._cfgEpoch&&s.space===this._space&&s.height===this._decorH&&s.exclude===i)return s.geometry;const n=[];for(const e of this._decorList)if(e.id!==t)if("line"===e.kind){const t=[e.x1*P_,e.y1*this._decorH],i=[e.x2*P_,e.y2*this._decorH];n.push({points:[t,i,[(t[0]+i[0])/2,(t[1]+i[1])/2]],segments:[{a:t,b:i}]})}else if("text"===e.kind)n.push({points:[[e.x*P_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(dr(t))}for(const t of e.rooms){const e=ci(t);e?.length&&n.push({points:e.flatMap((t,i)=>{const s=e[(i+1)%e.length];return[t,[(t[0]+s[0])/2,(t[1]+s[1])/2]]}),segments:e.map((t,i)=>({a:t,b:e[(i+1)%e.length]}))})}const o=function(t){return{points:t.flatMap(t=>t.points),segments:t.flatMap(t=>t.segments)}}(n);return this._decorSnapCache={epoch:this._cfgEpoch,space:this._space,height:this._decorH,exclude:i,geometry:o},o}_decorSnap(t,e="mouse",i){const s=this._stageEl,n=this._viewOr(this._baseVb()),o="touch"===e||"pen"===e?14:8,a=s?n.w/Math.max(1,s.clientWidth)*o:this._gridPitch;return function(t,e,i,s){const n=s(t);let o=null;for(const n of e.points){const e=s(n),a=Math.hypot(e[0]-t[0],e[1]-t[1]);a<=i&&(!o||athis._snap(t)).point}_replaceDecor(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>i.id===t?{...i,...e}:i),this.requestUpdate())}_cancelDecorGesture(){const t=this._decorMove?.before||this._dtDrag?.before||this._bdDrag?.before,e=t&&this._serverCfg?.spaces.find(e=>e.id===t.spaceId);if(t&&e){const i=t=>JSON.parse(JSON.stringify(t));void 0!==t.decor?e.decor=i(t.decor):delete e.decor;for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete e[t];Object.assign(e,i(t.plan_transform||{})),this._cfgEpoch++}this._decorMove=null,this._dtDrag=null,this._bdDrag=null,this.requestUpdate()}_decorPointerDown(t){const e=this._decorTool;if("select"===e||"erase"===e?t.target.closest?.(".dshape"):null)return!0;if("line"===e||"rect"===e||"ellipse"===e){t.preventDefault();const i=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorDraft={kind:e,a:i,b:i,pid:t.pointerId},H_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/P_),y:sc(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:rr(ts,this._cellCm,this._gridPitch)},this._decorTextSelection={start:0,end:0},!0}if("furniture"===e)return!!this._furnPalette&&(t.preventDefault(),this._furnPlace(this._svgPoint(t),t.shiftKey),!0);if("select"===e&&(this._decorSel=null),this._bdMovable){const e=this._bdRect,i=this._svgPoint(t),s=e.x+e.w/2,n=e.y+e.h/2,o=-nr(e.angle)*Math.PI/180,a=i[0]-s,r=i[1]-n,l=[s+a*Math.cos(o)-r*Math.sin(o),n+a*Math.sin(o)+r*Math.cos(o)];if(l[0]>=e.x&&l[0]<=e.x+e.w&&l[1]>=e.y&&l[1]<=e.y+e.h)return t.preventDefault(),this._bdStart(t)}return!1}_decorCommitDraft(){const t=this._decorDraft;if(this._decorDraft=null,!t)return;const e=.5*this._gridPitch;if(!function(t,e,i,s){const n=Math.abs(i[0]-e[0]),o=Math.abs(i[1]-e[1]);return"line"===t?Math.hypot(n,o)>=s:n>=s&&o>=s}(t.kind,t.a,t.b,e))return;const i=P_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),a="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),r=sc;let l;if("line"===t.kind)l={id:a,kind:"line",x1:r(t.a[0]/i),y1:r(t.a[1]/s),x2:r(t.b[0]/i),y2:r(t.b[1]/s),...cr(n,!1)};else{const e=r(Math.min(t.a[0],t.b[0])/i),o=r(Math.min(t.a[1],t.b[1])/s),c=Math.abs(t.b[0]-t.a[0])/i,h=Math.abs(t.b[1]-t.a[1])/s;l={id:a,kind:t.kind,x:e,y:o,w:c,h:h,...cr(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=a,this._recordGeometry(this._t("history.decor_add"),o),this._saveConfig(),this.requestUpdate()}_decorShapeDown(t,e){if("decor"!==this._mode)return;const i=this._decorTool;if("text"===i){if("text"!==e.kind)return;return t.stopPropagation(),t.preventDefault(),void this._decorOpenText(e)}"select"!==i&&"erase"!==i||(t.stopPropagation(),t.preventDefault(),"erase"!==i?(this._decorSel=e.id,this._decorMove={id:e.id,start:this._svgPoint(t),orig:JSON.parse(JSON.stringify(e)),pid:t.pointerId,moved:!1,before:this._geometrySnapshot()},H_(t)):this._decorEraseConfirm={id:e.id,kind:e.kind})}_decorMoveUpdate(t){const e=this._decorMove;if("furniture"===e.orig?.kind)return void this._furnMoveUpdate(t);const i=this._svgPoint(t),s=e.orig,n=("line"===s.kind?s.x1:s.x)*P_,o=("line"===s.kind?s.y1:s.y)*this._decorH,a=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let r=(a[0]-n)/P_,l=(a[1]-o)/this._decorH;const c=e.orig,h="line"===c.kind?Math.min(c.x1,c.x2):c.x,d="line"===c.kind?Math.min(c.y1,c.y2):c.y,u="line"===c.kind?Math.abs(c.x2-c.x1):c.w||0,p="line"===c.kind?Math.abs(c.y2-c.y1):c.h||0,_=Yl;r=Math.max(-_-h,Math.min(_-h-u,r)),l=Math.max(-_-d,Math.min(_-d-p,l)),(r||l)&&(e.moved=!0);this._curSpaceCfg.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i=e.orig;return"line"===t.kind?{...t,x1:i.x1+r,y1:i.y1+l,x2:i.x2+r,y2:i.y2+l}:{...t,x:i.x+r,y:i.y+l}}),this.requestUpdate()}_decorShapeDbl(t,e){"decor"===this._mode&&"select"===this._decorTool&&(t.preventDefault(),t.stopPropagation(),this._decorMove=null,this._decorSel=e.id,this._openDecorProperties(e))}_openDecorProperties(t){if("decor"!==this._mode||"select"!==this._decorTool)return;if("text"===t.kind)return void this._decorOpenText(t);if(!["line","rect","ellipse","furniture"].includes(t.kind))return;const e=this._decorResolvedStyle(t),i="line"===t.kind?t:null,s=this._decorBoxOf(t);this._decorShapeDialog={id:t.id,kind:t.kind,color:e.color,opacity:e.opacity,widthCm:e.widthCm,angle:this._angleField(nr(i?zs([i.x1*P_,i.y1*this._decorH],[i.x2*P_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*P_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:rr(s.w,this._cellCm,this._gridPitch),sizeHCm:rr(s.h,this._cellCm,this._gridPitch)}:{},..."furniture"===t.kind?{symbol:t.symbol}:{},..."rect"===t.kind||"ellipse"===t.kind?{fill:e.fill,fillColor:e.fillColor,fillOpacity:e.fillOpacity}:{}}}_decorOpenText(t){if("text"!==t.kind)return;let e=String(t.text??"");const i=[...e.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Ki(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Yi(t.entity,n),a=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!a){const t=e.indexOf("{}");e=t>=0?e.slice(0,t)+o+e.slice(t+2):`${e}${e?" ":""}${o}`}this._decorTextDialog={id:t.id,x:t.x,y:t.y,text:e,color:Rt(t.color,this._decorStyle.color),opacity:sr(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:a||void 0},this._decorTextSelection={start:e.length,end:e.length}}_decorRememberTextSelection(t){this._decorTextSelection={start:t.selectionStart??t.value.length,end:t.selectionEnd??t.value.length}}_decorInsertLiveVariable(t){const e=this._decorTextDialog;if(!e)return;const i=Yi(e.pickerEntity,t);if(!i)return;const s=e.text,n=Math.max(0,Math.min(s.length,this._decorTextSelection.start)),o=Math.max(n,Math.min(s.length,this._decorTextSelection.end));if(s.length-(o-n)+i.length>200)return;const a=s.slice(0,n)+i+s.slice(o),r=n+i.length;this._decorTextSelection={start:r,end:r},this._decorTextDialog={...e,text:a,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(r,r))})}_decorSaveText(){const t=this._decorTextDialog,e=String(t?.text??"").replace(/\r\n?/g,"\n").trim();if(!t||!e)return void(this._decorTextDialog=null);const i=this._geometrySnapshot(),s=this._curSpaceCfg,n={color:t.color,opacity:sr(t.opacity),size_cm:Number(Math.max(.1,Math.min(__,t.sizeCm)).toFixed(4)),...nr(t.angle)?{angle:nr(t.angle)}:{}};if(t.id)s.decor=this._decorList.map(i=>{if(i.id!==t.id)return i;if("text"!==i.kind)return i;if(t.preserveLegacy){const{angle:t,size:s,scale:o,...a}=i;return{...a,text:e,...n}}const{entity:s,attr:o,unit:a,...r}=i,{angle:l,size:c,scale:h,...d}=r;return{...d,text:e,...n}});else{const i="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5);s.decor=[...this._decorList,{id:i,kind:"text",x:t.x,y:t.y,text:e,...n}],this._decorSel=i}this._decorTextDialog=null,this._recordGeometry(this._t(t.id?"history.decor_edit":"history.decor_add"),i),this._saveConfig(),this.requestUpdate()}_decorSaveShape(){const t=this._decorShapeDialog;if(!t)return;const e=this._geometrySnapshot(),i={color:t.color,opacity:sr(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:sr(t.fillOpacity,.25)};this._curSpaceCfg.decor=this._decorList.map(e=>{if(e.id!==t.id)return e;const s="rect"===t.kind||"ellipse"===t.kind,n=cr(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*P_,s=(e.y1+e.y2)/2*this._decorH,o=ar(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),a=nr(t.angle)*Math.PI/180,r=Math.cos(a)*o/2,l=Math.sin(a)*o/2,c=this._snap([i-r,s-l]),h=this._snap([i+r,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:sc(c[0]/P_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/P_),y2:sc(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*P_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(ar(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),a=Math.max(this._gridPitch,ai(ar(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),r=e.x*P_+i/2,l=e.y*this._decorH+s/2,c=nr(t.angle),h=or({x:r-o/2,y:l-a/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:sc(h[0]/P_),y:sc(h[1]/this._decorH),w:o/P_,h:a/this._decorH,..."furniture"===e.kind&&t.symbol?{symbol:t.symbol}:{},...c?{angle:c}:{}}}return e}),this._decorStyle={...i,fill:"rect"===t.kind||"ellipse"===t.kind?i.fill:this._decorStyle.fill,fillColor:"rect"===t.kind||"ellipse"===t.kind?i.fillColor:this._decorStyle.fillColor,fillOpacity:"rect"===t.kind||"ellipse"===t.kind?i.fillOpacity:this._decorStyle.fillOpacity},this._decorShapeDialog=null,this._recordGeometry(this._t("history.decor_edit"),e),this._saveConfig(),this.requestUpdate()}get _dtSel(){return"decor"===this._mode&&"select"===this._decorTool&&this._decorSel&&this._decorList.find(t=>t.id===this._decorSel)||null}_dtPivot(t){return"line"===t.kind?[(t.x1+t.x2)/2*P_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*P_,(t.y+t.h/2)*this._decorH]:[t.x*P_,t.y*this._decorH]}_dtApply(t,e){const i=this._curSpaceCfg;i&&(i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const s={...i};"text"===i.kind&&void 0!==e.textSizeCm&&(delete s.size,delete s.scale);const n={...s};return void 0!==e.textSizeCm&&(n.size_cm=Number(Math.max(.1,Math.min(__,e.textSizeCm)).toFixed(4))),void 0!==e.angle&&(e.angle?n.angle=Number(e.angle.toFixed(2)):delete n.angle),n}),this._cfgEpoch++,this.requestUpdate())}_dtStart(t,e,i,s){const n=this._dtSel;if(!n)return;t.stopPropagation(),t.preventDefault();const[o,a]=this._dtPivot(n),r=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:a,r0:Math.hypot(r[0]-o,r[1]-a),a0:180*Math.atan2(r[1]-a,r[0]-o)/Math.PI,textSizeCm0:"text"===n.kind?this._decorTextSizeCm(n):1,angle0:"line"===n.kind?0:Number(n.angle)||0,sgx:i?.[0],sgy:i?.[1],orig:l||void 0,origShape:JSON.parse(JSON.stringify(n)),before:this._geometrySnapshot(),lineEnd:s,moved:!1},H_(t)}_dtMove(t){const e=this._dtDrag;if(!e)return;const i=this._svgPoint(t);if(void 0!==e.lineEnd&&"line"===e.origShape.kind){const s=this._decorSnap(i,t.pointerType,e.id),n=sc(s[0]/P_),o=sc(s[1]/this._decorH),a=e.origShape,r=0===e.lineEnd?a.x1:a.x2,l=0===e.lineEnd?a.y1:a.y2;return(Math.abs(n-r)>1e-9||Math.abs(o-l)>1e-9)&&(e.moved=!0),void this._replaceDecor(e.id,0===e.lineEnd?{x1:n,y1:o}:{x2:n,y2:o})}if("scale"===e.kind&&e.orig){const s=ur(e.orig,e.sgx??1,e.sgy??1,i[0],i[1],!t.shiftKey,this._gridPitch,this._gridPitch),n=Math.abs(s.x-e.orig.x)>1e-6||Math.abs(s.y-e.orig.y)>1e-6||Math.abs(s.w-e.orig.w)>1e-6||Math.abs(s.h-e.orig.h)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._decorApplyBox(e.id,s)}if("scale"===e.kind){const t=Math.hypot(i[0]-e.ax,i[1]-e.ay);if(e.r0<1e-6)return;const s=Math.max(.1,Math.min(__,e.textSizeCm0*(t/e.r0))),n=Math.abs(s-e.textSizeCm0)>1e-6;if(!n&&!e.moved)return;return e.moved||=n,void this._dtApply(e.id,{textSizeCm:s})}const s=180*Math.atan2(i[1]-e.ay,i[0]-e.ax)/Math.PI;let n=e.angle0+(s-e.a0);t.shiftKey||(n=5*Math.round(n/5)),n=(n%360+360)%360,n>180&&(n-=360);const o=Math.abs(n-e.angle0)>1e-6;(o||e.moved)&&(e.moved||=o,this._dtApply(e.id,{angle:n}))}_dtUp(){const t=this._dtDrag;this._dtDrag=null,t?.moved&&(this._recordGeometry(this._t("history.decor_transform"),t.before),this._saveConfig()),this.requestUpdate()}_dtMeasure(){const t=this._dtSel;if(!t)return void(this._dtBox&&(this._dtBox=null,this.requestUpdate()));let e;if("line"===t.kind){const i=t.x1*P_,s=t.y1*this._decorH,n=t.x2*P_,o=t.y2*this._decorH;e={id:t.id,x:Math.min(i,n),y:Math.min(s,o),w:Math.abs(n-i),h:Math.abs(o-s)}}else if("furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind)e={id:t.id,x:t.x*P_,y:t.y*this._decorH,w:t.w*P_,h:t.h*this._decorH};else{const i=this.renderRoot.querySelector(`text.dtext[data-id="${t.id}"]`);if(!i||"function"!=typeof i.getBBox)return;let s;try{s=i.getBBox()}catch{return}if(!s||!s.width&&!s.height)return;e={id:t.id,x:s.x,y:s.y,w:s.width,h:s.height}}const i=this._dtBox;i&&i.id===e.id&&Math.abs(i.x-e.x)<.01&&Math.abs(i.y-e.y)<.01&&Math.abs(i.w-e.w)<.01&&Math.abs(i.h-e.h)<.01||(this._dtBox=e,this.requestUpdate())}_deleteDecor(t){if(!this._decorList.some(e=>e.id===t))return;const e=this._geometrySnapshot();this._curSpaceCfg.decor=this._decorList.filter(e=>e.id!==t),this._decorSel===t&&(this._decorSel=null),this._recordGeometry(this._t("history.decor_delete"),e),this._saveConfig(),this.requestUpdate()}_decorDeleteSel(){this._decorSel&&this._deleteDecor(this._decorSel)}_confirmDecorErase(){const t=this._decorEraseConfirm;this._decorEraseConfirm=null,t&&this._deleteDecor(t.id)}get _furnWalls(){const t=this._rawPhysicalBodiesR().flatMap(t=>t.map((e,i)=>{const s=t[(i+1)%t.length];return[e[0],e[1],s[0],s[1]]}));return[...this._segments,...t]}get _furnWallReach(){return 6*this._gridPitch}_furnFieldValue(t){return Math.round(100*(this._imperial?t/30.48:t/100))/100}_furnFieldToCm(t){return e=this._imperial?30.48*t:100*t,Number.isFinite(e)?Math.max(1,Math.min(1e4,e)):1;var e}_furnPick(t){const e=function(t){const e=xc(t);return e?{w:e.w,h:e.h}:{w:60,h:60}}(t);this._furnPalette={symbol:t,w:e.w,h:e.h}}_furnPlace(t,e=!1){const i=this._furnPalette,s=this._curSpaceCfg;if(!i||!s)return;const n=P_,o=this._decorH,a=Dc(Sc(i.w,this._cellCm,this._gridPitch,n)),r=Dc(Sc(i.h,this._cellCm,this._gridPitch,n)),l=this._geometrySnapshot(),c=this._decorSnap(t);let h=c[0],d=c[1],u=0;const p=e?null:Ac(h,d,r*o,this._furnWalls,this._furnWallReach,this._gridPitch);p&&(h=p.cx,d=p.cy,u=p.angle);const _="df"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),g={id:_,kind:"furniture",symbol:i.symbol,x:sc(h/n-a/2),y:sc(d/o-r/2),w:a,h:r,...cr(this._decorStyle,!1)};u&&(g.angle=Number(u.toFixed(2))),s.decor=[...this._decorList,g],this._decorSel=_,this._decorTool="select",this._furnPalette=null,this._recordGeometry(this._t("history.decor_add"),l),this._saveConfig(),this.requestUpdate()}_furnMoveUpdate(t){const e=this._decorMove;if("furniture"!==e.orig.kind)return;const i=e.orig,s=this._curSpaceCfg;if(!s)return;const n=P_,o=this._decorH,a=this._svgPoint(t),r=(i.x+i.w/2)*n+(a[0]-e.start[0]),l=(i.y+i.h/2)*o+(a[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Ac(r,l,i.h*o,this._furnWalls,this._furnWallReach,this._gridPitch);if(u)c=u.cx/n-i.w/2,h=u.cy/o-i.h/2,d=u.angle;else{const s=this._decorSnap([r-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=sc(c),h=sc(h),(Math.abs(c-i.x)>1e-9||Math.abs(h-i.y)>1e-9||Math.abs(d-(Number(i.angle)||0))>1e-9)&&(e.moved=!0),s.decor=this._decorList.map(t=>{if(t.id!==e.id)return t;const i={...t,x:c,y:h};return d?i.angle=Number(d.toFixed(2)):delete i.angle,i}),this.requestUpdate()}_decorApplyBox(t,e){const i=this._curSpaceCfg;if(!i)return;const s=P_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=or(e,i.angle,t=>this._snap(t));return{...i,x:sc(o[0]/s),y:sc(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Yl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Yl,e.h/n))}}),this._cfgEpoch++,this.requestUpdate()}get _furnLive(){const t=this._dtDrag;if(!t||"scale"!==t.kind||!t.orig)return null;const e=this._decorList.find(e=>e.id===t.id);if(!e||"furniture"!==e.kind)return null;const i=P_,s=this._decorH,n=e.w*i,o=e.h*s,a=function(t,e,i,s,n){const o=t+i/2,a=e+s/2,r=(Number(n)||0)*Math.PI/180,l=Math.cos(r),c=Math.sin(r),h=(t,e)=>{const i=t-o,s=e-a;return[o+i*l-s*c,a+i*c+s*l]};return[h(t,e),h(t+i,e),h(t+i,e+s),h(t,e+s)]}(e.x*i,e.y*s,n,o,Number(e.angle)||0),r=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=r(a[0],a[1]),c=r(a[0],a[3]);return[{x:l[0],y:l[1],text:this._fmtLen([0,0],[n,0])},{x:c[0],y:c[1],text:this._fmtLen([0,0],[0,o])}]}_renderFurnPalette(){const t=this._furnPalette,e=this._t(this._imperial?"gs.unit_ft":"gs.unit_m");return j`
t.stopPropagation()}>
${this._t("furn.title")} @@ -4791,7 +4808,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 @input=${e=>this._furnPalette={...t,h:this._furnFieldToCm(Number(e.target.value))}} /> ${this._t("furn.place_hint")}
`:j`
${this._t("furn.pick_hint")}
`} -
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,T_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,T_):null}get _bdParams(){const t=this._curSpaceCfg,e=Number(t?.plan_x),i=Number(t?.plan_y),s=Number(t?.plan_scale),n=Number(t?.plan_scale_x),o=Number(t?.plan_scale_y),a=Number.isFinite(s)&&s>0?s:1;return{dx:Number.isFinite(e)?e:0,dy:Number.isFinite(i)?i:0,sx:Number.isFinite(n)&&n>0?n:a,sy:Number.isFinite(o)&&o>0?o:a,angle:nr(t?.plan_angle)}}_openBackdropDialog(t){if(!this._bdMovable||!this._bdRect)return;t?.preventDefault(),t?.stopPropagation(),this._bdDrag=null;const e=this._bdRect;this._backdropDialog={widthCm:rr(e.w,this._cellCm,this._gridPitch),heightCm:rr(e.h,this._cellCm,this._gridPitch),angle:this._angleField(e.angle)}}_saveBackdropDialog(){const t=this._backdropDialog,e=this._bdBase,i=this._bdRect;if(!t||!e||!i)return;const s=nr(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Ul,Math.max(e.w*Wl,ai(ar(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),a=Math.min(e.h*Ul,Math.max(e.h*Wl,ai(ar(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),r=or({x:i.x+i.w/2-o/2,y:i.y+i.h/2-a/2},s,t=>this._snap(t));this._bdApply((r[0]-e.x)/T_,(r[1]-e.y)/T_,o/e.w,a/e.h,s),this._backdropDialog=null,this._recordGeometry(this._t("history.backdrop_transform"),n),this._saveConfig()}get _bdActive(){return"decor"===this._mode&&!!this._bdRect&&"backdrop"===this._decorTool}get _bdMovable(){return"decor"===this._mode&&"backdrop"===this._decorTool&&!!this._bdRect}_bdApply(t,e,i,s,n){const o=this._curSpaceCfg;if(!o)return;o.plan_x=Number(sc(t).toFixed(6)),o.plan_y=Number(sc(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Ul,Math.max(Wl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Ul,Math.max(Wl,s)).toFixed(6));const a=nr(n);a?o.plan_angle=Number(a.toFixed(2)):delete o.plan_angle,this._cfgEpoch++,this.requestUpdate()}_bdStart(t,e,i=!1){const s=this._bdBase,n=this._bdRect;if(!s||!n)return!1;const o=this._svgPoint(t),a=e?e[0]:0,r=e?e[1]:0,l=a>0?n.x:n.x+n.w,c=r>0?n.y:n.y+n.h;return this._bdDrag={kind:i?"rotate":e?"scale":"move",pid:t.pointerId,sx:o[0],sy:o[1],base:s,p0:this._bdParams,fx:l,fy:c,sgx:a,sgy:r,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},O_(t),!0}_bdMove(t){const e=this._bdDrag;if(!e)return;const i=this._svgPoint(t),s=e.base;if("move"===e.kind){const t=e.rect0.x,n=e.rect0.y,o=this._snap([t+(i[0]-e.sx),n+(i[1]-e.sy)]),a=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply((o[0]-s.x)/T_,(o[1]-s.y)/T_,e.p0.sx,e.p0.sy,e.p0.angle)}if("rotate"===e.kind){const s=e.rect0.x+e.rect0.w/2,n=e.rect0.y+e.rect0.h/2,o=180*Math.atan2(e.sy-n,e.sx-s)/Math.PI;let a=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(a=5*Math.round(a/5)),a=nr(a);const r=Math.abs(a-e.p0.angle)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,a)}const n=ur(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*Wl),o=n.w/Math.max(1e-9,s.w),a=n.h/Math.max(1e-9,s.h),r=Math.abs(o-e.p0.sx)>1e-9||Math.abs(a-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!r&&!e.moved)return;e.moved||=r;const l=or(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/T_,(l[1]-s.y)/T_,o,a,e.p0.angle)}get _bdMoved(){if("decor"!==this._mode||!this._bdRect)return!1;const t=this._bdParams;return 0!==t.dx||0!==t.dy||1!==t.sx||1!==t.sy||0!==t.angle}_bdReset(){const t=this._curSpaceCfg;if(!t)return;const e=this._geometrySnapshot();delete t.plan_x,delete t.plan_y,delete t.plan_scale,delete t.plan_scale_x,delete t.plan_scale_y,delete t.plan_angle,this._bdDrag=null,this._recordGeometry(this._t("history.backdrop_transform"),e),this._saveConfig(),this._showToast(this._t("decor.backdrop_reset_done")),this.requestUpdate()}_bdUp(){const t=this._bdDrag;this._bdDrag=null,t?.moved&&(this._recordGeometry(this._t("history.backdrop_transform"),t.before),this._saveConfig()),this.requestUpdate()}get _bdLive(){if(!this._bdDrag)return null;const t=this._bdRect;return t?{x:t.x+t.w/2,y:t.y+t.h/2,text:`${this._fmtLen([0,0],[t.w,0])} × ${this._fmtLen([0,0],[0,t.h])}`}:null}_renderBackdropFrame(t){const e=this._bdRect;if(!this._bdActive||!e)return G;const i=.02*Math.max(t.w,t.h),s=i/4,n=e.x+e.w/2,o=e.y+e.h/2,a=nr(e.angle),r=2.2*i;return W` +
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,P_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,P_):null}get _bdParams(){const t=this._curSpaceCfg,e=Number(t?.plan_x),i=Number(t?.plan_y),s=Number(t?.plan_scale),n=Number(t?.plan_scale_x),o=Number(t?.plan_scale_y),a=Number.isFinite(s)&&s>0?s:1;return{dx:Number.isFinite(e)?e:0,dy:Number.isFinite(i)?i:0,sx:Number.isFinite(n)&&n>0?n:a,sy:Number.isFinite(o)&&o>0?o:a,angle:nr(t?.plan_angle)}}_openBackdropDialog(t){if(!this._bdMovable||!this._bdRect)return;t?.preventDefault(),t?.stopPropagation(),this._bdDrag=null;const e=this._bdRect;this._backdropDialog={widthCm:rr(e.w,this._cellCm,this._gridPitch),heightCm:rr(e.h,this._cellCm,this._gridPitch),angle:this._angleField(e.angle)}}_saveBackdropDialog(){const t=this._backdropDialog,e=this._bdBase,i=this._bdRect;if(!t||!e||!i)return;const s=nr(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Ul,Math.max(e.w*Wl,ai(ar(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),a=Math.min(e.h*Ul,Math.max(e.h*Wl,ai(ar(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),r=or({x:i.x+i.w/2-o/2,y:i.y+i.h/2-a/2},s,t=>this._snap(t));this._bdApply((r[0]-e.x)/P_,(r[1]-e.y)/P_,o/e.w,a/e.h,s),this._backdropDialog=null,this._recordGeometry(this._t("history.backdrop_transform"),n),this._saveConfig()}get _bdActive(){return"decor"===this._mode&&!!this._bdRect&&"backdrop"===this._decorTool}get _bdMovable(){return"decor"===this._mode&&"backdrop"===this._decorTool&&!!this._bdRect}_bdApply(t,e,i,s,n){const o=this._curSpaceCfg;if(!o)return;o.plan_x=Number(sc(t).toFixed(6)),o.plan_y=Number(sc(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Ul,Math.max(Wl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Ul,Math.max(Wl,s)).toFixed(6));const a=nr(n);a?o.plan_angle=Number(a.toFixed(2)):delete o.plan_angle,this._cfgEpoch++,this.requestUpdate()}_bdStart(t,e,i=!1){const s=this._bdBase,n=this._bdRect;if(!s||!n)return!1;const o=this._svgPoint(t),a=e?e[0]:0,r=e?e[1]:0,l=a>0?n.x:n.x+n.w,c=r>0?n.y:n.y+n.h;return this._bdDrag={kind:i?"rotate":e?"scale":"move",pid:t.pointerId,sx:o[0],sy:o[1],base:s,p0:this._bdParams,fx:l,fy:c,sgx:a,sgy:r,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},H_(t),!0}_bdMove(t){const e=this._bdDrag;if(!e)return;const i=this._svgPoint(t),s=e.base;if("move"===e.kind){const t=e.rect0.x,n=e.rect0.y,o=this._snap([t+(i[0]-e.sx),n+(i[1]-e.sy)]),a=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply((o[0]-s.x)/P_,(o[1]-s.y)/P_,e.p0.sx,e.p0.sy,e.p0.angle)}if("rotate"===e.kind){const s=e.rect0.x+e.rect0.w/2,n=e.rect0.y+e.rect0.h/2,o=180*Math.atan2(e.sy-n,e.sx-s)/Math.PI;let a=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(a=5*Math.round(a/5)),a=nr(a);const r=Math.abs(a-e.p0.angle)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,a)}const n=ur(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*Wl),o=n.w/Math.max(1e-9,s.w),a=n.h/Math.max(1e-9,s.h),r=Math.abs(o-e.p0.sx)>1e-9||Math.abs(a-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!r&&!e.moved)return;e.moved||=r;const l=or(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/P_,(l[1]-s.y)/P_,o,a,e.p0.angle)}get _bdMoved(){if("decor"!==this._mode||!this._bdRect)return!1;const t=this._bdParams;return 0!==t.dx||0!==t.dy||1!==t.sx||1!==t.sy||0!==t.angle}_bdReset(){const t=this._curSpaceCfg;if(!t)return;const e=this._geometrySnapshot();delete t.plan_x,delete t.plan_y,delete t.plan_scale,delete t.plan_scale_x,delete t.plan_scale_y,delete t.plan_angle,this._bdDrag=null,this._recordGeometry(this._t("history.backdrop_transform"),e),this._saveConfig(),this._showToast(this._t("decor.backdrop_reset_done")),this.requestUpdate()}_bdUp(){const t=this._bdDrag;this._bdDrag=null,t?.moved&&(this._recordGeometry(this._t("history.backdrop_transform"),t.before),this._saveConfig()),this.requestUpdate()}get _bdLive(){if(!this._bdDrag)return null;const t=this._bdRect;return t?{x:t.x+t.w/2,y:t.y+t.h/2,text:`${this._fmtLen([0,0],[t.w,0])} × ${this._fmtLen([0,0],[0,t.h])}`}:null}_renderBackdropFrame(t){const e=this._bdRect;if(!this._bdActive||!e)return G;const i=.02*Math.max(t.w,t.h),s=i/4,n=e.x+e.w/2,o=e.y+e.h/2,a=nr(e.angle),r=2.2*i;return W` {e.stopPropagation(),e.preventDefault(),this._bdStart(e,[t,n])}}>`})} - `}_renderTextFrame(t){const e=this._dtSel,i=this._dtBox;if(!e||!i||i.id!==e.id)return G;const s=.018*Math.max(t.w,t.h),n=s/4;if("line"===e.kind){const t=[e.x1*T_,e.y1*this._decorH],i=[e.x2*T_,e.y2*this._decorH];return W` + `}_renderTextFrame(t){const e=this._dtSel,i=this._dtBox;if(!e||!i||i.id!==e.id)return G;const s=.018*Math.max(t.w,t.h),n=s/4;if("line"===e.kind){const t=[e.x1*P_,e.y1*this._decorH],i=[e.x2*P_,e.y2*this._decorH];return W` ${[t,i].map((t,e)=>W`this._dtStart(t,"scale",void 0,e)}> @@ -4816,7 +4833,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 cx="${t<0?i.x:i.x+i.w}" cy="${e<0?i.y:i.y+i.h}" r="${s.toFixed(1)}" @pointerdown=${i=>this._dtStart(i,"scale",[t,e])}>`)} - `}_renderDecorLayer(){const t=T_,e=this._decorH,i="decor"===this._mode,s=i&&"erase"===this._decorTool,n=this._decorList.map(n=>{const o="dshape"+(i&&this._decorSel===n.id?" dsel":""),a=this._decorResolvedStyle(n),r=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W``}_renderDecorLayer(){const t=P_,e=this._decorH,i="decor"===this._mode,s=i&&"erase"===this._decorTool,n=this._decorList.map(n=>{const o="dshape"+(i&&this._decorSel===n.id?" dsel":""),a=this._decorResolvedStyle(n),r=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W`
this._decorTextDialog={...t,sizeCm:this._decorTextCm(Number(e.target.value))}} /> ${this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}
@@ -5071,7 +5088,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
- `}_cssPxToRender(t){const e=this._stageEl,i=this._viewOr(this._baseVb());return e?.clientWidth&&e.clientHeight?Math.max(i.w/e.clientWidth,i.h/e.clientHeight)*t:this._gridPitch/8*t}get _boundaryCoarse(){return"touch"===this._boundaryPointerType||"pen"===this._boundaryPointerType}_boundaryTolerances(){return{hit:this._cssPxToRender(this._boundaryCoarse?22:12),cap:this._cssPxToRender(this._boundaryCoarse?10:6),ambiguity:this._cssPxToRender(6)}}_boundaryBlocked(t,e){const i=this._spaceModel();if(!i)return!1;const s=i=>Hl(t,i)||i.some((s,n)=>{const o=i[(n+1)%i.length];return Ns(t,[s[0],s[1],o[0],o[1]])<=e});for(const t of i.wall_columns||[])if(s(Pl(t,this._cellCm,this._gridPitch)))return!0;for(const s of i.partitions||[]){const i=vr(s.cm,this._cellCm,this._gridPitch)/2;if(Ns(t,[s.a[0],s.a[1],s.b[0],s.b[1]])<=Math.max(e,i))return!0}for(const s of i.room_drafts||[])for(let i=0;i+10?vr(n,this._cellCm,this._gridPitch)/2:0)}_boundaryTargetAt(t){const e=this._viewOr(this._baseVb()),i=this._stageEl,s=[this._space,this._cfgEpoch,t[0],t[1],this._boundaryPointerType,e.x,e.y,e.w,e.h,i?.clientWidth||0,i?.clientHeight||0].join("|");if(this._boundaryTargetMemo?.key===s)return this._boundaryTargetMemo.value;const n=this._boundaryTolerances(),o=this._openCuts(),a=this._spaceModel();if(!a)return{kind:"none"};let r=function(t,e,i,s){const{openPull:n,openEndCap:o,solidPull:a,ambiguity:r,eps:l}=s,c=Lc(e,l),h=[];for(const e of i||[]){const i=Wc(t,e,n,o);if(null==i)continue;const s=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=c.find(t=>Ns(s,t.seg)<=4*l);h.push({value:e,seg:e,semantic:a?.pair||`open:${e.join(",")}`,distance:i})}const d=Gc(h,r,l);if("ambiguous"===d)return{kind:"ambiguous",group:"open"};if(d)return{kind:"open",seg:d.value,distance:d.distance};const u=[];for(const e of c){const i=Wc(t,e.seg,a(e.seg));null!=i&&u.push({value:e,seg:e.seg,semantic:e.pair,distance:i})}const p=Gc(u,r,l);if("ambiguous"===p)return{kind:"ambiguous",group:"shared"};if(p)return{kind:"shared",a:p.value.a,b:p.value.b,edge:p.value.seg,distance:p.distance};const _=[];for(const i of e||[]){if(!i?.id)continue;const e=ci(i);if(e)for(let s=0;sNs(d,t.seg)<=4*l)||_.push({value:{room:i,edge:r},seg:r,semantic:String(i.id),distance:h})}}const g=Gc(_,r,l);return"ambiguous"===g?{kind:"ambiguous",group:"outer"}:g?{kind:"outer",...g.value,distance:g.distance}:{kind:"none"}}(t,a.rooms,o,{openPull:n.hit,openEndCap:n.cap,ambiguity:n.ambiguity,eps:.02*this._gridPitch,solidPull:t=>this._solidBoundaryPull(t,o)});return"shared"!==r.kind&&"open"!==r.kind||!this._boundaryBlocked(t,n.hit)||(r={kind:"blocked"}),this._boundaryTargetMemo={key:s,value:r},r}get _boundaryTarget(){return this._markup&&"boundary"===this._tool&&this._cursorPt?this._boundaryTargetAt(this._cursorPt):null}get _boundaryPreview(){const t=this._viewOr(this._baseVb()),e=this._stageEl,i=this._cursorPt,s=this._openWallAnchor,n=[this._markup,this._tool,this._space,this._cfgEpoch,this._boundaryPointerType,i?.[0]??"none",i?.[1]??"none",s?.p?.[0]??"none",s?.p?.[1]??"none",s?.edge?.join(",")??"none",s?.aId??"none",s?.bId??"none",t.x,t.y,t.w,t.h,e?.clientWidth||0,e?.clientHeight||0].join("|");if(this._boundaryPreviewMemo?.key===n)return this._boundaryPreviewMemo.value;const o=t=>(this._boundaryPreviewMemo={key:n,value:t},t);if(!this._markup||"boundary"!==this._tool)return o(null);if(s&&!i)return o({kind:"anchor",point:[...s.p]});if(!i)return o(null);const a=this._openCuts(),r=.02*this._gridPitch;if(s){const{p:t,edge:e}=s,n=Nc(Hc(i,e,Kc(e,a,r),this._gridPitch,1.5*this._gridPitch),e),l=this._boundaryBlocked(i,this._boundaryTolerances().hit)||Ns(i,e)>this._solidBoundaryPull(e,a);return o({kind:"range",seg:[t[0],t[1],n[0],n[1]],invalid:l})}const l=this._boundaryTargetAt(i);if("shared"===l.kind){return o({kind:"anchor",point:Hc(i,l.edge,Kc(l.edge,a,r),this._gridPitch,1.5*this._gridPitch)})}if("open"===l.kind){const t=this._planClosedOpenSpan(l.seg),e=t?Tl([l.seg[0],l.seg[1]],[l.seg[2],l.seg[3]],t.cm,this._cellCm,this._gridPitch):null;return o({kind:"restore",seg:l.seg,body:e})}return"blocked"===l.kind||"ambiguous"===l.kind||"outer"===l.kind?o({kind:"invalid",point:i}):o(null)}get _boundaryHintKey(){if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?"markup.boundary_hint_retry":"markup.boundary_hint_second"}const t=this._boundaryTarget;return t&&"none"!==t.kind?"open"===t.kind?"markup.boundary_hint_restore":"shared"===t.kind?"markup.boundary_hint_open":"outer"===t.kind?"markup.boundary_hint_outer":"blocked"===t.kind?"markup.boundary_hint_blocked":"markup.boundary_hint_ambiguous":"markup.boundary_hint"}get _boundaryStageClass(){if(!this._markup||"boundary"!==this._tool)return"";if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?" boundary-invalid":" boundary-solid"}const t=this._boundaryTarget;return"open"===t?.kind?" boundary-open":"shared"===t?.kind?" boundary-solid":t&&"none"!==t.kind?" boundary-invalid":""}_renderOpenWalls(t){if(t&&!t.showBorders&&!this._editing)return W``;const e=this._openCuts(),i=this._boundaryPreview;if(!e.length&&!i)return W``;const s=(t,e=!1)=>e?W` + `}_cssPxToRender(t){const e=this._stageEl,i=this._viewOr(this._baseVb());return e?.clientWidth&&e.clientHeight?Math.max(i.w/e.clientWidth,i.h/e.clientHeight)*t:this._gridPitch/8*t}get _boundaryCoarse(){return"touch"===this._boundaryPointerType||"pen"===this._boundaryPointerType}_boundaryTolerances(){return{hit:this._cssPxToRender(this._boundaryCoarse?22:12),cap:this._cssPxToRender(this._boundaryCoarse?10:6),ambiguity:this._cssPxToRender(6)}}_boundaryBlocked(t,e){const i=this._spaceModel();if(!i)return!1;const s=i=>Nl(t,i)||i.some((s,n)=>{const o=i[(n+1)%i.length];return Hs(t,[s[0],s[1],o[0],o[1]])<=e});for(const t of i.wall_columns||[])if(s(Pl(t,this._cellCm,this._gridPitch)))return!0;for(const s of i.partitions||[]){const i=vr(s.cm,this._cellCm,this._gridPitch)/2;if(Hs(t,[s.a[0],s.a[1],s.b[0],s.b[1]])<=Math.max(e,i))return!0}for(const s of i.room_drafts||[])for(let i=0;i+10?vr(n,this._cellCm,this._gridPitch)/2:0)}_boundaryTargetAt(t){const e=this._viewOr(this._baseVb()),i=this._stageEl,s=[this._space,this._cfgEpoch,t[0],t[1],this._boundaryPointerType,e.x,e.y,e.w,e.h,i?.clientWidth||0,i?.clientHeight||0].join("|");if(this._boundaryTargetMemo?.key===s)return this._boundaryTargetMemo.value;const n=this._boundaryTolerances(),o=this._openCuts(),a=this._spaceModel();if(!a)return{kind:"none"};let r=function(t,e,i,s){const{openPull:n,openEndCap:o,solidPull:a,ambiguity:r,eps:l}=s,c=Lc(e,l),h=[];for(const e of i||[]){const i=Wc(t,e,n,o);if(null==i)continue;const s=[(e[0]+e[2])/2,(e[1]+e[3])/2],a=c.find(t=>Hs(s,t.seg)<=4*l);h.push({value:e,seg:e,semantic:a?.pair||`open:${e.join(",")}`,distance:i})}const d=Gc(h,r,l);if("ambiguous"===d)return{kind:"ambiguous",group:"open"};if(d)return{kind:"open",seg:d.value,distance:d.distance};const u=[];for(const e of c){const i=Wc(t,e.seg,a(e.seg));null!=i&&u.push({value:e,seg:e.seg,semantic:e.pair,distance:i})}const p=Gc(u,r,l);if("ambiguous"===p)return{kind:"ambiguous",group:"shared"};if(p)return{kind:"shared",a:p.value.a,b:p.value.b,edge:p.value.seg,distance:p.distance};const _=[];for(const i of e||[]){if(!i?.id)continue;const e=ci(i);if(e)for(let s=0;sHs(d,t.seg)<=4*l)||_.push({value:{room:i,edge:r},seg:r,semantic:String(i.id),distance:h})}}const g=Gc(_,r,l);return"ambiguous"===g?{kind:"ambiguous",group:"outer"}:g?{kind:"outer",...g.value,distance:g.distance}:{kind:"none"}}(t,a.rooms,o,{openPull:n.hit,openEndCap:n.cap,ambiguity:n.ambiguity,eps:.02*this._gridPitch,solidPull:t=>this._solidBoundaryPull(t,o)});return"shared"!==r.kind&&"open"!==r.kind||!this._boundaryBlocked(t,n.hit)||(r={kind:"blocked"}),this._boundaryTargetMemo={key:s,value:r},r}get _boundaryTarget(){return this._markup&&"boundary"===this._tool&&this._cursorPt?this._boundaryTargetAt(this._cursorPt):null}get _boundaryPreview(){const t=this._viewOr(this._baseVb()),e=this._stageEl,i=this._cursorPt,s=this._openWallAnchor,n=[this._markup,this._tool,this._space,this._cfgEpoch,this._boundaryPointerType,i?.[0]??"none",i?.[1]??"none",s?.p?.[0]??"none",s?.p?.[1]??"none",s?.edge?.join(",")??"none",s?.aId??"none",s?.bId??"none",t.x,t.y,t.w,t.h,e?.clientWidth||0,e?.clientHeight||0].join("|");if(this._boundaryPreviewMemo?.key===n)return this._boundaryPreviewMemo.value;const o=t=>(this._boundaryPreviewMemo={key:n,value:t},t);if(!this._markup||"boundary"!==this._tool)return o(null);if(s&&!i)return o({kind:"anchor",point:[...s.p]});if(!i)return o(null);const a=this._openCuts(),r=.02*this._gridPitch;if(s){const{p:t,edge:e}=s,n=Hc(Nc(i,e,Kc(e,a,r),this._gridPitch,1.5*this._gridPitch),e),l=this._boundaryBlocked(i,this._boundaryTolerances().hit)||Hs(i,e)>this._solidBoundaryPull(e,a);return o({kind:"range",seg:[t[0],t[1],n[0],n[1]],invalid:l})}const l=this._boundaryTargetAt(i);if("shared"===l.kind){return o({kind:"anchor",point:Nc(i,l.edge,Kc(l.edge,a,r),this._gridPitch,1.5*this._gridPitch)})}if("open"===l.kind){const t=this._planClosedOpenSpan(l.seg),e=t?Tl([l.seg[0],l.seg[1]],[l.seg[2],l.seg[3]],t.cm,this._cellCm,this._gridPitch):null;return o({kind:"restore",seg:l.seg,body:e})}return"blocked"===l.kind||"ambiguous"===l.kind||"outer"===l.kind?o({kind:"invalid",point:i}):o(null)}get _boundaryHintKey(){if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?"markup.boundary_hint_retry":"markup.boundary_hint_second"}const t=this._boundaryTarget;return t&&"none"!==t.kind?"open"===t.kind?"markup.boundary_hint_restore":"shared"===t.kind?"markup.boundary_hint_open":"outer"===t.kind?"markup.boundary_hint_outer":"blocked"===t.kind?"markup.boundary_hint_blocked":"markup.boundary_hint_ambiguous":"markup.boundary_hint"}get _boundaryStageClass(){if(!this._markup||"boundary"!==this._tool)return"";if(this._openWallAnchor){const t=this._boundaryPreview;return"range"===t?.kind&&t.invalid?" boundary-invalid":" boundary-solid"}const t=this._boundaryTarget;return"open"===t?.kind?" boundary-open":"shared"===t?.kind?" boundary-solid":t&&"none"!==t.kind?" boundary-invalid":""}_renderOpenWalls(t){if(t&&!t.showBorders&&!this._editing)return W``;const e=this._openCuts(),i=this._boundaryPreview;if(!e.length&&!i)return W``;const s=(t,e=!1)=>e?W` `${t[0]} ${t[1]}`).join(" L ")} Z`}>`:G} ${"anchor"===i?.kind?s(i.point):"invalid"===i?.kind?s(i.point,!0):G} - `;var n}_openCuts(){const t=this._curSpaceCfg,e=this._spaceModel();return e?Bc(e.rooms,t?.open_spans,T_,.02*this._gridPitch):[]}_openPairs(){const t=this._openCuts();if(!t.length)return[];const e=(this._spaceModel()?.rooms||[]).filter(t=>t.id),i=.02*this._gridPitch,s=[];for(let n=0;n{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return l.some(t=>Ns(e,t)<4*i)});c.length&&s.push({a:e[n],b:e[o],segs:c})}return s}_commitOpenSpans(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch;this._cfgEpoch++;const n=i.rooms;let o=zc(e.open_spans);o.length&&t?.old.length?o=Xc(o,t.old,t.next,T_):o.length||(o=qc(Bc(n,null,T_,s),T_)),o=Yc(o,n,T_,s),this._persistOpenCuts(o.map(t=>Fc(t,T_)))}_persistOpenCuts(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch,n=Yc(qc(t,T_),i.rooms,T_,s),o=n.map(t=>Fc(t,T_));n.length?e.open_spans=n:delete e.open_spans,jc(e.rooms||[],i.rooms,o,s)}_planClosedOpenSpan(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return null;const s=.02*this._gridPitch,n=this._openCuts();let o=Array.isArray(e.walls)?e.walls.slice():[];for(const t of tl(i.rooms,o,n,this._wallKeyPitch,this._cellCm,this._gridPitch,T_))!t.open&&t.cm>0&&(o=Ir(o,t.a,t.b,t.cm,this._wallKeyPitch,T_));const a=function(t,e,i){const s=[(e[0]+e[2])/2,(e[1]+e[3])/2];return t.filter(t=>{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return Math.hypot(e[0]-s[0],e[1]-s[1])>4*i})}(n,t,s);let r=this._normalizeWalls(o,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);if(!(l>0)){const e=[];for(const t of tl(i.rooms,r,a,this._wallKeyPitch,this._cellCm,this._gridPitch,T_))t.open||e.push([t.a[0],t.a[1],t.b[0],t.b[1]]);r=Vc(r,t,e,this._wallKeyPitch,T_,_r),r=this._normalizeWalls(r,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)}return{cuts:a,walls:r,cm:l>0?l:_r}}_closeOpenSpan(t){const e=this._curSpaceCfg;if(!e)return;const i=this._geometrySnapshot(),s=this._planClosedOpenSpan(t);s&&(s.walls.length?e.walls=s.walls:delete e.walls,this._persistOpenCuts(s.cuts),this._showToast(this._t("toast.boundary_restored")),this._recordGeometry(this._t("history.close_boundary"),i),this._saveConfig(),this.requestUpdate())}_boundaryClick(t){const e=this._boundaryRestoreGuard;if(e&&Date.now()>e.until&&(this._boundaryRestoreGuard=null),e&&Date.now()<=e.until&&Math.hypot(t[0]-e.point[0],t[1]-e.point[1])<=this._boundaryTolerances().hit)return;const i=.02*this._gridPitch,s=this._openCuts();if(this._openWallAnchor){const{p:e,edge:l}=this._openWallAnchor;if(Ns(t,l)>this._solidBoundaryPull(l,s))return void this._showToast(this._t("toast.boundary_same_edge"));if(this._boundaryBlocked(t,this._boundaryTolerances().hit))return void this._showToast(this._t("toast.boundary_blocked"));const c=Nc(Hc(t,l,Kc(l,s,i),this._gridPitch,1.5*this._gridPitch),l),h=Math.hypot(c[0]-e[0],c[1]-e[1]);if(this._openWallAnchor=null,this._cursorPt=null,h<.5*this._gridPitch)return void this._showToast(this._t("toast.openwall_short"));const d=[e[0],e[1],c[0],c[1]],u=[...s,d],p=this._curSpaceCfg;if(!p)return;const _=this._geometrySnapshot(),g=this._normalizeWalls(p.walls,u);g.length?p.walls=g:delete p.walls;const m=(p.openings||[]).length;return p.openings=(n=p.openings,o=d,a=T_,r=6*this._gridPitch,n?.length?n.filter(t=>Ns([Number(t.x)*a,Number(t.y)*a],o)>r||!Rr([o[0],o[1]],[o[2],o[3]],Number(t.angle)||0)):n?n.slice():[]),(p.openings||[]).lengththis._pointInRoom(t,e));if(!i)return void this._showToast(this._t("toast.delete_room_pick"));if(!confirm(this._t("confirm.delete_room",{name:i.name})))return;const s=this._curSpaceCfg;if(!s)return;const n=this._geometrySnapshot();s.rooms=s.rooms.filter(t=>t.id!==i.id),this._commitOpenSpans(),this._recordGeometry(this._t("history.delete_room"),n),this._saveConfig(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}get _wallKeyPitch(){return Ql}get _spaceWalls(){const t=this._curSpaceCfg?.walls;return Array.isArray(t)?t:[]}_cfgOpenCuts(){return zc(this._curSpaceCfg?.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_intervalCm(t){const e=this._spaceModel();return e?sl(e.rooms,this._spaceWalls,this._openCuts(),t,this._wallKeyPitch,this._cellCm,this._gridPitch,T_):0}_normalizeWalls(t,e){const i=this._spaceModel();if(!i)return[];return Pr(il(i.rooms,t,e,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),this._curSpaceCfg?.rooms||[],Ql,1,e.map(t=>[t[0]/T_,t[1]/T_,t[2]/T_,t[3]/T_]))}_paperShapes(t){if(!this._spaceWalls.length)return hi(t);const e=this._wallUnionGeometry();return e?.paperD?[{path:e.paperD}]:hi(t)}_wallUnionGeometry(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._physicalBodiesR();if(!e.length&&!i.length)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._roomWallOpeningInputs(),o=`${this._space}|${this._cfgEpoch}|${t.rooms.length}`;return this._wallUnionCache&&this._wallUnionCache.key===o||(this._wallUnionCache={key:o,value:pl(t.rooms,e,s,n,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,i)}),this._wallUnionCache.value}_thickWallCuts(){const t=this._spaceModel();if(!t)return[];const e=this._spaceWalls;if(!e.length)return[];const i=this._openPairs().flatMap(t=>t.segs);return _l(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_wallThickHit(t){const e=this._spaceModel();if(!e)return null;const i=6*this._gridPitch,s=this._openCuts();let n=null;for(const o of tl(e.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){const e=Ns(t,[o.a[0],o.a[1],o.b[0],o.b[1]]);e<=i&&(!n||e0?vr(e,this._cellCm,this._gridPitch):3*this._gridPitch,s=Math.max(i/2,1.25*this._gridPitch);let n="";for(const e of t.segs)n+=(n?" ":"")+Br([[e[0],e[1]],[e[2],e[3]]],s,!1);return{segs:t.segs,open:t.open,d:n}}_wallThickClick(t){const e=this._wallThickHit(t);if(!e)return void this._showToast(this._t("toast.wallthick_pick"));if(e.open)return void this._showToast(this._t("toast.wallthick_open"));const i=e.cm,s=this._viewOr(this._baseVb()),n=(e.a[0]+e.b[0])/2,o=(e.a[1]+e.b[1])/2;this._wallDialog={a:e.a,b:e.b,value:fr(i,this._imperial),roomId:e.roomId,sx:(n-s.x)/s.w*100,sy:(o-s.y)/s.h*100}}_wallThickApply(t){const e=this._wallDialog;if(!e)return;const i=this._curSpaceCfg,s=this._spaceModel();if(!i||!s)return;const n=e.value.trim(),o=n?m_(n):0;if(null==o)return void this._showPhysicalRange(100);const a=this._imperial?2.54*o:o;if(n&&(!Number.isFinite(a)||a<0||a>0&&a<1||a>100))return void this._showPhysicalRange(100);const r=this._geometrySnapshot(),l=n&&a>0?a:null,c=this._openCuts();let h;h=t&&e.roomId?Fr(i.walls,s.rooms,e.roomId,l,this._wallKeyPitch,c,T_):Ir(i.walls,e.a,e.b,l,this._wallKeyPitch,T_),h=this._normalizeWalls(h,c),h.length?i.walls=h:delete i.walls,this._wallDialog=null,this._showToast(this._t(null==l?"toast.wallthick_cleared":"toast.wallthick_set")),this._recordGeometry(this._t("history.wall_thickness"),r),this._saveConfig(),this.requestUpdate()}_wallHatchDefs(t){if(!this._spaceWalls.length&&!this._physicalBodiesR().length&&!this._markup)return W``;const e=Math.max(.4,1/Math.max(this._zoom,.4)),i=t||"#607d8b";return W` + `;var n}_openCuts(){const t=this._curSpaceCfg,e=this._spaceModel();return e?Bc(e.rooms,t?.open_spans,P_,.02*this._gridPitch):[]}_openPairs(){const t=this._openCuts();if(!t.length)return[];const e=(this._spaceModel()?.rooms||[]).filter(t=>t.id),i=.02*this._gridPitch,s=[];for(let n=0;n{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return l.some(t=>Hs(e,t)<4*i)});c.length&&s.push({a:e[n],b:e[o],segs:c})}return s}_commitOpenSpans(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch;this._cfgEpoch++;const n=i.rooms;let o=zc(e.open_spans);o.length&&t?.old.length?o=Xc(o,t.old,t.next,P_):o.length||(o=qc(Bc(n,null,P_,s),P_)),o=Yc(o,n,P_,s),this._persistOpenCuts(o.map(t=>Fc(t,P_)))}_persistOpenCuts(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return;const s=.02*this._gridPitch,n=Yc(qc(t,P_),i.rooms,P_,s),o=n.map(t=>Fc(t,P_));n.length?e.open_spans=n:delete e.open_spans,jc(e.rooms||[],i.rooms,o,s)}_planClosedOpenSpan(t){const e=this._curSpaceCfg,i=this._spaceModel();if(!e||!i)return null;const s=.02*this._gridPitch,n=this._openCuts();let o=Array.isArray(e.walls)?e.walls.slice():[];for(const t of tl(i.rooms,o,n,this._wallKeyPitch,this._cellCm,this._gridPitch,P_))!t.open&&t.cm>0&&(o=Ir(o,t.a,t.b,t.cm,this._wallKeyPitch,P_));const a=function(t,e,i){const s=[(e[0]+e[2])/2,(e[1]+e[3])/2];return t.filter(t=>{const e=[(t[0]+t[2])/2,(t[1]+t[3])/2];return Math.hypot(e[0]-s[0],e[1]-s[1])>4*i})}(n,t,s);let r=this._normalizeWalls(o,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);if(!(l>0)){const e=[];for(const t of tl(i.rooms,r,a,this._wallKeyPitch,this._cellCm,this._gridPitch,P_))t.open||e.push([t.a[0],t.a[1],t.b[0],t.b[1]]);r=Vc(r,t,e,this._wallKeyPitch,P_,_r),r=this._normalizeWalls(r,a),l=sl(i.rooms,r,a,t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)}return{cuts:a,walls:r,cm:l>0?l:_r}}_closeOpenSpan(t){const e=this._curSpaceCfg;if(!e)return;const i=this._geometrySnapshot(),s=this._planClosedOpenSpan(t);s&&(s.walls.length?e.walls=s.walls:delete e.walls,this._persistOpenCuts(s.cuts),this._showToast(this._t("toast.boundary_restored")),this._recordGeometry(this._t("history.close_boundary"),i),this._saveConfig(),this.requestUpdate())}_boundaryClick(t){const e=this._boundaryRestoreGuard;if(e&&Date.now()>e.until&&(this._boundaryRestoreGuard=null),e&&Date.now()<=e.until&&Math.hypot(t[0]-e.point[0],t[1]-e.point[1])<=this._boundaryTolerances().hit)return;const i=.02*this._gridPitch,s=this._openCuts();if(this._openWallAnchor){const{p:e,edge:l}=this._openWallAnchor;if(Hs(t,l)>this._solidBoundaryPull(l,s))return void this._showToast(this._t("toast.boundary_same_edge"));if(this._boundaryBlocked(t,this._boundaryTolerances().hit))return void this._showToast(this._t("toast.boundary_blocked"));const c=Hc(Nc(t,l,Kc(l,s,i),this._gridPitch,1.5*this._gridPitch),l),h=Math.hypot(c[0]-e[0],c[1]-e[1]);if(this._openWallAnchor=null,this._cursorPt=null,h<.5*this._gridPitch)return void this._showToast(this._t("toast.openwall_short"));const d=[e[0],e[1],c[0],c[1]],u=[...s,d],p=this._curSpaceCfg;if(!p)return;const _=this._geometrySnapshot(),g=this._normalizeWalls(p.walls,u);g.length?p.walls=g:delete p.walls;const m=(p.openings||[]).length;return p.openings=(n=p.openings,o=d,a=P_,r=6*this._gridPitch,n?.length?n.filter(t=>Hs([Number(t.x)*a,Number(t.y)*a],o)>r||!Rr([o[0],o[1]],[o[2],o[3]],Number(t.angle)||0)):n?n.slice():[]),(p.openings||[]).lengththis._pointInRoom(t,e));if(!i)return void this._showToast(this._t("toast.delete_room_pick"));if(!confirm(this._t("confirm.delete_room",{name:i.name})))return;const s=this._curSpaceCfg;if(!s)return;const n=this._geometrySnapshot();s.rooms=s.rooms.filter(t=>t.id!==i.id),this._commitOpenSpans(),this._recordGeometry(this._t("history.delete_room"),n),this._saveConfig(),this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate()}get _wallKeyPitch(){return Ql}get _spaceWalls(){const t=this._curSpaceCfg?.walls;return Array.isArray(t)?t:[]}_cfgOpenCuts(){return zc(this._curSpaceCfg?.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_intervalCm(t){const e=this._spaceModel();return e?sl(e.rooms,this._spaceWalls,this._openCuts(),t,this._wallKeyPitch,this._cellCm,this._gridPitch,P_):0}_normalizeWalls(t,e){const i=this._spaceModel();if(!i)return[];return Pr(il(i.rooms,t,e,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),this._curSpaceCfg?.rooms||[],Ql,1,e.map(t=>[t[0]/P_,t[1]/P_,t[2]/P_,t[3]/P_]))}_paperShapes(t){if(!this._spaceWalls.length)return hi(t);const e=this._wallUnionGeometry();return e?.paperD?[{path:e.paperD}]:hi(t)}_wallUnionGeometry(){const t=this._spaceModel();if(!t)return null;const e=this._spaceWalls,i=this._physicalBodiesR();if(!e.length&&!i.length)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._roomWallOpeningInputs(),o=`${this._space}|${this._cfgEpoch}|${t.rooms.length}`;return this._wallUnionCache&&this._wallUnionCache.key===o||(this._wallUnionCache={key:o,value:pl(t.rooms,e,s,n,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,i)}),this._wallUnionCache.value}_thickWallCuts(){const t=this._spaceModel();if(!t)return[];const e=this._spaceWalls;if(!e.length)return[];const i=this._openPairs().flatMap(t=>t.segs);return _l(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]])}_wallThickHit(t){const e=this._spaceModel();if(!e)return null;const i=6*this._gridPitch,s=this._openCuts();let n=null;for(const o of tl(e.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){const e=Hs(t,[o.a[0],o.a[1],o.b[0],o.b[1]]);e<=i&&(!n||e0?vr(e,this._cellCm,this._gridPitch):3*this._gridPitch,s=Math.max(i/2,1.25*this._gridPitch);let n="";for(const e of t.segs)n+=(n?" ":"")+Br([[e[0],e[1]],[e[2],e[3]]],s,!1);return{segs:t.segs,open:t.open,d:n}}_wallThickClick(t){const e=this._wallThickHit(t);if(!e)return void this._showToast(this._t("toast.wallthick_pick"));if(e.open)return void this._showToast(this._t("toast.wallthick_open"));const i=e.cm,s=this._viewOr(this._baseVb()),n=(e.a[0]+e.b[0])/2,o=(e.a[1]+e.b[1])/2;this._wallDialog={a:e.a,b:e.b,value:fr(i,this._imperial),roomId:e.roomId,sx:(n-s.x)/s.w*100,sy:(o-s.y)/s.h*100}}_wallThickApply(t){const e=this._wallDialog;if(!e)return;const i=this._curSpaceCfg,s=this._spaceModel();if(!i||!s)return;const n=e.value.trim(),o=n?f_(n):0;if(null==o)return void this._showPhysicalRange(100);const a=this._imperial?2.54*o:o;if(n&&(!Number.isFinite(a)||a<0||a>0&&a<1||a>100))return void this._showPhysicalRange(100);const r=this._geometrySnapshot(),l=n&&a>0?a:null,c=this._openCuts();let h;h=t&&e.roomId?Fr(i.walls,s.rooms,e.roomId,l,this._wallKeyPitch,c,P_):Ir(i.walls,e.a,e.b,l,this._wallKeyPitch,P_),h=this._normalizeWalls(h,c),h.length?i.walls=h:delete i.walls,this._wallDialog=null,this._showToast(this._t(null==l?"toast.wallthick_cleared":"toast.wallthick_set")),this._recordGeometry(this._t("history.wall_thickness"),r),this._saveConfig(),this.requestUpdate()}_wallHatchDefs(t){if(!this._spaceWalls.length&&!this._physicalBodiesR().length&&!this._markup)return W``;const e=Math.max(.4,1/Math.max(this._zoom,.4)),i=t||"#607d8b";return W` - `}_resolvedRoomFills(t,e){const i=new Map,s=new Map;for(const n of t.rooms){const t=this._roomDialog&&n.id===this._roomEditId?this._roomFill||e.fill:Is(e.fill,n),o=this._roomDialog&&n.id===this._roomEditId?this._roomCustomFill||e.customFill:rs(e.customFill,n),a=ps(t,"lqi"===t&&n.area?this._roomLqi(n.area):null,"light"===t?co(ro(this._renderPlanHass,this._renderDevices,n,this._virtualLights)):"none","temp"===t?this._roomTemp(n):null,e.tempMin,e.tempMax,this._fillColors,o);i.set(n,a),n.id&&s.set(n.id,a)}return{byRoom:i,byId:s}}_spaceDisplayForRender(){const t=ls(this._curSpaceCfg),e=this._spaceDialog;return e&&"edit"===e.mode&&e.spaceId===this._space?{...t,showBorders:e.showBorders,showNames:e.showNames,hideDecor:e.hideDecor,hideOpenings:e.hideOpenings,color:e.roomColor,opacity:e.roomOpacity,fill:e.fillMode,customFill:e.customFill?as(e.customFill):os,glow:e.glowEnabled,tempMin:e.tempMin,tempMax:e.tempMax,showLqi:e.showLqi,cardFontScale:e.cardFontScale,labelTemp:e.labelTemp,labelHum:e.labelHum,labelLqi:e.labelLqi,labelLight:e.labelLight}:t}_openingWallIndexFor(t,e){const i=t.rooms.map(t=>`${t.id}:${t.poly?.map(t=>t.join(",")).join("/")||`${t.x},${t.y},${t.w},${t.h}`}`).join(";"),s=this._spaceWalls.map(t=>`${t.key}:${t.a?.join(",")||""}:${t.b?.join(",")||""}:${t.cm}`).join(";"),n=e.map(t=>t.join(",")).join(";"),o=[t.id,this._cfgEpoch,this._wallKeyPitch,this._cellCm,this._gridPitch,i,s,n].join("|");let a=this._openingWallIndexCache.get(o);return a||(a=ml(t.rooms,this._spaceWalls,e,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)),v_(this._openingWallIndexCache,o,a,4),{key:o,value:a}}_renderOpeningTunnelFills(t,e,i="data"){if(this._markup||!this._spaceWalls.length||!this._openingsR.length)return W``;if("glow-base"===i&&![...e.byRoom.values()].some(Boolean))return W``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingsR.map(t=>({x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=n.map(t=>`${t.x},${t.y},${t.angle},${t.length}`).join(";"),a=this._openingWallIndexFor(t,s),r=`${a.key}|${o}`;return this._openingTunnelCache&&this._openingTunnelCache.key===r||(this._openingTunnelCache={key:r,value:xl(a.value,n)}),yu({openings:this._openingsR,geometries:this._openingTunnelCache.value,fillsByRoomId:e.byId,idPrefix:`${t.id}-${i}`,groupClass:"data"===i?"opening-tunnels":"opening-tunnels glow-base-tunnels",dataLayer:i})}_resolvedGlowBase(t,e,i){const s=new Map,n=new Map,o=this._fillColors.glow_base;for(const a of t.rooms){const t=i.byRoom.get(a),r=Fs(e.glow,a)&&(!t||t.opacity<=0)?{color:o.c,opacity:o.a,mode:"glow"}:null;s.set(a,r),a.id&&n.set(a.id,r)}return{byRoom:s,byId:n}}_renderGlowBaseRooms(t,e){if(this._markup||![...e.byRoom.values()].some(Boolean))return W``;const i=new Map(t.rooms.map(t=>[t,ci(t)])),s=this._openPairs().flatMap(t=>t.segs),n=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",o=t.rooms.map(o=>{const a=e.byRoom.get(o)||null,r=i.get(o)||null;if(!a||!r)return G;const l=this._spaceWalls.length&&o.id&&ol(t.rooms,o.id,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||r,c=Di(l,t.rooms.filter(t=>t!==o).map(t=>i.get(t)).filter(t=>!!t)),h=this._cleanFloor(o,l,t).path;return h||c.length?W``}_resolvedRoomFills(t,e){const i=new Map,s=new Map;for(const n of t.rooms){const t=this._roomDialog&&n.id===this._roomEditId?this._roomFill||e.fill:Is(e.fill,n),o=this._roomDialog&&n.id===this._roomEditId?this._roomCustomFill||e.customFill:rs(e.customFill,n),a=ps(t,"lqi"===t&&n.area?this._roomLqi(n.area):null,"light"===t?co(ro(this._renderPlanHass,this._renderDevices,n,this._virtualLights)):"none","temp"===t?this._roomTemp(n):null,e.tempMin,e.tempMax,this._fillColors,o);i.set(n,a),n.id&&s.set(n.id,a)}return{byRoom:i,byId:s}}_spaceDisplayForRender(){const t=ls(this._curSpaceCfg),e=this._spaceDialog;return e&&"edit"===e.mode&&e.spaceId===this._space?{...t,showBorders:e.showBorders,showNames:e.showNames,hideDecor:e.hideDecor,hideOpenings:e.hideOpenings,color:e.roomColor,opacity:e.roomOpacity,fill:e.fillMode,customFill:e.customFill?as(e.customFill):os,glow:e.glowEnabled,tempMin:e.tempMin,tempMax:e.tempMax,showLqi:e.showLqi,cardFontScale:e.cardFontScale,labelTemp:e.labelTemp,labelHum:e.labelHum,labelLqi:e.labelLqi,labelLight:e.labelLight}:t}_openingWallIndexFor(t,e){const i=t.rooms.map(t=>`${t.id}:${t.poly?.map(t=>t.join(",")).join("/")||`${t.x},${t.y},${t.w},${t.h}`}`).join(";"),s=this._spaceWalls.map(t=>`${t.key}:${t.a?.join(",")||""}:${t.b?.join(",")||""}:${t.cm}`).join(";"),n=e.map(t=>t.join(",")).join(";"),o=[t.id,this._cfgEpoch,this._wallKeyPitch,this._cellCm,this._gridPitch,i,s,n].join("|");let a=this._openingWallIndexCache.get(o);return a||(a=ml(t.rooms,this._spaceWalls,e,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)),y_(this._openingWallIndexCache,o,a,4),{key:o,value:a}}_renderOpeningTunnelFills(t,e,i="data"){if(this._markup||!this._spaceWalls.length||!this._openingsR.length)return W``;if("glow-base"===i&&![...e.byRoom.values()].some(Boolean))return W``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingsR.map(t=>({x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=n.map(t=>`${t.x},${t.y},${t.angle},${t.length}`).join(";"),a=this._openingWallIndexFor(t,s),r=`${a.key}|${o}`;return this._openingTunnelCache&&this._openingTunnelCache.key===r||(this._openingTunnelCache={key:r,value:xl(a.value,n)}),yu({openings:this._openingsR,geometries:this._openingTunnelCache.value,fillsByRoomId:e.byId,idPrefix:`${t.id}-${i}`,groupClass:"data"===i?"opening-tunnels":"opening-tunnels glow-base-tunnels",dataLayer:i})}_resolvedGlowBase(t,e,i){const s=new Map,n=new Map,o=this._fillColors.glow_base;for(const a of t.rooms){const t=i.byRoom.get(a),r=Fs(e.glow,a)&&(!t||t.opacity<=0)?{color:o.c,opacity:o.a,mode:"glow"}:null;s.set(a,r),a.id&&n.set(a.id,r)}return{byRoom:s,byId:n}}_renderGlowBaseRooms(t,e){if(this._markup||![...e.byRoom.values()].some(Boolean))return W``;const i=new Map(t.rooms.map(t=>[t,ci(t)])),s=this._openPairs().flatMap(t=>t.segs),n=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",o=t.rooms.map(o=>{const a=e.byRoom.get(o)||null,r=i.get(o)||null;if(!a||!r)return G;const l=this._spaceWalls.length&&o.id&&ol(t.rooms,o.id,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||r,c=Di(l,t.rooms.filter(t=>t!==o).map(t=>i.get(t)).filter(t=>!!t)),h=this._cleanFloor(o,l,t).path;return h||c.length?W``:o.poly||l!==r?W` - `}_isoDecorationLayers(t){const e="undefined"==typeof CSS||"function"!=typeof CSS.supports||CSS.supports("filter","blur(1px)"),i="function"==typeof matchMedia&&matchMedia("(forced-colors: active)").matches;return function(t){const e=!!t.showBorders;return{structural:e,panels:e&&!t.hideOpenings,shadows:e&&t.filtersSupported&&!t.forcedColors,materialNuance:e&&!t.forcedColors,floorSymbols:!t.hideOpenings&&!e}}({showBorders:t.showBorders,hideOpenings:t.hideOpenings,filtersSupported:e,forcedColors:i})}_isoOpeningPanels(t){if(!t.panels)return[];const e=this._isoScene();if(!e)return[];return e.openings.flatMap(t=>{const e=this._openingsR[t.sourceIndex];return e?i_(t,this._openingAmt(e)):[]}).sort((t,e)=>t.depth-e.depth||t.sourceIndex-e.sourceIndex||t.leaf-e.leaf)}_renderIsoDefs(t,e){return W` + `}_isoDecorationLayers(t){const e="undefined"==typeof CSS||"function"!=typeof CSS.supports||CSS.supports("filter","blur(1px)"),i="function"==typeof matchMedia&&matchMedia("(forced-colors: active)").matches;return function(t){const e=!!t.showBorders;return{structural:e,panels:e&&!t.hideOpenings,shadows:e&&t.filtersSupported&&!t.forcedColors,materialNuance:e&&!t.forcedColors,floorSymbols:!t.hideOpenings&&!e}}({showBorders:t.showBorders,hideOpenings:t.hideOpenings,filtersSupported:e,forcedColors:i})}_isoOpeningPanels(t){if(!t.panels)return[];const e=this._isoScene();if(!e)return[];return e.openings.flatMap(t=>{const e=this._openingsR[t.sourceIndex];return e?s_(t,this._openingAmt(e)):[]}).sort((t,e)=>t.depth-e.depth||t.sourceIndex-e.sourceIndex||t.leaf-e.leaf)}_renderIsoDefs(t,e){return W` ${"walls"===e&&t.materialNuance?W` @@ -5146,7 +5163,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${t.panels?W``:G} - `:W``}_roomHoverPaths(t){const e=this._hoverRoom;if("view"!==this._mode||!e||e.space!==t.id)return null;const i=t.rooms.find(t=>t===e.room||!!t.id&&t.id===e.room.id);if(!i)return null;const s=ci(i);if(!s)return null;const n=t.rooms.filter(t=>t!==i).map(t=>({room:t,poly:ci(t)})).filter(t=>!!t.poly),o=Di(s,n.map(t=>t.poly)),a=this._openPairs(),r=a.flatMap(t=>t.segs),l=i.id?a.filter(t=>t.a.id===i.id||t.b.id===i.id).flatMap(t=>t.segs):a.flatMap(t=>t.segs),c=this._spaceWalls,h=c.length&&i.id&&ol(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||s,d=[{axis:s,face:h}];for(const e of o){const i=n.find(t=>t.poly===e)?.room;let s=e;if(c.length&&i?.id){const n=Qr(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);n&&(s=gl(n.poly,n.offsets)||e)}d.push({axis:e,face:s})}const u=this._roomWallOpeningInputs(this._openingsR,t).map(t=>{const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,s=Math.sin(e)*t.length/2;return[t.x-i,t.y-s,t.x+i,t.y+s]}),p=.02*this._gridPitch,_=l.concat(u),g=d.map(({axis:t,face:e})=>{const i=_.map(i=>((t,e,i)=>{const s=t[2]-t[0],n=t[3]-t[1],o=Math.hypot(s,n);if(o.05)&&Ns([l,c],[i[0],i[1],s[0],s[1]])<=4*p){h=!0;break}}if(!h)return null;let d=null;for(let t=0;t.05)continue;const u=Ns([l,c],[e[0],e[1],s[0],s[1]]);(!d||u!!t);return i.length?Ds(e,i,p).map(t=>`M ${t[0]} ${t[1]} L ${t[2]} ${t[3]}`).join(" "):`M ${e.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`}).filter(Boolean).join(" ");if(!g)return null;const m=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`;return{fillD:[this._cleanFloor(i,h,t).path||m(h),...o.map(m)].join(" "),outlineD:g}}_renderRoomHoverFill(t){return t?W` + `:W``}_roomHoverPaths(t){const e=this._hoverRoom;if("view"!==this._mode||!e||e.space!==t.id)return null;const i=t.rooms.find(t=>t===e.room||!!t.id&&t.id===e.room.id);if(!i)return null;const s=ci(i);if(!s)return null;const n=t.rooms.filter(t=>t!==i).map(t=>({room:t,poly:ci(t)})).filter(t=>!!t.poly),o=Di(s,n.map(t=>t.poly)),a=this._openPairs(),r=a.flatMap(t=>t.segs),l=i.id?a.filter(t=>t.a.id===i.id||t.b.id===i.id).flatMap(t=>t.segs):a.flatMap(t=>t.segs),c=this._spaceWalls,h=c.length&&i.id&&ol(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||s,d=[{axis:s,face:h}];for(const e of o){const i=n.find(t=>t.poly===e)?.room;let s=e;if(c.length&&i?.id){const n=Qr(t.rooms,i.id,c,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);n&&(s=gl(n.poly,n.offsets)||e)}d.push({axis:e,face:s})}const u=this._roomWallOpeningInputs(this._openingsR,t).map(t=>{const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,s=Math.sin(e)*t.length/2;return[t.x-i,t.y-s,t.x+i,t.y+s]}),p=.02*this._gridPitch,_=l.concat(u),g=d.map(({axis:t,face:e})=>{const i=_.map(i=>((t,e,i)=>{const s=t[2]-t[0],n=t[3]-t[1],o=Math.hypot(s,n);if(o.05)&&Hs([l,c],[i[0],i[1],s[0],s[1]])<=4*p){h=!0;break}}if(!h)return null;let d=null;for(let t=0;t.05)continue;const u=Hs([l,c],[e[0],e[1],s[0],s[1]]);(!d||u!!t);return i.length?Ds(e,i,p).map(t=>`M ${t[0]} ${t[1]} L ${t[2]} ${t[3]}`).join(" "):`M ${e.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`}).filter(Boolean).join(" ");if(!g)return null;const m=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`;return{fillD:[this._cleanFloor(i,h,t).path||m(h),...o.map(m)].join(" "),outlineD:g}}_renderRoomHoverFill(t){return t?W` `:W``}_renderRoomHoverOutline(t){return t?W` @@ -5170,7 +5187,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
-
`:j``}_openingAt(t){if(!this._openingsR.length)return null;const e=this._openingsR.flatMap(e=>{const i=e.angle*Math.PI/180,s=t[0]-e.rx,n=t[1]-e.ry,o=s*Math.cos(i)+n*Math.sin(i);return Math.abs(o)>e.rlen/2+12?[]:[{o:e,localY:-s*Math.sin(i)+n*Math.cos(i)}]});if(!e.length)return null;const i=this._spaceModel();if(!i)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return e.find(({o:t,localY:e})=>{const i="gate"===t.type?!t.flip_v:t.flip_v,s=t.partitionHost||this._spaceWalls.length||"gate"===t.type?this._openingFace(t,n,!!i):{ox:0,oy:0,cm:0,side:-1},o=tu({type:t.type,length:t.rlen,angle:t.angle,amount:this._openingAmt(t),flipH:!!t.flip_h,flipV:!!t.flip_v,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s});return Math.abs(e)<=o.hitHalf})?.o||null}_resolveOpeningPlacement(t){const e=this._openingPreset;if("opening"!==this._tool||!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._openCuts(),n=this._openingWallIndexFor(i,s),o=`${n.key}|partitions:${this._cfgEpoch}`;var a,r,l;this._openingPlacementIntervalsCache&&this._openingPlacementIntervalsCache.key===o||(this._openingPlacementIntervalsCache={key:o,value:[...tl(i.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_),...(a=i.partitions,r=this._cellCm,l=this._gridPitch,a.flatMap(t=>!sd(t.a)||!sd(t.b)||Math.hypot(t.b[0]-t.a[0],t.b[1]-t.a[1])<=1e-9?[]:[{roomId:"",a:[t.a[0],t.a[1]],b:[t.b[0],t.b[1]],key:`partition:${t.id}`,kind:"outer",cm:t.cm,open:!1,half:vr(t.cm,r,l)/2,partitionHost:{kind:"partition",id:t.id}}]))]});const c=l_({pointer:[t[0],t[1]],preset:e,geometryRevision:this._cfgEpoch,renderedLength:this._cmToUnits(e.lengthCm),intervals:this._openingPlacementIntervalsCache.value,baseTolerance:1.5*this._gridPitch,bodyPointerPadding:this._cssPxToRender(this._boundaryCoarse?10:6),gridStep:this._gridPitch});this._openingJambBlockCm=c.jambBlockedTarget?c.jambBlockedTarget.physicalHalfWidth/this._gridPitch*this._cellCm:null;const h=c.candidate;if(!h)return null;const d="gate"===h.type?!h.flipV:h.flipV;let u;if(h.host){const t=ad({id:"preview",type:h.type,x:h.x/T_,y:h.y/T_,angle:h.angle,length:h.renderedLength/T_,host:h.host},i.partitions,T_,this._cellCm,this._gridPitch).resolved;u=t?hd(t,d):{ox:0,oy:0,cm:0,side:-1}}else u=bl(n.value,{x:h.x,y:h.y,angle:h.angle,length:h.renderedLength,flip_v:d});const p="mi"===this.hass?.config?.unit_system?.length,_=pi([h.x,h.y],h.angle,h.renderedLength,i.rooms,this._gridPitch/2),g=(_?[{distance:_.sideA,midpoint:_.midA},{distance:_.sideB,midpoint:_.midB}]:h.measure.labels).map(t=>({x:t.midpoint[0],y:t.midpoint[1],text:ri(t.distance/this._gridPitch*this._cellCm,p)}));return{...h,face:u,measure:{labels:g,guide:h.measure.guide}}}_activateOpeningPlacement(t){this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingPreset=function(t,e){return{type:t,lengthCm:n_(t),flipH:!1,flipV:!1,revision:e}}(t,++this._openingPresetRevision),this._openingHoverCandidate=null,this._cursorPt=null)}_clearOpeningPlacement(t){this._openingHoverCandidate=null,this._openingJambBlockCm=null,t&&(this._openingPreset=null,this._openingRebindId=null)}_openingClick(t){const e=this._spaceModel();if(!e)return;const i=this._openingRebindId?null:this._openingAt(t);if(i)return void this._editOpening(i);const s=this._openingPreset;if(!s)return;const n=this._openingHoverCandidate,o=n&&c_(n,[t[0],t[1]],s.revision,this._cfgEpoch)?n:this._resolveOpeningPlacement(t);if(!o){if(null!=this._openingJambBlockCm)return void this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(this._openingJambBlockCm,this._imperial)}));const i=1.5*this._gridPitch,s=ui(t,e.rooms,i);return s&&function(t,e,i,s,n){for(const o of s)if(!(Ns([t,e],o)>n)&&Rr([o[0],o[1]],[o[2],o[3]],i))return!0;return!1}(s.x,s.y,s.angle,this._openCuts(),i)?void this._showToast(this._t("toast.opening_on_virtual")):void this._showToast(this._t("toast.opening_no_wall"))}const a=this._openingRebindId?this._curSpaceCfg?.openings?.find(t=>t.id===this._openingRebindId):null;this._openingDialog={...a?{id:a.id,type:a.type,lengthCm:Math.round(a.length*T_/this._gridPitch*this._cellCm),lengthTouched:!1,contact:a.contact||"",lock:a.lock||"",invert:!!a.invert,flipH:!!a.flip_h,flipV:!!a.flip_v}:{type:o.type,lengthCm:o.lengthCm,contact:"",lock:"",invert:!1,flipH:o.flipH,flipV:o.flipV},...o.host?{host:o.host}:{},x:o.x,y:o.y,angle:o.angle},this._openingRebindId=null,this._openingHoverCandidate=null,this._cursorPt=null}_editOpening(t){this._openingDialog={id:t.id,type:t.type,lengthCm:Math.round(t.rlen/this._gridPitch*this._cellCm),lengthTouched:!1,contact:t.contact||"",lock:t.lock||"",invert:!!t.invert,flipH:!!t.flip_h,flipV:!!t.flip_v,...t.host?{host:{...t.host}}:{},x:t.rx,y:t.ry,angle:t.angle}}_opPointerDown(t,e){if("plan"===this._mode&&this._spaceModel()&&"resize"!==this._tool){t.preventDefault(),t.stopPropagation();try{O_(t)}catch{}this._opDrag={id:e.id,moved:!1,sx:t.clientX,sy:t.clientY,dirty:!1,before:this._geometrySnapshot()}}}_opPointerMove(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;if(Math.abs(t.clientX-this._opDrag.sx)+Math.abs(t.clientY-this._opDrag.sy)<=3)return;const i=this._spaceModel();if(!i)return;const s=this._svgPoint(t),n=this._curSpaceCfg,o=n?.openings?.find(t=>t.id===e.id);if(!o)return;if("partition"===o.host?.kind){const t=i.partitions.find(t=>t.id===o.host.id);if(!t)return;const e=t.b[0]-t.a[0],n=t.b[1]-t.a[1],a=Math.hypot(e,n);if(!(a>1e-9))return;const r=e/a,l=n/a;if(Math.abs((s[0]-t.a[0])*l-(s[1]-t.a[1])*r)>4*this._gridPitch)return;const c=o.length*T_/2+nd(t,this._cellCm,this._gridPitch);let h=(s[0]-t.a[0])*r+(s[1]-t.a[1])*l;if(h=Math.round(h/this._gridPitch)*this._gridPitch,h=Math.max(c,Math.min(a-c,h)),a<2*c-1e-9)return;const d=h/a,u=(t.a[0]+r*h)/T_,p=(t.a[1]+l*h)/this._spaceH;let _=180*Math.atan2(n,e)/Math.PI;_>=90?_-=180:_<-90&&(_+=180);const g=o.host.t!==d||o.x!==u||o.y!==p||o.angle!==_;return this._opDrag.moved=!0,g&&(this._opDrag.dirty=!0),o.host={...o.host,t:d},o.x=u,o.y=p,o.angle=_,this._opMeasure=null,g&&this._cfgEpoch++,void this.requestUpdate()}const a=ui(s,i.rooms,4*this._gridPitch);if(!a)return;this._opDrag.moved=!0;const r=this._opRuler(a,o.length*T_);this._opMeasure=r.measure;const l=r.x/T_,c=r.y/this._spaceH,h=o.x!==l||o.y!==c||o.angle!==a.angle;h&&(this._opDrag.dirty=!0),o.x=l,o.y=c,o.angle=a.angle,h&&this._cfgEpoch++,this.requestUpdate()}_opRuler(t,e){const i=this._spaceModel()?.rooms||[],s=this._gridPitch/2;let n=t.x,o=t.y,a=pi([n,o],t.angle,e,i,s);if(a&&a.centered&&(n!==a.wallCenter[0]||o!==a.wallCenter[1]))[n,o]=a.wallCenter,a=pi([n,o],t.angle,e,i,s);else if(a){const[r,l]=a.wallA,[c,h]=a.wallB,d=c-r,u=h-l,p=Math.hypot(d,u);if(p>0){const c=this._gridPitch,h=Math.min(e/2,p/2);let _=Math.round(((n-r)*d+(o-l)*u)/p/c)*c;_=Math.max(h,Math.min(p-h,_)),n=r+_/p*d,o=l+_/p*u,a=pi([n,o],t.angle,e,i,s)||a}}if(!a)return{x:n,y:o,angle:t.angle,measure:null};const r="mi"===this.hass?.config?.unit_system?.length,l=(t,e)=>({x:e[0],y:e[1],text:ri(t/this._gridPitch*this._cellCm,r)});return{x:n,y:o,angle:t.angle,measure:{labels:[l(a.sideA,a.midA),l(a.sideB,a.midB)],guide:a.centered?{x:a.wallCenter[0],y:a.wallCenter[1],angle:t.angle}:null}}}_opPointerUp(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;const i=this._opDrag,s=i.moved;this._opMeasure=null,s&&i.dirty&&(this._recordGeometry(this._t("history.move_opening"),i.before),this._saveConfig()),s?window.setTimeout(()=>this._opDrag=null,0):this._opDrag=null}_opClick(t,e){"plan"===this._mode&&"resize"===this._tool||(t.stopPropagation(),this._opDrag?.moved||"plan"===this._mode&&this._editOpening(e))}_saveOpening(){const t=this._openingDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=this._geometrySnapshot(),n=this._spaceH,o=(e.openings||[]).find(e=>e.id===t.id),a={...o||{},id:t.id||"o"+Date.now().toString(36),type:t.type,x:t.x/T_,y:t.y/n,angle:t.angle,length:o&&!t.lengthTouched?o.length:this._cmToUnits(Math.max(20,t.lengthCm))/T_,...t.host?{host:{...t.host}}:{}};if(a.host){const t=ld(o,a)?rd(a,i.partitions,T_,this._cellCm,this._gridPitch):ad(a,i.partitions,T_,this._cellCm,this._gridPitch);if(!t.resolved){const e=i.partitions.find(t=>t.id===a.host.id);if("does-not-fit-jamb"===t.reason&&e){const t=nd(e,this._cellCm,this._gridPitch);this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(t/this._gridPitch*this._cellCm,this._imperial)}))}else this._showToast(this._t("opening.partition_orphan"));return}const s=(e.openings||[]).flatMap(t=>{if(!t.host||t.id===a.id)return[];const e=ad(t,i.partitions,T_,this._cellCm,this._gridPitch).resolved;return e?[e]:[]});if(function(t,e,i=1e-9){const s=t.length/(2*t.axis.length),n=t.t-s,o=t.t+s;return e.some(e=>{if(e.host.id!==t.host.id||e.opening.id===t.opening.id)return!1;const s=e.length/(2*e.axis.length);return Math.max(n,e.t-s)t.id===a.id);r>=0?e.openings[r]=a:e.openings.push(a),this._recordGeometry(this._t(t.id?"history.edit_opening":"history.add_opening"),s),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_deleteOpening(){const t=this._openingDialog,e=this._curSpaceCfg;if(!t?.id||!e?.openings)return;const i=this._geometrySnapshot();e.openings=e.openings.filter(e=>e.id!==t.id),this._recordGeometry(this._t("history.delete_opening"),i),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_contactCandidates(){const t=[];for(const e of Object.keys(this.hass.states)){if(!this._openingEntityAvailable(e))continue;const i=e.split(".")[0];if("binary_sensor"!==i&&"cover"!==i)continue;const s=this.hass.states[e],n=["door","window","opening","garage_door","garage"].includes(s?.attributes?.device_class||"");("cover"!==i||n)&&t.push([e,s?.attributes?.friendly_name||e,n?0:1])}return t.sort((t,e)=>t[2]-e[2]||t[1].localeCompare(e[1])).map(([t,e])=>({value:t,label:e}))}_lockCandidates(){return Object.keys(this.hass.states).filter(t=>t.startsWith("lock.")&&this._openingEntityAvailable(t)).map(t=>({value:t,label:this.hass.states[t]?.attributes?.friendly_name||t})).sort((t,e)=>t.label.localeCompare(e.label))}_mergeClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms,s=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!s?.id)return;const n=s.id;if(!this._mergeSel||this._mergeSel===n)return void(this._mergeSel=this._mergeSel===n?null:n);const o=i.find(t=>t.id===this._mergeSel),a=o?ci(o):null,r=ci(s),l=a&&r?function(t,e){if(!t||!e||t.length<3||e.length<3)return null;const i=si(Pi(t),Pi(e));if(1!==i.length)return null;if(1!==i[0].length)return null;const s=i[0][0].slice(0,-1).map(t=>[t[0],t[1]]);return s.length>=3?s:null}(a,r):null;if(!l)return this._showToast(this._t("toast.merge_not_adjacent")),void(this._mergeSel=null);this._mergeDialog={aId:this._mergeSel,bId:n,poly:l,pick:"a"},this._mergeSel=null}_commitMerge(){const t=this._mergeDialog,e=this._curSpaceCfg;if(!t||!e||!this._spaceModel())return;const i=this._geometrySnapshot(),s=this._spaceH,n="a"===t.pick?t.aId:t.bId,o="a"===t.pick?t.bId:t.aId,a=e.rooms.find(t=>t.id===n);a?(a.poly=t.poly.map(t=>[t[0]/T_,t[1]/s]),delete a.x,delete a.y,delete a.w,delete a.h,e.rooms=e.rooms.filter(t=>t.id!==o),this._commitOpenSpans(),this._recordGeometry(this._t("history.merge_rooms"),i),this._saveConfig(),this._mergeDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.rooms_merged",{name:a.name||""}))):this._mergeDialog=null}_splitClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms;if(!this._splitSel){const e=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!e?.id)return;return void(this._splitSel={roomId:e.id,pts:[]})}const s=i.find(t=>t.id===this._splitSel.roomId),n=s?ci(s):null;if(!s||!n)return void(this._splitSel=null);const o=.02*this._gridPitch,a=6*this._gridPitch,r=function(t,e){if(!e||e.length<2)return null;let i=null,s=1/0;for(let n=0;n=n)continue;n=_;const g=Math.sqrt(u),m=(i>0?Math.max(0,Math.min(g,Math.round(p*g/i)*i)):p*g)/g;s=[a+m*h,r+m*d]}return s}(r,n,this._gridPitch)||r,c=r&&l&&Math.hypot(r[0]-t[0],r[1]-t[1])<=a?l:null,h=!!c&&yi(c,n,o),d=this._splitSel.pts;if(!d.length)return h?void(this._splitSel={...this._splitSel,pts:[c]}):void this._showToast(this._t("toast.split_pick_wall"));if(!h){const e=this._snap(t);return bi(e,n,o)?void(this._splitSel={...this._splitSel,pts:[...d,e]}):void this._showToast(this._t("toast.split_pick_inside"))}const u=Ii(n,[...d,c],o);if(!u)return void this._showToast(this._t("toast.split_bad_cut"));this._resetRoomDialogFields();const[p,_]=u,g=Ti(p)>=Ti(_)?p:_,m=g===p?_:p;this._pendingSplit={roomId:s.id,mainPoly:g,newPoly:m},this._cursorPt=null,this._nameSel="",this._areaSel="",this._roomDialog=!0}get _contourClosed(){return this._path.length>=4&&this._samePt(this._path[0],this._path[this._path.length-1])&&(null!=this._closingWallCm||!this._activeDraftId)}_markupMove(t){if(!this._markup)return;const e=t.pointerType;if(e&&(this._boundaryPointerType=e),"column"===this._tool)return void(this._cursorPt=this._snap(this._svgPoint(t)));if("opening"===this._tool||"boundary"===this._tool||"wallthick"===this._tool)return void(this._cursorPt=this._svgPoint(t));const i="draw"===this._tool&&!this._contourClosed,s="split"===this._tool&&!!this._splitSel?.pts?.length;if(!i&&!s)return;const n=this._svgPoint(t);if(i){const e=this._resolvePlanDrawPoint(n,t.shiftKey);return this._planSnapHover={contextKey:e.contextKey,candidate:e.candidate},this._path.length?void(this._cursorPt=e.point):void this._syncPlanSnapActiveMarker(e.candidate)}this._cursorPt=this._snap(n)}get _openingPreview(){const t=this._openingPreset;if("opening"!==this._tool||!t||!this._cursorPt)return null;const e=this._cursorPt,i=this._openingHoverCandidate;if(i&&c_(i,[e[0],e[1]],t.revision,this._cfgEpoch))return i;if(this._openingAt(e))return this._openingHoverCandidate=null,null;const s=this._resolveOpeningPlacement(e);return this._openingHoverCandidate=s,s}get _opMeasureView(){return this._opMeasure||this._openingPreview?.measure||null}_saveRoom(){(this._areaSel||this._nameSel.trim())&&(this._wallFaceBatch?this._decideWallFace(!0):this._commitRoom())}_decideWallFace(t){const e=this._wallFaceBatch;if(!e)return;const i=e.candidates[e.index];if(!i)return;const s=t?{candidate:i,create:!0,name:this._nameSel.trim(),area:this._areaSel||null,settings:this._roomSettingsFromDialog()?JSON.parse(JSON.stringify(this._roomSettingsFromDialog())):null}:{candidate:i,create:!1},n=[...e.decisions,s],o=e.index+1;if(o"number"==typeof t&&Number.isFinite(t)&&t>=0?t:null,n=.02*this._gridPitch,o=this._spaceModel();if(!o)return _r;for(const e of this._planSnapGeometrySnapshot().value.segments){if("room"===e.sourceKind||Ns(t,[e.a[0],e.a[1],e.b[0],e.b[1]])>n)continue;if("partition"===e.sourceKind)return s(o.partitions.find(t=>t.id===e.sourceId)?.cm)??_r;const i=e.sourceId.lastIndexOf(":"),a=i>=0?e.sourceId.slice(0,i):e.sourceId,r=i>=0?Number(e.sourceId.slice(i+1)):-1;return s(o.room_drafts.find(t=>t.id===a)?.segments[r]?.cm)??_r}for(let o=0;o+1{this._showToast(this._t(t,e)),this._roomDialogCancel()},n=t.decisions.filter(t=>t.create),o=n.map(t=>t.candidate.ring),a=i.rooms;for(let t=0;ti.id!==e&&!!ci(i)&&Ci(o[t],ci(i)));if(i)return void s("toast.room_overlap",{name:i.name||""})}if((e.rooms||[]).length+n.length>400)return void s("toast.physical_limit");if(n.some(t=>t.candidate.split&&!e.rooms.some(e=>e.id===t.candidate.split.roomId)))return void s("toast.contour_cannot_close");const r=2e-4*this._gridPitch,l=new Map;for(let e=0;et.candidate.atomKeys)),i=n.some(t=>t.candidate.consumeAllActive);for(const s of Gd(this._wallGraphSources(t.activePath),r)){const t=s.sourceKeys.find(t=>l.has(t));!t||i||e.has(s.key)||c.push({a:s.a,b:s.b,cm:l.get(t)})}}else c.push(...Sd(t.activePath,t.activeCms,_r));if((e.partitions||[]).length+c.length>I_)return void s("toast.physical_limit");const h=this._geometrySnapshot(),d=n.some(t=>!!t.candidate.split),u=d?el(i.rooms,e.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,T_):null,p=d&&Array.isArray(e.walls)?e.walls:null;for(const t of n){const i=t.candidate.split;if(!i)continue;const n=e.rooms.find(t=>t.id===i.roomId);if(!n)return void s("toast.contour_cannot_close");n.poly=i.mainPoly.map(t=>[t[0]/T_,t[1]/this._spaceH]),delete n.x,delete n.y,delete n.w,delete n.h}const _=Date.now().toString(36),g=[];if(n.forEach((t,i)=>{const s=t.area?this.hass.areas[t.area]?.name:"",n={id:`r${_}-${i}`,name:t.name||s||this._t("room.default_name"),area:t.area||null,poly:t.candidate.ring.map(t=>[t[0]/T_,t[1]/this._spaceH]),...t.settings?{settings:JSON.parse(JSON.stringify(t.settings))}:{}};e.rooms.push(n),g.push({room:n,decision:t})}),t.activeDraftId&&Array.isArray(e.room_drafts)&&(e.room_drafts=e.room_drafts.filter(e=>e.id!==t.activeDraftId),e.room_drafts.length||delete e.room_drafts),c.length&&(e.partitions||=[],c.forEach((t,i)=>e.partitions.push({id:`partition-${_}-${i}`,a:[t.a[0]/T_,t.a[1]/T_],b:[t.b[0]/T_,t.b[1]/T_],cm:t.cm}))),d){this._commitOpenSpans();const t=this._normalizeWalls(u,this._openCuts());t.length?e.walls=t:p?.length?e.walls=p:delete e.walls}if(g.length){this._cfgEpoch++;const i=this._openCuts(),s=this._spaceModel();if(!s)return;let n=e.walls;for(const{room:e,decision:o}of g){const a=o.candidate.ring,r=this._wallSourceCmAt(a[0],t.activePath,t.activeCms);n=Er(n,s.rooms,e.id,r,this._wallKeyPitch,i,T_);for(const o of tl(s.rooms,n,i,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){if(o.roomId!==e.id||"outer"!==o.kind)continue;const i=[(o.a[0]+o.b[0])/2,(o.a[1]+o.b[1])/2];n=Ir(n,o.a,o.b,this._wallSourceCmAt(i,t.activePath,t.activeCms),this._wallKeyPitch,T_)}}const o=this._normalizeWalls(n,i);o.length?e.walls=o:delete e.walls}this._recordGeometry(this._t("history.wall_face_batch"),h),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._wallFaceBatch=null,this._roomDialog=!1,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices();const m=new Set(n.map(t=>t.area).filter(t=>!!t));if(m.size){const t={...this._layout};for(const e of this._devices){if(!m.has(e.area||"")||e.space!==this._space)continue;if(this._layout[e.id])continue;const i=this._defPos[e.id];i&&(t[e.id]={s:this._space,x:i.x/T_,y:i.y/T_},this._dirtyPos.add(e.id))}this._layout=t,this._persistLayout()}this._showToast(this._t(n.length?"toast.wall_rooms_saved":"toast.wall_chain_saved",{n:n.length}))}_commitRoom(){const t=this._curSpaceCfg,e=this._spaceModel();if(!t||!e)return;const i=this._geometrySnapshot(),s=this._spaceH,n=!!this._pendingSplit,o=n?el(e.rooms,t.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,T_):null,a=n&&Array.isArray(t.walls)?t.walls:null;let r;if(this._pendingSplit){const e=t.rooms.find(t=>t.id===this._pendingSplit.roomId);if(!e)return this._pendingSplit=null,this._splitSel=null,void(this._roomDialog=!1);e.poly=this._pendingSplit.mainPoly.map(t=>[t[0]/T_,t[1]/s]),delete e.x,delete e.y,delete e.w,delete e.h,r=this._pendingSplit.newPoly}else{if(!this._contourClosed)return;r=this._path.slice(0,-1)}const l=this._areaSel?this.hass.areas[this._areaSel]?.name:"",c={id:"r"+Date.now().toString(36),name:this._nameSel||l||this._t("room.default_name"),area:this._areaSel||null,poly:r.map(t=>[t[0]/T_,t[1]/s]),...this._roomSettingsFromDialog()?{settings:this._roomSettingsFromDialog()}:{}};if(t.rooms.push(c),!n&&this._activeDraftId&&Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),n){this._commitOpenSpans();const e=this._normalizeWalls(o,this._openCuts());e.length?t.walls=e:a?.length?t.walls=a:delete t.walls}if(!n){const e=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r],i=e[0]||this._drawWallCm;if(null!=i){this._cfgEpoch++;const s=this._openCuts(),n=this._spaceModel();if(!n)return;let o=Er(t.walls,n.rooms,c.id,i,this._wallKeyPitch,s,T_);for(const t of tl(n.rooms,o,s,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)){if(t.roomId!==c.id||"outer"!==t.kind)continue;const s=[(t.a[0]+t.b[0])/2,(t.a[1]+t.b[1])/2],n=r.findIndex((t,e)=>{const i=r[(e+1)%r.length];return Ns(s,[t[0],t[1],i[0],i[1]])<=.02*this._gridPitch});n>=0&&(o=Ir(o,t.a,t.b,e[n]||i,this._wallKeyPitch,T_))}o=this._normalizeWalls(o,s),o.length?t.walls=o:delete t.walls}}this._recordGeometry(this._t(n?"history.split_room":"history.add_room"),i),this._saveConfig(),this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._pendingSplit=null,this._splitSel=null;const h=this._areaSel;this._areaSel="",this._nameSel="",this._roomDialog=!1,this._regSignature="",this._maybeRebuildDevices();let d=0;if(h){const t=T_,e={...this._layout};for(const i of this._devices){if(i.area!==h||i.space!==this._space)continue;if(d++,this._layout[i.id])continue;const s=this._defPos[i.id];s&&(e[i.id]={s:this._space,x:s.x/T_,y:s.y/t},this._dirtyPos.add(i.id))}this._layout=e,this._persistLayout()}const u=this._model.find(t=>t.id===this._space)?.rooms.length||0;this._showToast(h?this._t("toast.room_saved",{n:u,added:d}):this._t("toast.room_saved_no_area",{n:u}))}_cancelPath(){this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),this._roomDialog=!1,this._pendingSplit=null,this._wallFaceBatch=null,this._splitSel=null,this._mergeSel=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._clearOpeningPlacement(!0)}_resumeLastDraft(){const t=this._resumeDraftBySpace[this._space];if(!t)return;const e=this._spaceModel()?.room_drafts.find(e=>e.id===t);e?(this._activeDraftId=t,this._path=e.points.map(t=>[...t]),this._draftSegmentCms=e.segments.map(t=>t.cm),this._clearPlanSnapHover()):delete this._resumeDraftBySpace[this._space]}_roomDialogCancel(){if(this._roomDialog=!1,this._roomEditId)return this._roomEditId=null,this._nameSel="",void(this._areaSel="");if(this._wallFaceBatch){const t=this._wallFaceBatch;return this._wallFaceBatch=null,this._path=t.activePath.map(t=>[...t]),this._draftSegmentCms=[...t.activeCms],this._activeDraftId=t.activeDraftId,this._nameSel="",this._areaSel="",void this.requestUpdate()}if(this._pendingSplit)return this._pendingSplit=null,void(this._splitSel=null);this._undoPoint()}get _freeAreas(){const t=new Set;for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area&&t.add(i.area);for(const e of this._wallFaceBatch?.decisions||[])e.create&&e.area&&t.add(e.area);return Object.values(this.hass?.areas||{}).filter(e=>!t.has(e.area_id)).sort((t,e)=>(t.name||"").localeCompare(e.name||""))}_openMarkerDialog(t){if(this._vacAllCamerasFor=null,this._vacAllCameraCache=null,t&&this._ackNewDevice(t.id),this._norm)if(t){const e=t.marker,i=Object.prototype.hasOwnProperty.call(e||{},"is_light"),s=Object.prototype.hasOwnProperty.call(e||{},"light_entity"),n=Object.prototype.hasOwnProperty.call(e||{},"glow_color"),o=Object.prototype.hasOwnProperty.call(e||{},"value_badge"),a=Object.prototype.hasOwnProperty.call(e||{},"tap_action"),r=Object.prototype.hasOwnProperty.call(e||{},"toggle_entity"),l=ws(e?.glow_color),c=this._devicePresentation(t,!0).valueBadge,h=Lo(this._planHass,t,this._devices),d=Bo(this._planHass,t,h);this._markerDialog={devId:t.id,name:t.name,binding:"virtual"===t.bindingKind?"virtual":t.bindingKind+":"+t.bindingRef,bindingMode:"virtual"===t.bindingKind?"virtual":"ha",bindingOpen:!1,showEntities:"entity"===t.bindingKind&&!!this._fullRegistryHass.entities[t.bindingRef||""]?.device_id,bindingFilter:"",icon:t.marker?.icon||"",autoIcon:t.icon||"",display:Li(t.marker?.display),rippleColor:Rt(t.marker?.ripple_color,""),rippleSize:Number(t.marker?.ripple_size)>0?Number(t.marker.ripple_size):1.5,size:Number(t.marker?.size)>0?Number(t.marker.size):1,angle:Number(t.marker?.angle)||0,tapAction:Yh(t.marker?.tap_action,t.primary?.split(".")[0]),tapActionTouched:!1,originalHasTapAction:a,originalTapAction:t.marker?.tap_action,tapHintAnnouncement:"",toggleEntity:e?.toggle_entity||"",toggleEntityTouched:!1,originalHasToggleEntity:r,originalToggleEntity:e?.toggle_entity,tapTarget:t.marker?.tap_target||"",tapConfirm:!0===t.marker?.tap_confirm,runFilter:"",controls:Yn(t.marker?.binding,t.marker?.controls,t.entities),controlsFilter:"",lightRole:!0===e?.is_light?"always":!1===e?.is_light?"never":"auto",lightRoleTouched:!1,originalHasIsLight:i,originalIsLight:e?.is_light,lightEntity:e?.light_entity||"",lightEntityTouched:!1,originalHasLightEntity:s,originalLightEntity:e?.light_entity,glowMode:null!=l?.bri?"fixed":l?"color":"auto",glowColor:l?.c||this._fillColors.glow_light.c,glowBrightness:Math.max(1,Math.round(100*(l?.bri??1))),glowColorDrafted:!!l,glowBrightnessDrafted:null!=l?.bri,glowTouched:!1,originalHasGlowColor:n&&(!!l||null===e?.glow_color),originalGlowColor:l||(null===e?.glow_color?null:void 0),valueBadgeEnabled:o?!0===e?.value_badge?.enabled:!!c,valueBadgeSource:e?.value_badge?.source||c?.source||d,valueBadgePosition:e?.value_badge?.position||c?.position||"right",valueBadgeTouched:!1,originalHasValueBadge:o,originalValueBadge:e?.value_badge,useClimateTemp:!0===t.marker?.use_climate_temp,glowRadius:Number(t.marker?.glow_radius_cm)>0?String(this._imperial?Math.round(Number(t.marker.glow_radius_cm)/30.48*10)/10:Math.round(Number(t.marker.glow_radius_cm))/100):"",model:t.model||"",link:t.link||"",description:t.description||"",pdfs:[...t.pdfs||[]],room:t.marker?.room_id?t.space+"#@"+t.marker.room_id:t.space&&t.area?t.space+"#"+t.area:"",hideFromPlan:!0===t.marker?.hidden,busy:!1}}else this._markerDialog={name:"",binding:"virtual",bindingMode:"virtual",bindingOpen:!1,showEntities:!1,bindingFilter:"",icon:"",autoIcon:"",display:"badge",rippleColor:"",rippleSize:1.5,size:1,angle:0,tapAction:"info",tapActionTouched:!1,originalHasTapAction:!1,originalTapAction:void 0,tapHintAnnouncement:"",toggleEntity:"",toggleEntityTouched:!1,originalHasToggleEntity:!1,originalToggleEntity:void 0,tapTarget:"",tapConfirm:!1,runFilter:"",controls:[],controlsFilter:"",lightRole:"auto",lightRoleTouched:!1,originalHasIsLight:!1,originalIsLight:void 0,lightEntity:"",lightEntityTouched:!1,originalHasLightEntity:!1,originalLightEntity:void 0,glowMode:"auto",glowColor:this._fillColors.glow_light.c,glowBrightness:100,glowColorDrafted:!1,glowBrightnessDrafted:!1,glowTouched:!1,originalHasGlowColor:!1,originalGlowColor:void 0,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgePosition:"right",valueBadgeTouched:!1,originalHasValueBadge:!1,originalValueBadge:void 0,useClimateTemp:!1,glowRadius:"",model:"",link:"",description:"",pdfs:[],room:"",hideFromPlan:!1,busy:!1,uploadId:"up_"+Date.now().toString(36)+Math.random().toString(36).slice(2,6)};else this._showToast(this._t("toast.marker_needs_server"))}_runCandidates(){const t=[];for(const e of Ui)for(const[i,s]of Object.entries(this.hass.states))i.startsWith(e+".")&&this._planEntityAvailable(i)&&t.push({value:i,label:s?.attributes?.friendly_name||i,sub:this._t("run."+e)});return t.sort((t,e)=>t.sub.localeCompare(e.sub)||t.label.localeCompare(e.label))}_bindingCandidates(){const t=this._planHass,e=vo(this._markers),i=new Set(this._markers.filter(t=>t.removed).map(t=>t.binding)),s=new Set;for(const t of this._devices)t.id!==this._markerDialog?.devId&&("device"===t.bindingKind&&t.bindingRef&&s.add("device:"+t.bindingRef),"entity"===t.bindingKind&&t.bindingRef&&s.add("entity:"+t.bindingRef));const n=new Set;for(const t of this._devices)"device"===t.bindingKind&&t.name&&n.add(t.name.trim()+"|"+(t.area||""));const o=[];for(const e of Object.values(t.devices)){if("service"===e.entry_type)continue;const t="device:"+e.id;if(s.has(t))continue;const a=(e.name_by_user||e.name||e.id).trim();t!==this._markerDialog?.binding&&!i.has(t)&&n.has(a+"|"+(e.area_id||""))||o.push({value:t,label:a,sub:(e.model||this._t("marker.sub_device"))+("Group"===e.model?this._t("marker.sub_z2m_group"):"")})}const a=new Set(["group","template","derivative","min_max","threshold","integration","statistics","trend","utility_meter","tod","switch_as_x","schedule"]);for(const[n,r]of Object.entries(t.entities)){const l="entity:"+n;if(s.has(l))continue;if(yo(t,n,e)&&!i.has(l))continue;const c=a.has(r.platform),h="group"===r.platform;if(!c&&!h)continue;if(r.hidden&&!i.has(l))continue;const d=t.states[n];o.push({value:l,label:r.name||d?.attributes?.friendly_name||n,sub:n.split(".")[0]+" · "+("group"===r.platform?this._t("marker.sub_group"):this._t("marker.sub_helper"))})}if(this._markerDialog?.showEntities){const n=new Set(o.map(t=>t.value));for(const[a,r]of Object.entries(t.entities)){const l="entity:"+a;if(s.has(l)||n.has(l)||r.hidden&&!i.has(l))continue;if(yo(t,a,e)&&!i.has(l))continue;const c=t.states[a],h=r.name||c?.attributes?.friendly_name||a,d=r.device_id?t.devices[r.device_id]:null,u=d&&(d.name_by_user||d.name)||"";o.push({value:l,label:h,sub:a.split(".")[0]+" · "+this._t("marker.sub_entity")+(u?" · "+u:"")})}}const r=(this._markerDialog?.bindingFilter||"").toLowerCase().trim(),l=r?o.filter(t=>(t.label+" "+t.sub+" "+t.value).toLowerCase().includes(r)):o;return l.sort((t,e)=>t.label.localeCompare(e.label)),l.slice(0,200)}_physicalBodiesR(t=this._spaceModel()){if(!t)return[];const e=`${t.id}|${this._cfgEpoch}|${this._cellCm}|${this._gridPitch}`;if(this._physicalBodiesCache?.key===e)return this._physicalBodiesCache.all;const i=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t));return this._physicalBodiesCache={key:e,...i},i.all}_rawPhysicalBodiesR(t=this._spaceModel()){if(!t)return[];this._physicalBodiesR(t);const e=this._physicalBodiesCache;return e?[...e.drafts,...e.partitions,...e.columns]:[]}_cleanFloor(t,e,i=this._spaceModel()){if(!i)return{floor:e,geom:null,path:"",area:Ol([[[...e,e[0]]]])};const s=t.id||`#${i.rooms.indexOf(t)}`,n=`${i.id}|${this._cfgEpoch}|${s}`;if(!this._rszPreview){const t=f_(this._cleanFloorCache,n);if(t.hit)return t.value}const o=e.map(t=>t[0]),a=e.map(t=>t[1]),r=[Math.min(...o),Math.min(...a),Math.max(...o),Math.max(...a)],l=this._physicalBodiesR(i).filter(t=>{const e=t.map(t=>t[0]),i=t.map(t=>t[1]);return Math.max(...e)>=r[0]&&Math.min(...e)<=r[2]&&Math.max(...i)>=r[1]&&Math.min(...i)<=r[3]}),c=l.length?zl(e,l):null,h={floor:e,geom:c,path:c?Dl(c):"",area:Ol(c||[[[...e,e[0]]]])};return this._rszPreview||v_(this._cleanFloorCache,n,h,600),h}_autoIconForBinding(t){if("virtual"===t)return"mdi:map-marker";const[e,i]=t.split(":");if(!i)return"";const s=this._fullRegistryHass,n=this._bindingStatus(t),o="active"===n.kind?n.enabledEntityIds:n.allEntityIds;if("device"===e){const t=s.devices?.[i];if(!t)return"mdi:help-circle";const e=o;return e.some(t=>t.startsWith("lock."))?"mdi:lock":fo(s,t.name_by_user||t.name||"",t.model,e,this._iconRules)}if("entity"===e){const t=s.entities?.[i],e=this.hass.states?.[i],n=t?.name||e?.attributes?.friendly_name||i;return i.startsWith("lock.")?"mdi:lock":fo(s,n,"",[i],this._iconRules)}return""}_allRoomsFlat(){const t=[];for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area?t.push({value:e.id+"#"+i.area,label:(e.title||e.id)+" · "+i.name}):i.id&&t.push({value:e.id+"#@"+i.id,label:(e.title||e.id)+" · "+i.name+" · "+this._t("marker.subarea")});return t}_errText(t){if(!t)return this._t("err.unknown");if("string"==typeof t)return t;if("invalid_passage_fields"===t.code){const e=String(t.message||t.error||"").match(/space=([^;]*);\s*opening=([^;]*);\s*fields=([^;]*)/);if(e){const t=this._serverCfg?.spaces?.find(t=>String(t.id)===e[1]),i={contact:"opening.contact_label",lock:"opening.lock_label",invert:"opening.invert",flip_h:"opening.flip_h",flip_v:"opening.flip_v"},s=e[3].split(",").filter(Boolean).map(t=>i[t]?this._t(i[t]):t).join(", ");return this._t("opening.invalid_passage_fields",{room:t?.title||e[1],fields:s})}}if("invalid_partition_opening_jamb_margin"===t.code){const e=String(t.message||t.error||"").match(/margin_cm=([^;]*)/),i=e?Number(e[1]):NaN;if(Number.isFinite(i))return this._t("opening.partition_jamb_margin",{distance:ri(i,this._imperial)})}if(t.message)return t.message;if(t.error)return t.error;if(null!=t.code)return this._t("err.code",{code:t.code});try{return JSON.stringify(t)}catch{return String(t)}}_backupErrorText(t){const e=t?.code??t?.error;if("string"==typeof e){const t=`backup.error.${e}`,i=this._t(t);if(i!==t)return i}return this._errText(t)}async _pickMarkerFiles(t){const e=t.target,i=e.files?[...e.files]:[];if(e.value="",!i.length||!this._markerDialog)return;const s=this._markerDialog.uploadId||this._markerDialog.devId||"new",n=[];for(const t of i)try{const e=new FormData;e.append("marker_id",s),e.append("file",t,t.name);const i=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth("/api/houseplan/upload",{method:"POST",body:e}):await fetch("/api/houseplan/upload",{method:"POST",body:e,headers:this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}),o=await i.json().catch(()=>({}));if(!i.ok||o.error){const t={too_large:this._t("err.too_large",{mb:o.max_mb||50}),bad_ext:this._t("err.bad_ext"),unauthorized:this._t("err.unauthorized")};throw new Error(t[o.error]||o.error||"HTTP "+i.status)}n.push({name:o.name||t.name,url:o.url})}catch(e){this._showToast(this._t("toast.file_failed",{name:t.name,err:this._errText(e)}))}n.length&&this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:[...this._markerDialog.pdfs,...n]},this._showToast(this._t("toast.files_attached",{n:n.length})))}_removeMarkerPdf(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:this._markerDialog.pdfs.filter(e=>e.url!==t)})}_markerLightFields(t){const e={};if(t.lightRoleTouched?"always"===t.lightRole?e.is_light=!0:"never"===t.lightRole&&(e.is_light=!1):t.originalHasIsLight&&(e.is_light=t.originalIsLight??null),t.lightEntityTouched?t.lightEntity&&(e.light_entity=t.lightEntity):t.originalHasLightEntity&&(e.light_entity=t.originalLightEntity??null),t.glowTouched){if("auto"!==t.glowMode){const i={c:Rt(t.glowColor,this._fillColors.glow_light.c)};"fixed"===t.glowMode&&(i.bri=Math.max(.01,Math.min(1,Math.round(t.glowBrightness)/100))),e.glow_color=i}}else t.originalHasGlowColor&&(e.glow_color=t.originalGlowColor??null);return e}_markerTapActionFields(t){return t.tapActionTouched?{tap_action:t.tapAction||null}:t.originalHasTapAction?{tap_action:t.originalTapAction??null}:{}}_markerToggleEntityFields(t){return(e={touched:t.toggleEntityTouched,originalHas:t.originalHasToggleEntity,original:t.originalToggleEntity,value:t.toggleEntity}).touched?e.value?{toggle_entity:e.value}:{}:e.originalHas?{toggle_entity:e.original??null}:{};var e}async _saveMarker(){const t=this._markerDialog;if(!t||t.busy)return;const e=this._effectiveMarkerTapAction(t);if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return;if("virtual"===t.binding&&!t.name.trim())return void this._showToast(this._t("toast.virtual_name_required"));if("run"===e&&!t.tapTarget)return void this._showToast(this._t("toast.run_target_required"));if(t.valueBadgeTouched&&t.valueBadgeEnabled&&!t.valueBadgeSource)return void this._showToast(this._t("toast.value_badge_source_required"));if("ha"===t.bindingMode){const e=this._bindingStatus(t.binding),i=t.devId?this._markers.find(e=>e.id===t.devId):null,s=!i||i.binding!==t.binding;if("active"!==e.kind&&s)return void this._showToast(this._t("ha_disabled"===e.kind?"toast.ha_disabled_add":"toast.ha_binding_unverified"));if("ha_disabled"===e.kind&&!0===i?.hidden&&!t.hideFromPlan)return this._markerDialog={...t,hideFromPlan:!0},void this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device"))}const i=this._serverCfg;if(!i)return;const s=i.markers||[],n=Bs(t.room);let o=n?.space||null;const a=n?.area||null,r=n?.roomId||null,l=Fi(t.binding,t.devId,()=>"v_"+Date.now().toString(36)),c=t.devId,h=c?this._devices.find(t=>t.id===c):null,d=n?.space||h?.space||null,u=d?this._spaceModelById(d):this._spaceModel();if(!u)return;const p=u.id;"virtual"!==t.binding||o||(o=p),this._markerDialog={...t,busy:!0};try{const n="virtual"===t.binding?[]:s.filter(e=>e.removed&&e.binding===t.binding).map(t=>t.id),d=n.length>0,_=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),g=s.find(t=>t.id===l||t.id===c)?.vacuum||null,m={id:l,vacuum:g,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle?t.angle:null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===e&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:_.length?_:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=m_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:!!t.hideFromPlan};("virtual"===t.binding||t.room)&&(m.space=o,m.area=a,m.room_id=r);const f=h?.marker?.room_id??null,v=!!t.room&&null!=h&&(h.space!==o||h.area!==a||f!==r);let y=!1;const b=t.uploadId||c;if(b&&b!==l&&m.pdfs?.length)try{const t=await this.hass.callWS({type:"houseplan/files/migrate",from_id:b,to_id:l}),e=t?.mapping||{};m.pdfs=function(t,e,i,s){if(!e||!i||e===i)return t;const n="/files/"+e+"/",o="/files/"+i+"/";return t.map(t=>{if(!t.url.includes(n))return t;const e=t.url.split(n)[1]||"",[i,a]=[e.split("?")[0],e.includes("?")?"?"+e.split("?")[1]:""];if(s){const e=s[decodeURIComponent(i)]??s[i];return e?{...t,url:t.url.split(n+i)[0]+o+encodeURIComponent(e)+a}:t}return{...t,url:t.url.split(n).join(o)}})}(m.pdfs,b,l,e),y=Object.keys(e).length>0}catch(t){this._showToast(this._t("toast.files_migrate_failed",{err:this._errText(t)}))}i.markers=s,c&&c!==l&&(i.markers=function(t,e,i){if(!e||!i||e===i)return[...t];const s=`marker:${e}`,n=`marker:${i}`;return t.map(t=>{const e=Array.isArray(t.controls)?t.controls.map(t=>t===s?n:t):t.controls,i="derived_marker_state"===t.value_badge?.source?.kind&&t.value_badge.source.ref===s?{...t.value_badge,source:{...t.value_badge.source,ref:n}}:t.value_badge;return e===t.controls&&i===t.value_badge?t:{...t,controls:e,value_badge:i}})}(i.markers,c,l)),c&&c!==l&&"derived_marker_state"===m.value_badge?.source?.kind&&m.value_badge.source.ref===`marker:${c}`&&(m.value_badge.source={kind:"derived_marker_state",ref:`marker:${l}`}),i.markers=i.markers.filter(t=>t.id!==l&&t.id!==c&&("virtual"===m.binding||t.binding!==m.binding)),i.markers.push(m);let w=null;const k=c?this._layout[c]:null,x=k?{s:k.s||h?.space||this._space,x:k.x,y:k.y}:c&&h&&this._defPos[c]?this._normPos(h.space,this._defPos[c].x,this._defPos[c].y):null;if(!d&&x&&x.s===p)l===c&&this._layout[l]&&!v||(w={s:x.s,x:x.x,y:x.y},this._layout={...this._layout,[l]:w});else if(d||!this._layout[l]||v){let t=u.vb[0]+u.vb[2]/2,e=u.vb[1]+u.vb[3]/2;const i=r?u.rooms.find(t=>t.id===r):a?u.rooms.find(t=>t.area===a):void 0;i&&([t,e]=this._roomCenter(i)),w=this._normPos(p,t,e),this._layout={...this._layout,[l]:w}}await this._saveConfigNow(),w&&this._noteLayoutRev(await this.hass.callWS({type:"houseplan/layout/update",device_id:l,pos:w}));const $=new Set(n);c&&c!==l&&$.add(c),$.delete(l);for(const t of $)delete this._layout[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{});y&&b&&await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:b}).catch(()=>{}),this._markerDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_saved"))}catch(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteMarker(){const t=this._markerDialog;if(!t||t.busy||!t.devId)return;const e=t.devId?this._devices.find(e=>e.id===t.devId):null;if(!e)return;const i=t.name||this._t("device.fallback");if(!confirm(this._t("confirm.remove_marker",{name:i})))return;const s=this._serverCfg;s.markers=s.markers||[];const n=s.markers,o="virtual"===e.bindingKind?"virtual":e.bindingKind&&e.bindingRef?`${e.bindingKind}:${e.bindingRef}`:"";if(!o)return;const a=function(t,e,i,s){const n=new Set([e]),o=t.filter(t=>{const o=t.id===e||!s&&t.binding===i;return o&&n.add(t.id),!o});return{markers:s?o:[...o,{id:e,binding:i,removed:!0,hidden:!0}],cleanupIds:n}}(s.markers,e.id,o,"virtual"===e.bindingKind);var r,l;s.markers=(r=a.markers,l=a.cleanupIds,r.map(t=>{if(!Array.isArray(t.controls))return t;const e=t.controls.filter(t=>!("string"==typeof t&&t.startsWith("marker:")&&l.has(t.slice(7))));return e.length===t.controls.length?t:{...t,controls:e.length?e:null}}));const c=a.cleanupIds;this._markerDialog={...t,busy:!0};try{await this._saveConfigNow();for(const t of c){delete this._layout[t],delete this._defPos[t],this._dirtyPos.delete(t),this._sentPos.delete(t);const e=this._activityRt.get(t);e&&clearTimeout(e.timer),this._activityRt.delete(t),this._vacRt.delete(t),delete this._vacSrvTrails[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{}),await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:t}).catch(()=>{}),await this.hass.callWS({type:"houseplan/trail/delete",marker_id:t}).catch(()=>{})}this._markerDialog=null,this._infoCard?.id===e.id&&this._closeInfoCard(),this._selId===e.id&&(this._selId=null),this._drag?.id===e.id&&(this._drag=null),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_removed"))}catch(t){this._serverCfg===s&&(s.markers=n),this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}_normPos(t,e,i){return{s:t,x:e/T_,y:i/T_}}_openSpaceDialog(t,e){if(this._serverStorage&&this._serverCfg)if("edit"===t){const i=this._serverCfg.spaces.find(t=>t.id===e);if(!i)return;const s=ls(i),n=i.settings?.custom_fill&&"object"==typeof i.settings.custom_fill?as(i.settings.custom_fill):null,o="none"===s.fill?{...n||os,a:0}:n;this._spaceDialog={mode:t,spaceId:e,title:i.title,planUrl:i.plan_url||null,planFile:null,source:i.plan_url?"file":"draw",showBorders:s.showBorders,showNames:s.showNames,displayTouched:!0,hideDecor:s.hideDecor,hideOpenings:s.hideOpenings,roomColor:s.color,roomOpacity:s.opacity,fillMode:"none"===s.fill?"custom":s.fill,customFill:o,glowEnabled:s.glow,bgColor:s.bgColor,bgMode:"static"===i.settings?.bg_mode||"daynight"===i.settings?.bg_mode?i.settings.bg_mode:null,northDeg:Ya({},i.settings),sunRays:"boolean"==typeof i.settings?.sun_rays?i.settings.sun_rays:null,tempMin:s.tempMin,tempMax:s.tempMax,showLqi:s.showLqi??this._config?.show_signal??!0,cardFontScale:s.cardFontScale,labelTemp:s.labelTemp,labelHum:s.labelHum,labelLqi:s.labelLqi,labelLight:s.labelLight,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,busy:!1}}else this._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:{...os,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1};else this._showToast(this._t("toast.integration_missing"))}async _pickPlanFile(t){const e=t.target,i=e.files?.[0];if(!i||!this._spaceDialog)return;const s={"image/svg+xml":"svg","image/png":"png","image/jpeg":"jpg","image/webp":"webp"}[i.type]||(i.name.toLowerCase().endsWith(".svg")?"svg":"");if(!s)return void this._showToast(this._t("toast.plan_formats"));const n=new Uint8Array(await i.arrayBuffer());let o="";for(let t=0;t{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:1.414),e.onerror=()=>t(1.414),e.src=r});URL.revokeObjectURL(r),this._spaceDialog={...this._spaceDialog,planFile:{ext:s,b64:a,aspect:l,name:i.name}}}_useServerPlan(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let e=0;e<40;e++){const e=this._display(t);if(e){const i=await new Promise(t=>{const i=new Image;i.onload=()=>t(i.naturalWidth&&i.naturalHeight?i.naturalWidth/i.naturalHeight:0),i.onerror=()=>t(0),i.src=e}),s=this._spaceDialog;return s&&s.planUrl===t&&Number.isFinite(i)&&i>0?(this._spaceDialog={...s,savedAspect:i},i):0}if(await new Promise(t=>setTimeout(t,150)),this._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){if(confirm(this._t("confirm.delete_plan",{name:t})))try{await this.hass.callWS({type:"houseplan/plans/delete",name:t});const e=this._spaceDialog;e?.saved&&(this._spaceDialog={...e,saved:e.saved.filter(e=>e.name!==t)})}catch(t){this._showToast(this._t("toast.plan_delete_failed",{err:this._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return j`
${this._t("space.loading")}
`;const e=t.saved||[];if(!e.length)return j`
${this._t("space.no_saved")}
`;return j`
+
`:j``}_openingAt(t){if(!this._openingsR.length)return null;const e=this._openingsR.flatMap(e=>{const i=e.angle*Math.PI/180,s=t[0]-e.rx,n=t[1]-e.ry,o=s*Math.cos(i)+n*Math.sin(i);return Math.abs(o)>e.rlen/2+12?[]:[{o:e,localY:-s*Math.sin(i)+n*Math.cos(i)}]});if(!e.length)return null;const i=this._spaceModel();if(!i)return null;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return e.find(({o:t,localY:e})=>{const i="gate"===t.type?!t.flip_v:t.flip_v,s=t.partitionHost||this._spaceWalls.length||"gate"===t.type?this._openingFace(t,n,!!i):{ox:0,oy:0,cm:0,side:-1},o=tu({type:t.type,length:t.rlen,angle:t.angle,amount:this._openingAmt(t),flipH:!!t.flip_h,flipV:!!t.flip_v,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s});return Math.abs(e)<=o.hitHalf})?.o||null}_resolveOpeningPlacement(t){const e=this._openingPreset;if("opening"!==this._tool||!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._openCuts(),n=this._openingWallIndexFor(i,s),o=`${n.key}|partitions:${this._cfgEpoch}`;var a,r,l;this._openingPlacementIntervalsCache&&this._openingPlacementIntervalsCache.key===o||(this._openingPlacementIntervalsCache={key:o,value:[...tl(i.rooms,this._spaceWalls,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_),...(a=i.partitions,r=this._cellCm,l=this._gridPitch,a.flatMap(t=>!sd(t.a)||!sd(t.b)||Math.hypot(t.b[0]-t.a[0],t.b[1]-t.a[1])<=1e-9?[]:[{roomId:"",a:[t.a[0],t.a[1]],b:[t.b[0],t.b[1]],key:`partition:${t.id}`,kind:"outer",cm:t.cm,open:!1,half:vr(t.cm,r,l)/2,partitionHost:{kind:"partition",id:t.id}}]))]});const c=c_({pointer:[t[0],t[1]],preset:e,geometryRevision:this._cfgEpoch,renderedLength:this._cmToUnits(e.lengthCm),intervals:this._openingPlacementIntervalsCache.value,baseTolerance:1.5*this._gridPitch,bodyPointerPadding:this._cssPxToRender(this._boundaryCoarse?10:6),gridStep:this._gridPitch});this._openingJambBlockCm=c.jambBlockedTarget?c.jambBlockedTarget.physicalHalfWidth/this._gridPitch*this._cellCm:null;const h=c.candidate;if(!h)return null;const d="gate"===h.type?!h.flipV:h.flipV;let u;if(h.host){const t=ad({id:"preview",type:h.type,x:h.x/P_,y:h.y/P_,angle:h.angle,length:h.renderedLength/P_,host:h.host},i.partitions,P_,this._cellCm,this._gridPitch).resolved;u=t?hd(t,d):{ox:0,oy:0,cm:0,side:-1}}else u=bl(n.value,{x:h.x,y:h.y,angle:h.angle,length:h.renderedLength,flip_v:d});const p="mi"===this.hass?.config?.unit_system?.length,_=pi([h.x,h.y],h.angle,h.renderedLength,i.rooms,this._gridPitch/2),g=(_?[{distance:_.sideA,midpoint:_.midA},{distance:_.sideB,midpoint:_.midB}]:h.measure.labels).map(t=>({x:t.midpoint[0],y:t.midpoint[1],text:ri(t.distance/this._gridPitch*this._cellCm,p)}));return{...h,face:u,measure:{labels:g,guide:h.measure.guide}}}_activateOpeningPlacement(t){this._activateMarkupTool("opening"),"opening"===this._tool&&(this._openingPreset=function(t,e){return{type:t,lengthCm:o_(t),flipH:!1,flipV:!1,revision:e}}(t,++this._openingPresetRevision),this._openingHoverCandidate=null,this._cursorPt=null)}_clearOpeningPlacement(t){this._openingHoverCandidate=null,this._openingJambBlockCm=null,t&&(this._openingPreset=null,this._openingRebindId=null)}_openingClick(t){const e=this._spaceModel();if(!e)return;const i=this._openingRebindId?null:this._openingAt(t);if(i)return void this._editOpening(i);const s=this._openingPreset;if(!s)return;const n=this._openingHoverCandidate,o=n&&h_(n,[t[0],t[1]],s.revision,this._cfgEpoch)?n:this._resolveOpeningPlacement(t);if(!o){if(null!=this._openingJambBlockCm)return void this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(this._openingJambBlockCm,this._imperial)}));const i=1.5*this._gridPitch,s=ui(t,e.rooms,i);return s&&function(t,e,i,s,n){for(const o of s)if(!(Hs([t,e],o)>n)&&Rr([o[0],o[1]],[o[2],o[3]],i))return!0;return!1}(s.x,s.y,s.angle,this._openCuts(),i)?void this._showToast(this._t("toast.opening_on_virtual")):void this._showToast(this._t("toast.opening_no_wall"))}const a=this._openingRebindId?this._curSpaceCfg?.openings?.find(t=>t.id===this._openingRebindId):null;this._openingDialog={...a?{id:a.id,type:a.type,lengthCm:Math.round(a.length*P_/this._gridPitch*this._cellCm),lengthTouched:!1,contact:a.contact||"",lock:a.lock||"",invert:!!a.invert,flipH:!!a.flip_h,flipV:!!a.flip_v}:{type:o.type,lengthCm:o.lengthCm,contact:"",lock:"",invert:!1,flipH:o.flipH,flipV:o.flipV},...o.host?{host:o.host}:{},x:o.x,y:o.y,angle:o.angle},this._openingRebindId=null,this._openingHoverCandidate=null,this._cursorPt=null}_editOpening(t){this._openingDialog={id:t.id,type:t.type,lengthCm:Math.round(t.rlen/this._gridPitch*this._cellCm),lengthTouched:!1,contact:t.contact||"",lock:t.lock||"",invert:!!t.invert,flipH:!!t.flip_h,flipV:!!t.flip_v,...t.host?{host:{...t.host}}:{},x:t.rx,y:t.ry,angle:t.angle}}_opPointerDown(t,e){if("plan"===this._mode&&this._spaceModel()&&"resize"!==this._tool){t.preventDefault(),t.stopPropagation();try{H_(t)}catch{}this._opDrag={id:e.id,moved:!1,sx:t.clientX,sy:t.clientY,dirty:!1,before:this._geometrySnapshot()}}}_opPointerMove(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;if(Math.abs(t.clientX-this._opDrag.sx)+Math.abs(t.clientY-this._opDrag.sy)<=3)return;const i=this._spaceModel();if(!i)return;const s=this._svgPoint(t),n=this._curSpaceCfg,o=n?.openings?.find(t=>t.id===e.id);if(!o)return;if("partition"===o.host?.kind){const t=i.partitions.find(t=>t.id===o.host.id);if(!t)return;const e=t.b[0]-t.a[0],n=t.b[1]-t.a[1],a=Math.hypot(e,n);if(!(a>1e-9))return;const r=e/a,l=n/a;if(Math.abs((s[0]-t.a[0])*l-(s[1]-t.a[1])*r)>4*this._gridPitch)return;const c=o.length*P_/2+nd(t,this._cellCm,this._gridPitch);let h=(s[0]-t.a[0])*r+(s[1]-t.a[1])*l;if(h=Math.round(h/this._gridPitch)*this._gridPitch,h=Math.max(c,Math.min(a-c,h)),a<2*c-1e-9)return;const d=h/a,u=(t.a[0]+r*h)/P_,p=(t.a[1]+l*h)/this._spaceH;let _=180*Math.atan2(n,e)/Math.PI;_>=90?_-=180:_<-90&&(_+=180);const g=o.host.t!==d||o.x!==u||o.y!==p||o.angle!==_;return this._opDrag.moved=!0,g&&(this._opDrag.dirty=!0),o.host={...o.host,t:d},o.x=u,o.y=p,o.angle=_,this._opMeasure=null,g&&this._cfgEpoch++,void this.requestUpdate()}const a=ui(s,i.rooms,4*this._gridPitch);if(!a)return;this._opDrag.moved=!0;const r=this._opRuler(a,o.length*P_);this._opMeasure=r.measure;const l=r.x/P_,c=r.y/this._spaceH,h=o.x!==l||o.y!==c||o.angle!==a.angle;h&&(this._opDrag.dirty=!0),o.x=l,o.y=c,o.angle=a.angle,h&&this._cfgEpoch++,this.requestUpdate()}_opRuler(t,e){const i=this._spaceModel()?.rooms||[],s=this._gridPitch/2;let n=t.x,o=t.y,a=pi([n,o],t.angle,e,i,s);if(a&&a.centered&&(n!==a.wallCenter[0]||o!==a.wallCenter[1]))[n,o]=a.wallCenter,a=pi([n,o],t.angle,e,i,s);else if(a){const[r,l]=a.wallA,[c,h]=a.wallB,d=c-r,u=h-l,p=Math.hypot(d,u);if(p>0){const c=this._gridPitch,h=Math.min(e/2,p/2);let _=Math.round(((n-r)*d+(o-l)*u)/p/c)*c;_=Math.max(h,Math.min(p-h,_)),n=r+_/p*d,o=l+_/p*u,a=pi([n,o],t.angle,e,i,s)||a}}if(!a)return{x:n,y:o,angle:t.angle,measure:null};const r="mi"===this.hass?.config?.unit_system?.length,l=(t,e)=>({x:e[0],y:e[1],text:ri(t/this._gridPitch*this._cellCm,r)});return{x:n,y:o,angle:t.angle,measure:{labels:[l(a.sideA,a.midA),l(a.sideB,a.midB)],guide:a.centered?{x:a.wallCenter[0],y:a.wallCenter[1],angle:t.angle}:null}}}_opPointerUp(t,e){if(!this._opDrag||this._opDrag.id!==e.id)return;const i=this._opDrag,s=i.moved;this._opMeasure=null,s&&i.dirty&&(this._recordGeometry(this._t("history.move_opening"),i.before),this._saveConfig()),s?window.setTimeout(()=>this._opDrag=null,0):this._opDrag=null}_opClick(t,e){"plan"===this._mode&&"resize"===this._tool||(t.stopPropagation(),this._opDrag?.moved||"plan"===this._mode&&this._editOpening(e))}_saveOpening(){const t=this._openingDialog,e=this._curSpaceCfg,i=this._spaceModel();if(!t||!e||!i)return;const s=this._geometrySnapshot(),n=this._spaceH,o=(e.openings||[]).find(e=>e.id===t.id),a={...o||{},id:t.id||"o"+Date.now().toString(36),type:t.type,x:t.x/P_,y:t.y/n,angle:t.angle,length:o&&!t.lengthTouched?o.length:this._cmToUnits(Math.max(20,t.lengthCm))/P_,...t.host?{host:{...t.host}}:{}};if(a.host){const t=ld(o,a)?rd(a,i.partitions,P_,this._cellCm,this._gridPitch):ad(a,i.partitions,P_,this._cellCm,this._gridPitch);if(!t.resolved){const e=i.partitions.find(t=>t.id===a.host.id);if("does-not-fit-jamb"===t.reason&&e){const t=nd(e,this._cellCm,this._gridPitch);this._showToast(this._t("opening.partition_jamb_margin",{distance:ri(t/this._gridPitch*this._cellCm,this._imperial)}))}else this._showToast(this._t("opening.partition_orphan"));return}const s=(e.openings||[]).flatMap(t=>{if(!t.host||t.id===a.id)return[];const e=ad(t,i.partitions,P_,this._cellCm,this._gridPitch).resolved;return e?[e]:[]});if(function(t,e,i=1e-9){const s=t.length/(2*t.axis.length),n=t.t-s,o=t.t+s;return e.some(e=>{if(e.host.id!==t.host.id||e.opening.id===t.opening.id)return!1;const s=e.length/(2*e.axis.length);return Math.max(n,e.t-s)t.id===a.id);r>=0?e.openings[r]=a:e.openings.push(a),this._recordGeometry(this._t(t.id?"history.edit_opening":"history.add_opening"),s),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_deleteOpening(){const t=this._openingDialog,e=this._curSpaceCfg;if(!t?.id||!e?.openings)return;const i=this._geometrySnapshot();e.openings=e.openings.filter(e=>e.id!==t.id),this._recordGeometry(this._t("history.delete_opening"),i),this._saveConfig(),this._openingDialog=null,this.requestUpdate()}_contactCandidates(){const t=[];for(const e of Object.keys(this.hass.states)){if(!this._openingEntityAvailable(e))continue;const i=e.split(".")[0];if("binary_sensor"!==i&&"cover"!==i)continue;const s=this.hass.states[e],n=["door","window","opening","garage_door","garage"].includes(s?.attributes?.device_class||"");("cover"!==i||n)&&t.push([e,s?.attributes?.friendly_name||e,n?0:1])}return t.sort((t,e)=>t[2]-e[2]||t[1].localeCompare(e[1])).map(([t,e])=>({value:t,label:e}))}_lockCandidates(){return Object.keys(this.hass.states).filter(t=>t.startsWith("lock.")&&this._openingEntityAvailable(t)).map(t=>({value:t,label:this.hass.states[t]?.attributes?.friendly_name||t})).sort((t,e)=>t.label.localeCompare(e.label))}_mergeClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms,s=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!s?.id)return;const n=s.id;if(!this._mergeSel||this._mergeSel===n)return void(this._mergeSel=this._mergeSel===n?null:n);const o=i.find(t=>t.id===this._mergeSel),a=o?ci(o):null,r=ci(s),l=a&&r?function(t,e){if(!t||!e||t.length<3||e.length<3)return null;const i=si(Pi(t),Pi(e));if(1!==i.length)return null;if(1!==i[0].length)return null;const s=i[0][0].slice(0,-1).map(t=>[t[0],t[1]]);return s.length>=3?s:null}(a,r):null;if(!l)return this._showToast(this._t("toast.merge_not_adjacent")),void(this._mergeSel=null);this._mergeDialog={aId:this._mergeSel,bId:n,poly:l,pick:"a"},this._mergeSel=null}_commitMerge(){const t=this._mergeDialog,e=this._curSpaceCfg;if(!t||!e||!this._spaceModel())return;const i=this._geometrySnapshot(),s=this._spaceH,n="a"===t.pick?t.aId:t.bId,o="a"===t.pick?t.bId:t.aId,a=e.rooms.find(t=>t.id===n);a?(a.poly=t.poly.map(t=>[t[0]/P_,t[1]/s]),delete a.x,delete a.y,delete a.w,delete a.h,e.rooms=e.rooms.filter(t=>t.id!==o),this._commitOpenSpans(),this._recordGeometry(this._t("history.merge_rooms"),i),this._saveConfig(),this._mergeDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.rooms_merged",{name:a.name||""}))):this._mergeDialog=null}_splitClick(t){const e=this._spaceModel();if(!e)return;const i=e.rooms;if(!this._splitSel){const e=[...i].reverse().find(e=>this._pointInRoom(t,e));if(!e?.id)return;return void(this._splitSel={roomId:e.id,pts:[]})}const s=i.find(t=>t.id===this._splitSel.roomId),n=s?ci(s):null;if(!s||!n)return void(this._splitSel=null);const o=.02*this._gridPitch,a=6*this._gridPitch,r=function(t,e){if(!e||e.length<2)return null;let i=null,s=1/0;for(let n=0;n=n)continue;n=_;const g=Math.sqrt(u),m=(i>0?Math.max(0,Math.min(g,Math.round(p*g/i)*i)):p*g)/g;s=[a+m*h,r+m*d]}return s}(r,n,this._gridPitch)||r,c=r&&l&&Math.hypot(r[0]-t[0],r[1]-t[1])<=a?l:null,h=!!c&&yi(c,n,o),d=this._splitSel.pts;if(!d.length)return h?void(this._splitSel={...this._splitSel,pts:[c]}):void this._showToast(this._t("toast.split_pick_wall"));if(!h){const e=this._snap(t);return bi(e,n,o)?void(this._splitSel={...this._splitSel,pts:[...d,e]}):void this._showToast(this._t("toast.split_pick_inside"))}const u=Ii(n,[...d,c],o);if(!u)return void this._showToast(this._t("toast.split_bad_cut"));this._resetRoomDialogFields();const[p,_]=u,g=Ti(p)>=Ti(_)?p:_,m=g===p?_:p;this._pendingSplit={roomId:s.id,mainPoly:g,newPoly:m},this._cursorPt=null,this._nameSel="",this._areaSel="",this._roomDialog=!0}get _contourClosed(){return this._path.length>=4&&this._samePt(this._path[0],this._path[this._path.length-1])&&(null!=this._closingWallCm||!this._activeDraftId)}_markupMove(t){if(!this._markup)return;const e=t.pointerType;if(e&&(this._boundaryPointerType=e),"column"===this._tool)return void(this._cursorPt=this._snap(this._svgPoint(t)));if("opening"===this._tool||"boundary"===this._tool||"wallthick"===this._tool)return void(this._cursorPt=this._svgPoint(t));const i="draw"===this._tool&&!this._contourClosed,s="split"===this._tool&&!!this._splitSel?.pts?.length;if(!i&&!s)return;const n=this._svgPoint(t);if(i){const e=this._resolvePlanDrawPoint(n,t.shiftKey);return this._planSnapHover={contextKey:e.contextKey,candidate:e.candidate},this._path.length?void(this._cursorPt=e.point):void this._syncPlanSnapActiveMarker(e.candidate)}this._cursorPt=this._snap(n)}get _openingPreview(){const t=this._openingPreset;if("opening"!==this._tool||!t||!this._cursorPt)return null;const e=this._cursorPt,i=this._openingHoverCandidate;if(i&&h_(i,[e[0],e[1]],t.revision,this._cfgEpoch))return i;if(this._openingAt(e))return this._openingHoverCandidate=null,null;const s=this._resolveOpeningPlacement(e);return this._openingHoverCandidate=s,s}get _opMeasureView(){return this._opMeasure||this._openingPreview?.measure||null}_saveRoom(){(this._areaSel||this._nameSel.trim())&&(this._wallFaceBatch?this._decideWallFace(!0):this._commitRoom())}_decideWallFace(t){const e=this._wallFaceBatch;if(!e)return;const i=e.candidates[e.index];if(!i)return;const s=t?{candidate:i,create:!0,name:this._nameSel.trim(),area:this._areaSel||null,settings:this._roomSettingsFromDialog()?JSON.parse(JSON.stringify(this._roomSettingsFromDialog())):null}:{candidate:i,create:!1},n=[...e.decisions,s],o=e.index+1;if(o"number"==typeof t&&Number.isFinite(t)&&t>=0?t:null,n=.02*this._gridPitch,o=this._spaceModel();if(!o)return _r;for(const e of this._planSnapGeometrySnapshot().value.segments){if("room"===e.sourceKind||Hs(t,[e.a[0],e.a[1],e.b[0],e.b[1]])>n)continue;if("partition"===e.sourceKind)return s(o.partitions.find(t=>t.id===e.sourceId)?.cm)??_r;const i=e.sourceId.lastIndexOf(":"),a=i>=0?e.sourceId.slice(0,i):e.sourceId,r=i>=0?Number(e.sourceId.slice(i+1)):-1;return s(o.room_drafts.find(t=>t.id===a)?.segments[r]?.cm)??_r}for(let o=0;o+1{this._showToast(this._t(t,e)),this._roomDialogCancel()},n=t.decisions.filter(t=>t.create),o=n.map(t=>t.candidate.ring),a=i.rooms;for(let t=0;ti.id!==e&&!!ci(i)&&Ci(o[t],ci(i)));if(i)return void s("toast.room_overlap",{name:i.name||""})}if((e.rooms||[]).length+n.length>400)return void s("toast.physical_limit");if(n.some(t=>t.candidate.split&&!e.rooms.some(e=>e.id===t.candidate.split.roomId)))return void s("toast.contour_cannot_close");const r=2e-4*this._gridPitch,l=new Map;for(let e=0;et.candidate.atomKeys)),i=n.some(t=>t.candidate.consumeAllActive);for(const s of Gd(this._wallGraphSources(t.activePath),r)){const t=s.sourceKeys.find(t=>l.has(t));!t||i||e.has(s.key)||c.push({a:s.a,b:s.b,cm:l.get(t)})}}else c.push(...Sd(t.activePath,t.activeCms,_r));if((e.partitions||[]).length+c.length>F_)return void s("toast.physical_limit");const h=this._geometrySnapshot(),d=n.some(t=>!!t.candidate.split),u=d?el(i.rooms,e.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,P_):null,p=d&&Array.isArray(e.walls)?e.walls:null;for(const t of n){const i=t.candidate.split;if(!i)continue;const n=e.rooms.find(t=>t.id===i.roomId);if(!n)return void s("toast.contour_cannot_close");n.poly=i.mainPoly.map(t=>[t[0]/P_,t[1]/this._spaceH]),delete n.x,delete n.y,delete n.w,delete n.h}const _=Date.now().toString(36),g=[];if(n.forEach((t,i)=>{const s=t.area?this.hass.areas[t.area]?.name:"",n={id:`r${_}-${i}`,name:t.name||s||this._t("room.default_name"),area:t.area||null,poly:t.candidate.ring.map(t=>[t[0]/P_,t[1]/this._spaceH]),...t.settings?{settings:JSON.parse(JSON.stringify(t.settings))}:{}};e.rooms.push(n),g.push({room:n,decision:t})}),t.activeDraftId&&Array.isArray(e.room_drafts)&&(e.room_drafts=e.room_drafts.filter(e=>e.id!==t.activeDraftId),e.room_drafts.length||delete e.room_drafts),c.length&&(e.partitions||=[],c.forEach((t,i)=>e.partitions.push({id:`partition-${_}-${i}`,a:[t.a[0]/P_,t.a[1]/P_],b:[t.b[0]/P_,t.b[1]/P_],cm:t.cm}))),d){this._commitOpenSpans();const t=this._normalizeWalls(u,this._openCuts());t.length?e.walls=t:p?.length?e.walls=p:delete e.walls}if(g.length){this._cfgEpoch++;const i=this._openCuts(),s=this._spaceModel();if(!s)return;let n=e.walls;for(const{room:e,decision:o}of g){const a=o.candidate.ring,r=this._wallSourceCmAt(a[0],t.activePath,t.activeCms);n=Er(n,s.rooms,e.id,r,this._wallKeyPitch,i,P_);for(const o of tl(s.rooms,n,i,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){if(o.roomId!==e.id||"outer"!==o.kind)continue;const i=[(o.a[0]+o.b[0])/2,(o.a[1]+o.b[1])/2];n=Ir(n,o.a,o.b,this._wallSourceCmAt(i,t.activePath,t.activeCms),this._wallKeyPitch,P_)}}const o=this._normalizeWalls(n,i);o.length?e.walls=o:delete e.walls}this._recordGeometry(this._t("history.wall_face_batch"),h),this._saveConfig(),delete this._resumeDraftBySpace[this._space],this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._wallFaceBatch=null,this._roomDialog=!1,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices();const m=new Set(n.map(t=>t.area).filter(t=>!!t));if(m.size){const t={...this._layout};for(const e of this._devices){if(!m.has(e.area||"")||e.space!==this._space)continue;if(this._layout[e.id])continue;const i=this._defPos[e.id];i&&(t[e.id]={s:this._space,x:i.x/P_,y:i.y/P_},this._dirtyPos.add(e.id))}this._layout=t,this._persistLayout()}this._showToast(this._t(n.length?"toast.wall_rooms_saved":"toast.wall_chain_saved",{n:n.length}))}_commitRoom(){const t=this._curSpaceCfg,e=this._spaceModel();if(!t||!e)return;const i=this._geometrySnapshot(),s=this._spaceH,n=!!this._pendingSplit,o=n?el(e.rooms,t.walls,this._openCuts(),this._wallKeyPitch,this._cellCm,this._gridPitch,P_):null,a=n&&Array.isArray(t.walls)?t.walls:null;let r;if(this._pendingSplit){const e=t.rooms.find(t=>t.id===this._pendingSplit.roomId);if(!e)return this._pendingSplit=null,this._splitSel=null,void(this._roomDialog=!1);e.poly=this._pendingSplit.mainPoly.map(t=>[t[0]/P_,t[1]/s]),delete e.x,delete e.y,delete e.w,delete e.h,r=this._pendingSplit.newPoly}else{if(!this._contourClosed)return;r=this._path.slice(0,-1)}const l=this._areaSel?this.hass.areas[this._areaSel]?.name:"",c={id:"r"+Date.now().toString(36),name:this._nameSel||l||this._t("room.default_name"),area:this._areaSel||null,poly:r.map(t=>[t[0]/P_,t[1]/s]),...this._roomSettingsFromDialog()?{settings:this._roomSettingsFromDialog()}:{}};if(t.rooms.push(c),!n&&this._activeDraftId&&Array.isArray(t.room_drafts)&&(t.room_drafts=t.room_drafts.filter(t=>t.id!==this._activeDraftId),t.room_drafts.length||delete t.room_drafts),n){this._commitOpenSpans();const e=this._normalizeWalls(o,this._openCuts());e.length?t.walls=e:a?.length?t.walls=a:delete t.walls}if(!n){const e=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||_r],i=e[0]||this._drawWallCm;if(null!=i){this._cfgEpoch++;const s=this._openCuts(),n=this._spaceModel();if(!n)return;let o=Er(t.walls,n.rooms,c.id,i,this._wallKeyPitch,s,P_);for(const t of tl(n.rooms,o,s,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)){if(t.roomId!==c.id||"outer"!==t.kind)continue;const s=[(t.a[0]+t.b[0])/2,(t.a[1]+t.b[1])/2],n=r.findIndex((t,e)=>{const i=r[(e+1)%r.length];return Hs(s,[t[0],t[1],i[0],i[1]])<=.02*this._gridPitch});n>=0&&(o=Ir(o,t.a,t.b,e[n]||i,this._wallKeyPitch,P_))}o=this._normalizeWalls(o,s),o.length?t.walls=o:delete t.walls}}this._recordGeometry(this._t(n?"history.split_room":"history.add_room"),i),this._saveConfig(),this._path=[],delete this._resumeDraftBySpace[this._space],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._pendingSplit=null,this._splitSel=null;const h=this._areaSel;this._areaSel="",this._nameSel="",this._roomDialog=!1,this._regSignature="",this._maybeRebuildDevices();let d=0;if(h){const t=P_,e={...this._layout};for(const i of this._devices){if(i.area!==h||i.space!==this._space)continue;if(d++,this._layout[i.id])continue;const s=this._defPos[i.id];s&&(e[i.id]={s:this._space,x:s.x/P_,y:s.y/t},this._dirtyPos.add(i.id))}this._layout=e,this._persistLayout()}const u=this._model.find(t=>t.id===this._space)?.rooms.length||0;this._showToast(h?this._t("toast.room_saved",{n:u,added:d}):this._t("toast.room_saved_no_area",{n:u}))}_cancelPath(){this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._path=[],this._activeDraftId=null,this._draftSegmentCms=[],this._closingWallCm=null,this._clearPlanSnapHover(),this._roomDialog=!1,this._pendingSplit=null,this._wallFaceBatch=null,this._splitSel=null,this._mergeSel=null,this._mergeDialog=null,this._openWallAnchor=null,this._boundaryRestoreGuard=null,this._physicalSel=null,this._physicalDrag=null,this._physicalRotate=null,this._clearOpeningPlacement(!0)}_resumeLastDraft(){const t=this._resumeDraftBySpace[this._space];if(!t)return;const e=this._spaceModel()?.room_drafts.find(e=>e.id===t);e?(this._activeDraftId=t,this._path=e.points.map(t=>[...t]),this._draftSegmentCms=e.segments.map(t=>t.cm),this._clearPlanSnapHover()):delete this._resumeDraftBySpace[this._space]}_roomDialogCancel(){if(this._roomDialog=!1,this._roomEditId)return this._roomEditId=null,this._nameSel="",void(this._areaSel="");if(this._wallFaceBatch){const t=this._wallFaceBatch;return this._wallFaceBatch=null,this._path=t.activePath.map(t=>[...t]),this._draftSegmentCms=[...t.activeCms],this._activeDraftId=t.activeDraftId,this._nameSel="",this._areaSel="",void this.requestUpdate()}if(this._pendingSplit)return this._pendingSplit=null,void(this._splitSel=null);this._undoPoint()}get _freeAreas(){const t=new Set;for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area&&t.add(i.area);for(const e of this._wallFaceBatch?.decisions||[])e.create&&e.area&&t.add(e.area);return Object.values(this.hass?.areas||{}).filter(e=>!t.has(e.area_id)).sort((t,e)=>(t.name||"").localeCompare(e.name||""))}_openMarkerDialog(t){if(this._vacAllCamerasFor=null,this._vacAllCameraCache=null,t&&this._ackNewDevice(t.id),this._norm)if(t){const e=t.marker,i=Object.prototype.hasOwnProperty.call(e||{},"is_light"),s=Object.prototype.hasOwnProperty.call(e||{},"light_entity"),n=Object.prototype.hasOwnProperty.call(e||{},"glow_color"),o=Object.prototype.hasOwnProperty.call(e||{},"value_badge"),a=Object.prototype.hasOwnProperty.call(e||{},"tap_action"),r=Object.prototype.hasOwnProperty.call(e||{},"toggle_entity"),l=ws(e?.glow_color),c=this._devicePresentation(t,!0).valueBadge,h=Lo(this._planHass,t,this._devices),d=Bo(this._planHass,t,h);this._markerDialog={devId:t.id,name:t.name,binding:"virtual"===t.bindingKind?"virtual":t.bindingKind+":"+t.bindingRef,bindingMode:"virtual"===t.bindingKind?"virtual":"ha",bindingOpen:!1,showEntities:"entity"===t.bindingKind&&!!this._fullRegistryHass.entities[t.bindingRef||""]?.device_id,bindingFilter:"",icon:t.marker?.icon||"",autoIcon:t.icon||"",display:Li(t.marker?.display),rippleColor:Rt(t.marker?.ripple_color,""),rippleSize:Number(t.marker?.ripple_size)>0?Number(t.marker.ripple_size):1.5,size:Number(t.marker?.size)>0?Number(t.marker.size):1,angle:Number(t.marker?.angle)||0,tapAction:Yh(t.marker?.tap_action,t.primary?.split(".")[0]),tapActionTouched:!1,originalHasTapAction:a,originalTapAction:t.marker?.tap_action,tapHintAnnouncement:"",toggleEntity:e?.toggle_entity||"",toggleEntityTouched:!1,originalHasToggleEntity:r,originalToggleEntity:e?.toggle_entity,tapTarget:t.marker?.tap_target||"",tapConfirm:!0===t.marker?.tap_confirm,runFilter:"",controls:Yn(t.marker?.binding,t.marker?.controls,t.entities),controlsFilter:"",lightRole:!0===e?.is_light?"always":!1===e?.is_light?"never":"auto",lightRoleTouched:!1,originalHasIsLight:i,originalIsLight:e?.is_light,lightEntity:e?.light_entity||"",lightEntityTouched:!1,originalHasLightEntity:s,originalLightEntity:e?.light_entity,glowMode:null!=l?.bri?"fixed":l?"color":"auto",glowColor:l?.c||this._fillColors.glow_light.c,glowBrightness:Math.max(1,Math.round(100*(l?.bri??1))),glowColorDrafted:!!l,glowBrightnessDrafted:null!=l?.bri,glowTouched:!1,originalHasGlowColor:n&&(!!l||null===e?.glow_color),originalGlowColor:l||(null===e?.glow_color?null:void 0),valueBadgeEnabled:o?!0===e?.value_badge?.enabled:!!c,valueBadgeSource:e?.value_badge?.source||c?.source||d,valueBadgePosition:e?.value_badge?.position||c?.position||"right",valueBadgeTouched:!1,originalHasValueBadge:o,originalValueBadge:e?.value_badge,useClimateTemp:!0===t.marker?.use_climate_temp,glowRadius:Number(t.marker?.glow_radius_cm)>0?String(this._imperial?Math.round(Number(t.marker.glow_radius_cm)/30.48*10)/10:Math.round(Number(t.marker.glow_radius_cm))/100):"",model:t.model||"",link:t.link||"",description:t.description||"",pdfs:[...t.pdfs||[]],room:t.marker?.room_id?t.space+"#@"+t.marker.room_id:t.space&&t.area?t.space+"#"+t.area:"",hideFromPlan:!0===t.marker?.hidden,busy:!1}}else this._markerDialog={name:"",binding:"virtual",bindingMode:"virtual",bindingOpen:!1,showEntities:!1,bindingFilter:"",icon:"",autoIcon:"",display:"badge",rippleColor:"",rippleSize:1.5,size:1,angle:0,tapAction:"info",tapActionTouched:!1,originalHasTapAction:!1,originalTapAction:void 0,tapHintAnnouncement:"",toggleEntity:"",toggleEntityTouched:!1,originalHasToggleEntity:!1,originalToggleEntity:void 0,tapTarget:"",tapConfirm:!1,runFilter:"",controls:[],controlsFilter:"",lightRole:"auto",lightRoleTouched:!1,originalHasIsLight:!1,originalIsLight:void 0,lightEntity:"",lightEntityTouched:!1,originalHasLightEntity:!1,originalLightEntity:void 0,glowMode:"auto",glowColor:this._fillColors.glow_light.c,glowBrightness:100,glowColorDrafted:!1,glowBrightnessDrafted:!1,glowTouched:!1,originalHasGlowColor:!1,originalGlowColor:void 0,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgePosition:"right",valueBadgeTouched:!1,originalHasValueBadge:!1,originalValueBadge:void 0,useClimateTemp:!1,glowRadius:"",model:"",link:"",description:"",pdfs:[],room:"",hideFromPlan:!1,busy:!1,uploadId:"up_"+Date.now().toString(36)+Math.random().toString(36).slice(2,6)};else this._showToast(this._t("toast.marker_needs_server"))}_runCandidates(){const t=[];for(const e of Ui)for(const[i,s]of Object.entries(this.hass.states))i.startsWith(e+".")&&this._planEntityAvailable(i)&&t.push({value:i,label:s?.attributes?.friendly_name||i,sub:this._t("run."+e)});return t.sort((t,e)=>t.sub.localeCompare(e.sub)||t.label.localeCompare(e.label))}_bindingCandidates(){const t=this._planHass,e=vo(this._markers),i=new Set(this._markers.filter(t=>t.removed).map(t=>t.binding)),s=new Set;for(const t of this._devices)t.id!==this._markerDialog?.devId&&("device"===t.bindingKind&&t.bindingRef&&s.add("device:"+t.bindingRef),"entity"===t.bindingKind&&t.bindingRef&&s.add("entity:"+t.bindingRef));const n=new Set;for(const t of this._devices)"device"===t.bindingKind&&t.name&&n.add(t.name.trim()+"|"+(t.area||""));const o=[];for(const e of Object.values(t.devices)){if("service"===e.entry_type)continue;const t="device:"+e.id;if(s.has(t))continue;const a=(e.name_by_user||e.name||e.id).trim();t!==this._markerDialog?.binding&&!i.has(t)&&n.has(a+"|"+(e.area_id||""))||o.push({value:t,label:a,sub:(e.model||this._t("marker.sub_device"))+("Group"===e.model?this._t("marker.sub_z2m_group"):"")})}const a=new Set(["group","template","derivative","min_max","threshold","integration","statistics","trend","utility_meter","tod","switch_as_x","schedule"]);for(const[n,r]of Object.entries(t.entities)){const l="entity:"+n;if(s.has(l))continue;if(yo(t,n,e)&&!i.has(l))continue;const c=a.has(r.platform),h="group"===r.platform;if(!c&&!h)continue;if(r.hidden&&!i.has(l))continue;const d=t.states[n];o.push({value:l,label:r.name||d?.attributes?.friendly_name||n,sub:n.split(".")[0]+" · "+("group"===r.platform?this._t("marker.sub_group"):this._t("marker.sub_helper"))})}if(this._markerDialog?.showEntities){const n=new Set(o.map(t=>t.value));for(const[a,r]of Object.entries(t.entities)){const l="entity:"+a;if(s.has(l)||n.has(l)||r.hidden&&!i.has(l))continue;if(yo(t,a,e)&&!i.has(l))continue;const c=t.states[a],h=r.name||c?.attributes?.friendly_name||a,d=r.device_id?t.devices[r.device_id]:null,u=d&&(d.name_by_user||d.name)||"";o.push({value:l,label:h,sub:a.split(".")[0]+" · "+this._t("marker.sub_entity")+(u?" · "+u:"")})}}const r=(this._markerDialog?.bindingFilter||"").toLowerCase().trim(),l=r?o.filter(t=>(t.label+" "+t.sub+" "+t.value).toLowerCase().includes(r)):o;return l.sort((t,e)=>t.label.localeCompare(e.label)),l.slice(0,200)}_physicalBodiesR(t=this._spaceModel()){if(!t)return[];const e=`${t.id}|${this._cfgEpoch}|${this._cellCm}|${this._gridPitch}`;if(this._physicalBodiesCache?.key===e)return this._physicalBodiesCache.all;const i=Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t));return this._physicalBodiesCache={key:e,...i},i.all}_rawPhysicalBodiesR(t=this._spaceModel()){if(!t)return[];this._physicalBodiesR(t);const e=this._physicalBodiesCache;return e?[...e.drafts,...e.partitions,...e.columns]:[]}_cleanFloor(t,e,i=this._spaceModel()){if(!i)return{floor:e,geom:null,path:"",area:Ol([[[...e,e[0]]]])};const s=t.id||`#${i.rooms.indexOf(t)}`,n=`${i.id}|${this._cfgEpoch}|${s}`;if(!this._rszPreview){const t=v_(this._cleanFloorCache,n);if(t.hit)return t.value}const o=e.map(t=>t[0]),a=e.map(t=>t[1]),r=[Math.min(...o),Math.min(...a),Math.max(...o),Math.max(...a)],l=this._physicalBodiesR(i).filter(t=>{const e=t.map(t=>t[0]),i=t.map(t=>t[1]);return Math.max(...e)>=r[0]&&Math.min(...e)<=r[2]&&Math.max(...i)>=r[1]&&Math.min(...i)<=r[3]}),c=l.length?zl(e,l):null,h={floor:e,geom:c,path:c?Dl(c):"",area:Ol(c||[[[...e,e[0]]]])};return this._rszPreview||y_(this._cleanFloorCache,n,h,600),h}_autoIconForBinding(t){if("virtual"===t)return"mdi:map-marker";const[e,i]=t.split(":");if(!i)return"";const s=this._fullRegistryHass,n=this._bindingStatus(t),o="active"===n.kind?n.enabledEntityIds:n.allEntityIds;if("device"===e){const t=s.devices?.[i];if(!t)return"mdi:help-circle";const e=o;return e.some(t=>t.startsWith("lock."))?"mdi:lock":fo(s,t.name_by_user||t.name||"",t.model,e,this._iconRules)}if("entity"===e){const t=s.entities?.[i],e=this.hass.states?.[i],n=t?.name||e?.attributes?.friendly_name||i;return i.startsWith("lock.")?"mdi:lock":fo(s,n,"",[i],this._iconRules)}return""}_allRoomsFlat(){const t=[];for(const e of this._serverCfg?.spaces||[])for(const i of e.rooms||[])i.area?t.push({value:e.id+"#"+i.area,label:(e.title||e.id)+" · "+i.name}):i.id&&t.push({value:e.id+"#@"+i.id,label:(e.title||e.id)+" · "+i.name+" · "+this._t("marker.subarea")});return t}_errText(t){if(!t)return this._t("err.unknown");if("string"==typeof t)return t;if("invalid_passage_fields"===t.code){const e=String(t.message||t.error||"").match(/space=([^;]*);\s*opening=([^;]*);\s*fields=([^;]*)/);if(e){const t=this._serverCfg?.spaces?.find(t=>String(t.id)===e[1]),i={contact:"opening.contact_label",lock:"opening.lock_label",invert:"opening.invert",flip_h:"opening.flip_h",flip_v:"opening.flip_v"},s=e[3].split(",").filter(Boolean).map(t=>i[t]?this._t(i[t]):t).join(", ");return this._t("opening.invalid_passage_fields",{room:t?.title||e[1],fields:s})}}if("invalid_partition_opening_jamb_margin"===t.code){const e=String(t.message||t.error||"").match(/margin_cm=([^;]*)/),i=e?Number(e[1]):NaN;if(Number.isFinite(i))return this._t("opening.partition_jamb_margin",{distance:ri(i,this._imperial)})}if(t.message)return t.message;if(t.error)return t.error;if(null!=t.code)return this._t("err.code",{code:t.code});try{return JSON.stringify(t)}catch{return String(t)}}_backupErrorText(t){const e=t?.code??t?.error;if("string"==typeof e){const t=`backup.error.${e}`,i=this._t(t);if(i!==t)return i}return this._errText(t)}async _pickMarkerFiles(t){const e=t.target,i=e.files?[...e.files]:[];if(e.value="",!i.length||!this._markerDialog)return;const s=this._markerDialog.uploadId||this._markerDialog.devId||"new",n=[];for(const t of i)try{const e=new FormData;e.append("marker_id",s),e.append("file",t,t.name);const i=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth("/api/houseplan/upload",{method:"POST",body:e}):await fetch("/api/houseplan/upload",{method:"POST",body:e,headers:this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}),o=await i.json().catch(()=>({}));if(!i.ok||o.error){const t={too_large:this._t("err.too_large",{mb:o.max_mb||50}),bad_ext:this._t("err.bad_ext"),unauthorized:this._t("err.unauthorized")};throw new Error(t[o.error]||o.error||"HTTP "+i.status)}n.push({name:o.name||t.name,url:o.url})}catch(e){this._showToast(this._t("toast.file_failed",{name:t.name,err:this._errText(e)}))}n.length&&this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:[...this._markerDialog.pdfs,...n]},this._showToast(this._t("toast.files_attached",{n:n.length})))}_removeMarkerPdf(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,pdfs:this._markerDialog.pdfs.filter(e=>e.url!==t)})}_markerLightFields(t){const e={};if(t.lightRoleTouched?"always"===t.lightRole?e.is_light=!0:"never"===t.lightRole&&(e.is_light=!1):t.originalHasIsLight&&(e.is_light=t.originalIsLight??null),t.lightEntityTouched?t.lightEntity&&(e.light_entity=t.lightEntity):t.originalHasLightEntity&&(e.light_entity=t.originalLightEntity??null),t.glowTouched){if("auto"!==t.glowMode){const i={c:Rt(t.glowColor,this._fillColors.glow_light.c)};"fixed"===t.glowMode&&(i.bri=Math.max(.01,Math.min(1,Math.round(t.glowBrightness)/100))),e.glow_color=i}}else t.originalHasGlowColor&&(e.glow_color=t.originalGlowColor??null);return e}_markerTapActionFields(t){return t.tapActionTouched?{tap_action:t.tapAction||null}:t.originalHasTapAction?{tap_action:t.originalTapAction??null}:{}}_markerToggleEntityFields(t){return(e={touched:t.toggleEntityTouched,originalHas:t.originalHasToggleEntity,original:t.originalToggleEntity,value:t.toggleEntity}).touched?e.value?{toggle_entity:e.value}:{}:e.originalHas?{toggle_entity:e.original??null}:{};var e}async _saveMarker(){const t=this._markerDialog;if(!t||t.busy)return;const e=this._effectiveMarkerTapAction(t);if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return;if("virtual"===t.binding&&!t.name.trim())return void this._showToast(this._t("toast.virtual_name_required"));if("run"===e&&!t.tapTarget)return void this._showToast(this._t("toast.run_target_required"));if(t.valueBadgeTouched&&t.valueBadgeEnabled&&!t.valueBadgeSource)return void this._showToast(this._t("toast.value_badge_source_required"));if("ha"===t.bindingMode){const e=this._bindingStatus(t.binding),i=t.devId?this._markers.find(e=>e.id===t.devId):null,s=!i||i.binding!==t.binding;if("active"!==e.kind&&s)return void this._showToast(this._t("ha_disabled"===e.kind?"toast.ha_disabled_add":"toast.ha_binding_unverified"));if("ha_disabled"===e.kind&&!0===i?.hidden&&!t.hideFromPlan)return this._markerDialog={...t,hideFromPlan:!0},void this._showToast(this._t("entity"===e.reason?"toast.ha_disabled_show_entity":"toast.ha_disabled_show_device"))}const i=this._serverCfg;if(!i)return;const s=i.markers||[],n=Bs(t.room);let o=n?.space||null;const a=n?.area||null,r=n?.roomId||null,l=Fi(t.binding,t.devId,()=>"v_"+Date.now().toString(36)),c=t.devId,h=c?this._devices.find(t=>t.id===c):null,d=n?.space||h?.space||null,u=d?this._spaceModelById(d):this._spaceModel();if(!u)return;const p=u.id;"virtual"!==t.binding||o||(o=p),this._markerDialog={...t,busy:!0};try{const n="virtual"===t.binding?[]:s.filter(e=>e.removed&&e.binding===t.binding).map(t=>t.id),d=n.length>0,_=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),g=s.find(t=>t.id===l||t.id===c)?.vacuum||null,m={id:l,vacuum:g,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle?t.angle:null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===e&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:_.length?_:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=f_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:!!t.hideFromPlan};("virtual"===t.binding||t.room)&&(m.space=o,m.area=a,m.room_id=r);const f=h?.marker?.room_id??null,v=!!t.room&&null!=h&&(h.space!==o||h.area!==a||f!==r);let y=!1;const b=t.uploadId||c;if(b&&b!==l&&m.pdfs?.length)try{const t=await this.hass.callWS({type:"houseplan/files/migrate",from_id:b,to_id:l}),e=t?.mapping||{};m.pdfs=function(t,e,i,s){if(!e||!i||e===i)return t;const n="/files/"+e+"/",o="/files/"+i+"/";return t.map(t=>{if(!t.url.includes(n))return t;const e=t.url.split(n)[1]||"",[i,a]=[e.split("?")[0],e.includes("?")?"?"+e.split("?")[1]:""];if(s){const e=s[decodeURIComponent(i)]??s[i];return e?{...t,url:t.url.split(n+i)[0]+o+encodeURIComponent(e)+a}:t}return{...t,url:t.url.split(n).join(o)}})}(m.pdfs,b,l,e),y=Object.keys(e).length>0}catch(t){this._showToast(this._t("toast.files_migrate_failed",{err:this._errText(t)}))}i.markers=s,c&&c!==l&&(i.markers=function(t,e,i){if(!e||!i||e===i)return[...t];const s=`marker:${e}`,n=`marker:${i}`;return t.map(t=>{const e=Array.isArray(t.controls)?t.controls.map(t=>t===s?n:t):t.controls,i="derived_marker_state"===t.value_badge?.source?.kind&&t.value_badge.source.ref===s?{...t.value_badge,source:{...t.value_badge.source,ref:n}}:t.value_badge;return e===t.controls&&i===t.value_badge?t:{...t,controls:e,value_badge:i}})}(i.markers,c,l)),c&&c!==l&&"derived_marker_state"===m.value_badge?.source?.kind&&m.value_badge.source.ref===`marker:${c}`&&(m.value_badge.source={kind:"derived_marker_state",ref:`marker:${l}`}),i.markers=i.markers.filter(t=>t.id!==l&&t.id!==c&&("virtual"===m.binding||t.binding!==m.binding)),i.markers.push(m);let w=null;const k=c?this._layout[c]:null,x=k?{s:k.s||h?.space||this._space,x:k.x,y:k.y}:c&&h&&this._defPos[c]?this._normPos(h.space,this._defPos[c].x,this._defPos[c].y):null;if(!d&&x&&x.s===p)l===c&&this._layout[l]&&!v||(w={s:x.s,x:x.x,y:x.y},this._layout={...this._layout,[l]:w});else if(d||!this._layout[l]||v){let t=u.vb[0]+u.vb[2]/2,e=u.vb[1]+u.vb[3]/2;const i=r?u.rooms.find(t=>t.id===r):a?u.rooms.find(t=>t.area===a):void 0;i&&([t,e]=this._roomCenter(i)),w=this._normPos(p,t,e),this._layout={...this._layout,[l]:w}}await this._saveConfigNow(),w&&this._noteLayoutRev(await this.hass.callWS({type:"houseplan/layout/update",device_id:l,pos:w}));const $=new Set(n);c&&c!==l&&$.add(c),$.delete(l);for(const t of $)delete this._layout[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{});y&&b&&await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:b}).catch(()=>{}),this._markerDialog=null,this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_saved"))}catch(t){this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteMarker(){const t=this._markerDialog;if(!t||t.busy||!t.devId)return;const e=t.devId?this._devices.find(e=>e.id===t.devId):null;if(!e)return;const i=t.name||this._t("device.fallback");if(!confirm(this._t("confirm.remove_marker",{name:i})))return;const s=this._serverCfg;s.markers=s.markers||[];const n=s.markers,o="virtual"===e.bindingKind?"virtual":e.bindingKind&&e.bindingRef?`${e.bindingKind}:${e.bindingRef}`:"";if(!o)return;const a=function(t,e,i,s){const n=new Set([e]),o=t.filter(t=>{const o=t.id===e||!s&&t.binding===i;return o&&n.add(t.id),!o});return{markers:s?o:[...o,{id:e,binding:i,removed:!0,hidden:!0}],cleanupIds:n}}(s.markers,e.id,o,"virtual"===e.bindingKind);var r,l;s.markers=(r=a.markers,l=a.cleanupIds,r.map(t=>{if(!Array.isArray(t.controls))return t;const e=t.controls.filter(t=>!("string"==typeof t&&t.startsWith("marker:")&&l.has(t.slice(7))));return e.length===t.controls.length?t:{...t,controls:e.length?e:null}}));const c=a.cleanupIds;this._markerDialog={...t,busy:!0};try{await this._saveConfigNow();for(const t of c){delete this._layout[t],delete this._defPos[t],this._dirtyPos.delete(t),this._sentPos.delete(t);const e=this._activityRt.get(t);e&&clearTimeout(e.timer),this._activityRt.delete(t),this._vacRt.delete(t),delete this._vacSrvTrails[t],await this.hass.callWS({type:"houseplan/layout/delete",device_id:t}).then(t=>this._noteLayoutRev(t)).catch(()=>{}),await this.hass.callWS({type:"houseplan/files/cleanup",marker_id:t}).catch(()=>{}),await this.hass.callWS({type:"houseplan/trail/delete",marker_id:t}).catch(()=>{})}this._markerDialog=null,this._infoCard?.id===e.id&&this._closeInfoCard(),this._selId===e.id&&(this._selId=null),this._drag?.id===e.id&&(this._drag=null),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.marker_removed"))}catch(t){this._serverCfg===s&&(s.markers=n),this._markerDialog&&(this._markerDialog={...this._markerDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}_normPos(t,e,i){return{s:t,x:e/P_,y:i/P_}}_openSpaceDialog(t,e){if(this._serverStorage&&this._serverCfg)if("edit"===t){const i=this._serverCfg.spaces.find(t=>t.id===e);if(!i)return;const s=ls(i),n=i.settings?.custom_fill&&"object"==typeof i.settings.custom_fill?as(i.settings.custom_fill):null,o="none"===s.fill?{...n||os,a:0}:n;this._spaceDialog={mode:t,spaceId:e,title:i.title,planUrl:i.plan_url||null,planFile:null,source:i.plan_url?"file":"draw",showBorders:s.showBorders,showNames:s.showNames,displayTouched:!0,hideDecor:s.hideDecor,hideOpenings:s.hideOpenings,roomColor:s.color,roomOpacity:s.opacity,fillMode:"none"===s.fill?"custom":s.fill,customFill:o,glowEnabled:s.glow,bgColor:s.bgColor,bgMode:"static"===i.settings?.bg_mode||"daynight"===i.settings?.bg_mode?i.settings.bg_mode:null,northDeg:Ya({},i.settings),sunRays:"boolean"==typeof i.settings?.sun_rays?i.settings.sun_rays:null,tempMin:s.tempMin,tempMax:s.tempMax,showLqi:s.showLqi??this._config?.show_signal??!0,cardFontScale:s.cardFontScale,labelTemp:s.labelTemp,labelHum:s.labelHum,labelLqi:s.labelLqi,labelLight:s.labelLight,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,busy:!1}}else this._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:{...os,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1};else this._showToast(this._t("toast.integration_missing"))}async _pickPlanFile(t){const e=t.target,i=e.files?.[0];if(!i||!this._spaceDialog)return;const s={"image/svg+xml":"svg","image/png":"png","image/jpeg":"jpg","image/webp":"webp"}[i.type]||(i.name.toLowerCase().endsWith(".svg")?"svg":"");if(!s)return void this._showToast(this._t("toast.plan_formats"));const n=new Uint8Array(await i.arrayBuffer());let o="";for(let t=0;t{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:1.414),e.onerror=()=>t(1.414),e.src=r});URL.revokeObjectURL(r),this._spaceDialog={...this._spaceDialog,planFile:{ext:s,b64:a,aspect:l,name:i.name}}}_useServerPlan(t){const e=this._spaceDialog;e&&(this._spaceDialog={...e,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let e=0;e<40;e++){const e=this._display(t);if(e){const i=await new Promise(t=>{const i=new Image;i.onload=()=>t(i.naturalWidth&&i.naturalHeight?i.naturalWidth/i.naturalHeight:0),i.onerror=()=>t(0),i.src=e}),s=this._spaceDialog;return s&&s.planUrl===t&&Number.isFinite(i)&&i>0?(this._spaceDialog={...s,savedAspect:i},i):0}if(await new Promise(t=>setTimeout(t,150)),this._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){if(confirm(this._t("confirm.delete_plan",{name:t})))try{await this.hass.callWS({type:"houseplan/plans/delete",name:t});const e=this._spaceDialog;e?.saved&&(this._spaceDialog={...e,saved:e.saved.filter(e=>e.name!==t)})}catch(t){this._showToast(this._t("toast.plan_delete_failed",{err:this._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return j`
${this._t("space.loading")}
`;const e=t.saved||[];if(!e.length)return j`
${this._t("space.no_saved")}
`;return j`
${e.map(e=>j`
@@ -5187,7 +5204,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`)} -
`}async _saveSpaceDialog(){const t=this._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this._showToast(this._t("toast.plan_required"));const e="create"===t.mode&&0===(this._serverCfg?.spaces.length||0);this._spaceDialog={...t,busy:!0};try{const i="create"===t.mode?"s"+Date.now().toString(36):t.spaceId;let s=null;if("file"===t.source&&t.planFile){s={url:(await this.hass.callWS({type:"houseplan/plan/set",space_id:i,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let n=t.savedAspect||null;!s&&"file"===t.source&&t.planUrl&&!n&&this._aspectJob&&(n=await this._aspectJob||null);const o=this._serverCfg;let a;if("create"===t.mode)a={id:i,title:t.title.trim(),plan_url:null,view_box:[0,0,1,1],rooms:[]},o.spaces.push(a);else{if(a=o.spaces.find(t=>t.id===i),!a)throw new Error("space "+i+" is gone from the config");a.title=t.title.trim()}s?(a.plan_url=s.url,a.plan_aspect=s.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==a.plan_url&&(a.plan_url=t.planUrl,a.plan_aspect=n),"draw"===t.source&&(a.plan_url=null,a.plan_aspect=null,delete a.plan_x,delete a.plan_y,delete a.plan_scale,delete a.plan_scale_x,delete a.plan_scale_y,delete a.plan_angle),a.settings={...a.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):20,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):25,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},a.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(__,t.cellCm)):5,await this._saveConfigNow(),this._spaceDialog=null,"create"===t.mode&&this._commitSpace(a.id),this._regSignature="",this._maybeRebuildDevices(),this._importQueue.length?this._openNextImport():e||this._importTotal>0?(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._showToast(this._t(e&&!this._importTotal?"toast.space_added_onboard":"import.done"))):(this._showToast("create"===t.mode?this._t("toast.space_added"):this._t("toast.space_saved")),"create"===t.mode&&("plan"!==this._mode?this._setMode("plan"):(this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._saveNav())))}catch(t){this._spaceDialog&&(this._spaceDialog={...this._spaceDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteSpace(){const t=this._spaceDialog;if(!t||"edit"!==t.mode)return;const e=this._serverCfg.spaces.find(e=>e.id===t.spaceId);if(confirm(this._t("confirm.delete_space",{title:e.title}))){this._serverCfg.spaces=this._serverCfg.spaces.filter(e=>e.id!==t.spaceId);try{await this._saveConfigNow(),this._spaceDialog=null,this._space===t.spaceId&&this._commitSpace(this._serverCfg.spaces[0]?.id||""),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.space_deleted"))}catch(t){this._showToast(this._t("toast.delete_failed",{err:this._errText(t)}))}}}async _saveConfigNow(){this._cfgEpoch++;try{await this._writeConfig()}catch(t){throw"conflict"===t?.code&&await this._reloadConfigOnly(),t}}_startImport(){const t=this._importDialog;if(!t)return;const e=t.floors.filter(t=>t.checked).map(t=>t.name);this._importDialog=null,e.length?(this._importQueue=e,this._importTotal=e.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this._importQueue.shift();void 0!==t&&(this._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1})}_skipImport(){this._spaceDialog=null,this._importQueue.length?this._openNextImport():this._importTotal>0&&this._model.length&&(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._showToast(this._t("import.done")))}_renderImportDialog(){const t=this._importDialog,e=t.floors.filter(t=>t.checked).length;return j``}async _saveSpaceDialog(){const t=this._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this._showToast(this._t("toast.plan_required"));const e="create"===t.mode&&0===(this._serverCfg?.spaces.length||0);this._spaceDialog={...t,busy:!0};try{const i="create"===t.mode?"s"+Date.now().toString(36):t.spaceId;let s=null;if("file"===t.source&&t.planFile){s={url:(await this.hass.callWS({type:"houseplan/plan/set",space_id:i,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let n=t.savedAspect||null;!s&&"file"===t.source&&t.planUrl&&!n&&this._aspectJob&&(n=await this._aspectJob||null);const o=this._serverCfg;let a;if("create"===t.mode)a={id:i,title:t.title.trim(),plan_url:null,view_box:[0,0,1,1],rooms:[]},o.spaces.push(a);else{if(a=o.spaces.find(t=>t.id===i),!a)throw new Error("space "+i+" is gone from the config");a.title=t.title.trim()}s?(a.plan_url=s.url,a.plan_aspect=s.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==a.plan_url&&(a.plan_url=t.planUrl,a.plan_aspect=n),"draw"===t.source&&(a.plan_url=null,a.plan_aspect=null,delete a.plan_x,delete a.plan_y,delete a.plan_scale,delete a.plan_scale_x,delete a.plan_scale_y,delete a.plan_angle),a.settings={...a.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):20,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):25,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},a.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(g_,t.cellCm)):5,await this._saveConfigNow(),this._spaceDialog=null,"create"===t.mode&&this._commitSpace(a.id),this._regSignature="",this._maybeRebuildDevices(),this._importQueue.length?this._openNextImport():e||this._importTotal>0?(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._showToast(this._t(e&&!this._importTotal?"toast.space_added_onboard":"import.done"))):(this._showToast("create"===t.mode?this._t("toast.space_added"):this._t("toast.space_saved")),"create"===t.mode&&("plan"!==this._mode?this._setMode("plan"):(this._tool="draw",this._path=[],this._cursorPt=null,this._primeDrawWallField(),this._saveNav())))}catch(t){this._spaceDialog&&(this._spaceDialog={...this._spaceDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}async _deleteSpace(){const t=this._spaceDialog;if(!t||"edit"!==t.mode)return;const e=this._serverCfg.spaces.find(e=>e.id===t.spaceId);if(confirm(this._t("confirm.delete_space",{title:e.title}))){this._serverCfg.spaces=this._serverCfg.spaces.filter(e=>e.id!==t.spaceId);try{await this._saveConfigNow(),this._spaceDialog=null,this._space===t.spaceId&&this._commitSpace(this._serverCfg.spaces[0]?.id||""),this._regSignature="",this._maybeRebuildDevices(),this._showToast(this._t("toast.space_deleted"))}catch(t){this._showToast(this._t("toast.delete_failed",{err:this._errText(t)}))}}}async _saveConfigNow(){this._cfgEpoch++;try{await this._writeConfig()}catch(t){throw"conflict"===t?.code&&await this._reloadConfigOnly(),t}}_startImport(){const t=this._importDialog;if(!t)return;const e=t.floors.filter(t=>t.checked).map(t=>t.name);this._importDialog=null,e.length?(this._importQueue=e,this._importTotal=e.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this._importQueue.shift();void 0!==t&&(this._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...lh(),hideDecor:!1,hideOpenings:!1,roomColor:ss,roomOpacity:ns,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:20,tempMax:25,showLqi:this._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:5,busy:!1})}_skipImport(){this._spaceDialog=null,this._importQueue.length?this._openNextImport():this._importTotal>0&&this._model.length&&(this._importTotal=0,this._commitSpace(this._serverCfg.spaces[0]?.id||this._space),this._setMode("plan"),this._showToast(this._t("import.done")))}_renderImportDialog(){const t=this._importDialog,e=t.floors.filter(t=>t.checked).length;return j`this._importDialog=null}>
${this._t("import.hint")}
@@ -5207,7 +5224,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t("import.start",{n:e})}
-
`}_sunGlobal(){const t=this._settingsDialog;return t?{...this._settings,north_deg:t.northDeg??void 0,bg_mode:t.bgMode,sun_rays:t.sunRays}:this._settings}_sunSpace(){const t=this._spaceDialog,e=this._curSpaceCfg?.settings||{};return t&&"edit"===t.mode&&t.spaceId===this._space?{...e,north_deg:t.northDeg??void 0,bg_mode:t.bgMode??void 0,sun_rays:t.sunRays??void 0}:e}_effNorth(){return Ya(this._sunGlobal(),this._sunSpace())}_effBgMode(){return Xa(this._sunGlobal(),this._sunSpace())}_dayCycleState(t=new Date){return(this._modeTransitionVisual?.viewWeight??("view"===this._mode?1:0))<=0||"daynight"!==this._effBgMode()?null:Ha(this._renderPlanHass,t)}_syncDayCycleClock(){const t=this._dayCycleState();this._dayCycleClockKey=t?La(t):"";const e="clock"===t?.source&&"hidden"!==this.ownerDocument.visibilityState&&this.isConnected;e&&!this._dayCycleTimer?this._dayCycleTimer=window.setInterval(this._dayCycleTick,3e4):!e&&this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_dayCycleVisibility(t){"hidden"!==t.kind?(this._dayCycleTick(),this._syncDayCycleClock()):this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_effSunRays(){return Ja(this._sunGlobal(),this._sunSpace())}_sunNow(){return null!==this._effNorth()?Za(this._renderPlanHass):null}_renderSunRays(t){const e=W``,i=this._modeTransitionVisual?.viewWeight??0;if(this._editing&&i<=0||!this._effSunRays())return this._sunFadeReset(),e;const s=this._effNorth(),n=null!==s?Za(this._renderPlanHass):null;if(!n||n.elevation<=0)return this._sunFadeReset(),e;if(o=n.elevation,Number(o)>=3)this._sunOutTimer&&(clearTimeout(this._sunOutTimer),this._sunOutTimer=0),this._sunOut=!1,this._sunShown=!0;else{if(!this._sunShown)return e;this._sunOut||(this._sunOut=!0,this._sunOutTimer=window.setTimeout(()=>{this._sunOutTimer=0,this._sunShown=!1,this._sunOut=!1,this.requestUpdate()},2e3))}var o;const a=`${t.id}|${n.azimuth}|${n.elevation}|${s}|${this._cfgEpoch}`;if(!this._sunRaysCache||this._sunRaysCache.key!==a){const e=t.rooms.map(t=>({id:t.id||"",poly:ci(t)})).filter(t=>!!t.id&&!!t.poly),i=this._openingsR.filter(t=>"window"===t.type&&!t.host).map(t=>({id:t.id,x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=this._spaceWalls,r=this._openPairs().flatMap(t=>t.segs),l=this._openingWallIndexFor(t,r).value,c={},h={};if(o.length){for(const i of e){const e=ol(t.rooms,i.id,o,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_);e&&(c[i.id]=e)}for(const t of i){const e=bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length});e.cm>0&&(h[t.id]=vr(e.cm,this._cellCm,this._gridPitch))}}let d=Va(e,i,n.azimuth,n.elevation,s,o.length?c:void 0,o.length?h:void 0);const u=this._physicalBodiesR(t);u.length&&(d=d.map(t=>{const e=function(t,e,i){return i>0?t.map(t=>function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<=2)return e;const i=(t,e,i)=>(e[0]-t[0])*(i[1]-t[1])-(e[1]-t[1])*(i[0]-t[0]),s=[];for(const t of e){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],t)<=0;)s.pop();s.push(t)}const n=[];for(let t=e.length-1;t>=0;t--){const s=e[t];for(;n.length>=2&&i(n[n.length-2],n[n.length-1],s)<=0;)n.pop();n.push(s)}return s.slice(0,-1).concat(n.slice(0,-1))}([...t,...t.map(t=>[t[0]+e[0]*i,t[1]+e[1]*i])])).filter(t=>t.length>=3):t}(u,t.dir,t.len),i=t.polys.map(t=>zl(t,e));return{...t,paths:i.map(Dl).filter(Boolean),polys:i.flatMap(Nl)}}).filter(t=>t.paths?.length||t.polys.length)),this._sunRaysCache={key:a,rays:d,rims:d.map(t=>function(t,e=1e-4){const[i,s]=t.dir,n=-s,o=i,a=[];for(const r of[t.a,t.b]){const l=[];for(const a of t.polys)for(let t=0;te)continue;if(Math.abs((h[0]-r[0])*n+(h[1]-r[1])*o)>e)continue;const d=(c[0]-r[0])*i+(c[1]-r[1])*s,u=(h[0]-r[0])*i+(h[1]-r[1])*s;Math.abs(u-d)<=e||l.push(dt[0]-e[0]);const c=[];for(const t of l){const i=c[c.length-1];i&&t[0]<=i[1]+e?i[1]=Math.max(i[1],t[1]):c.push([t[0],t[1]])}for(const[t,e]of c)a.push([[r[0]+i*t,r[1]+s*t],[r[0]+i*e,r[1]+s*e]])}return a}(t))}}const r=this._sunRaysCache.rays,l=this._sunRaysCache.rims;if(!r.length)return e;const c=(h=function(t){const e=Math.min(90,Math.max(-90,Number(t)||0));let i=Ba[Ba.length-1][1];for(let t=1;t +
`}_sunGlobal(){const t=this._settingsDialog;return t?{...this._settings,north_deg:t.northDeg??void 0,bg_mode:t.bgMode,sun_rays:t.sunRays}:this._settings}_sunSpace(){const t=this._spaceDialog,e=this._curSpaceCfg?.settings||{};return t&&"edit"===t.mode&&t.spaceId===this._space?{...e,north_deg:t.northDeg??void 0,bg_mode:t.bgMode??void 0,sun_rays:t.sunRays??void 0}:e}_effNorth(){return Ya(this._sunGlobal(),this._sunSpace())}_effBgMode(){return Xa(this._sunGlobal(),this._sunSpace())}_dayCycleState(t=new Date){return(this._modeTransitionVisual?.viewWeight??("view"===this._mode?1:0))<=0||"daynight"!==this._effBgMode()?null:Na(this._renderPlanHass,t)}_syncDayCycleClock(){const t=this._dayCycleState();this._dayCycleClockKey=t?La(t):"";const e="clock"===t?.source&&"hidden"!==this.ownerDocument.visibilityState&&this.isConnected;e&&!this._dayCycleTimer?this._dayCycleTimer=window.setInterval(this._dayCycleTick,3e4):!e&&this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_dayCycleVisibility(t){"hidden"!==t.kind?(this._dayCycleTick(),this._syncDayCycleClock()):this._dayCycleTimer&&(clearInterval(this._dayCycleTimer),this._dayCycleTimer=0)}_effSunRays(){return Ja(this._sunGlobal(),this._sunSpace())}_sunNow(){return null!==this._effNorth()?Za(this._renderPlanHass):null}_renderSunRays(t){const e=W``,i=this._modeTransitionVisual?.viewWeight??0;if(this._editing&&i<=0||!this._effSunRays())return this._sunFadeReset(),e;const s=this._effNorth(),n=null!==s?Za(this._renderPlanHass):null;if(!n||n.elevation<=0)return this._sunFadeReset(),e;if(o=n.elevation,Number(o)>=3)this._sunOutTimer&&(clearTimeout(this._sunOutTimer),this._sunOutTimer=0),this._sunOut=!1,this._sunShown=!0;else{if(!this._sunShown)return e;this._sunOut||(this._sunOut=!0,this._sunOutTimer=window.setTimeout(()=>{this._sunOutTimer=0,this._sunShown=!1,this._sunOut=!1,this.requestUpdate()},2e3))}var o;const a=`${t.id}|${n.azimuth}|${n.elevation}|${s}|${this._cfgEpoch}`;if(!this._sunRaysCache||this._sunRaysCache.key!==a){const e=t.rooms.map(t=>({id:t.id||"",poly:ci(t)})).filter(t=>!!t.id&&!!t.poly),i=this._openingsR.filter(t=>"window"===t.type&&!t.host).map(t=>({id:t.id,x:t.rx,y:t.ry,angle:t.angle,length:t.rlen})),o=this._spaceWalls,r=this._openPairs().flatMap(t=>t.segs),l=this._openingWallIndexFor(t,r).value,c={},h={};if(o.length){for(const i of e){const e=ol(t.rooms,i.id,o,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_);e&&(c[i.id]=e)}for(const t of i){const e=bl(l,{x:t.x,y:t.y,angle:t.angle,length:t.length});e.cm>0&&(h[t.id]=vr(e.cm,this._cellCm,this._gridPitch))}}let d=Va(e,i,n.azimuth,n.elevation,s,o.length?c:void 0,o.length?h:void 0);const u=this._physicalBodiesR(t);u.length&&(d=d.map(t=>{const e=function(t,e,i){return i>0?t.map(t=>function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<=2)return e;const i=(t,e,i)=>(e[0]-t[0])*(i[1]-t[1])-(e[1]-t[1])*(i[0]-t[0]),s=[];for(const t of e){for(;s.length>=2&&i(s[s.length-2],s[s.length-1],t)<=0;)s.pop();s.push(t)}const n=[];for(let t=e.length-1;t>=0;t--){const s=e[t];for(;n.length>=2&&i(n[n.length-2],n[n.length-1],s)<=0;)n.pop();n.push(s)}return s.slice(0,-1).concat(n.slice(0,-1))}([...t,...t.map(t=>[t[0]+e[0]*i,t[1]+e[1]*i])])).filter(t=>t.length>=3):t}(u,t.dir,t.len),i=t.polys.map(t=>zl(t,e));return{...t,paths:i.map(Dl).filter(Boolean),polys:i.flatMap(Hl)}}).filter(t=>t.paths?.length||t.polys.length)),this._sunRaysCache={key:a,rays:d,rims:d.map(t=>function(t,e=1e-4){const[i,s]=t.dir,n=-s,o=i,a=[];for(const r of[t.a,t.b]){const l=[];for(const a of t.polys)for(let t=0;te)continue;if(Math.abs((h[0]-r[0])*n+(h[1]-r[1])*o)>e)continue;const d=(c[0]-r[0])*i+(c[1]-r[1])*s,u=(h[0]-r[0])*i+(h[1]-r[1])*s;Math.abs(u-d)<=e||l.push(dt[0]-e[0]);const c=[];for(const t of l){const i=c[c.length-1];i&&t[0]<=i[1]+e?i[1]=Math.max(i[1],t[1]):c.push([t[0],t[1]])}for(const[t,e]of c)a.push([[r[0]+i*t,r[1]+s*t],[r[0]+i*e,r[1]+s*e]])}return a}(t))}}const r=this._sunRaysCache.rays,l=this._sunRaysCache.rims;if(!r.length)return e;const c=(h=function(t){const e=Math.min(90,Math.max(-90,Number(t)||0));let i=Ba[Ba.length-1][1];for(let t=1;t ${r.map((t,e)=>{const i=(t.a[0]+t.b[0])/2,s=(t.a[1]+t.b[1])/2,n=i+t.normal[0]*t.depth,o=s+t.normal[1]*t.depth;return W` ${d.map(([t,e])=>W`${this._t("gs.north_letter")} ${null===t?"—":t+"°"} - `}_stageBg(t){const e=this._settingsDialog,i=this._spaceDialog,s=e?e.bgColor||"":cs(this._settings,{bgColor:null});return(i&&"edit"===i.mode&&i.spaceId===this._space?i.bgColor||"":t.bgColor||"")||s}_stageBgHex(){const t=this._stageEl;if(t){const e=getComputedStyle(t).backgroundColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e)return"#"+e.slice(1,4).map(t=>(+t).toString(16).padStart(2,"0")).join("")}return"#111111"}async _runAlignToGrid(){const t=this._alignDialog;if(t&&!t.busy&&this._serverCfg){this._clearGeometryGesture(),this._alignDialog={...t,busy:!0};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain;const e=await this.hass.callWS({type:"houseplan/plan/optimize",config:t.config,layout:t.layout,expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});this._serverCfg=t.config,this._layout=t.layout,this._geometryHistory.clear(),this._cfgRev=e?.config_rev??this._cfgRev+1,this._layoutRev=e?.layout_rev??this._layoutRev+1,this._canOptimizeUndo=!!e?.can_undo,this._undoKind=e?.can_undo?"optimize":null,this._dirtyPos.clear(),this._sentPos.clear(),this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this._alignDialog=null,this.requestUpdate(),this._showToast(this._t("gs.align_done",{n:String(t.report.moved),m:String(t.report.migrated+t.report.canonicalized+t.report.wallsMerged+t.report.spansMerged)}))}catch(t){this._alignDialog&&(this._alignDialog={...this._alignDialog,busy:!1}),"conflict"===t?.code&&await Promise.all([this._reloadConfigOnly(!0),this._reloadLayoutOnly()]),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}async _undoPlanOptimization(){if(!this._canOptimizeUndo||this._optimizeUndoBusy)return;const t=this._undoKind;this._clearGeometryGesture(),this._optimizeUndoBusy=!0,this.requestUpdate();try{await this.hass.callWS({type:"houseplan/plan/optimize_undo",expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});const[e,i]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._serverCfg=e?.config||this._serverCfg,this._cfgRev=e?.rev??this._cfgRev,this._layout=i?.layout||this._layout,this._geometryHistory.clear(),this._layoutRev=i?.rev??this._layoutRev,this._canOptimizeUndo=!1,this._undoKind=null,this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this.requestUpdate(),this._showToast(this._t("import"===t?"backup.import_undone":"gs.optimize_undone"))}catch(t){this._canOptimizeUndo=!1,this._undoKind=null,this._showToast(this._t("toast.error",{err:this._errText(t)}))}finally{this._optimizeUndoBusy=!1,this.requestUpdate()}}async _runBackupExport(){const t=this._backupExportDialog;if(t&&!t.busy){this._backupExportDialog={...t,busy:!0,error:""};try{const e=await this.hass.callWS({type:"houseplan/export/create",kind:t.kind,space_id:"space"===t.kind?this._space:void 0,..."space"===t.kind&&t.planOnly?{plan_only:!0}:{},card_version:h_}),i=new Blob([JSON.stringify(e.document,null,2)+"\n"],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(i),n=document.createElement("a");n.href=s,n.download=e.filename||`houseplan-${t.kind}.json`,n.style.display="none",document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0),this._backupExportDialog=null,this._showToast(this._t("backup.export_done"))}catch(t){this._backupExportDialog&&(this._backupExportDialog={...this._backupExportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _pickBackupImport(t){const e=t.target,i=e.files?.[0];if(e.value="",i){this._settingsDialog=null,this._backupImportDialog={filename:i.name,size:i.size,token:"",preview:null,expectedConfigRev:this._cfgRev,expectedLayoutRev:this._layoutRev,duplicatePolicy:"skip",confirmMissing:!1,busy:!0,error:""};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain,this._persistLayout.pending()&&this._persistLayout.flush();const t="/api/houseplan/import/preview?duplicate_policy=skip",e={method:"POST",body:i,headers:{"content-type":"application/json"}},s=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth(t,e):await fetch(t,{...e,headers:{...e.headers,...this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}}),n=await s.json().catch(()=>({}));if(!s.ok||n.error)throw Object.assign(new Error(n.message||n.error||`HTTP ${s.status}`),{code:n.error});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,token:n.token,preview:n.preview,expectedConfigRev:n.expected_config_rev,expectedLayoutRev:n.expected_layout_rev,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _setBackupDuplicatePolicy(t){const e=this._backupImportDialog;if(e&&!e.busy&&e.token&&t!==e.duplicatePolicy){this._backupImportDialog={...e,duplicatePolicy:t,busy:!0,error:""};try{const i=await this.hass.callWS({type:"houseplan/import/revalidate",token:e.token,duplicate_policy:t});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,preview:{...e.preview,...i.preview},expectedConfigRev:i.expected_config_rev,expectedLayoutRev:i.expected_layout_rev,confirmMissing:!1,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,duplicatePolicy:e.duplicatePolicy,preview:e.preview,confirmMissing:e.confirmMissing,busy:!1,error:this._backupErrorText(t)})}}}async _applyBackupImport(){const t=this._backupImportDialog;if(!t||t.busy||!t.token||!t.preview)return;if(t.preview.confirmation_required&&!t.confirmMissing)return;this._backupImportDialog={...t,busy:!0,error:""};const e=this._space;try{const i=await this.hass.callWS({type:"houseplan/import/apply",token:t.token,expected_config_rev:t.expectedConfigRev,expected_layout_rev:t.expectedLayoutRev,duplicate_policy:t.duplicatePolicy,confirm_missing_content:t.confirmMissing}),[s,n]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._adoptStructuralResponses(s,n),this._geometryHistory.clear(),this._dirtyPos.clear(),this._sentPos.clear(),this._defPos={},this._cfgEpoch++,this._modelCache=null,this._frame=null,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotConfigEpoch=-1,this._regSignature="",this._signer.invalidate(this.hass),this._resign(),this._maybeRebuildDevices();const o=this._serverCfg?.spaces||[],a="space"===i.kind&&i.space_id?i.space_id:o.some(t=>t.id===e)?e:o[0]?.id||this._space;this._hasFixedFloor?this._adoptInitialSpace(this._model,!0):this._commitSpace(a),this._backupImportDialog=null,this._cacheSnapshot(),this.requestUpdate();const r="space"===i.kind?t.preview.counts:i.counts;this._showToast(this._t("space"===i.kind?"backup.space_done":"backup.full_done",{spaces:String(r?.spaces||0),rooms:String(r?.rooms||0),markers:String(r?.markers||0)}))}catch(t){if("conflict"===t?.code&&this._backupImportDialog?.token)try{const t=this._backupImportDialog,e=await this.hass.callWS({type:"houseplan/import/revalidate",token:t.token,duplicate_policy:t.duplicatePolicy});return void(this._backupImportDialog={...t,preview:{...t.preview,...e.preview},expectedConfigRev:e.expected_config_rev,expectedLayoutRev:e.expected_layout_rev,confirmMissing:!1,busy:!1,error:this._t("backup.revalidated")})}catch(e){t=e}this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}_renderBackupExportDialog(){const t=this._backupExportDialog,e=(this._serverCfg?.spaces||[]).find(t=>t.id===this._space);return j``}_stageBg(t){const e=this._settingsDialog,i=this._spaceDialog,s=e?e.bgColor||"":cs(this._settings,{bgColor:null});return(i&&"edit"===i.mode&&i.spaceId===this._space?i.bgColor||"":t.bgColor||"")||s}_stageBgHex(){const t=this._stageEl;if(t){const e=getComputedStyle(t).backgroundColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e)return"#"+e.slice(1,4).map(t=>(+t).toString(16).padStart(2,"0")).join("")}return"#111111"}async _runAlignToGrid(){const t=this._alignDialog;if(t&&!t.busy&&this._serverCfg){this._clearGeometryGesture(),this._alignDialog={...t,busy:!0};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain;const e=await this.hass.callWS({type:"houseplan/plan/optimize",config:t.config,layout:t.layout,expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});this._serverCfg=t.config,this._layout=t.layout,this._geometryHistory.clear(),this._cfgRev=e?.config_rev??this._cfgRev+1,this._layoutRev=e?.layout_rev??this._layoutRev+1,this._canOptimizeUndo=!!e?.can_undo,this._undoKind=e?.can_undo?"optimize":null,this._dirtyPos.clear(),this._sentPos.clear(),this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this._alignDialog=null,this.requestUpdate(),this._showToast(this._t("gs.align_done",{n:String(t.report.moved),m:String(t.report.migrated+t.report.canonicalized+t.report.wallsMerged+t.report.spansMerged)}))}catch(t){this._alignDialog&&(this._alignDialog={...this._alignDialog,busy:!1}),"conflict"===t?.code&&await Promise.all([this._reloadConfigOnly(!0),this._reloadLayoutOnly()]),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}async _undoPlanOptimization(){if(!this._canOptimizeUndo||this._optimizeUndoBusy)return;const t=this._undoKind;this._clearGeometryGesture(),this._optimizeUndoBusy=!0,this.requestUpdate();try{await this.hass.callWS({type:"houseplan/plan/optimize_undo",expected_config_rev:this._cfgRev,expected_layout_rev:this._layoutRev});const[e,i]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._serverCfg=e?.config||this._serverCfg,this._cfgRev=e?.rev??this._cfgRev,this._layout=i?.layout||this._layout,this._geometryHistory.clear(),this._layoutRev=i?.rev??this._layoutRev,this._canOptimizeUndo=!1,this._undoKind=null,this._cfgEpoch++,this._modelCache=null,this._frame=null,this._cacheSnapshot(),this.requestUpdate(),this._showToast(this._t("import"===t?"backup.import_undone":"gs.optimize_undone"))}catch(t){this._canOptimizeUndo=!1,this._undoKind=null,this._showToast(this._t("toast.error",{err:this._errText(t)}))}finally{this._optimizeUndoBusy=!1,this.requestUpdate()}}async _runBackupExport(){const t=this._backupExportDialog;if(t&&!t.busy){this._backupExportDialog={...t,busy:!0,error:""};try{const e=await this.hass.callWS({type:"houseplan/export/create",kind:t.kind,space_id:"space"===t.kind?this._space:void 0,..."space"===t.kind&&t.planOnly?{plan_only:!0}:{},card_version:d_}),i=new Blob([JSON.stringify(e.document,null,2)+"\n"],{type:"application/json;charset=utf-8"}),s=URL.createObjectURL(i),n=document.createElement("a");n.href=s,n.download=e.filename||`houseplan-${t.kind}.json`,n.style.display="none",document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0),this._backupExportDialog=null,this._showToast(this._t("backup.export_done"))}catch(t){this._backupExportDialog&&(this._backupExportDialog={...this._backupExportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _pickBackupImport(t){const e=t.target,i=e.files?.[0];if(e.value="",i){this._settingsDialog=null,this._backupImportDialog={filename:i.name,size:i.size,token:"",preview:null,expectedConfigRev:this._cfgRev,expectedLayoutRev:this._layoutRev,duplicatePolicy:"skip",confirmMissing:!1,busy:!0,error:""};try{this._saveConfigDebounced.pending()&&this._saveConfigDebounced.flush(),await this._writeChain,this._persistLayout.pending()&&this._persistLayout.flush();const t="/api/houseplan/import/preview?duplicate_policy=skip",e={method:"POST",body:i,headers:{"content-type":"application/json"}},s=this.hass?.fetchWithAuth?await this.hass.fetchWithAuth(t,e):await fetch(t,{...e,headers:{...e.headers,...this.hass?.auth?.data?.access_token?{authorization:`Bearer ${this.hass.auth.data.access_token}`}:{}}}),n=await s.json().catch(()=>({}));if(!s.ok||n.error)throw Object.assign(new Error(n.message||n.error||`HTTP ${s.status}`),{code:n.error});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,token:n.token,preview:n.preview,expectedConfigRev:n.expected_config_rev,expectedLayoutRev:n.expected_layout_rev,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}}async _setBackupDuplicatePolicy(t){const e=this._backupImportDialog;if(e&&!e.busy&&e.token&&t!==e.duplicatePolicy){this._backupImportDialog={...e,duplicatePolicy:t,busy:!0,error:""};try{const i=await this.hass.callWS({type:"houseplan/import/revalidate",token:e.token,duplicate_policy:t});this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,preview:{...e.preview,...i.preview},expectedConfigRev:i.expected_config_rev,expectedLayoutRev:i.expected_layout_rev,confirmMissing:!1,busy:!1})}catch(t){this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,duplicatePolicy:e.duplicatePolicy,preview:e.preview,confirmMissing:e.confirmMissing,busy:!1,error:this._backupErrorText(t)})}}}async _applyBackupImport(){const t=this._backupImportDialog;if(!t||t.busy||!t.token||!t.preview)return;if(t.preview.confirmation_required&&!t.confirmMissing)return;this._backupImportDialog={...t,busy:!0,error:""};const e=this._space;try{const i=await this.hass.callWS({type:"houseplan/import/apply",token:t.token,expected_config_rev:t.expectedConfigRev,expected_layout_rev:t.expectedLayoutRev,duplicate_policy:t.duplicatePolicy,confirm_missing_content:t.confirmMissing}),[s,n]=await Promise.all([this.hass.callWS({type:"houseplan/config/get"}),this.hass.callWS({type:"houseplan/layout/get"})]);this._adoptStructuralResponses(s,n),this._geometryHistory.clear(),this._dirtyPos.clear(),this._sentPos.clear(),this._defPos={},this._cfgEpoch++,this._modelCache=null,this._frame=null,this._visibleDeviceSnapshot=null,this._candidateDeviceSnapshot=null,this._stagedDeviceSnapshotToken=-1,this._capturedSnapshotConfigEpoch=-1,this._regSignature="",this._signer.invalidate(this.hass),this._resign(),this._maybeRebuildDevices();const o=this._serverCfg?.spaces||[],a="space"===i.kind&&i.space_id?i.space_id:o.some(t=>t.id===e)?e:o[0]?.id||this._space;this._hasFixedFloor?this._adoptInitialSpace(this._model,!0):this._commitSpace(a),this._backupImportDialog=null,this._cacheSnapshot(),this.requestUpdate();const r="space"===i.kind?t.preview.counts:i.counts;this._showToast(this._t("space"===i.kind?"backup.space_done":"backup.full_done",{spaces:String(r?.spaces||0),rooms:String(r?.rooms||0),markers:String(r?.markers||0)}))}catch(t){if("conflict"===t?.code&&this._backupImportDialog?.token)try{const t=this._backupImportDialog,e=await this.hass.callWS({type:"houseplan/import/revalidate",token:t.token,duplicate_policy:t.duplicatePolicy});return void(this._backupImportDialog={...t,preview:{...t.preview,...e.preview},expectedConfigRev:e.expected_config_rev,expectedLayoutRev:e.expected_layout_rev,confirmMissing:!1,busy:!1,error:this._t("backup.revalidated")})}catch(e){t=e}this._backupImportDialog&&(this._backupImportDialog={...this._backupImportDialog,busy:!1,error:this._backupErrorText(t)})}}_renderBackupExportDialog(){const t=this._backupExportDialog,e=(this._serverCfg?.spaces||[]).find(t=>t.id===this._space);return j`this._backupExportDialog=null}>
${this._t("backup.export_hint")}
@@ -5334,12 +5351,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 .pickerLabels=${this._colorPickerLabels} .color=${i.c} .opacity=${i.a} .showOpacity=${!0} @hp-color-opacity-change=${e=>{this._setFillColor(t,{c:e.detail.color,a:e.detail.opacity})}}> -
`}get _glowRadiusCm(){const t=Number(this._settings.glow_radius_cm);return Number.isFinite(t)&&t>0?t:300}get _imperial(){return"mi"===this.hass?.config?.unit_system?.length}get _glowRadiusPlaceholder(){const t=this._glowRadiusCm;return this._imperial?String(Math.round(t/30.48*10)/10):String(t/100)}_glowTransition(t,e){let i=this._glowRenderedSources.get(t);if(e){const e=this._glowFadeTimers.get(t);if(null!=e&&(clearTimeout(e),this._glowFadeTimers.delete(t)),null==i){this._suspendGlowFeatherForTransition(),i=++this._glowSourceSeq,this._glowRenderedSources.set(t,i),this._glowEnteringSources.add(t);const e=requestAnimationFrame(()=>{this._glowEnterRafs.get(t)===e&&(this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),this.isConnected&&this.requestUpdate())});this._glowEnterRafs.set(t,e)}return{domId:i,entering:this._glowEnteringSources.has(t),leaving:!1}}if(null==i)return null;const s=this._glowEnterRafs.get(t);if(null!=s&&cancelAnimationFrame(s),this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),!this._glowFadeTimers.has(t)){this._suspendGlowFeatherForTransition();const e=window.setTimeout(()=>{this._glowFadeTimers.get(t)===e&&(this._glowFadeTimers.delete(t),this._glowRenderedSources.delete(t),this._glowLastAppearance.delete(t),this.isConnected&&this.requestUpdate())},534);this._glowFadeTimers.set(t,e)}return{domId:i,entering:!1,leaving:!0}}_suspendGlowFeatherForTransition(){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;this._glowFeatherSuspendUntil=Math.max(this._glowFeatherSuspendUntil,Date.now()+500),clearTimeout(this._glowFeatherResumeTimer);const t=Math.max(0,this._glowFeatherSuspendUntil-Date.now())+17,e=()=>{this._glowFeatherResumeTimer=0,Date.now()t.segs),s=[...i],n=Math.max(this._cmToUnits(10),.5*this._gridPitch),o=t=>e.some(e=>this._pointInRoom(t,e.r)),a=this._openingsR.filter(t=>{if("door"!==(e=String(t.type))&&"gate"!==e&&"passage"!==e)return!1;var e;const i=t.angle*Math.PI/180,s=-Math.sin(i),a=Math.cos(i);return o([t.rx+s*n,t.ry+a*n])&&o([t.rx-s*n,t.ry-a*n])}),r=this._roomWallOpeningInputs(a,t);for(const t of r){const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,n=Math.sin(e)*t.length/2;s.push([t.x-i,t.y-n,t.x+i,t.y+n])}const l=new Set(a.filter(t=>t.partitionHost).map(t=>t.id)),c=[t.id,this._cfgEpoch,this._cellCm,this._gridPitch,[...l].sort().join(",")].join("|");this._lightPhysicalBodiesCache?.key!==c&&(this._lightPhysicalBodiesCache={key:c,all:Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t,t=>l.has(t.id))).all});const h=this._lightPhysicalBodiesCache.all;let d=2166136261;const u=t=>{d^=Math.round(64*(Number.isFinite(t)?t:0)),d=Math.imul(d,16777619)>>>0},p=this._spaceWalls;u(this._cellCm),u(this._gridPitch),u(this._wallKeyPitch);for(const{poly:t}of e){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of s)for(const e of t)u(e);for(const t of h){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of p)u(t.cm),u(t.a?.[0]??0),u(t.a?.[1]??0),u(t.b?.[0]??0),u(t.b?.[1]??0);const _=d.toString(36),g=`${t.id}|${_}`;if(this._lightBarrierCache?.key===g)return this._lightBarrierCache.value;const m=.02*this._gridPitch,f=[],v=p.length||h.length?ul(t.rooms,p,i,r,this._wallKeyPitch,this._cellCm,this._gridPitch,T_,h):null;if(v)for(const t of function(t){const e=[];for(const i of t||[])for(const t of i||[])t?.length>=4&&e.push(t.slice(0,-1).map(t=>[t[0],t[1]]));return e}(v.geom))f.push(...Yd(t));else for(const t of h)f.push(...Yd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Yd(t))f.push(e);const y={occluders:Kd(f),floor:e.map(t=>t.poly),fingerprint:_,masonryGeometry:v?.geom||[],opaqueBodies:h};return this._lightBarrierCache={key:g,value:y},y}_renderGlowLayer(t,e){const i=this._fillColors,s=this._glowRadiusCm/this._cellCm*this._gridPitch,n=t.rooms.map(t=>({r:t,poly:ci(t)})).filter(t=>!!t.poly),o=n.filter(({r:t})=>Fs(e.glow,t));if(!o.length)return this._forgetGlowSpace(t.id),W``;const{occluders:a,floor:r,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=ro(this._renderPlanHass,this._renderDevices,null,this._virtualLights).filter(e=>e.device.space===t.id),u=new Map;for(const t of d){if(!t.device.id)continue;const e=u.get(t.device.id)||[];e.push(t),u.set(t.device.id,e)}const p=[],_=new Set;for(const e of this._renderDevices){if(e.space!==t.id)continue;const n=lo(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=xs(n.passive?{state:n.on?"on":"off",attributes:{}}:this._renderPlanHass.states[n.eid],e.marker?.glow_color,i.glow_light.c),g=Number(e.marker?.glow_radius_cm),m=Number.isFinite(g)&&g>0?g/this._cellCm*this._gridPitch:s,f=this._pos(e);if(Ll([f.x,f.y],c,h)){this._forgetGlowSource(o);continue}const v=this._glowTransition(o,!!d);if(!v)continue;d&&this._glowLastAppearance.set(o,{c:d.c,alpha:$s(d.bri,i.glow_light.a)});const y=this._glowLastAppearance.get(o);if(!y)continue;let b=null;const w=`${t.id}|${l}|${f.x.toFixed(4)},${f.y.toFixed(4)}|${m.toFixed(4)}`,k=f_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Zd([f.x,f.y],m,a,96);b={lit:t.length>=3?El([t],r):[]},v_(this._glowClipCache,w,b,256)}p.push({key:o,sourceEid:n.eid,domId:v.domId,entering:v.entering,leaving:v.leaving,pos:f,c:y.c,alpha:y.alpha,geometry:b,r:m})}const g=`${t.id}|`;for(const t of this._glowRenderedSources.keys())t.startsWith(g)&&!_.has(t)&&this._forgetGlowSource(t);if(!p.length)return W``;const m=this._spaceWalls,f=o.length===n.length?[]:this._openPairs().flatMap(t=>t.segs),v=o.length===n.length?null:o.map(({r:e,poly:i})=>{const s=m.length&&e.id&&ol(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||i,o=this._cleanFloor(e,s,t).path,a=Di(s,n.filter(t=>t.r!==e).map(t=>t.poly)),r=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||r(s),...a.map(r)].join(" ")}),y=this._viewOr(this._baseVb()),b=this._stageEl?.clientWidth&&y.w?this._stageEl.clientWidth/y.w:1,w=1/(b>0?b:1),k=!this._pinchStart&&!this._panStart&&Date.now()>=this._glowFeatherSuspendUntil;(null==this._glowFeatherUnits||k)&&(this._glowFeatherUnits=w);const x=this._glowFeatherUnits??w,$=4*x,S=p.reduce((t,e)=>({x:Math.min(t.x,e.pos.x-e.r-$),y:Math.min(t.y,e.pos.y-e.r-$),maxX:Math.max(t.maxX,e.pos.x+e.r+$),maxY:Math.max(t.maxY,e.pos.y+e.r+$),w:0,h:0}),{x:1/0,y:1/0,maxX:-1/0,maxY:-1/0,w:0,h:0});return S.w=S.maxX-S.x,S.h=S.maxY-S.y,W` + `}get _glowRadiusCm(){const t=Number(this._settings.glow_radius_cm);return Number.isFinite(t)&&t>0?t:300}get _imperial(){return"mi"===this.hass?.config?.unit_system?.length}get _glowRadiusPlaceholder(){const t=this._glowRadiusCm;return this._imperial?String(Math.round(t/30.48*10)/10):String(t/100)}_glowTransition(t,e){let i=this._glowRenderedSources.get(t);if(e){const e=this._glowFadeTimers.get(t);if(null!=e&&(clearTimeout(e),this._glowFadeTimers.delete(t)),null==i){this._suspendGlowFeatherForTransition(),i=++this._glowSourceSeq,this._glowRenderedSources.set(t,i),this._glowEnteringSources.add(t);const e=requestAnimationFrame(()=>{this._glowEnterRafs.get(t)===e&&(this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),this.isConnected&&this.requestUpdate())});this._glowEnterRafs.set(t,e)}return{domId:i,entering:this._glowEnteringSources.has(t),leaving:!1}}if(null==i)return null;const s=this._glowEnterRafs.get(t);if(null!=s&&cancelAnimationFrame(s),this._glowEnterRafs.delete(t),this._glowEnteringSources.delete(t),!this._glowFadeTimers.has(t)){this._suspendGlowFeatherForTransition();const e=window.setTimeout(()=>{this._glowFadeTimers.get(t)===e&&(this._glowFadeTimers.delete(t),this._glowRenderedSources.delete(t),this._glowLastAppearance.delete(t),this.isConnected&&this.requestUpdate())},534);this._glowFadeTimers.set(t,e)}return{domId:i,entering:!1,leaving:!0}}_suspendGlowFeatherForTransition(){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;this._glowFeatherSuspendUntil=Math.max(this._glowFeatherSuspendUntil,Date.now()+500),clearTimeout(this._glowFeatherResumeTimer);const t=Math.max(0,this._glowFeatherSuspendUntil-Date.now())+17,e=()=>{this._glowFeatherResumeTimer=0,Date.now()t.segs),s=[...i],n=Math.max(this._cmToUnits(10),.5*this._gridPitch),o=t=>e.some(e=>this._pointInRoom(t,e.r)),a=this._openingsR.filter(t=>{if("door"!==(e=String(t.type))&&"gate"!==e&&"passage"!==e)return!1;var e;const i=t.angle*Math.PI/180,s=-Math.sin(i),a=Math.cos(i);return o([t.rx+s*n,t.ry+a*n])&&o([t.rx-s*n,t.ry-a*n])}),r=this._roomWallOpeningInputs(a,t);for(const t of r){const e=t.angle*Math.PI/180,i=Math.cos(e)*t.length/2,n=Math.sin(e)*t.length/2;s.push([t.x-i,t.y-n,t.x+i,t.y+n])}const l=new Set(a.filter(t=>t.partitionHost).map(t=>t.id)),c=[t.id,this._cfgEpoch,this._cellCm,this._gridPitch,[...l].sort().join(",")].join("|");this._lightPhysicalBodiesCache?.key!==c&&(this._lightPhysicalBodiesCache={key:c,all:Al(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t,t=>l.has(t.id))).all});const h=this._lightPhysicalBodiesCache.all;let d=2166136261;const u=t=>{d^=Math.round(64*(Number.isFinite(t)?t:0)),d=Math.imul(d,16777619)>>>0},p=this._spaceWalls;u(this._cellCm),u(this._gridPitch),u(this._wallKeyPitch);for(const{poly:t}of e){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of s)for(const e of t)u(e);for(const t of h){u(t.length);for(const e of t)u(e[0]),u(e[1])}for(const t of p)u(t.cm),u(t.a?.[0]??0),u(t.a?.[1]??0),u(t.b?.[0]??0),u(t.b?.[1]??0);const _=d.toString(36),g=`${t.id}|${_}`;if(this._lightBarrierCache?.key===g)return this._lightBarrierCache.value;const m=.02*this._gridPitch,f=[],v=p.length||h.length?ul(t.rooms,p,i,r,this._wallKeyPitch,this._cellCm,this._gridPitch,P_,h):null;if(v)for(const t of function(t){const e=[];for(const i of t||[])for(const t of i||[])t?.length>=4&&e.push(t.slice(0,-1).map(t=>[t[0],t[1]]));return e}(v.geom))f.push(...Yd(t));else for(const t of h)f.push(...Yd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Yd(t))f.push(e);const y={occluders:Kd(f),floor:e.map(t=>t.poly),fingerprint:_,masonryGeometry:v?.geom||[],opaqueBodies:h};return this._lightBarrierCache={key:g,value:y},y}_renderGlowLayer(t,e){const i=this._fillColors,s=this._glowRadiusCm/this._cellCm*this._gridPitch,n=t.rooms.map(t=>({r:t,poly:ci(t)})).filter(t=>!!t.poly),o=n.filter(({r:t})=>Fs(e.glow,t));if(!o.length)return this._forgetGlowSpace(t.id),W``;const{occluders:a,floor:r,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=ro(this._renderPlanHass,this._renderDevices,null,this._virtualLights).filter(e=>e.device.space===t.id),u=new Map;for(const t of d){if(!t.device.id)continue;const e=u.get(t.device.id)||[];e.push(t),u.set(t.device.id,e)}const p=[],_=new Set;for(const e of this._renderDevices){if(e.space!==t.id)continue;const n=lo(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=xs(n.passive?{state:n.on?"on":"off",attributes:{}}:this._renderPlanHass.states[n.eid],e.marker?.glow_color,i.glow_light.c),g=Number(e.marker?.glow_radius_cm),m=Number.isFinite(g)&&g>0?g/this._cellCm*this._gridPitch:s,f=this._pos(e);if(Ll([f.x,f.y],c,h)){this._forgetGlowSource(o);continue}const v=this._glowTransition(o,!!d);if(!v)continue;d&&this._glowLastAppearance.set(o,{c:d.c,alpha:$s(d.bri,i.glow_light.a)});const y=this._glowLastAppearance.get(o);if(!y)continue;let b=null;const w=`${t.id}|${l}|${f.x.toFixed(4)},${f.y.toFixed(4)}|${m.toFixed(4)}`,k=v_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Zd([f.x,f.y],m,a,96);b={lit:t.length>=3?El([t],r):[]},y_(this._glowClipCache,w,b,256)}p.push({key:o,sourceEid:n.eid,domId:v.domId,entering:v.entering,leaving:v.leaving,pos:f,c:y.c,alpha:y.alpha,geometry:b,r:m})}const g=`${t.id}|`;for(const t of this._glowRenderedSources.keys())t.startsWith(g)&&!_.has(t)&&this._forgetGlowSource(t);if(!p.length)return W``;const m=this._spaceWalls,f=o.length===n.length?[]:this._openPairs().flatMap(t=>t.segs),v=o.length===n.length?null:o.map(({r:e,poly:i})=>{const s=m.length&&e.id&&ol(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||i,o=this._cleanFloor(e,s,t).path,a=Di(s,n.filter(t=>t.r!==e).map(t=>t.poly)),r=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||r(s),...a.map(r)].join(" ")}),y=this._viewOr(this._baseVb()),b=this._stageEl?.clientWidth&&y.w?this._stageEl.clientWidth/y.w:1,w=1/(b>0?b:1),k=!this._pinchStart&&!this._panStart&&Date.now()>=this._glowFeatherSuspendUntil;(null==this._glowFeatherUnits||k)&&(this._glowFeatherUnits=w);const x=this._glowFeatherUnits??w,$=4*x,S=p.reduce((t,e)=>({x:Math.min(t.x,e.pos.x-e.r-$),y:Math.min(t.y,e.pos.y-e.r-$),maxX:Math.max(t.maxX,e.pos.x+e.r+$),maxY:Math.max(t.maxY,e.pos.y+e.r+$),w:0,h:0}),{x:1/0,y:1/0,maxX:-1/0,maxY:-1/0,w:0,h:0});return S.w=S.maxX-S.x,S.h=S.maxY-S.y,W` ${Mt(p,t=>t.key,t=>{const e=t.domId,i=t.geometry;return W` ${""} - ${P_.map(([e,i])=>W` + ${R_.map(([e,i])=>W` `)} @@ -5418,7 +5435,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._t("gs.glow_radius")} {const e=m_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> + @input=${t=>{const e=f_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> ${this._imperial?this._t("gs.unit_ft"):this._t("gs.unit_m")} @@ -5493,7 +5510,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G} -
${this._t("gs.about_version",{v:h_})}
+
${this._t("gs.about_version",{v:d_})}
${this._t("gs.about_github")} @@ -5550,7 +5567,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${t.busy?"…":this._t("btn.save")} -
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(C_,JSON.stringify(this._kioskScale))}catch{}this.requestUpdate()}_renderKioskDialog(){const t=this._kioskScale,e=(e,i)=>j` +
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(D_,JSON.stringify(this._kioskScale))}catch{}this.requestUpdate()}_renderKioskDialog(){const t=this._kioskScale,e=(e,i)=>j`
${this._rangeInput(50,300,5,Math.round(100*t[e]),t=>this._saveKioskScale({[e]:t/100}))} ${Math.round(100*t[e])}% @@ -5607,7 +5624,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 ${this._spaceDialog?this._renderSpaceDialog():G} ${this._importDialog?this._renderImportDialog():G} ${this._toast?j``:G} - `;const s=this._spaceModel();if(!s)return G;const n="valid"===i.kind?[s]:t,o=s.vb,a=this._effectiveProjection();this._renderProjection=a,this._labs.active.length&&function(t){Rp||Op(t);const e=Pp,i=e.active.join(",");if(!i||i===Ip)return;Ip=i;const s=new Map(wp.map(t=>[t.id,t])),n=e.active.map(t=>{const e=s.get(t);return`${t} (#${e.issue}, expires ${e.expires})`}).join(", ");console.info(`HOUSEPLAN LABS: ${n}`)}(h_);const r="iso"===a,l="devices"===this._mode&&this._showAll,c=this._renderDevices.filter(t=>t.space===s.id&&(!t.hidden||l)),h=this._renderDeviceSnapshot,d=this._spaceDisplayForRender(),u=r?this._isoDecorationLayers(d):null,p=u?this._isoOpeningPanels(u):[],_=this._resolvedRoomFills(s,d),g=this._resolvedGlowBase(s,d,_),m=d.showLqi??this._config.show_signal??!0,f=this._config.icon_size??2.5,v=f>8?2.5:f,y=this._viewOr(this._baseVb()),b=this._floorView(y),w=this._editing?"":this._stageBg(d),k=this._opMeasureView,x=this._decorMeasure,$=this._bdLive,S=this._furnLive,M="view"===this._mode?this._editorChromeMode:this._mode,C=this._roomHoverPaths(s),D=s.bg?this._display(s.bg.href):"",T=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,P=this._modeTransitionVisual,R=this._dayCycleState(),A=P?.viewWeight??("view"===this._mode?1:0),I=this._modeTransition.state?.from.presentedMode,F=!this._markup||!!P&&("view"===P.presentedMode||"devices"===P.presentedMode||"view"===I||"devices"===I),E=P?.stageColor||w,z=P?.sceneBrightness??1;return j` + `;const s=this._spaceModel();if(!s)return G;const n="valid"===i.kind?[s]:t,o=s.vb,a=this._effectiveProjection();this._renderProjection=a,this._labs.active.length&&function(t){Ap||Hp(t);const e=Rp,i=e.active.join(",");if(!i||i===Fp)return;Fp=i;const s=new Map(kp.map(t=>[t.id,t])),n=e.active.map(t=>{const e=s.get(t);return`${t} (#${e.issue}, expires ${e.expires})`}).join(", ");console.info(`HOUSEPLAN LABS: ${n}`)}(d_);const r="iso"===a,l="devices"===this._mode&&this._showAll,c=this._renderDevices.filter(t=>t.space===s.id&&(!t.hidden||l)),h=this._renderDeviceSnapshot,d=this._spaceDisplayForRender(),u=r?this._isoDecorationLayers(d):null,p=u?this._isoOpeningPanels(u):[],_=this._resolvedRoomFills(s,d),g=this._resolvedGlowBase(s,d,_),m=d.showLqi??this._config.show_signal??!0,f=this._config.icon_size??2.5,v=f>8?2.5:f,y=this._viewOr(this._baseVb()),b=this._floorView(y),w=this._editing?"":this._stageBg(d),k=this._opMeasureView,x=this._decorMeasure,$=this._bdLive,S=this._furnLive,M="view"===this._mode?this._editorChromeMode:this._mode,C=this._roomHoverPaths(s),D=s.bg?this._display(s.bg.href):"",T=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,P=this._modeTransitionVisual,R=this._dayCycleState(),A=P?.viewWeight??("view"===this._mode?1:0),I=this._modeTransition.state?.from.presentedMode,F=!this._markup||!!P&&("view"===P.presentedMode||"devices"===P.presentedMode||"view"===I||"devices"===I),E=P?.stageColor||w,z=P?.sceneBrightness??1;return j`
@@ -5710,7 +5729,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 viewBox=${u?.structural?`${y.x} ${y.y} ${y.w} ${y.h}`:`${b.x} ${b.y} ${b.w} ${b.h}`} preserveAspectRatio=${u?.structural||!r?"xMidYMid meet":"none"}> + transform=${u?.structural?Wp():G}> ${""} ${this._wallHatchDefs(d.color)}${W`${this._paperShapes(s.rooms).map(t=>"path"in t?W``:"poly"in t?W``:W``)}`} ${this._editing?this._renderMarkupDefs(o):G} @@ -5724,30 +5743,30 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 preserveAspectRatio="none" />`:G} ${""} ${d.hideDecor&&"decor"!==this._mode?G:this._renderDecorLayer()} - ${(()=>{const t=this._openPairs(),e=new Map,i=t=>(e.has(t)||e.set(t,ci(t)),e.get(t));return s.rooms.filter(t=>t.area||"view"===this._mode||this._markup||d.showBorders).map(e=>{let n="room "+(s.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||e.id!==this._mergeSel&&e.id!==this._splitSel?.roomId||(n+=" picked");let o="";const a=Is(d.fill,e);if(!this._markup&&(d.showBorders||"none"!==a)){n+=" styled";const t=[];t.push(`--room-stroke:${d.color}`,`--room-stroke-op:${d.showBorders?d.opacity:0}`);const i=_.byRoom.get(e)||null;i?(n+=" filled",t.push(`--room-fill:${i.color}`,`--room-fill-op:${i.opacity}`)):t.push("--room-fill:transparent","--room-fill-op:0"),o=t.join(";")}let r;const l=t=>{"view"===this._mode&&(void 0===r&&(r=this._roomArea(e)),this._showTip(t,e.name||this._t("room.unnamed"),r?this._t("tip.area",{value:r}):"",m?this._roomLqi(e.area):null,this._roomTemp(e),this._roomHum(e)))},c=this._markup&&(e.id===this._mergeSel||e.id===this._splitSel?.roomId),h=e.id&&!c?t.filter(t=>t.a.id===e.id||t.b.id===e.id).flatMap(t=>t.segs):[],u=c?[]:this._thickWallCuts(),p=h.concat(u);p.length&&(n+=" noedge");const g=i(e),f=this._spaceWalls,v=f.length&&e.id&&g&&ol(s.rooms,e.id,f,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||g,y=v?Di(v,(b=e,s.rooms.filter(t=>t!==b).map(i).filter(Boolean))):[];var b;const w=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",k=v?this._cleanFloor(e,v,s).path:"",x=e.id||G,$=e.area||G,S=k&&v?W`{const t=this._openPairs(),e=new Map,i=t=>(e.has(t)||e.set(t,ci(t)),e.get(t));return s.rooms.filter(t=>t.area||"view"===this._mode||this._markup||d.showBorders).map(e=>{let n="room "+(s.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||e.id!==this._mergeSel&&e.id!==this._splitSel?.roomId||(n+=" picked");let o="";const a=Is(d.fill,e);if(!this._markup&&(d.showBorders||"none"!==a)){n+=" styled";const t=[];t.push(`--room-stroke:${d.color}`,`--room-stroke-op:${d.showBorders?d.opacity:0}`);const i=_.byRoom.get(e)||null;i?(n+=" filled",t.push(`--room-fill:${i.color}`,`--room-fill-op:${i.opacity}`)):t.push("--room-fill:transparent","--room-fill-op:0"),o=t.join(";")}let r;const l=t=>{"view"===this._mode&&(void 0===r&&(r=this._roomArea(e)),this._showTip(t,e.name||this._t("room.unnamed"),r?this._t("tip.area",{value:r}):"",m?this._roomLqi(e.area):null,this._roomTemp(e),this._roomHum(e)))},c=this._markup&&(e.id===this._mergeSel||e.id===this._splitSel?.roomId),h=e.id&&!c?t.filter(t=>t.a.id===e.id||t.b.id===e.id).flatMap(t=>t.segs):[],u=c?[]:this._thickWallCuts(),p=h.concat(u);p.length&&(n+=" noedge");const g=i(e),f=this._spaceWalls,v=f.length&&e.id&&g&&ol(s.rooms,e.id,f,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,P_)||g,y=v?Di(v,(b=e,s.rooms.filter(t=>t!==b).map(i).filter(Boolean))):[];var b;const w=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z",k=v?this._cleanFloor(e,v,s).path:"",x=e.id||G,$=e.area||G,S=k&&v?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:y.length&&v?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:y.length&&v?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:v&&v!==g?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:v&&v!==g?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:e.poly?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:e.poly?W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`:W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`:W`this._hoverRoom={space:s.id,room:e}} - @mousemove=${l} - @mouseleave=${()=>{this._tip=null,this._hoverRoom=null}}>`,M=p.length&&g?Ds(g,p,.02*this._gridPitch):null,C=M?W`{this._notePointer(t),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:s.id,room:e})}} + @pointermove=${l} + @pointerleave=${()=>this._clearTransientHover()}>`,M=p.length&&g?Ds(g,p,.02*this._gridPitch):null,C=M?W``:G;return W`${S}${C}`})})()} ${this._renderRoomHoverFill(C)} @@ -5895,7 +5914,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G} ${this._toast?j``:G} - `}_vacCandidateStatus(t,e,i=this._planHass){const s=this._bindingStatus("entity:"+t);if("ha_disabled"===s.kind)return"disabled";if("orphaned"===s.kind)return"missing";if("unverified"===s.kind)return"unverified";const n=i?.states?.[t];return"unavailable"===n?.state?"unavailable":e?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(t){const e=this._haRegistry.entities||{},i=[];for(const[t,s]of Object.entries(this.hass?.states||{})){if(!t.startsWith("camera."))continue;const n=wh(t,s,e[t]);n&&i.push(n)}this._vacAllCameraCache={devId:t.id,candidates:i},this._vacAllCamerasFor=t.id}_vacSourceResolution(t,e=!1,i=this._planHass){const s=t.marker?.vacuum,n="string"==typeof s?.source&&!!s.source,o=new Set(t.entities||[]),a=new Set(o);n&&a.add(s.source);const r=i?.entities||{},l=[];for(const t of a){const e=i?.states?.[t],o=wh(t,e,r[t]);o?l.push(o):n&&t===s.source&&l.push({entityId:t,name:String(e?.attributes?.friendly_name||t),platform:r[t]?.platform?String(r[t].platform):null,category:t.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(e&&this._vacAllCameraCache?.devId===t.id){const t=new Set(l.map(t=>t.entityId));for(const e of this._vacAllCameraCache.candidates)t.has(e.entityId)||l.push(e)}const c={};for(const t of l)c[t.entityId]=this._vacCandidateStatus(t.entityId,t,i);return function(t,e,i,s){const n="string"==typeof t&&t.length>0,o=new Set(e),a=Array.from(i).sort((e,i)=>n&&e.entityId===t?-1:n&&i.entityId===t?1:i.score-e.score||e.entityId.localeCompare(i.entityId));if(n){const e=a.find(e=>e.entityId===t);return{entityId:t,status:s[t]||(e?.hasPosition?"ok":"unverified"),pinned:!0,candidates:a}}const r=a.find(t=>o.has(t.entityId)&&t.hasPosition&&"ok"===s[t.entityId]);return r?{entityId:r.entityId,status:"ok",pinned:!1,candidates:a}:{entityId:null,status:"none",pinned:!1,candidates:a}}(s?.source,o,l,c)}_vacSource(t,e=this._planHass){if(!1===t.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(t,!1,e);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(t){return t.primary?.startsWith("vacuum.")?t.primary:(t.entities||[]).find(t=>t.startsWith("vacuum."))||null}_isVacDev(t){return!!this._vacEntity(t)}_activitySourceKey(t){return this._activitySnapshot(t).sourceKey}_activitySnapshot(t,e=ro(this._planHass,this._devices,null,this._virtualLights)){const i=cu(this._planHass,t,this._devices,e,this._fullRegistryHass);return{samples:i.samples,sourceKey:uu(this._planHass,t,i)}}_stampActivity(t,e,i){let s=this._activityRt.get(t);s||(s=Eu(i||"",[]),this._activityRt.set(t,s)),null!=i&&(s.sources=i),Ou(s,e,Date.now(),window.clearTimeout.bind(window),t=>window.setTimeout(()=>this.requestUpdate(),t))}_syncActivityRuntime(){const t=new Map;if(!this.hass)return t;if(!1===this._config?.live_states){for(const t of this._activityRt.values())clearTimeout(t.timer);return this._activityRt.clear(),t}const e=new Set,i=ro(this._planHass,this._devices,null,this._virtualLights);for(const s of this._devices){if(s.hidden)continue;if("icon_ripple"!==Li(s.marker?.display))continue;e.add(s.id);const n=this._activitySnapshot(s,i);t.set(s.id,n);const{samples:o,sourceKey:a}=n;let r=this._activityRt.get(s.id);r?r.sources!==a&&zu(r,a,o,window.clearTimeout.bind(window)):(r=Eu(a,o),this._activityRt.set(s.id,r))}for(const[t,i]of this._activityRt)e.has(t)||(clearTimeout(i.timer),this._activityRt.delete(t));return t}_activityTick(){if(!this.hass)return;const t=this._syncActivityRuntime();for(const e of this._devices){if(e.hidden)continue;if("icon_ripple"!==Li(e.marker?.display))continue;const i=t.get(e.id)||this._activitySnapshot(e),{samples:s,sourceKey:n}=i,o=this._activityRt.get(e.id);if(!o||o.sources!==n)continue;const a=Nu(o,s,window.clearTimeout.bind(window));a&&this._stampActivity(e.id,a,n)}}_vacTick(){if(this.hass)for(const t of this._devices){if(t.hidden||!this._isVacDev(t))continue;if("static_icon"===Li(t.marker?.display)){this._vacRt.delete(t.id);continue}const e=this._vacSource(t);if(!e)continue;const i=this._vacEntity(t),s=Sh(this.hass.states[i||""]?.state),n=bh(this.hass.states[e]?.attributes);let o=this._vacRt.get(t.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(t.id,o)),s&&!o.moving&&(o.trail=[],o.lastPos=null);const a="never"!==Ph(t.marker?.vacuum)&&!n?.path.length;!s&&o.moving&&(o.endedTs=Date.now(),a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=s;const r=n?.pos;if(s&&r){const t=r.x+":"+r.y;if(t!==o.lastKey){const e=Date.now();o.jump=o.lastTs>0&&e-o.lastTs>1e4,o.lastKey=t,o.lastTs=e,a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=[r.x,r.y]}}}}_vacEnsureMarker(t){const e=this._serverCfg;if(!e)return null;e.markers=e.markers||[];const i=e.markers.find(e=>e.id===t.id);if(i)return i;if("device"!==t.bindingKind&&"entity"!==t.bindingKind||!t.bindingRef)return null;const s={id:t.id,binding:t.bindingKind+":"+t.bindingRef,space:t.space||null,area:t.area||null,hidden:!!t.hidden};return e.markers.push(s),s}_renderVacSection(t){const e=this._devices.find(e=>e.id===t.devId);if(!e||!this._isVacDev(e))return G;const i=e.marker?.vacuum||{},s=this._vacAllCamerasFor===e.id,n=this._vacSourceResolution(e,s),o=n.entityId,a=n.candidates.find(t=>t.entityId===o)||null,r=o?bh(this.hass?.states[o]?.attributes):null,l=!1!==i.live&&("ok"===n.status||"unsupported"===n.status),c=this._vacPlanRoomAnchors(e.space),h=r?function(t,e){const i=new Set(e.map(kh).filter(Boolean)),s=new Set;for(const e of t){const t=kh(e.name||"");t&&i.has(t)&&s.add(t)}return s.size}(r.rooms,c.map(t=>t.name)):0,d=!!(l&&r&&h>=3),u=Object.keys(i.calibration||{}),p=t=>{const i=this._vacEnsureMarker(e);i&&(i.vacuum={...i.vacuum||{},...t},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate())},_=new Set(e.entities||[]),g=n.candidates.filter(t=>_.has(t.entityId)||t.entityId===i.source),m=s?n.candidates.filter(t=>t.entityId.startsWith("camera.")&&!g.some(e=>e.entityId===t.entityId)):[],f=t=>[t.hasPosition?this._t("vac.cap_position"):"",t.hasRooms?this._t("vac.cap_rooms_short"):"",t.hasPath?this._t("vac.cap_path"):"",t.hasMapId?this._t("vac.cap_map"):""].filter(Boolean).join(" · ")||this._t("vac.cap_none"),v=t=>j` + `}_vacCandidateStatus(t,e,i=this._planHass){const s=this._bindingStatus("entity:"+t);if("ha_disabled"===s.kind)return"disabled";if("orphaned"===s.kind)return"missing";if("unverified"===s.kind)return"unverified";const n=i?.states?.[t];return"unavailable"===n?.state?"unavailable":e?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(t){const e=this._haRegistry.entities||{},i=[];for(const[t,s]of Object.entries(this.hass?.states||{})){if(!t.startsWith("camera."))continue;const n=wh(t,s,e[t]);n&&i.push(n)}this._vacAllCameraCache={devId:t.id,candidates:i},this._vacAllCamerasFor=t.id}_vacSourceResolution(t,e=!1,i=this._planHass){const s=t.marker?.vacuum,n="string"==typeof s?.source&&!!s.source,o=new Set(t.entities||[]),a=new Set(o);n&&a.add(s.source);const r=i?.entities||{},l=[];for(const t of a){const e=i?.states?.[t],o=wh(t,e,r[t]);o?l.push(o):n&&t===s.source&&l.push({entityId:t,name:String(e?.attributes?.friendly_name||t),platform:r[t]?.platform?String(r[t].platform):null,category:t.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(e&&this._vacAllCameraCache?.devId===t.id){const t=new Set(l.map(t=>t.entityId));for(const e of this._vacAllCameraCache.candidates)t.has(e.entityId)||l.push(e)}const c={};for(const t of l)c[t.entityId]=this._vacCandidateStatus(t.entityId,t,i);return function(t,e,i,s){const n="string"==typeof t&&t.length>0,o=new Set(e),a=Array.from(i).sort((e,i)=>n&&e.entityId===t?-1:n&&i.entityId===t?1:i.score-e.score||e.entityId.localeCompare(i.entityId));if(n){const e=a.find(e=>e.entityId===t);return{entityId:t,status:s[t]||(e?.hasPosition?"ok":"unverified"),pinned:!0,candidates:a}}const r=a.find(t=>o.has(t.entityId)&&t.hasPosition&&"ok"===s[t.entityId]);return r?{entityId:r.entityId,status:"ok",pinned:!1,candidates:a}:{entityId:null,status:"none",pinned:!1,candidates:a}}(s?.source,o,l,c)}_vacSource(t,e=this._planHass){if(!1===t.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(t,!1,e);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(t){return t.primary?.startsWith("vacuum.")?t.primary:(t.entities||[]).find(t=>t.startsWith("vacuum."))||null}_isVacDev(t){return!!this._vacEntity(t)}_activitySourceKey(t){return this._activitySnapshot(t).sourceKey}_activitySnapshot(t,e=ro(this._planHass,this._devices,null,this._virtualLights)){const i=cu(this._planHass,t,this._devices,e,this._fullRegistryHass);return{samples:i.samples,sourceKey:uu(this._planHass,t,i)}}_stampActivity(t,e,i){let s=this._activityRt.get(t);s||(s=Eu(i||"",[]),this._activityRt.set(t,s)),null!=i&&(s.sources=i),Ou(s,e,Date.now(),window.clearTimeout.bind(window),t=>window.setTimeout(()=>this.requestUpdate(),t))}_syncActivityRuntime(){const t=new Map;if(!this.hass)return t;if(!1===this._config?.live_states){for(const t of this._activityRt.values())clearTimeout(t.timer);return this._activityRt.clear(),t}const e=new Set,i=ro(this._planHass,this._devices,null,this._virtualLights);for(const s of this._devices){if(s.hidden)continue;if("icon_ripple"!==Li(s.marker?.display))continue;e.add(s.id);const n=this._activitySnapshot(s,i);t.set(s.id,n);const{samples:o,sourceKey:a}=n;let r=this._activityRt.get(s.id);r?r.sources!==a&&zu(r,a,o,window.clearTimeout.bind(window)):(r=Eu(a,o),this._activityRt.set(s.id,r))}for(const[t,i]of this._activityRt)e.has(t)||(clearTimeout(i.timer),this._activityRt.delete(t));return t}_activityTick(){if(!this.hass)return;const t=this._syncActivityRuntime();for(const e of this._devices){if(e.hidden)continue;if("icon_ripple"!==Li(e.marker?.display))continue;const i=t.get(e.id)||this._activitySnapshot(e),{samples:s,sourceKey:n}=i,o=this._activityRt.get(e.id);if(!o||o.sources!==n)continue;const a=Hu(o,s,window.clearTimeout.bind(window));a&&this._stampActivity(e.id,a,n)}}_vacTick(){if(this.hass)for(const t of this._devices){if(t.hidden||!this._isVacDev(t))continue;if("static_icon"===Li(t.marker?.display)){this._vacRt.delete(t.id);continue}const e=this._vacSource(t);if(!e)continue;const i=this._vacEntity(t),s=Sh(this.hass.states[i||""]?.state),n=bh(this.hass.states[e]?.attributes);let o=this._vacRt.get(t.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(t.id,o)),s&&!o.moving&&(o.trail=[],o.lastPos=null);const a="never"!==Ph(t.marker?.vacuum)&&!n?.path.length;!s&&o.moving&&(o.endedTs=Date.now(),a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=s;const r=n?.pos;if(s&&r){const t=r.x+":"+r.y;if(t!==o.lastKey){const e=Date.now();o.jump=o.lastTs>0&&e-o.lastTs>1e4,o.lastKey=t,o.lastTs=e,a&&o.lastPos&&(o.trail=$h(o.trail,o.lastPos,40)),o.lastPos=[r.x,r.y]}}}}_vacEnsureMarker(t){const e=this._serverCfg;if(!e)return null;e.markers=e.markers||[];const i=e.markers.find(e=>e.id===t.id);if(i)return i;if("device"!==t.bindingKind&&"entity"!==t.bindingKind||!t.bindingRef)return null;const s={id:t.id,binding:t.bindingKind+":"+t.bindingRef,space:t.space||null,area:t.area||null,hidden:!!t.hidden};return e.markers.push(s),s}_renderVacSection(t){const e=this._devices.find(e=>e.id===t.devId);if(!e||!this._isVacDev(e))return G;const i=e.marker?.vacuum||{},s=this._vacAllCamerasFor===e.id,n=this._vacSourceResolution(e,s),o=n.entityId,a=n.candidates.find(t=>t.entityId===o)||null,r=o?bh(this.hass?.states[o]?.attributes):null,l=!1!==i.live&&("ok"===n.status||"unsupported"===n.status),c=this._vacPlanRoomAnchors(e.space),h=r?function(t,e){const i=new Set(e.map(kh).filter(Boolean)),s=new Set;for(const e of t){const t=kh(e.name||"");t&&i.has(t)&&s.add(t)}return s.size}(r.rooms,c.map(t=>t.name)):0,d=!!(l&&r&&h>=3),u=Object.keys(i.calibration||{}),p=t=>{const i=this._vacEnsureMarker(e);i&&(i.vacuum={...i.vacuum||{},...t},this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate())},_=new Set(e.entities||[]),g=n.candidates.filter(t=>_.has(t.entityId)||t.entityId===i.source),m=s?n.candidates.filter(t=>t.entityId.startsWith("camera.")&&!g.some(e=>e.entityId===t.entityId)):[],f=t=>[t.hasPosition?this._t("vac.cap_position"):"",t.hasRooms?this._t("vac.cap_rooms_short"):"",t.hasPath?this._t("vac.cap_path"):"",t.hasMapId?this._t("vac.cap_map"):""].filter(Boolean).join(" · ")||this._t("vac.cap_none"),v=t=>j`
`}_roomArea(t){const e=ci(t);if(!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._spaceWalls,n=s.length&&t.id&&ol(i.rooms,t.id,s,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,T_)||e,o=this._cleanFloor(t,n),a=this._cellCm/this._gridPitch;return Ta(o.area*a*a/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(t){const e=t.settings?.temp_source;return e?xo(this._renderPlanHass,e,"temp",this._markers):t.area?this._climate().get(t.area)?.temp??null:null}_roomHum(t){const e=t.settings?.hum_source;return e?xo(this._renderPlanHass,e,"hum",this._markers):t.area?this._climate().get(t.area)?.hum??null:null}_climate(){const t=this._serverCfg?.markers,e=this._renderPlanHass,i=this._climateCache;if(i&&i.h===e&&i.r===this._iconRules&&i.mk===t)return i.m;const s=function(t,e,i){const s=new Map;if(!t?.entities)return s;const n=vo(i),o=new Set;for(const t of i||[]){if(t?.removed||!0!==t?.use_climate_temp)continue;const e=(t.binding||"").indexOf(":");e>0&&o.add(t.binding.slice(e+1))}const a=new Map;for(const[e,i]of Object.entries(t.entities)){if(i.device_id&&n.devices.has(i.device_id)||!i.device_id&&n.entities.has(e))continue;const s=i.device_id?t.devices?.[i.device_id]:null,r=i.area_id||s?.area_id||null;if(!r)continue;if(i.entity_category)continue;if(!(o.size>0&&e.startsWith("climate.")&&(o.has(e)||i.device_id&&o.has(i.device_id)))){if(Yt.has(i.platform))continue;if($o.test(e))continue}let l=a.get(r);l||(l=new Map,a.set(r,l));const c=i.device_id||e;let h=l.get(c);if(!h){const n=t.states?.[e];h={name:(s?s.name_by_user||s.name:i.name||n?.attributes?.friendly_name||e)||e,model:s?.model,ents:[]},l.set(c,h)}h.ents.push(e)}for(const[i,n]of a){const a=[],r=[];for(const[i,s]of n){const n=fo(t,s.name,s.model,s.ents,e),l="mdi:thermometer"===n||"mdi:air-filter"===n;if(l){const e=uo(t,s.ents);null!=e&&a.push(e)}if(o.size>0&&(o.has(i)||s.ents.some(t=>o.has(t)))){const e=po(t,s.ents);null!=e&&a.push(e)}if(l||"mdi:water-percent"===n){const e=go(t,s.ents);null!=e&&r.push(e)}}(a.length||r.length)&&s.set(i,{temp:a.length?Math.round(a.reduce((t,e)=>t+e,0)/a.length*10)/10:null,hum:r.length?Math.round(r.reduce((t,e)=>t+e,0)/r.length):null})}return s}(e,this._iconRules,t);return this._climateCache={h:e,r:this._iconRules,mk:t,m:s},s}_resetRoomDialogFields(){this._roomEditId=null,this._roomFill="",this._roomCustomFill=null,this._roomTempSrc="",this._roomHumSrc="",this._roomSrcOpen=null,this._roomSrcFilter="",this._roomNameScale=1,this._roomLabelScale=1}_openRoomEdit(t){if(!t.id)return;this._roomEditId=t.id,this._nameSel=t.name||"",this._areaSel=t.area||"",this._roomFill="glow"===t.settings?.fill_mode?"":t.settings?.fill_mode||"";const e=t.settings?.custom_fill;this._roomCustomFill=e&&"object"==typeof e?as(e,ls(this._curSpaceCfg).customFill):null,this._roomTempSrc=t.settings?.temp_source||"",this._roomHumSrc=t.settings?.hum_source||"",this._roomNameScale=Es(t.settings?.name_scale),this._roomLabelScale=Es(t.settings?.label_scale),this._roomSrcOpen=null,this._roomSrcFilter="",this._roomDialog=!0}_roomSettingsFromDialog(){const t={};return this._roomFill&&(t.fill_mode=this._roomFill),this._roomCustomFill&&(t.custom_fill=this._roomCustomFill),this._roomTempSrc&&(t.temp_source=this._roomTempSrc),this._roomHumSrc&&(t.hum_source=this._roomHumSrc),1!==this._roomNameScale&&(t.name_scale=this._roomNameScale),1!==this._roomLabelScale&&(t.label_scale=this._roomLabelScale),Object.keys(t).length?t:null}_saveRoomEdit(){const t=this._curSpaceCfg,e=t?.rooms.find(t=>t.id===this._roomEditId);if(!e)return this._roomDialog=!1,void(this._roomEditId=null);e.name=this._nameSel.trim()||e.name,e.area=this._areaSel||null;const i=e.settings||{},s={...i};this._roomFill?s.fill_mode=this._roomFill:delete s.fill_mode,this._roomCustomFill?s.custom_fill=this._roomCustomFill:delete s.custom_fill,"glow"===i.fill_mode&&"boolean"!=typeof i.glow&&(s.glow=!0),this._roomTempSrc?s.temp_source=this._roomTempSrc:delete s.temp_source,this._roomHumSrc?s.hum_source=this._roomHumSrc:delete s.hum_source,1!==this._roomNameScale?s.name_scale=this._roomNameScale:delete s.name_scale,1!==this._roomLabelScale?s.label_scale=this._roomLabelScale:delete s.label_scale,Object.keys(s).length?e.settings=s:delete e.settings,this._saveConfig(),this._roomDialog=!1,this._roomEditId=null,this._nameSel="",this._areaSel="",this._regSignature="",this._maybeRebuildDevices(),this.requestUpdate(),this._showToast(this._t("toast.room_updated"))}_roomSrcCandidates(){const t=this._planHass,e=vo(this._markers),i=this._roomSrcFilter.trim().toLowerCase(),s=[];for(const n of Object.values(t.devices)){if("service"===n.entry_type)continue;if(e.devices.has(n.id))continue;const t=(n.name_by_user||n.name||n.id).trim();i&&!t.toLowerCase().includes(i)||s.push({value:"device:"+n.id,label:t,sub:n.model||this._t("marker.sub_device")})}for(const[n,o]of Object.entries(t.entities)){if(!n.startsWith("sensor.")||o.hidden)continue;if(yo(t,n,e))continue;const a=o.name||t.states[n]?.attributes?.friendly_name||n;i&&!(a+" "+n).toLowerCase().includes(i)||s.push({value:"entity:"+n,label:a,sub:n})}return s.sort((t,e)=>t.label.localeCompare(e.label)),s.slice(0,200)}_roomSrcLabel(t){const e=t.indexOf(":"),i=t.slice(0,e),s=t.slice(e+1);return"device"===i?this._fullRegistryHass.devices[s]?.name_by_user||this._fullRegistryHass.devices[s]?.name||s:this._fullRegistryHass.entities[s]?.name||this.hass.states[s]?.attributes?.friendly_name||s}_labelPos(t,e){const i=this._layout["rl_"+(t.id||"")];if(i&&i.s===e)return{x:i.x*T_,y:i.y*T_};const s=this._snap(this._roomCenter(t));return{x:s[0],y:s[1]}}_labelDown(t,e,i){if("plan"!==this._mode)return;t.preventDefault(),t.stopPropagation();const s=this._labelPos(e,i);this._drag={id:"rl_"+(e.id||""),sx:t.clientX,sy:t.clientY,ox:s.x,oy:s.y,moved:!1},O_(t),this._tip=null}_labelMove(t,e,i){const s="rl_"+(e.id||"");if(!this._drag||this._drag.id!==s)return;const n=this._stageEl;if(!n)return;const o=this._spaceModelById(i);if(!o)return;const a=o.vb,r=n.getBoundingClientRect(),l=this._viewOr(a),c=(t.clientX-this._drag.sx)/r.width*l.w,h=(t.clientY-this._drag.sy)/r.height*l.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0);const d=ic(this._drag.ox+c),u=ic(this._drag.oy+h);this._savePos({id:s,space:i},d,u)}_labelUp(t){const e="rl_"+(t.id||"");if(!this._drag||this._drag.id!==e)return;const i=this._drag.moved;this._drag=i?this._drag:null,i&&window.setTimeout(()=>this._drag=null,0)}_labelScale(t){const e=this._layout["rl_"+(t.id||"")]?.k;return"number"==typeof e&&Number.isFinite(e)?Math.min(3,Math.max(.5,e)):1}_rlResizeDown(t,e,i){if("plan"!==this._mode)return;t.preventDefault(),t.stopPropagation();const s=t.target.closest(".roomlabel");if(!s)return;const n=s.getBoundingClientRect(),o=n.left+n.width/2,a=n.top+n.height/2,r=Math.max(8,Math.hypot(t.clientX-o,t.clientY-a));this._rlResize={id:"rl_"+(e.id||""),space:i,k0:this._labelScale(e),cx:o,cy:a,d0:r},O_(t)}_rlResizeMove(t){const e=this._rlResize;if(!e)return;t.stopPropagation();const i=Math.max(8,Math.hypot(t.clientX-e.cx,t.clientY-e.cy)),s=Math.min(3,Math.max(.5,e.k0*(i/e.d0))),n=this._layout[e.id];if(n)this._layout={...this._layout,[e.id]:{...n,k:s}};else{const t=e.id.slice(3),i=this._spaceModelById(e.space);if(!i)return;const n=i.rooms.find(e=>e.id===t);if(!n)return;const o=this._labelPos(n,e.space);this._layout={...this._layout,[e.id]:{s:e.space,x:o.x/T_,y:o.y/T_,k:s}}}this._dirtyPos.add(e.id)}_rlResizeUp(){this._rlResize&&(this._rlResize=null,this._persistLayout())}_renderRoomGear(t,e,i){if(!t.id)return G;let s=null;if(t.poly?(s=this._gearPtCache.get(t.poly)||null,s||(s=xi(t.poly),this._gearPtCache.set(t.poly,s))):null!=t.x&&null!=t.y&&(s=[t.x+(t.w||0)/2,t.y+(t.h||0)/2]),!s)return G;const n=(s[0]-i.x)/i.w*100,o=(s[1]-i.y)/i.h*100;return j`
`}get _measureAnchor(){return this._markup&&this._cursorPt?"draw"===this._tool&&this._path.length&&!this._contourClosed?this._path[this._path.length-1]:"split"===this._tool&&this._splitSel?.pts?.length?this._splitSel.pts[this._splitSel.pts.length-1]:null:null}_renderMeasureLabel(t){const e=this._measureAnchor,i=this._cursorPt,s=(i[0]-t.x)/t.w*100,n=(i[1]-t.y)/t.h*100,o=zs(e,i),a=Math.round(10*o)/10,r=Os(o);return j`
- ${this._fmtLen(e,i)} · ${a}°
`}get _decorMeasure(){const t=this._decorDraft;if(!t||"decor"!==this._mode)return null;const[e,i]=t.a,[s,n]=t.b;if(Math.abs(e-s)<1e-6&&Math.abs(i-n)<1e-6)return null;const o=(e+s)/2,a=(i+n)/2;if("line"===t.kind){const e=zs(t.a,t.b);return{x:o,y:a,on45:Os(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const r=this._fmtLen([e,i],[s,i]),l=this._fmtLen([s,i],[s,n]);if("ellipse"===t.kind){const t=this._fmtLen([0,0],[Math.abs(s-e)/2,0]),r=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:a,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${r}`}}return{x:o,y:a,on45:!1,text:`${r} × ${l} · ${Ta(rr(Math.abs(s-e),this._cellCm,this._gridPitch)*rr(Math.abs(n-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const t=this._drag.id.slice(3),e=this._spaceModel()?.rooms.find(e=>e.id===t);return e?(()=>{const t=this._labelPos(e,this._space);return[t.x,t.y]})():null}return null}if("devices"===this._mode&&this._drag?.moved){const t=this._devices.find(t=>t.id===this._drag.id);return t?(()=>{const e=this._pos(t);return[e.x,e.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const t=this._decorList.find(t=>t.id===this._decorMove.id);if(!t)return null;const e=T_,i=this._decorH;return"line"===t.kind?[t.x1*e,t.y1*i]:[t.x*e,t.y*i]}return null}return null}_alignCandidates(){const t=[],e=this._spaceModel();if(this._markup){if(!e)return t;if(this._drag?.id.startsWith("rl_")){const i=this._drag.id.slice(3);for(const s of e.rooms){if(!s.name||s.id===i)continue;const e=this._labelPos(s,this._space);t.push([e.x,e.y])}return t}for(const i of e.rooms){const e=ci(i);if(e)for(const i of e)t.push(i)}if("draw"===this._tool)for(const e of this._path)t.push(e);if("split"===this._tool&&this._splitSel?.pts)for(const e of this._splitSel.pts)t.push(e);return t}if("devices"===this._mode){for(const e of this._devices){if(e.space!==this._space||e.id===this._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const i=this._pos(e);t.push([i.x,i.y])}return t}if("decor"===this._mode){const e=this._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this._decorDraft&&t.push(this._decorDraft.a),t}return t}_renderAlignGuides(){const t=this._alignPoint;if(!t)return W``;const e=this._drag?.id.startsWith("rl_")?.5*this._gridPitch:.05*this._gridPitch,i=function(t,e,i){let s=null,n=null;for(const o of e)if(!(Math.abs(o[0]-t[0])<1e-6&&Math.abs(o[1]-t[1])<1e-6)){if(Math.abs(o[0]-t[0])<=i){const e=Math.abs(o[1]-t[1]);e>1e-6&&(!s||e1e-6&&(!n||e + ${this._fmtLen(e,i)} · ${a}°`}get _decorMeasure(){const t=this._decorDraft;if(!t||"decor"!==this._mode)return null;const[e,i]=t.a,[s,n]=t.b;if(Math.abs(e-s)<1e-6&&Math.abs(i-n)<1e-6)return null;const o=(e+s)/2,a=(i+n)/2;if("line"===t.kind){const e=zs(t.a,t.b);return{x:o,y:a,on45:Os(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const r=this._fmtLen([e,i],[s,i]),l=this._fmtLen([s,i],[s,n]);if("ellipse"===t.kind){const t=this._fmtLen([0,0],[Math.abs(s-e)/2,0]),r=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:a,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${r}`}}return{x:o,y:a,on45:!1,text:`${r} × ${l} · ${Ta(rr(Math.abs(s-e),this._cellCm,this._gridPitch)*rr(Math.abs(n-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const t=this._drag.id.slice(3),e=this._spaceModel()?.rooms.find(e=>e.id===t);return e?(()=>{const t=this._labelPos(e,this._space);return[t.x,t.y]})():null}return null}if("devices"===this._mode&&this._drag?.moved){const t=this._devices.find(t=>t.id===this._drag.id);return t?(()=>{const e=this._pos(t);return[e.x,e.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const t=this._decorList.find(t=>t.id===this._decorMove.id);if(!t)return null;const e=P_,i=this._decorH;return"line"===t.kind?[t.x1*e,t.y1*i]:[t.x*e,t.y*i]}return null}return null}_alignCandidates(){const t=[],e=this._spaceModel();if(this._markup){if(!e)return t;if(this._drag?.id.startsWith("rl_")){const i=this._drag.id.slice(3);for(const s of e.rooms){if(!s.name||s.id===i)continue;const e=this._labelPos(s,this._space);t.push([e.x,e.y])}return t}for(const i of e.rooms){const e=ci(i);if(e)for(const i of e)t.push(i)}if("draw"===this._tool)for(const e of this._path)t.push(e);if("split"===this._tool&&this._splitSel?.pts)for(const e of this._splitSel.pts)t.push(e);return t}if("devices"===this._mode){for(const e of this._devices){if(e.space!==this._space||e.id===this._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const i=this._pos(e);t.push([i.x,i.y])}return t}if("decor"===this._mode){const e=this._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this._decorDraft&&t.push(this._decorDraft.a),t}return t}_renderAlignGuides(){const t=this._alignPoint;if(!t)return W``;const e=this._drag?.id.startsWith("rl_")?.5*this._gridPitch:.05*this._gridPitch,i=function(t,e,i){let s=null,n=null;for(const o of e)if(!(Math.abs(o[0]-t[0])<1e-6&&Math.abs(o[1]-t[1])<1e-6)){if(Math.abs(o[0]-t[0])<=i){const e=Math.abs(o[1]-t[1]);e>1e-6&&(!s||e1e-6&&(!n||e ${i.map(e=>{const[i,o,a,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*n]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*n,e.at];return W` `})} `}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180;return W` - `}_renderOpeningDialog(){const t=this._openingDialog,e=this._spaceModel()?.partitions||[],i=t.id?this._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,s={id:t.id||"preview",type:t.type,x:t.x/T_,y:t.y/this._spaceH,angle:t.angle,length:i&&!t.lengthTouched?i.length:this._cmToUnits(Math.max(20,t.lengthCm))/T_,...t.host?{host:t.host}:{}},n=ld(i,s),o=t.host?n?rd(s,e,T_,this._cellCm,this._gridPitch):ad(s,e,T_,this._cellCm,this._gridPitch):null,a="does-not-fit-jamb"===o?.reason,r=t.host?e.find(e=>e.id===t.host.id):null,l=r?ri(r.cm/2,this._imperial):"",c=!!t.host&&!o?.resolved&&!a,h="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",d=(t,e,i)=>j`i(t.target.value)}> ${t.map(t=>j``)} `;return j` {const i=m_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> + @input=${e=>{const i=f_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> ${"passage"===t.type&&(t.contact||t.lock)?j`
@@ -6220,7 +6239,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 data-active=${e?"true":"false"} cx=${e?.point[0]??0} cy=${e?.point[1]??0} r=${s} visibility=${e?"visible":"hidden"} pointer-events="none"> - `}_syncPlanSnapActiveMarker(t){const e=this.renderRoot?.querySelector('[data-hp="plan-snap-active-marker"]');if(e){if(e.setAttribute("class",`plan-snap-node${t?" active":""}${"line"===t?.kind?" dynamic":""}`),e.setAttribute("data-active",t?"true":"false"),e.setAttribute("visibility",t?"visible":"hidden"),!t)return e.removeAttribute("data-kind"),void e.removeAttribute("data-key");e.setAttribute("data-kind",t.kind),e.setAttribute("data-key",t.key),e.setAttribute("cx",String(t.point[0])),e.setAttribute("cy",String(t.point[1])),e.setAttribute("r",String(vr(10,this._cellCm,this._gridPitch)))}}_planSnapPhysicalSegment(t){let e=0;const i=this._spaceModel();if(!i)return null;if("partition"===t.sourceKind)e=Number(i.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const s=/^(.*):(\d+)$/.exec(t.sourceId),n=s?i.room_drafts.find(t=>t.id===s[1]):null;e=n&&s&&Number(n.segments[Number(s[2])]?.cm)||0}else e=sl(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,T_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:vr(e,this._cellCm,this._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const i=[];for(let s=0;s+10&&i.push({a:t[s],b:t[s+1],halfDepth:e[s]});if(!i.length)return"";const s=2e-4*this._gridPitch,n=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>Ns(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=s)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Lr([...i,...n],s).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this._openPairs().flatMap(t=>t.segs),i=this._thickWallCuts(),s=e.concat(i),n=s.length?Cs(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,a=this._gridPitch,r=this._viewOr(this._baseVb()),l="draw"===this._tool?this._drawWallCm:null,c=(()=>"draw"===this._tool&&o.length&&null!=l&&l>0?this._contourClosed?o:this._cursorPt?[...o,this._cursorPt]:o.length>=2?o:null:null)(),h=c?c.slice(0,-1).map((t,e)=>vr(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||_r:l||_r,this._cellCm,this._gridPitch)/2):[],d=c?Br(c,vr(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` + `}_syncPlanSnapActiveMarker(t){const e=this.renderRoot?.querySelector('[data-hp="plan-snap-active-marker"]');if(e){if(e.setAttribute("class",`plan-snap-node${t?" active":""}${"line"===t?.kind?" dynamic":""}`),e.setAttribute("data-active",t?"true":"false"),e.setAttribute("visibility",t?"visible":"hidden"),!t)return e.removeAttribute("data-kind"),void e.removeAttribute("data-key");e.setAttribute("data-kind",t.kind),e.setAttribute("data-key",t.key),e.setAttribute("cx",String(t.point[0])),e.setAttribute("cy",String(t.point[1])),e.setAttribute("r",String(vr(10,this._cellCm,this._gridPitch)))}}_planSnapPhysicalSegment(t){let e=0;const i=this._spaceModel();if(!i)return null;if("partition"===t.sourceKind)e=Number(i.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const s=/^(.*):(\d+)$/.exec(t.sourceId),n=s?i.room_drafts.find(t=>t.id===s[1]):null;e=n&&s&&Number(n.segments[Number(s[2])]?.cm)||0}else e=sl(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,P_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:vr(e,this._cellCm,this._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const i=[];for(let s=0;s+10&&i.push({a:t[s],b:t[s+1],halfDepth:e[s]});if(!i.length)return"";const s=2e-4*this._gridPitch,n=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>Hs(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=s)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Lr([...i,...n],s).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this._openPairs().flatMap(t=>t.segs),i=this._thickWallCuts(),s=e.concat(i),n=s.length?Cs(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,a=this._gridPitch,r=this._viewOr(this._baseVb()),l="draw"===this._tool?this._drawWallCm:null,c=(()=>"draw"===this._tool&&o.length&&null!=l&&l>0?this._contourClosed?o:this._cursorPt?[...o,this._cursorPt]:o.length>=2?o:null:null)(),h=c?c.slice(0,-1).map((t,e)=>vr(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||_r:l||_r,this._cellCm,this._gridPitch)/2):[],d=c?Br(c,vr(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` ${this._gridLevels()?W``:G} ${n.map(t=>W``)} ${this._renderPhysicalEditorLayer()} @@ -6244,7 +6263,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182

${this._t("confirm.delete_partition_openings_body",{count:t.openings.length})}

    - ${t.openings.map(t=>j`
  • ${this._t("confirm.delete_partition_openings_item",{type:this._t(`opening.${t.type}`),length:ri(t.length*T_/this._gridPitch*this._cellCm,e)})}
  • `)} + ${t.openings.map(t=>j`
  • ${this._t("confirm.delete_partition_openings_item",{type:this._t(`opening.${t.type}`),length:ri(t.length*P_/this._gridPitch*this._cellCm,e)})}
  • `)}
@@ -6406,11 +6425,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
`:G})()} ${t.model?j`
${this._t("info.model")}${t.model}
`:G} ${i&&!this._cardEntities(t).length?j`
${this._t("info.state")}${i}
`:G} - ${Ni(t.link)?j`
`:G} + ${Hi(t.link)?j`
${this._t("info.link")} + ${t.link}
`:G} ${t.description?j`
${t.description}
`:G} ${t.pdfs&&t.pdfs.length?j`
${this._t("info.manuals")} - ${t.pdfs.map(t=>j` + ${t.pdfs.map(t=>j` ${t.name}`)}
`:G} ${s.length?j`
${this._t("info.controls")} @@ -6429,7 +6448,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 `:G}
- `}_markerValueBadgeFields(t){return(e={touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition}).touched?{value_badge:{enabled:e.enabled,source:e.source,position:e.position}}:e.originalHas?{value_badge:e.original}:{};var e}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=Bs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),a={id:i,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle||null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===o&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:n.length?n:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=m_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:t.hideFromPlan,vacuum:s?.vacuum||null};return("virtual"===t.binding||t.room)&&(a.space=e?.space||("virtual"===t.binding?this._space:null),a.area=e?.area||null,a.room_id=e?.roomId||null),a}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const i=`${this._haRegistry.revision}\n${JSON.stringify(e)}`;if(this._markerPreviewMemo?.key===i)return this._markerPreviewMemo.device;const s=function(t){const{marker:e,...i}=t;return ko({...i,markers:[e]}).find(t=>t.id===e.id)||null}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||this._space,loc:t=>this._t(t),iconRules:this._iconRules});return this._markerPreviewMemo={key:i,device:s},s}_markerPreviewDevices(t){const e=this._markerPreviewDevicesMemo;if(e?.base===this._devices&&e.preview===t)return e.devices;const i=[...this._devices.filter(e=>e.id!==t.id),t];return this._markerPreviewDevicesMemo={base:this._devices,preview:t,devices:i},i}_toggleIntent(t,e=this._devices){return Qh({hass:this._planHass,registryHass:this._fullRegistryHass,devices:e,device:t,virtualLights:this._virtualLights})}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i=this._markerPreviewDevices(e);return this._toggleIntent(e,i)}_toggleStateText(t,e){const i=this._planHass?.states?.[t]||this.hass?.states?.[t];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):e}catch{return e}}_toggleConfirmationStateText(t){const e=String(t.state||"unknown"),i=t.entityId?this._toggleStateText(t.entityId,e):e;if(i.trim().toLocaleLowerCase()!==e.trim().toLocaleLowerCase())return i;const s={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[e];return s?this._t(s):e.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(t){const e={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(t,e){if(!ed(t)||!t.nextEffect||!t.targets.length)return[];const i="group"===t.kind,s=i?t.targets.filter(t=>"on"===t.state).length:0,n=i?0===s?e.groupAllOff():e.groupCurrent(s,t.targets.length):e.state(t.targets[0]);let o;return o="toggle"===t.nextEffect?e.expectedByHa():i&&"turn-on"===t.nextEffect?e.groupAllOn():i&&"turn-off"===t.nextEffect?e.groupAllOff():e.effect(t.nextEffect),[e.current(n),e.expected(o),...t.skippedTargets.length?[e.unavailable(t.skippedTargets.length)]:[]]}(t,{state:t=>this._toggleConfirmationStateText(t),current:t=>this._t("confirm.current_state",{state:t}),expected:t=>this._t("confirm.expected_state",{state:t}),groupCurrent:(t,e)=>this._t("confirm.group_current",{on:t,total:e}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:t=>this._t("confirm.unavailable_targets",{count:t}),effect:t=>this._t(e[t]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(t){if(!t)return[];const e=t=>this._t(`marker.toggle_effect_${t.replace("-","_")}`),i=t=>this._t(`marker.toggle_skip_${t.replace("-","_")}`);return function(t,e){const i=t.targets[0]||t.skippedTargets[0],s=[];return"group"===t.kind?t.targets.length&&s.push(e.group(t.targets)):i&&s.push(e.single(i)),t.nextEffect&&t.targets.length&&s.push("group"===t.kind?e.groupCurrentNext(t.targets,t.nextEffect):e.currentNext(t.targets[0],t.nextEffect)),t.skippedTargets.length&&s.push(e.skipped(t.skippedTargets)),!t.command&&t.noneReason&&s.push(e.none(t.noneReason)),s}(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),i=t.name||e;return this._t("marker.toggle_hint_single",{name:i,id:e})},group:t=>this._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,i)=>"virtual-light"===t.via?this._t("marker.virtual_light_current",{state:this._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(i)}):this._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(i)}),groupCurrentNext:(t,i)=>this._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(i)}),skipped:t=>this._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${i(t.reason)})`}).join(", ")}),none:t=>this._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:Yh(t.originalHasTapAction?t.originalTapAction:null,e)}_effectiveMarkerTapAction(t,e=this._markerPreviewDevice(t)){return this._effectiveStoredTapAction(t,e?.primary?.split(".")[0])}_announceToggleDraft(t){const e=this._markerPreviewDevice(t),i=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},s="toggle"===i.tapAction?this._toggleHintLines(this._toggleIntentForDialog(i)).join(" "):"";return{...i,tapHintAnnouncement:s}}_valueBadgeForBinding(t,e){const i={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},s=this._markerPreviewDevice(i);if(!s)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const n=[...this._devices.filter(t=>t.id!==s.id),s],o=Lo(this._planHass,s,n),a=Bo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!a,valueBadgeSource:a,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return lo(ro(this._planHass,[...this._devices.filter(t=>t.id!==i.id),i],null,this._virtualLights).filter(t=>t.device.id===i.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},i=this._markerPreviewDevice(e);return!!i&&oo(this._planHass,{...i})}_setMarkerLightRole(t){const e=this._markerDialog;e&&(this._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this._planEntityAvailable(t)};const e=t.slice(7),i=this._markers.find(t=>t.id===e),s=this._devices.find(t=>t.id===e);if(!i||i.removed||!0!==i.is_light)return{label:this._t("marker.control_missing_label"),sub:`${this._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const n=this._serverCfg?.spaces.find(t=>t.id===(s?.space||i.space)),o=!!s&&Jn(s).length>0;return{label:i.name||s?.name||e,sub:[n?.title||s?.space||i.space,i.room_id||s?.area,o?"":this._t("marker.control_passive")].filter(Boolean).join(" · "),icon:i.icon||s?.icon||"mdi:lightbulb-outline",warning:!0===i.hidden||!0===s?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this._t("marker.value_badge_state",{name:t.label});const i=this.hass.states[e.entity_id]?.attributes?.friendly_name||this._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this._t(`marker.value_badge_attr_${e.attribute}`,{name:i})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",i=[],s=new Set;for(const t of this._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this._bindingStatus(t.binding).kind)continue;const n=this._devices.find(e=>e.id===t.id);if(!n||n.hidden)continue;const o=this._controlRefInfo(`marker:${t.id}`);for(const t of Jn(n))s.add(t);i.push({value:`marker:${t.id}`,label:o.label,sub:o.sub,icon:o.icon,search:`${o.label} ${o.sub} ${t.id} ${Jn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ss(e)&&!s.has(e)&&Kn(t.binding,[e],this._bindingEntities(t.binding)).length>0&&this._planEntityAvailable(e)).map(t=>{const e=this._controlRefInfo(t);return{value:t,label:e.label,sub:t,icon:e.icon,search:`${e.label} ${t}`.toLowerCase()}}),o=t.controlsFilter.trim().toLowerCase();return[...i,...n].filter(e=>!t.controls.includes(e.value)&&(!o||e.search.includes(o))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const i=this._markerDraft(t)?.id||t.devId||"";if(!i)return void this._showToast(this._t("toast.marker_binding_required"));const s=e.slice(7),n=this._markerDraft(t);if(function(t,e,i){if(!e||e===i)return!0;const s=new Map;for(const e of t)s.set(e.id,(e.controls||[]).filter(t=>"string"==typeof t&&t.startsWith("marker:")).map(t=>t.slice(7)));const n=new Set,o=[i];for(;o.length;){const t=o.pop();if(t===e)return!0;n.has(t)||(n.add(t),o.push(...s.get(t)||[]))}return!1}(n?[...this._markers.filter(t=>t.id!==i),n]:this._markers,i,s))return void this._showToast(this._t("toast.marker_control_cycle"))}this._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this._markerDialog;if(!e)return;if("auto"===t)return void(this._markerDialog={...e,glowMode:t,glowTouched:!0});const i=this._markerSpatialSource(e),s=ks(i?this._planHass.states[i.eid]:void 0,null,this._fillColors.glow_light.c),n=!e.glowColorDrafted,o="fixed"===t&&!e.glowBrightnessDrafted;this._markerDialog={...e,glowMode:t,glowColor:n?s.c:e.glowColor,glowBrightness:o?Math.max(1,Math.round(100*s.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this._markerDialog,e="virtual"===t.bindingMode,i=this._bindingCandidates();this._bindingEntities(t.binding);const s=e?null:this._bindingStatus(t.binding),n=!e&&this._bindingHasHaPage(t.binding),o=this._markerPreviewDevice(t),a=this._effectiveMarkerTapAction(t,o),r=o?ls(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===a&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?_u(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:r?.showLqi??!1!==this._config?.show_signal,designPreview:!0,activityRuntime:this._activityRt.get(o.id),lightDevices:l,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}):null,u=o?Lo(this._planHass,o,l):[],p=o?Bo(this._planHass,o,u):null,_=t.valueBadgeTouched?t.valueBadgeEnabled:!!d?.valueBadge,g=t.valueBadgeTouched?t.valueBadgeSource:d?.valueBadge?.source||t.valueBadgeSource,m=t.valueBadgeTouched?t.valueBadgePosition:d?.valueBadge?.position||t.valueBadgePosition,f=Po(g),v=!!g&&!u.some(t=>t.key===f),y=u.find(t=>t.key===f),b=d?.valueSource?d.valueSource.attribute?`attr:${d.valueSource.eid}:${d.valueSource.attribute}`:`state:${d.valueSource.eid}`:"",w=this._markerAutoHasSpatialSource(t),k=!!o&&function(t,e){return Qn(t,e).some(t=>!!t.eid)}(this._planHass,{...o}),x=function(t,e,i,s){const n="always"===t||"auto"===t&&e,o=n&&!i;return{sourceExists:n,fromSourceEnabled:n&&i,manualEnabled:n,radiusEnabled:n,passive:o,effectiveMode:o&&"auto"===s?"fixed":s}}(t.lightRole,w,k,t.glowMode),$=!x.sourceExists,S=!x.fromSourceEnabled,M=x.passive,C=x.effectiveMode,D="never"===t.lightRole?this._t("marker.glow_disabled_never"):"auto"!==t.lightRole||w?M?this._t("marker.glow_passive_hint"):this._t("marker.glow_disabled_no_entity"):this._t("marker.glow_disabled_auto"),T=o?Jn(o):[],P=o&&Zn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?Wh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),F="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=F?[...F.targets,...F.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",z=(()=>{if(e)return null;const s=i.find(e=>e.value===t.binding);if(s)return s.label;const[n,o]=t.binding.split(":");return"device"===n?this._fullRegistryHass.devices[o]?.name_by_user||this._fullRegistryHass.devices[o]?.name||o:this._fullRegistryHass.entities[o]?.name||this.hass.states[o]?.attributes?.friendly_name||o})();return j``}_markerValueBadgeFields(t){return(e={touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition}).touched?{value_badge:{enabled:e.enabled,source:e.source,position:e.position}}:e.originalHas?{value_badge:e.original}:{};var e}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=Bs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Yn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),a={id:i,binding:t.binding,name:t.name.trim()||null,icon:t.icon||null,display:"badge"!==t.display?t.display:null,ripple_color:"icon_ripple"===t.display&&t.rippleColor?t.rippleColor:null,ripple_size:"icon_ripple"===t.display&&1.5!==t.rippleSize?t.rippleSize:null,size:1!==t.size?t.size:null,angle:t.angle||null,...this._markerTapActionFields(t),...this._markerToggleEntityFields(t),tap_target:"run"===o&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:n.length?n:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=f_(t.glowRadius);return null==e||e<=0?null:Math.round(this._imperial?30.48*e:100*e)})(),model:t.model.trim()||null,link:t.link.trim()||null,description:t.description.trim()||null,pdfs:t.pdfs,hidden:t.hideFromPlan,vacuum:s?.vacuum||null};return("virtual"===t.binding||t.room)&&(a.space=e?.space||("virtual"===t.binding?this._space:null),a.area=e?.area||null,a.room_id=e?.roomId||null),a}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const i=`${this._haRegistry.revision}\n${JSON.stringify(e)}`;if(this._markerPreviewMemo?.key===i)return this._markerPreviewMemo.device;const s=function(t){const{marker:e,...i}=t;return ko({...i,markers:[e]}).find(t=>t.id===e.id)||null}({hass:this.hass,registry:this._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,settings:this._settings,excluded:this._excluded,showAll:this._showAll,firstSpaceId:this._model[0]?.id||this._space,loc:t=>this._t(t),iconRules:this._iconRules});return this._markerPreviewMemo={key:i,device:s},s}_markerPreviewDevices(t){const e=this._markerPreviewDevicesMemo;if(e?.base===this._devices&&e.preview===t)return e.devices;const i=[...this._devices.filter(e=>e.id!==t.id),t];return this._markerPreviewDevicesMemo={base:this._devices,preview:t,devices:i},i}_toggleIntent(t,e=this._devices){return Qh({hass:this._planHass,registryHass:this._fullRegistryHass,devices:e,device:t,virtualLights:this._virtualLights})}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i=this._markerPreviewDevices(e);return this._toggleIntent(e,i)}_toggleStateText(t,e){const i=this._planHass?.states?.[t]||this.hass?.states?.[t];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):e}catch{return e}}_toggleConfirmationStateText(t){const e=String(t.state||"unknown"),i=t.entityId?this._toggleStateText(t.entityId,e):e;if(i.trim().toLocaleLowerCase()!==e.trim().toLocaleLowerCase())return i;const s={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[e];return s?this._t(s):e.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(t){const e={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(t,e){if(!ed(t)||!t.nextEffect||!t.targets.length)return[];const i="group"===t.kind,s=i?t.targets.filter(t=>"on"===t.state).length:0,n=i?0===s?e.groupAllOff():e.groupCurrent(s,t.targets.length):e.state(t.targets[0]);let o;return o="toggle"===t.nextEffect?e.expectedByHa():i&&"turn-on"===t.nextEffect?e.groupAllOn():i&&"turn-off"===t.nextEffect?e.groupAllOff():e.effect(t.nextEffect),[e.current(n),e.expected(o),...t.skippedTargets.length?[e.unavailable(t.skippedTargets.length)]:[]]}(t,{state:t=>this._toggleConfirmationStateText(t),current:t=>this._t("confirm.current_state",{state:t}),expected:t=>this._t("confirm.expected_state",{state:t}),groupCurrent:(t,e)=>this._t("confirm.group_current",{on:t,total:e}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:t=>this._t("confirm.unavailable_targets",{count:t}),effect:t=>this._t(e[t]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(t){if(!t)return[];const e=t=>this._t(`marker.toggle_effect_${t.replace("-","_")}`),i=t=>this._t(`marker.toggle_skip_${t.replace("-","_")}`);return function(t,e){const i=t.targets[0]||t.skippedTargets[0],s=[];return"group"===t.kind?t.targets.length&&s.push(e.group(t.targets)):i&&s.push(e.single(i)),t.nextEffect&&t.targets.length&&s.push("group"===t.kind?e.groupCurrentNext(t.targets,t.nextEffect):e.currentNext(t.targets[0],t.nextEffect)),t.skippedTargets.length&&s.push(e.skipped(t.skippedTargets)),!t.command&&t.noneReason&&s.push(e.none(t.noneReason)),s}(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),i=t.name||e;return this._t("marker.toggle_hint_single",{name:i,id:e})},group:t=>this._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,i)=>"virtual-light"===t.via?this._t("marker.virtual_light_current",{state:this._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(i)}):this._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(i)}),groupCurrentNext:(t,i)=>this._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(i)}),skipped:t=>this._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${i(t.reason)})`}).join(", ")}),none:t=>this._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:Yh(t.originalHasTapAction?t.originalTapAction:null,e)}_effectiveMarkerTapAction(t,e=this._markerPreviewDevice(t)){return this._effectiveStoredTapAction(t,e?.primary?.split(".")[0])}_announceToggleDraft(t){const e=this._markerPreviewDevice(t),i=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},s="toggle"===i.tapAction?this._toggleHintLines(this._toggleIntentForDialog(i)).join(" "):"";return{...i,tapHintAnnouncement:s}}_valueBadgeForBinding(t,e){const i={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},s=this._markerPreviewDevice(i);if(!s)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const n=[...this._devices.filter(t=>t.id!==s.id),s],o=Lo(this._planHass,s,n),a=Bo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!a,valueBadgeSource:a,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return lo(ro(this._planHass,[...this._devices.filter(t=>t.id!==i.id),i],null,this._virtualLights).filter(t=>t.device.id===i.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},i=this._markerPreviewDevice(e);return!!i&&oo(this._planHass,{...i})}_setMarkerLightRole(t){const e=this._markerDialog;e&&(this._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this._planEntityAvailable(t)};const e=t.slice(7),i=this._markers.find(t=>t.id===e),s=this._devices.find(t=>t.id===e);if(!i||i.removed||!0!==i.is_light)return{label:this._t("marker.control_missing_label"),sub:`${this._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const n=this._serverCfg?.spaces.find(t=>t.id===(s?.space||i.space)),o=!!s&&Jn(s).length>0;return{label:i.name||s?.name||e,sub:[n?.title||s?.space||i.space,i.room_id||s?.area,o?"":this._t("marker.control_passive")].filter(Boolean).join(" · "),icon:i.icon||s?.icon||"mdi:lightbulb-outline",warning:!0===i.hidden||!0===s?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this._t("marker.value_badge_state",{name:t.label});const i=this.hass.states[e.entity_id]?.attributes?.friendly_name||this._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this._t(`marker.value_badge_attr_${e.attribute}`,{name:i})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",i=[],s=new Set;for(const t of this._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this._bindingStatus(t.binding).kind)continue;const n=this._devices.find(e=>e.id===t.id);if(!n||n.hidden)continue;const o=this._controlRefInfo(`marker:${t.id}`);for(const t of Jn(n))s.add(t);i.push({value:`marker:${t.id}`,label:o.label,sub:o.sub,icon:o.icon,search:`${o.label} ${o.sub} ${t.id} ${Jn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ss(e)&&!s.has(e)&&Kn(t.binding,[e],this._bindingEntities(t.binding)).length>0&&this._planEntityAvailable(e)).map(t=>{const e=this._controlRefInfo(t);return{value:t,label:e.label,sub:t,icon:e.icon,search:`${e.label} ${t}`.toLowerCase()}}),o=t.controlsFilter.trim().toLowerCase();return[...i,...n].filter(e=>!t.controls.includes(e.value)&&(!o||e.search.includes(o))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const i=this._markerDraft(t)?.id||t.devId||"";if(!i)return void this._showToast(this._t("toast.marker_binding_required"));const s=e.slice(7),n=this._markerDraft(t);if(function(t,e,i){if(!e||e===i)return!0;const s=new Map;for(const e of t)s.set(e.id,(e.controls||[]).filter(t=>"string"==typeof t&&t.startsWith("marker:")).map(t=>t.slice(7)));const n=new Set,o=[i];for(;o.length;){const t=o.pop();if(t===e)return!0;n.has(t)||(n.add(t),o.push(...s.get(t)||[]))}return!1}(n?[...this._markers.filter(t=>t.id!==i),n]:this._markers,i,s))return void this._showToast(this._t("toast.marker_control_cycle"))}this._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this._markerDialog;if(!e)return;if("auto"===t)return void(this._markerDialog={...e,glowMode:t,glowTouched:!0});const i=this._markerSpatialSource(e),s=ks(i?this._planHass.states[i.eid]:void 0,null,this._fillColors.glow_light.c),n=!e.glowColorDrafted,o="fixed"===t&&!e.glowBrightnessDrafted;this._markerDialog={...e,glowMode:t,glowColor:n?s.c:e.glowColor,glowBrightness:o?Math.max(1,Math.round(100*s.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this._markerDialog,e="virtual"===t.bindingMode,i=this._bindingCandidates();this._bindingEntities(t.binding);const s=e?null:this._bindingStatus(t.binding),n=!e&&this._bindingHasHaPage(t.binding),o=this._markerPreviewDevice(t),a=this._effectiveMarkerTapAction(t,o),r=o?ls(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===a&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?_u(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:r?.showLqi??!1!==this._config?.show_signal,designPreview:!0,activityRuntime:this._activityRt.get(o.id),lightDevices:l,registryHass:this._fullRegistryHass,reducedMotion:this._reducedMotion}):null,u=o?Lo(this._planHass,o,l):[],p=o?Bo(this._planHass,o,u):null,_=t.valueBadgeTouched?t.valueBadgeEnabled:!!d?.valueBadge,g=t.valueBadgeTouched?t.valueBadgeSource:d?.valueBadge?.source||t.valueBadgeSource,m=t.valueBadgeTouched?t.valueBadgePosition:d?.valueBadge?.position||t.valueBadgePosition,f=Po(g),v=!!g&&!u.some(t=>t.key===f),y=u.find(t=>t.key===f),b=d?.valueSource?d.valueSource.attribute?`attr:${d.valueSource.eid}:${d.valueSource.attribute}`:`state:${d.valueSource.eid}`:"",w=this._markerAutoHasSpatialSource(t),k=!!o&&function(t,e){return Qn(t,e).some(t=>!!t.eid)}(this._planHass,{...o}),x=function(t,e,i,s){const n="always"===t||"auto"===t&&e,o=n&&!i;return{sourceExists:n,fromSourceEnabled:n&&i,manualEnabled:n,radiusEnabled:n,passive:o,effectiveMode:o&&"auto"===s?"fixed":s}}(t.lightRole,w,k,t.glowMode),$=!x.sourceExists,S=!x.fromSourceEnabled,M=x.passive,C=x.effectiveMode,D="never"===t.lightRole?this._t("marker.glow_disabled_never"):"auto"!==t.lightRole||w?M?this._t("marker.glow_passive_hint"):this._t("marker.glow_disabled_no_entity"):this._t("marker.glow_disabled_auto"),T=o?Jn(o):[],P=o&&Zn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?Wh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),F="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=F?[...F.targets,...F.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",z=(()=>{if(e)return null;const s=i.find(e=>e.value===t.binding);if(s)return s.label;const[n,o]=t.binding.split(":");return"device"===n?this._fullRegistryHass.devices[o]?.name_by_user||this._fullRegistryHass.devices[o]?.name||o:this._fullRegistryHass.entities[o]?.name||this.hass.states[o]?.attributes?.friendly_name||o})();return j`this._markerDialog=null}>
@@ -6674,11 +6693,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182 -

${this._t(u_[t.display])}

+

${this._t(p_[t.display])}

${"static_icon"===t.display&&this._bindingHasAlarm(t.binding)?j`
${this._t("marker.static_alarm_warning")} @@ -6780,7 +6799,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="cbfb54d4fcba73572180857de759b4def182
${t.pdfs.map(t=>j` - ${t.name} + ${t.name} this._removeMarkerPdf(t.url)}>`)} `}
- `}}N_.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_hoverRoom:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeDraftId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_openWallAnchor:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_alignDialog:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},N_.ZOOM_MAX=8,N_.ZOOM_MIN=1/3,N_._touchSeen=!1,N_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,N_.styles=[Kt,qu],customElements.get("houseplan-card")||customElements.define("houseplan-card",N_),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${h_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}N_.properties={_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_tapConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_hoverRoom:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeDraftId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_rszSel:{state:!0},_rszLive:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_openWallAnchor:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_alignDialog:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},N_.ZOOM_MAX=8,N_.ZOOM_MIN=1/3,N_.styles=[Kt,ju],customElements.get("houseplan-card")||customElements.define("houseplan-card",N_),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${d_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 84d84fc7..842e0abc 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +- Device markers are now 10% more compact without moving their saved centres or + shrinking the 44×44 px interaction floor, and wide Text markers keep uniform + capsule insets. A real toggle/run dispatch gives a smooth 5% press response + for 200 ms (with a reduced-motion alternative). Touch and pen no longer leave + room, marker or shared-control hover stuck; a real mouse restores hover on + hybrid hardware without reloading ([#212](https://github.com/Matysh/houseplan-card/issues/212)). + ## v1.65.0-beta.7 — 2026-08-20 - A card instance can now be pinned to one space with `floor`: use a stable diff --git a/docs/CHANGELOG.ru.md b/docs/CHANGELOG.ru.md index d8f433a0..11e36c10 100755 --- a/docs/CHANGELOG.ru.md +++ b/docs/CHANGELOG.ru.md @@ -8,6 +8,14 @@ ## Не выпущено +- Маркеры устройств стали на 10% компактнее без сдвига сохранённого центра и + без уменьшения области нажатия 44×44 px; широкий Text-маркер получил ровные + отступы капсулы. Реальная отправка toggle/run-команды даёт плавный отклик + уменьшением на 5% за 0,2 с с отдельным вариантом для reduced motion. Касание + пальцем или пером больше не оставляет hover комнаты, маркера и общих контролов + «прилипшим», а настоящая мышь возвращает hover на гибридном устройстве без + перезагрузки ([#212](https://github.com/Matysh/houseplan-card/issues/212)). + ## v1.65.0-beta.7 — 2026-08-20 - Экземпляр карточки теперь можно закрепить за одним пространством параметром diff --git a/docs/TESTING.md b/docs/TESTING.md index d7d22523..5020abdc 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -61,6 +61,26 @@ sizes 32/56/96 and colored backgrounds. Full smoke/golden/performance remains a Linux release gate. +## Device marker polish and pointer modality (#212) + +- [ ] Shared icon geometry applies one 0.9 visual factor after card/per-marker + sizing, keeps the saved centre and 44×44 hit floor unchanged, and gives + wide Text cores a radius equal to half their height + [unit: `device-marker-polish-contract.test.mjs`; auto: + `smoke_device_icon_design.mjs`]. +- [ ] Only a genuinely dispatched toggle/run action produces one + `1 → .95 → 1` feedback cycle lasting 200 ms. Info, editor, confirmation + before acceptance, unavailable/secure/no-target and cancelled gestures do + not; reduced motion has no scale tween + [auto: `smoke_device_icon_design.mjs`]. +- [ ] Pointer authority is isolated per card. Touch/pen and compatibility mouse + input clear JS/CSS hover, while a later real mouse restores it only on + fine/hover hardware; mode/space/visibility/disconnect cleanup remains + bounded [unit: `pointer-modality.test.mjs`; auto: `smoke_feedback_v2.mjs`]. +- [ ] Pre-beta visual review covers Light/Dark desktop and touch matrices for + ordinary, Text, Double, unavailable and vacuum markers; full golden and + performance gates remain release work. + ## Empty-space lifecycle (#113) - [ ] Active selection keeps active-or-first compatibility, while an empty @@ -384,9 +404,10 @@ missing destructive confirmation or an editor exception that breaks View. Room settings [auto: smoke_feedback_v2] - [ ] Metrics readability (v1.43.3): the metrics line is 0.75 of the room name (was 0.62 — unreadable on tablets); per-room sliders still apply on top [auto: smoke_feedback_v2] -- [ ] Touch tooltips, take two (v1.43.3): a hover tooltip never appears after - ANY touch/pen pointer event, even if the browser claims `hover: hover` - (stylus, paired mouse, vendor skins) [auto: smoke_feedback_v2] +- [ ] Touch tooltips: touch/pen immediately clears hover even if the browser + claims hover support; compatibility mouse is ignored, while a later real + paired-mouse event restores desktop hover without reload + [auto: smoke_feedback_v2] - [ ] Light-source flag (v1.44.0, user feedback): a smart SWITCH driving dumb fixtures creates a Glow pool only once "This device is a diff --git a/docs/TOUCH-SUPPORT.md b/docs/TOUCH-SUPPORT.md index eea7cada..9d6a02de 100644 --- a/docs/TOUCH-SUPPORT.md +++ b/docs/TOUCH-SUPPORT.md @@ -40,6 +40,17 @@ On phones, tablets, wall panels and HA Companion apps, the ordinary View must: A touch-only failure in View is a product defect, not an accepted limitation of the editor policy. +## Pointer modality and hover ownership + +Hover is instance-local and follows the latest real pointer input. It is +enabled only after a mouse event when the browser also reports fine, +hover-capable hardware. Touch and pen input immediately clear transient room +and device hover, including tooltips; browser-generated compatibility mouse +events must not restore it. A later real mouse move on a hybrid device restores +desktop hover without a reload. Space/mode changes, page hiding and remounts +also discard transient hover. Keyboard focus and explicit click/tap surfaces +remain independent of this visual hover gate. + ## What “best-effort editors” means On a coarse-pointer or no-hover device, an editor operation may: diff --git a/docs/USER-GUIDE.ru.md b/docs/USER-GUIDE.ru.md index 30a6fc67..cd5e7124 100644 --- a/docs/USER-GUIDE.ru.md +++ b/docs/USER-GUIDE.ru.md @@ -558,6 +558,11 @@ House Plan читает реестры устройств, сущностей и После первичного заполнения новые устройства отмечаются красной точкой. Точка исчезает после первого открытия маркера в редакторе устройств. +Визуальная часть маркера рисуется на 10% компактнее выбранного базового и +индивидуального размера; сохранённая точка остаётся его центром, а область +нажатия не уменьшается. У режима **Значение** внутренняя подложка числа имеет +ровные полукруглые торцы и одинаковый отступ внутри внешнего shell. + ### Виды привязки | Вид | Что выбирается | Особенности | @@ -687,6 +692,13 @@ HA. «Показать» заблокировано до активации. П | Долгое нажатие, 600 мс | Открывает внутреннюю карточку House Plan | Не используется для управления | | Правый клик | Открывает стандартный HA more-info основной сущности | Открывает контекст редактора/браузера по текущему поведению | +Когда короткое нажатие действительно отправляет команду устройству, маркер +мягко уменьшается на 5% и возвращается за 0,2 секунды. Открытие информации, +редактора или подтверждения само по себе такого отклика не даёт; при включённом +подтверждении он появляется только после согласия и фактической отправки +команды. При системной настройке уменьшения движения масштабирование заменено +коротким немигающим акцентом. + ### Действия | Действие | Что происходит | Защита | @@ -753,6 +765,11 @@ hover → состояние → нейтрально**. Если все сущ настройки. У медиаплеера `off` используется то же приглушённое отображение, что `unknown` и `unavailable`, без отдельного визуального состояния. +Hover включается только после события от настоящей мыши на устройстве, которое +поддерживает точный hover. Касание пальцем или пером сразу снимает подсказку и +подсветку и не оставляет их «прилипшими»; последующее движение реальной мыши +возвращает desktop-hover без перезагрузки страницы. + ### Подложка и постоянный статус | Вид | Что означает | Примеры | diff --git a/docs/UX-MODES.md b/docs/UX-MODES.md index 6413c728..8fc7cb3f 100644 --- a/docs/UX-MODES.md +++ b/docs/UX-MODES.md @@ -71,6 +71,14 @@ the only way to operate a lock from the card; plan-icon taps never toggle locks) room-card link icon → HA area (room taps do nothing since v1.40.1), room hover highlight, hover tooltips (name, clean-floor area, temperature, signal). +Room, device, opening and shared-control hover is a mouse-only transient layer: +the card enables it per instance after real mouse input on fine/hover hardware, +clears it on touch/pen and on mode, space or lifecycle boundaries, and restores +it when a real mouse is used again. Keyboard focus, selection and semantic +device state do not depend on that gate. A device action that actually dispatches +briefly scales its painted shell to 95% and back over 200 ms; informational, +editor and no-op paths do not imitate a successful action. + Removed from this mode (they move, not die): - icon dragging ("drag anywhere", v1.9 — consciously reversed), - room-label dragging, diff --git a/docs/images/01-view-desktop.png b/docs/images/01-view-desktop.png index 618c95fc6d2f70dd5d2efd637a33ac75d951ad33..3b3cb13dbe377e4f0926634cc0d012b4f2fcfcca 100644 GIT binary patch delta 150867 zcmYhCgUXw< z$qa6)gaU4%C%(?&?o~c5zu6WyE&dtJMJ7pBsO+k-C3E0!8boT=R6i<<#a)k>1Hp||5;O06E_=gQiC4mdnO=q{l|L=lLp2-fW64Aq4%6d2@AIn??SHc zC1jMg{;zaqw>CFKQqtAe1#AhFw%>-iV$4jNNYs1J2kpGd5Pls1ofrwd;4J#-T9yRE z%rNK)X-#pA`5wNk*v9yIO}FR4sWXby!_l4Z^ExqY(`sr>_G`XJ)3wPc8~g8$>O8?n zUy!ROz@#fWILAFZ56xLY1!M77S5L3Ye4#<|tWe4A& z{#9d1VSpAEYiX#I1*){Z+B(5w2!eySYwe$8!Jwo?c|2odD%`UCKsdw)NNkrjfnKXSJWUg;ws)(oVR5b%YHL6zjm`iPHsy1ye6c-vU z`~+1$Zd3wT4IV{~GkfJNvF&nQ9x+UAWblUtq-fGg4R>+k)$AWY@i!E)a~B#fT(gA> zO~wh(`2h>}lC#*%EkS;nz$WS4Teyn>R6_Zgd9JCTB)PzAczBj_ZRNd6$jR<($U7dW z}~PyeVbel&F%SGTs>2^SAM%&Wq5vAO{K2t zZ(BVqtrQ3TA#zm~R@8PoY*Ji2 z#ZXY?nBr!QVBin!Ivib5u1jK>NTS2F4%dKqt_a9PKs7fI{n7`@W|OTK6|0Q zUp*s=+1~n4)noa9xC$*c@tAf@%-)lA`stR9)zG+QM#o8NsDj_UvFSU|p2QcIZ0-bX zhy|EVk-@6mDOgU#X|xgZy;Ox7{lZ zyk+r!ZiwxSu$0G&qiSnKRfewn_!Zke$74v=_BAkJ7uNk)vw=oCmZ z-EoO$qLwSmMVEh8 zsrrBe&FDW~db7hQZW;EY@?(NbfX@#CHTB>JMroCU3bFKwRo)>C^x?03&Zt()DelhQ zR!CFqMDtO!cFPZa?-?%)eGc^5Ra2rAqQwIiRsR29(G@?$-_?P9g( zz?K{pE_XcQI?iI7ucal?$JV=~v6_yy)&J>4d+p14@kY3;_yN9)tH*k86!2w_iD$67 zU@6-;^w%BxQ|2SzsxQDa!!4$kxwXZtn%w+udh#po#q=j*PYg){kH6g)p9H`GO^&2J z3;|X=Ow|`0o=SFdX%erOG>>1({dq3`w6ChP3!^55tERICy>`n$`s{MW^SPB0QWPT7 ztAU}mZJ82qeqX=F5}!bHPr%-R<#zQwv%XhmvMLc9QrOxb#^wz;-hl0Wi9p${%=;t+ z{h@aAi9>Cd!}UL;CR7oJ¯)j!``_|4JCgrZ++rLiza0;uE&$A!RddsK~RIV1D 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 Dgi&7D diff --git a/docs/images/02-view-touch.png b/docs/images/02-view-touch.png index d612dd2b12621739f7b3157efb026138b0dc224c..d88d058c63e55626ab9a65be95f2e82af4be69bb 100644 GIT binary patch literal 63560 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 JTvY%2{{f}Cpbr25 diff --git a/docs/images/06-device-display-preview.png b/docs/images/06-device-display-preview.png index 41b0b0b15063be8363f530cf68e3452100884149..9498804eb8f19a9cebd2f583faf62438786c0aeb 100644 GIT binary patch delta 250304 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�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%0DCKaH(j91op7HKdZ-Ds9F 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 diff --git a/docs/images/06-device-editor.png b/docs/images/06-device-editor.png index e4a162ed63838e95b4edaed238246e1d7e9cc4b1..c3688169f51a52c7b91d00c735f988addfcff660 100644 GIT binary patch delta 248635 zcmX_{by$;O`@dC?9-Sixs30wq?nXKUlt#K!nuqQfjnWMwp>%gihji!Y?)uI5{l35F z*gtTvgKf|5`?{{rdEQgS_}$;}E2ioI??b0}soX{uxg_Qr+fUdv?L1t_)=6@a=qp`q z$;ZLENuUjd>o_)8n{5Y4hh3|Vo&k3%^QR8{L9iA@h<#KyrsjE`Q;+4$=0E)a>1EV&BH-Hu1V zGdPHh*Trt-9D)bxGKXQpf@vfyMDVdPaiGUuqsP;$S|VT`8S#XGacEAyz3bcuMI@$2 z_Bckq4JK8jH#qIdJ>mF2HY$Jv<$e&D%`tS`OUIfn!&j<`(7BsEcgzSXGA*f5?%>@| z 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 $|Ebu70 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 delta 250535 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≷ais-KdohnXQ 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 bK~w_(4UWJmChN)@00000NkvXXu0mjf%mr)* diff --git a/docs/images/09-device-info.png b/docs/images/09-device-info.png index a5f31a413e08bf50008beeef9cb6c5ef67095a0e..0902f04da9860901de1273ecda6429820680147e 100644 GIT binary patch literal 136817 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 literal 138425 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

      Z4&y@?^PI>8=j| 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

      pWY<6nb`2wRSZXZ4QiQ>; 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⋘UqS7 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%0A0I zB`cAyl%O09dEI~Z*SAx*@N^{GBKu9fitF$uM4w0(PcERUQk&9f&2wqVk0Z+CNxq5K z$4zEb%ICpBW~)&JB~Nw!{xvx*alTz1_0YGUB+Bbg^0!vpMsK~b^8P+Zz<|~hCNkKB z-Xb2Y<%Q*oHdhrZeWUFVYO&Yw`~rlh5-{)6fB|=!4;Lmp4P2K&v3d=bIxz*=!5)5i zrQT~!a`bc$ZX$8b(Cw}_O?a&n*@p**2dVNs<5P}&S1D1F!N27`2cQQDyMIlfczBhV z5(^xQp#*t$DMZ~oR)Rs7Z^&FX83YK)&_ni4p;$4V13hS4cbk;=1Pw=kB8bxOO!4Ek zg5n8HDdn*X%bOkWv8)z8Y8Q}m2kc9`49It6nyEBI)lE$oMU4Z?&BRh+G8$U*lk(ff zK#CS;!x;U0QcX0OKL5Q4sSQwmuG|cI2(qNBs?4cqi{)E0wxKU%TcW2*jd<^io!Txx z1IQqO5;AzYYxqp-A%fuHKunO;y|>3-g|cu%`l_nrS4I|p9=3abWBheWQtF!aA zIHVfZ^Y3Z#q2}9lCuZNDSpb}F1QU&i5BKA49v%;JKt}htBtHBiFY)&_0mqoc!T!74 z0RL?_1iFWDmw69s=fj32h)O}HX>3@3P6zl+KP*bZcrXL+-~A5DBT-c~3;et5k{)Ks zvoz{Vny>%<6p2H>*{DwX;pXp7f!FeYJKsZfIM{3u5X=5K5}G#LI&R{c;Gc*2@w_xt zPbTR`nV-2ks3g_pmT9_xGPhQ}tkAV2~cFU3i$KA#+Oe9-9W>7Z^oZHJM7O HSAqWrjRm}I diff --git a/docs/images/screenshots.json b/docs/images/screenshots.json index 3be57e86..be210f43 100644 --- a/docs/images/screenshots.json +++ b/docs/images/screenshots.json @@ -1,7 +1,7 @@ { "version": 1, "fixture": "synthetic-only", - "sourceFingerprint": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", + "sourceFingerprint": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", "captureScriptSha256": "34f2219790d46efd8250e7a1bd829cb8fc0b0547e1260635fefa52407551b41b", "command": "npm run build && node demo/docs/capture.mjs", "scenarios": { @@ -13,8 +13,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", - "imageSha256": "4fba7e8a5da04bbb92d747530c76c2447bb9989daf55ad5fcd26208b0145b7c9" + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", + "imageSha256": "8780c6f05a9f2af55b97512dfa8d277bb77ab9ae0dafb50640cc3237028055dc" }, "view-touch": { "file": "02-view-touch.png", @@ -24,8 +24,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", - "imageSha256": "60153a758d9cedff1b938e79db90471cfe47f104858d7ef729f1dae1db48c49f" + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", + "imageSha256": "5e41c81ded9eb67deea49840c260eaaa404cab61abf014a1a275586dafe66e53" }, "space-create": { "file": "03-space-create.png", @@ -35,7 +35,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", "imageSha256": "c53db2e5c642a5549c13f3c93a5b359fed69bdb2621bf71a243a877ffcb95e6b" }, "room-contour-close": { @@ -46,7 +46,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", "imageSha256": "2f13ea645af306eee9cc7c52699c928377b72f412b08c1a3db6beb848ace1b51" }, "plan-context-tray": { @@ -57,7 +57,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", "imageSha256": "a6c526fede11bc3503fd2384bd4a3f6afa008f481c5c47578f06cae6c81c6f9b" }, "device-editor": { @@ -68,8 +68,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", - "imageSha256": "ba778862a50661784ec4ff28bb299d112701d77c1b5b6e8533535073c42d530e" + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", + "imageSha256": "bfba4647c04bdf4b46dc9cea3b42e349b3ea67007bb38e16880983dbee14653e" }, "device-display-preview": { "file": "06-device-display-preview.png", @@ -79,8 +79,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", - "imageSha256": "a51f030125e08ce596e8a7339d471f587d5c45a2f27bbd1ff008d6516d48caed" + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", + "imageSha256": "8cdfe00ead5558d013265617104997fdd138337322aa82f6a3e1d15eeb36cf5e" }, "background-editor": { "file": "07-background-editor.png", @@ -90,7 +90,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", "imageSha256": "d7cfe70551d9260169df8efd832e32ed7df99c7f60b55d1fd4a8322bd4c47175" }, "room-card": { @@ -101,8 +101,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", - "imageSha256": "c77649bf0ab595be3c7a86fa38d96b94a02823ee44367ca3229c713f282639e4" + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", + "imageSha256": "ab29f6fdb31d3117e935a93a237105d42a5103687ac892ef426a4887ae7960c4" }, "device-info": { "file": "09-device-info.png", @@ -112,8 +112,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "cbfb54d4fcba73572180857de759b4def182c2d4487a9996d70b7aa7d8bf91d9", - "imageSha256": "efe0dfa845e1f6b0a870ce861e7ed92cd65166a4d144b7c8ddc6ed0f71b12b2f" + "sourceSha256": "040ec09a494568481fd2a4853a4dd8183c7950152dc9674d0a458a323f8bdf21", + "imageSha256": "30bf3f2a1311fc2bffeac6359773925fea22150df2845015c630e009016f095f" } } } diff --git a/docs/specs/212-device-icons-polish.md b/docs/specs/212-device-icons-polish.md index 60795b67..0d4db1fa 100644 --- a/docs/specs/212-device-icons-polish.md +++ b/docs/specs/212-device-icons-polish.md @@ -547,3 +547,6 @@ radius, feedback и hover path. Данных, backend migration и rollback stor `cubic-bezier(.22,.61,.36,1)`; exact easing не является config surface. 7. Reduced-motion accent использует существующий theme/focus token и один painted-frame owner, не новую пользовательскую строку. +8. Формулировка #22 `plan-wide setting` означает одну общую политику feedback + для всех actionable markers плана, а не новую пользовательскую настройку + либо per-marker override. diff --git a/scripts/mutation-gate.mjs b/scripts/mutation-gate.mjs index c7c35726..d22202f3 100644 --- a/scripts/mutation-gate.mjs +++ b/scripts/mutation-gate.mjs @@ -572,6 +572,54 @@ export const MUTANTS = [ replace: ' if (d.primary) this._openMoreInfo(d.primary);', }], }, + { + id: 'device-visual-factor-removed', + guard: 'node --test --test-name-pattern="issue 212 applies one visual" ' + + 'test/device-marker-polish-contract.test.mjs', + because: 'the owner-requested 10% correction must stay in the shared marker geometry ' + + 'without changing stored icon_size or the interaction target', + patches: [{ + file: 'src/styles.ts', + find: ' --device-visual-factor: 0.9;', + replace: ' --device-visual-factor: 1;', + }], + }, + { + id: 'device-text-capsule-radius-restored', + guard: 'node --test --test-name-pattern="issue 212 Text value" ' + + 'test/device-marker-polish-contract.test.mjs', + because: 'a wide Text core must keep a radius based on its height instead of reverting ' + + 'to the elliptical 50% rule', + patches: [{ + file: 'src/styles.ts', + find: ' border-radius: calc(var(--dev-size, var(--icon-size, 2.5cqw)) / 2);', + replace: ' border-radius: 50%;', + }], + }, + { + id: 'device-press-duration-drifted', + guard: 'node --test --test-name-pattern="issue 212 feedback" ' + + 'test/device-marker-polish-contract.test.mjs', + because: 'accepted device actions must retain the owner-specified bounded 200 ms feedback ' + + 'instead of silently drifting with unrelated animation timings', + patches: [{ + file: 'src/houseplan-card.ts', + find: ' duration: 200,', + replace: ' duration: 350,', + }], + }, + { + id: 'device-touch-hover-gate-removed', + guard: 'node --test --test-name-pattern="issue 212 removes the global touch latch" ' + + 'test/device-marker-polish-contract.test.mjs', + because: 'touch must not leave a browser-matched device hover painted after the JS tooltip ' + + 'has already been cleared', + patches: [{ + file: 'src/styles.ts', + find: ' :host([data-pointer-hover]) .dev:not(.unavail):hover {', + replace: ' .dev:not(.unavail):hover {', + }], + }, ]; // --- механика --------------------------------------------------------------- diff --git a/src/houseplan-card.ts b/src/houseplan-card.ts index 950ddd02..7d4e7767 100755 --- a/src/houseplan-card.ts +++ b/src/houseplan-card.ts @@ -192,6 +192,7 @@ import { visualFrameFingerprint, type PageVisibilitySignal, } from './visual-continuity'; +import { PointerModalityController } from './pointer-modality'; import { entityVisualSample, entityVisualSamplesForDevice, type DeviceActivity, type DeviceVisualState, type EntityVisualSample, @@ -729,6 +730,12 @@ class HouseplanCard extends LitElement { /** Room whose physical perimeter is highlighted in View. The explicit * overlay is needed because thick wall bodies paint above room shapes. */ private _hoverRoom: { space: string; room: RoomCfg } | null = null; + private readonly _pointerModality = new PointerModalityController( + this, + () => this._syncPointerHoverTargets(), + ); + private _pointerHoverObserver?: MutationObserver; + private _devicePressAnimations = new Map(); private _selId: string | null = null; private _toast = ''; private _toastTimer?: number; @@ -860,6 +867,7 @@ class HouseplanCard extends LitElement { private _motionMedia?: MediaQueryList; private _onMotionChange = (event: MediaQueryListEvent): void => { this._reducedMotion = event.matches; + this._cancelDevicePressFeedback(); // A preference change to reduced motion is authoritative immediately: do // not leave a 220 ms camera/chrome tween running until its old deadline. if (event.matches && this._modeTransitionPreparing) { @@ -1181,6 +1189,10 @@ class HouseplanCard extends LitElement { private _commitSpace(id: string, authority = false): boolean { if (!this._canCommitSpace(id, authority)) return false; + if (id !== this._space) { + this._clearTransientHover(true); + this._cancelDevicePressFeedback(); + } this._space = id; return true; } @@ -1755,6 +1767,8 @@ class HouseplanCard extends LitElement { this._continuity.visibility(signal); this._dayCycleVisibility(signal); if (signal.kind === 'hidden') { + this._clearTransientHover(true); + this._cancelDevicePressFeedback(); if (this._modeTransitionPreparing) { // There is no measured controller endpoint to commit yet. Keep the // already queued measurement but force its synchronous atomic path; @@ -1994,6 +2008,16 @@ class HouseplanCard extends LitElement { this._continuityUnsub?.(); this._continuityUnsub = subscribePageVisibility(this.ownerDocument, this._pageVisibility); super.connectedCallback(); + this._pointerModality.connect(this.ownerDocument.defaultView); + const PointerHoverObserver = this.ownerDocument.defaultView?.MutationObserver; + if (PointerHoverObserver) { + this._pointerHoverObserver = new PointerHoverObserver((records) => { + for (const record of records) { + for (const node of record.addedNodes) this._syncPointerHoverSubtree(node); + } + }); + this._pointerHoverObserver.observe(this.renderRoot, { childList: true, subtree: true }); + } this._motionMedia = window.matchMedia?.('(prefers-reduced-motion: reduce)'); this._reducedMotion = !!this._motionMedia?.matches; this._motionMedia?.addEventListener?.('change', this._onMotionChange); @@ -2164,6 +2188,11 @@ class HouseplanCard extends LitElement { this._touchContacts.clear(); this._touchSequenceMultitouch = false; this._touchClickBlockUntil = 0; + this._clearTransientHover(true); + this._cancelDevicePressFeedback(); + this._pointerHoverObserver?.disconnect(); + this._pointerHoverObserver = undefined; + this._pointerModality.disconnect(); this._editorSecondary.reset(); // R1: the rAF is the only normal owner that clears this flag. Reset only // after the disconnect snapshot (which must still skip unstable geometry), @@ -3388,6 +3417,7 @@ class HouseplanCard extends LitElement { } protected updated(): void { + this._pruneDevicePressFeedback(); this._syncDayCycleClock(); this._warmSnapshot(); // DEV-B703-03: the memo follows what is on screen this._dtMeasure(); // the selected label's frame follows the glyphs @@ -4639,6 +4669,7 @@ class HouseplanCard extends LitElement { const operation = toggleOperation(intent); if (!operation) return; if (operation.kind === 'virtual-light') { + this._startDevicePressFeedback(actionDevice.id); this.hass.callWS({ type: 'houseplan/virtual_light/toggle', marker_id: operation.markerId, @@ -4655,6 +4686,7 @@ class HouseplanCard extends LitElement { return; } const { command } = operation; + this._startDevicePressFeedback(actionDevice.id); this.hass.callService(command.domain, command.service, command.data) .catch((e: any) => this._showToast(this._t('toast.error', { err: this._errText(e) }))); }; @@ -4704,6 +4736,7 @@ class HouseplanCard extends LitElement { const name = st.attributes?.friendly_name || target; guarded(this._t('confirm.tap_run', { name }), () => { if (!this._deviceBindingActive(actionDevice) || !this._planEntityAvailable(target)) return; + this._startDevicePressFeedback(actionDevice.id); this.hass .callService(svc.domain, svc.service, { entity_id: target }) .then(() => { @@ -4731,6 +4764,65 @@ class HouseplanCard extends LitElement { this._clickDevice(ev, d); } + /** One retargetable visual acknowledgement owned by actual action dispatch. */ + private _startDevicePressFeedback(markerId: string): void { + const marker = [...this.renderRoot.querySelectorAll('.dev[data-id]')] + .find((candidate) => candidate.dataset.id === markerId); + const body = marker?.querySelector('.device-shell'); + if (!body || typeof body.animate !== 'function') return; + const paintedScale = Number.parseFloat( + this.ownerDocument.defaultView?.getComputedStyle(body).scale || '', + ); + const restartScale = Number.isFinite(paintedScale) + ? Math.max(0.95, Math.min(1, paintedScale)) + : 1; + this._devicePressAnimations.get(markerId)?.cancel(); + const frames: Keyframe[] = this._reducedMotion + ? [ + { outlineColor: 'transparent', outlineStyle: 'solid', outlineWidth: '0px' }, + { + outlineColor: 'var(--hp-accent, #3ea6ff)', outlineStyle: 'solid', + outlineWidth: '2px', outlineOffset: '2px', offset: 0.5, + }, + { outlineColor: 'transparent', outlineStyle: 'solid', outlineWidth: '0px' }, + ] + : [ + { scale: String(restartScale) }, + { scale: '0.95', offset: 0.5 }, + { scale: '1' }, + ]; + const animation = body.animate(frames, { + duration: 200, + easing: 'cubic-bezier(.22,.61,.36,1)', + }); + this._devicePressAnimations.set(markerId, animation); + const clear = (): void => { + if (this._devicePressAnimations.get(markerId) === animation) { + this._devicePressAnimations.delete(markerId); + } + }; + animation.addEventListener('finish', clear, { once: true }); + animation.addEventListener('cancel', clear, { once: true }); + } + + private _cancelDevicePressFeedback(): void { + for (const animation of this._devicePressAnimations.values()) animation.cancel(); + this._devicePressAnimations.clear(); + } + + private _pruneDevicePressFeedback(): void { + if (!this._devicePressAnimations.size) return; + const visible = new Set( + [...this.renderRoot.querySelectorAll('.dev[data-id]')] + .map((marker) => marker.dataset.id || ''), + ); + for (const [markerId, animation] of this._devicePressAnimations) { + if (visible.has(markerId)) continue; + animation.cancel(); + this._devicePressAnimations.delete(markerId); + } + } + /** Translate a key in the card's current language. */ private _t(key: I18nKey, vars?: Record): string { return t(langOf(this.hass, this._config?.language), key, vars); @@ -5753,31 +5845,45 @@ class HouseplanCard extends LitElement { }, 3500); } - /** - * Touch-first surface: no hover tooltips. - * - * The media query alone was not enough (field report, 2026-07-27: tooltips - * still stuck on a OnePlus). Some devices/skins report `hover: hover`, and a - * stylus or a paired mouse flips it too. So this also latches on the FIRST - * touch pointer event and never unlatches for that session — a device that - * has been touched once is a touch device. - */ - private static _touchSeen = false; - private static readonly _noHoverMq = - typeof window !== 'undefined' && - typeof window.matchMedia === 'function' && - window.matchMedia('(hover: none)').matches; - - private get _noHover(): boolean { - return HouseplanCard._noHoverMq || HouseplanCard._touchSeen; + /** Publish the instance-local input authority to nested shared controls. */ + private _syncPointerHoverTargets(): void { + const enabled = this._pointerModality.hoverEnabled; + for (const target of this.renderRoot.querySelectorAll( + 'hp-dialog, hp-help, hp-color-opacity', + )) { + target.toggleAttribute('data-pointer-hover', enabled); + } } - /** Any touch anywhere marks the session as touch-first and kills open tips. */ + private _syncPointerHoverSubtree(node: Node): void { + if (node.nodeType !== Node.ELEMENT_NODE) return; + const element = node as HTMLElement; + const enabled = this._pointerModality.hoverEnabled; + if (element.matches('hp-dialog, hp-help, hp-color-opacity')) { + element.toggleAttribute('data-pointer-hover', enabled); + } + for (const target of element.querySelectorAll( + 'hp-dialog, hp-help, hp-color-opacity', + )) { + target.toggleAttribute('data-pointer-hover', enabled); + } + } + + /** Remove visual state that can only be owned by a live mouse hover. */ + private _clearTransientHover(suspend = false): void { + if (suspend) this._pointerModality.suspend(); + if (this._tip) this._tip = null; + if (this._hoverRoom) this._hoverRoom = null; + } + + /** The latest real pointer event, not a page-global first-touch latch, owns hover. */ private _notePointer(ev: PointerEvent): void { this._boundaryPointerType = ev.pointerType || 'mouse'; - if (ev.pointerType === 'touch' || ev.pointerType === 'pen') { - HouseplanCard._touchSeen = true; - if (this._tip) this._tip = null; + const previous = this._pointerModality.modality; + const modality = this._pointerModality.note(ev); + if ((modality === 'touch' || modality === 'pen') + && (previous !== modality || !!this._tip || !!this._hoverRoom)) { + this._clearTransientHover(); } } @@ -5800,8 +5906,8 @@ class HouseplanCard extends LitElement { return; } const pointer = ev as PointerEvent; - if (pointer.pointerType !== 'touch') return; this._notePointer(pointer); + if (pointer.pointerType !== 'touch') return; if (ev.type === 'pointerdown') { this._touchContacts.set(pointer.pointerId, { x: pointer.clientX, @@ -5809,6 +5915,7 @@ class HouseplanCard extends LitElement { inStage: !!(pointer.target as Element | null)?.closest?.('.stage'), }); if (this._touchContacts.size >= 2) { + this._clearTransientHover(); this._touchSequenceMultitouch = true; this._touchClickBlockUntil = Number.POSITIVE_INFINITY; clearTimeout(this._holdTimer); @@ -5855,7 +5962,9 @@ class HouseplanCard extends LitElement { } return; } - if (ev.type !== 'pointerup' && ev.type !== 'pointercancel') return; + if (ev.type !== 'pointerup' && ev.type !== 'pointercancel' + && ev.type !== 'lostpointercapture') return; + this._clearTransientHover(); this._touchContacts.delete(pointer.pointerId); if (this._touchSequenceMultitouch) { this._touchClickBlockUntil = Date.now() + 500; @@ -5875,14 +5984,15 @@ class HouseplanCard extends LitElement { } private _showTip( - ev: MouseEvent, + ev: PointerEvent, title: string, meta: string, lqi?: number | null, temp?: number | null, hum?: number | null, ): void { - if (this._noHover) return; + this._notePointer(ev); + if (!this._pointerModality.hoverEnabled) return; if (this._drag) return; this._tip = { x: ev.clientX, y: ev.clientY, title, meta, lqi, temp, hum }; } @@ -6058,6 +6168,8 @@ class HouseplanCard extends LitElement { } if (this._wallFaceBatch) this._roomDialogCancel(); if (this._mode === 'plan' && this._tool === 'draw' && !this._finishWallChain()) return; + this._clearTransientHover(true); + this._cancelDevicePressFeedback(); const previousMode = this._mode; const previousProjection = this._effectiveProjection(); const capturedVisual = this._currentModeVisual(previousMode); @@ -15585,10 +15697,12 @@ class HouseplanCard extends LitElement { data-ha-registry-access=${diagnostics.registry.access} data-ha-disabled-bindings=${diagnostics.bindings.ha_disabled} data-ha-unverified-bindings=${diagnostics.bindings.unverified} + @pointerover=${(event: PointerEvent) => this._notePointer(event)} @pointerdown=${this._touchGestureGuard} @pointermove=${this._touchGestureGuard} @pointerup=${this._touchGestureGuard} @pointercancel=${this._touchGestureGuard} + @lostpointercapture=${this._touchGestureGuard} @click=${this._touchGestureGuard}>

      @@ -15789,7 +15903,7 @@ class HouseplanCard extends LitElement { style = st.join(';'); } let areaText: string | null | undefined; - const tip = (e: MouseEvent) => { + const tip = (e: PointerEvent) => { if (this._mode !== 'view') return; if (areaText === undefined) areaText = this._roomArea(r); this._showTip( @@ -15834,34 +15948,59 @@ class HouseplanCard extends LitElement { ? svg` (this._hoverRoom = { space: space.id, room: r })} - @mousemove=${tip} - @mouseleave=${() => { this._tip = null; this._hoverRoom = null; }}>` + @pointerenter=${(event: PointerEvent) => { + this._notePointer(event); + if (this._pointerModality.hoverEnabled) { + this._hoverRoom = { space: space.id, room: r }; + } + }} + @pointermove=${tip} + @pointerleave=${() => this._clearTransientHover()}>` : holes.length && fillPoly ? svg` (this._hoverRoom = { space: space.id, room: r })} - @mousemove=${tip} - @mouseleave=${() => { this._tip = null; this._hoverRoom = null; }}>` + @pointerenter=${(event: PointerEvent) => { + this._notePointer(event); + if (this._pointerModality.hoverEnabled) { + this._hoverRoom = { space: space.id, room: r }; + } + }} + @pointermove=${tip} + @pointerleave=${() => this._clearTransientHover()}>` : fillPoly && fillPoly !== myPoly ? svg` (this._hoverRoom = { space: space.id, room: r })} - @mousemove=${tip} - @mouseleave=${() => { this._tip = null; this._hoverRoom = null; }}>` + @pointerenter=${(event: PointerEvent) => { + this._notePointer(event); + if (this._pointerModality.hoverEnabled) { + this._hoverRoom = { space: space.id, room: r }; + } + }} + @pointermove=${tip} + @pointerleave=${() => this._clearTransientHover()}>` : r.poly ? svg` (this._hoverRoom = { space: space.id, room: r })} - @mousemove=${tip} - @mouseleave=${() => { this._tip = null; this._hoverRoom = null; }}>` + @pointerenter=${(event: PointerEvent) => { + this._notePointer(event); + if (this._pointerModality.hoverEnabled) { + this._hoverRoom = { space: space.id, room: r }; + } + }} + @pointermove=${tip} + @pointerleave=${() => this._clearTransientHover()}>` : svg` (this._hoverRoom = { space: space.id, room: r })} - @mousemove=${tip} - @mouseleave=${() => { this._tip = null; this._hoverRoom = null; }}>`; + @pointerenter=${(event: PointerEvent) => { + this._notePointer(event); + if (this._pointerModality.hoverEnabled) { + this._hoverRoom = { space: space.id, room: r }; + } + }} + @pointermove=${tip} + @pointerleave=${() => this._clearTransientHover()}>`; const trimmed = edgeCuts.length && myPoly ? outlineWithout(myPoly, edgeCuts, this._gridPitch * 0.02) : null; @@ -16911,11 +17050,14 @@ class HouseplanCard extends LitElement { @click=${(e: MouseEvent) => this._clickDevice(e, d)} @keydown=${(e: KeyboardEvent) => this._keyDevice(e, d)} @contextmenu=${(e: MouseEvent) => this._ctxDevice(e, d)} - @mousemove=${(e: MouseEvent) => + @pointerover=${(e: PointerEvent) => this._showTip(e, d.name, presentation.haDisabled ? ghostLabel : metrics)} - @mouseleave=${() => (this._tip = null)} + @pointerleave=${() => this._clearTransientHover()} @pointerdown=${(e: PointerEvent) => this._pointerDown(e, d)} - @pointermove=${(e: PointerEvent) => this._pointerMove(e, d)} + @pointermove=${(e: PointerEvent) => { + this._pointerMove(e, d); + this._showTip(e, d.name, presentation.haDisabled ? ghostLabel : metrics); + }} @pointerup=${(e: PointerEvent) => this._pointerUp(e, d)} @pointercancel=${(e: PointerEvent) => this._pointerUp(e, d)} > diff --git a/src/hp-color-opacity.ts b/src/hp-color-opacity.ts index 0e38dca8..caff76d8 100644 --- a/src/hp-color-opacity.ts +++ b/src/hp-color-opacity.ts @@ -96,7 +96,7 @@ export class HpColorOpacity extends LitElement { linear-gradient(45deg, #b8b8b8 25%, #eee 25%) 5px 5px / 10px 10px; cursor: pointer; } - .trigger:hover { + :host([data-pointer-hover]) .trigger:hover { border-color: var(--primary-color, #03a9f4); } .trigger[aria-expanded='true'] { diff --git a/src/hp-device-preview.ts b/src/hp-device-preview.ts index a29260ee..dbd7fbf6 100644 --- a/src/hp-device-preview.ts +++ b/src/hp-device-preview.ts @@ -354,7 +354,7 @@ class HpDevicePreview extends LitElement { } .previewfit { position: absolute; left: 50%; top: 50%; transform-origin: center; } .previewstage .dev { left: 0; top: 0; cursor: default; } - .previewstage .dev:hover { z-index: 2; } + :host([data-pointer-hover]) .previewstage .dev:hover { z-index: 2; } .previewfacts { min-width: 0; display: grid; align-content: start; gap: 8px; } .previewfacts > div { display: grid; grid-template-columns: minmax(115px, 0.8fr) minmax(0, 1.3fr); gap: 8px; } .previewfacts span { color: var(--secondary-text-color, #9aa0aa); } diff --git a/src/hp-dialog.ts b/src/hp-dialog.ts index b72f6f63..43ebb6bd 100644 --- a/src/hp-dialog.ts +++ b/src/hp-dialog.ts @@ -187,7 +187,7 @@ export class HpDialog extends LitElement { cursor: pointer; } - .close:hover, + :host([data-pointer-hover]) .close:hover, .close:focus-visible { background: rgb(127 127 127 / 0.16); } diff --git a/src/hp-help.ts b/src/hp-help.ts index ceca1355..81c95151 100644 --- a/src/hp-help.ts +++ b/src/hp-help.ts @@ -18,6 +18,7 @@ export class HpHelp extends LitElement { static properties = { text: { type: String }, ariaLabel: { type: String, attribute: 'aria-label' }, + pointerHover: { type: Boolean, attribute: 'data-pointer-hover', reflect: true }, _open: { state: true }, _forceFallback: { state: true }, }; @@ -57,7 +58,7 @@ export class HpHelp extends LitElement { fill: currentColor; } - .trigger:hover, + :host([data-pointer-hover]) .trigger:hover, .trigger:focus-visible, .trigger[aria-expanded='true'] { color: var(--primary-text-color, #fff); @@ -150,12 +151,14 @@ export class HpHelp extends LitElement { text = ''; ariaLabel = ''; + pointerHover = false; private _open = false; private _openTimer = 0; private _closeTimer = 0; private _positionRaf = 0; private _forceFallback = false; + private _hoverOwned = false; private _overlayDispose: (() => void) | null = null; private _scrollDialog: HpDialog | null = null; private readonly _descriptionId = `hp-help-description-${++helpSequence}`; @@ -181,6 +184,12 @@ export class HpHelp extends LitElement { } protected updated(changed: PropertyValues): void { + if (changed.has('pointerHover') && !this.pointerHover) { + const win = this._window(); + if (this._openTimer) win?.clearTimeout(this._openTimer); + this._openTimer = 0; + if (this._hoverOwned) this._closeHelp(false, 'outside'); + } if (!this._hasContent() && this._open) { this._closeHelp(); return; @@ -217,12 +226,13 @@ export class HpHelp extends LitElement { private _scheduleOpen(): void { const win = this._window(); - if (!win || this._open || this._openTimer) return; + if (!this.pointerHover || !win || this._open || this._openTimer) return; if (this._closeTimer) win.clearTimeout(this._closeTimer); this._closeTimer = 0; this._openTimer = win.setTimeout(() => { this._openTimer = 0; if (!this.isConnected) return; + this._hoverOwned = true; void this._openHelp(); }, 300); } @@ -242,7 +252,7 @@ export class HpHelp extends LitElement { } private _triggerPointerEnter(event: PointerEvent): void { - if (event.pointerType === 'mouse') this._scheduleOpen(); + if (this.pointerHover && event.pointerType === 'mouse') this._scheduleOpen(); } private _triggerPointerLeave(event: PointerEvent): void { @@ -262,7 +272,10 @@ export class HpHelp extends LitElement { private _triggerFocus(): void { queueMicrotask(() => { const trigger = this.renderRoot.querySelector('.trigger'); - if (trigger?.matches(':focus-visible')) void this._openHelp(); + if (trigger?.matches(':focus-visible')) { + this._hoverOwned = false; + void this._openHelp(); + } }); } @@ -272,7 +285,10 @@ export class HpHelp extends LitElement { private _triggerClick(): void { if (this._open) this._closeHelp(); - else void this._openHelp(); + else { + this._hoverOwned = false; + void this._openHelp(); + } } private _outsidePointerDown = (event: PointerEvent): void => { @@ -381,6 +397,7 @@ export class HpHelp extends LitElement { } } this._open = false; + this._hoverOwned = false; this._unsubscribeOpenListeners(); this._floating.destroy(); if (refocus) { diff --git a/src/pointer-modality.ts b/src/pointer-modality.ts new file mode 100644 index 00000000..2365ebc1 --- /dev/null +++ b/src/pointer-modality.ts @@ -0,0 +1,101 @@ +/** Instance-local pointer modality and CSS-hover gate. */ + +export type PointerModality = 'unknown' | 'mouse' | 'touch' | 'pen'; + +export const POINTER_HOVER_QUERY = '(any-hover: hover) and (any-pointer: fine)'; + +type PointerLike = { + pointerType?: string; + sourceCapabilities?: { firesTouchEvents?: boolean } | null; +}; + +export function pointerModalityOf(pointerType: unknown): PointerModality | null { + if (pointerType === 'mouse' || pointerType === 'touch' || pointerType === 'pen') { + return pointerType; + } + return null; +} + +/** Compatibility input derived from touch must never re-enable mouse hover. */ +export function nextPointerModality( + current: PointerModality, + event: PointerLike, +): PointerModality { + const next = pointerModalityOf(event.pointerType); + if (!next) return current; + if (next === 'mouse' && event.sourceCapabilities?.firesTouchEvents) return current; + return next; +} + +export function pointerHoverAllowed(modality: PointerModality, hoverCapable: boolean): boolean { + return modality === 'mouse' && hoverCapable; +} + +type HoverHost = Pick; + +/** + * Keeps one card instance's input authority out of Lit render state. Pointer + * move may be frequent; the host attribute changes only when the gate changes. + */ +export class PointerModalityController { + private _modality: PointerModality = 'unknown'; + private _gate = false; + private _media: MediaQueryList | null = null; + private _connected = false; + + constructor( + private readonly _host: HoverHost, + private readonly _onGateChange: (enabled: boolean) => void = () => undefined, + ) {} + + get modality(): PointerModality { + return this._modality; + } + + get hoverEnabled(): boolean { + return this._gate; + } + + connect(win: Window | null | undefined = globalThis.window): void { + if (this._connected) return; + this._connected = true; + this._modality = 'unknown'; + this._media = typeof win?.matchMedia === 'function' + ? win.matchMedia(POINTER_HOVER_QUERY) + : null; + this._media?.addEventListener?.('change', this._onMediaChange); + this._setGate(false); + } + + disconnect(): void { + this._media?.removeEventListener?.('change', this._onMediaChange); + this._media = null; + this._connected = false; + this._modality = 'unknown'; + this._setGate(false); + } + + note(event: PointerLike): PointerModality { + this._modality = nextPointerModality(this._modality, event); + this._syncGate(); + return this._modality; + } + + /** Disable stale CSS hover until the next real pointer event revalidates it. */ + suspend(): void { + this._setGate(false); + } + + private readonly _onMediaChange = (): void => this._syncGate(); + + private _syncGate(): void { + this._setGate(pointerHoverAllowed(this._modality, !!this._media?.matches)); + } + + private _setGate(enabled: boolean): void { + if (this._gate === enabled) return; + this._gate = enabled; + this._host.toggleAttribute('data-pointer-hover', enabled); + this._onGateChange(enabled); + } +} diff --git a/src/space-card.ts b/src/space-card.ts index 9d0fa1b3..86144985 100644 --- a/src/space-card.ts +++ b/src/space-card.ts @@ -35,6 +35,7 @@ import { import { bgModeOf, resolveDayCycle, dayCycleFingerprint, type DayCycleState, } from './sun'; +import { PointerModalityController } from './pointer-modality'; import './space-editor'; const fireEvent = (node: EventTarget, type: string, detail?: unknown) => { @@ -101,6 +102,7 @@ class HouseplanSpaceCard extends LitElement { private _capturedSnapshotVirtual = ''; private _activityRuntime = new Map(); private _reducedMotion = false; + private readonly _pointerModality = new PointerModalityController(this); private _motionMedia?: MediaQueryList; private _onMotionChange = (event: MediaQueryListEvent): void => { this._reducedMotion = event.matches; @@ -187,7 +189,10 @@ class HouseplanSpaceCard extends LitElement { private _pageVisibility = (signal: PageVisibilitySignal): void => { this._continuity.visibility(signal); this._dayCycleVisibility(signal); - if (signal.kind === 'hidden') return; + if (signal.kind === 'hidden') { + this._pointerModality.suspend(); + return; + } if (!signal.long) { const now = Date.now(); let expired = false; @@ -274,6 +279,7 @@ class HouseplanSpaceCard extends LitElement { this._continuityPaintToken = -1; } super.connectedCallback(); + this._pointerModality.connect(this.ownerDocument.defaultView); this._motionMedia = window.matchMedia?.('(prefers-reduced-motion: reduce)'); this._reducedMotion = !!this._motionMedia?.matches; this._motionMedia?.addEventListener?.('change', this._onMotionChange); @@ -290,6 +296,7 @@ class HouseplanSpaceCard extends LitElement { } public disconnectedCallback(): void { + this._pointerModality.disconnect(); this._continuityUnsub?.(); this._continuityUnsub = undefined; this._motionMedia?.removeEventListener?.('change', this._onMotionChange); @@ -806,7 +813,10 @@ class HouseplanSpaceCard extends LitElement { data-continuity-token=${this._continuity.token} data-frame-fingerprint=${this._continuity.frameFingerprint || nothing} data-device-snapshot-sequence=${deviceSnapshot?.sourceSequence ?? nothing} - data-recovery-reason=${recoveryReason || nothing}> + data-recovery-reason=${recoveryReason || nothing} + @pointerover=${(event: PointerEvent) => this._pointerModality.note(event)} + @pointerdown=${(event: PointerEvent) => this._pointerModality.note(event)} + @pointermove=${(event: PointerEvent) => this._pointerModality.note(event)}> ${title ? html`
      ${title}
      ` : nothing}
      ${stage} @@ -900,7 +910,7 @@ class HouseplanSpaceCard extends LitElement { font-weight: 600; cursor: pointer; } - .hp-static-btn:hover { + :host([data-pointer-hover]) .hp-static-btn:hover { filter: brightness(1.08); } .hp-static-error { diff --git a/src/styles.ts b/src/styles.ts index a8cccc00..de598e10 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -10,6 +10,7 @@ export const cardStyles = css` --hp-accent: var(--primary-color, #3ea6ff); --hp-on: #ffd45c; --hp-open: #ff9f43; + --device-visual-factor: 0.9; /* design tokens (UI chrome only). The icon/plan scale math stays on --icon-size/--dev-size cqw units and never uses these. */ /* spacing scale, fact-based; stray 3/5/7/9/13/14px values are unified @@ -126,7 +127,7 @@ export const cardStyles = css` transition: 0.15s; font-family: inherit; } - .tab:hover { + :host([data-pointer-hover]) .tab:hover { color: var(--hp-txt); } .tab.active { @@ -157,7 +158,7 @@ export const cardStyles = css` .btn ha-icon { --mdc-icon-size: 17px; } - .btn:hover { + :host([data-pointer-hover]) .btn:hover { border-color: var(--hp-accent); } .btn.on { @@ -639,7 +640,7 @@ export const cardStyles = css` stroke: transparent; stroke-width: 2; } - .stage.mode-view .room.overlay:not(.styled):hover { + :host([data-pointer-hover]) .stage.mode-view .room.overlay:not(.styled):hover { stroke: var(--hp-accent); stroke-opacity: 1; } @@ -648,7 +649,7 @@ export const cardStyles = css` stroke: #4b8c5a; stroke-width: 2; } - .stage.mode-view .room.yard:not(.styled):hover { + :host([data-pointer-hover]) .stage.mode-view .room.yard:not(.styled):hover { stroke: var(--hp-accent); stroke-opacity: 1; } @@ -696,7 +697,7 @@ export const cardStyles = css` /* The explicit late room-hover layer owns the wash and halo. Keeping CSS filters off room paths prevents Chromium from recompositing the sibling screen-blended Glow layer for one bright frame on every hover. */ - .stage.mode-view .room.styled:hover { + :host([data-pointer-hover]) .stage.mode-view .room.styled:hover { stroke: var(--hp-accent); stroke-opacity: 1; } @@ -717,7 +718,7 @@ export const cardStyles = css` transition: opacity 0.15s; pointer-events: none; } - .stage.markup g.opening:hover .op-outline { + :host([data-pointer-hover]) .stage.markup g.opening:hover .op-outline { opacity: 0.9; } /* openings are pure status graphics outside Plan mode: no cursor, no hover, @@ -958,7 +959,7 @@ export const cardStyles = css` z-index: 2; } .rlgearbtn { transition: opacity 0.15s, filter 0.15s; } - .rlgearbtn:hover { opacity: 1; filter: brightness(1.18); } + :host([data-pointer-hover]) .rlgearbtn:hover { opacity: 1; filter: brightness(1.18); } .rlgearbtn ha-icon { --mdc-icon-size: calc(var(--gear-h) * 0.55); display: inline-flex; } .rlgear { --mdc-icon-size: 0.9em; @@ -968,7 +969,7 @@ export const cardStyles = css` cursor: pointer; pointer-events: auto; } - .rlgear:hover { opacity: 1; } + :host([data-pointer-hover]) .rlgear:hover { opacity: 1; } .rlgo { --mdc-icon-size: 0.85em; display: inline-flex; @@ -978,7 +979,7 @@ export const cardStyles = css` pointer-events: auto; cursor: pointer; } - .stage.mode-view .rlgo:hover { opacity: 1; } + :host([data-pointer-hover]) .stage.mode-view .rlgo:hover { opacity: 1; } .roomlabel .rlmetrics { position: absolute; /* below the name, outside the centring math */ top: calc(100% + 0.15em); @@ -1049,7 +1050,9 @@ export const cardStyles = css` border: 0; background: transparent; color: var(--hp-txt); padding: var(--sp-3) var(--sp-4); border-radius: var(--rad-s); cursor: pointer; font-family: inherit; font-size: var(--fs-m); } - .ctrlopt:hover { background: var(--secondary-background-color, rgba(128,128,128,0.15)); } + :host([data-pointer-hover]) .ctrlopt:hover { + background: var(--secondary-background-color, rgba(128,128,128,0.15)); + } .ctrlopt .sub { color: var(--hp-muted); font-size: var(--fs-s); margin-left: auto; } .ctrlopt ha-icon { --mdc-icon-size: 16px; } .ctrlstates { display: flex; flex-direction: column; gap: var(--sp-2); } @@ -1099,7 +1102,7 @@ export const cardStyles = css` .rlhandle.br { right: -6px; bottom: -6px; cursor: nwse-resize; } .rlhandle.tr { right: -6px; top: -6px; cursor: nesw-resize; } .rlhandle.bl { left: -6px; bottom: -6px; cursor: nesw-resize; } - .stage.markup .roomlabel:hover .rlhandle { display: block; } + :host([data-pointer-hover]) .stage.markup .roomlabel:hover .rlhandle { display: block; } .stage.markup .roomlabel { pointer-events: auto; } .roomlabel:active { cursor: grabbing; } .measurelayer { @@ -1269,7 +1272,10 @@ export const cardStyles = css` vector-effect: non-scaling-stroke; pointer-events: none; } - .bdframe .bdhandle:hover + .bdknob { fill: #fff; stroke: var(--hp-accent); } + :host([data-pointer-hover]) .bdframe .bdhandle:hover + .bdknob { + fill: #fff; + stroke: var(--hp-accent); + } .bdframe .bd-nwse { cursor: nwse-resize; } .bdframe .bd-nesw { cursor: nesw-resize; } /* the picture itself is the drag target for a move (grab, then grabbing) */ @@ -1316,7 +1322,10 @@ export const cardStyles = css` vector-effect: non-scaling-stroke; pointer-events: none; } - .dtframe .dthandle:hover + .dtknob { fill: #fff; stroke: var(--hp-accent); } + :host([data-pointer-hover]) .dtframe .dthandle:hover + .dtknob { + fill: #fff; + stroke: var(--hp-accent); + } .dtframe .dt-nwse { cursor: nwse-resize; } .dtframe .dt-nesw { cursor: nesw-resize; } .dtframe .dtrot { cursor: grab; } @@ -1637,7 +1646,7 @@ export const cardStyles = css` cursor: pointer; border-radius: var(--rad-s); } - .modetab .closex:hover { opacity: 1; } + :host([data-pointer-hover]) .modetab .closex:hover { opacity: 1; } .editbar .barclose { box-sizing: border-box; width: 40px; @@ -1813,6 +1822,7 @@ export const cardStyles = css` width: max-content; min-width: var(--dev-size, var(--icon-size, 2.5cqw)); padding-inline: calc(var(--dev-size, var(--icon-size, 2.5cqw)) * 0.16); + border-radius: calc(var(--dev-size, var(--icon-size, 2.5cqw)) / 2); } .dev .valtext { overflow: visible; @@ -1872,7 +1882,9 @@ export const cardStyles = css` .dev { position: absolute; /* per-device multiplier on top of the card-wide icon size */ - --dev-size: calc(var(--icon-size, 2.5cqw) * var(--dev-scale, 1)); + --dev-size: calc( + var(--icon-size, 2.5cqw) * var(--dev-scale, 1) * var(--device-visual-factor, 0.9) + ); /* 101.5/80 is the package shell/core ratio, including its stroke. */ --device-shell-size: calc(var(--dev-size) * 1.26875); --device-shell-stroke-ratio: 0.01875; @@ -2072,14 +2084,14 @@ export const cardStyles = css` } /* Interaction wins ordinary state colours. Alarm keeps priority through the more-specific rule below. Unavailable has no visual hover. */ - .dev:not(.unavail):hover { + :host([data-pointer-hover]) .dev:not(.unavail):hover { --device-face-bg: #0C82F0; --device-face-fg: light-dark(#fff, #252525); --device-shell-stroke: var(--device-shell-base-stroke); } - .dev.theme-light:not(.unavail):hover { --device-face-fg: #fff; } - .dev.theme-dark:not(.unavail):hover { --device-face-fg: #252525; } - .dev:hover, + :host([data-pointer-hover]) .dev.theme-light:not(.unavail):hover { --device-face-fg: #fff; } + :host([data-pointer-hover]) .dev.theme-dark:not(.unavail):hover { --device-face-fg: #252525; } + :host([data-pointer-hover]) .dev:hover, .dev:focus-visible { z-index: 5; } .dev.unavail { opacity: 0.35; @@ -2220,7 +2232,7 @@ export const cardStyles = css` } /* Alert stays above focus, selection, hover and ordinary semantic paint. */ .dev.alarm, - .dev.alarm:hover, + :host([data-pointer-hover]) .dev.alarm:hover, .dev.alarm:focus-visible { --device-face-bg: #F0410C; --device-face-fg: light-dark(#fff, #252525); @@ -2304,7 +2316,7 @@ export const cardStyles = css` margin-left: var(--sp-3); opacity: 0.4; } - .tab:hover .tabedit { + :host([data-pointer-hover]) .tab:hover .tabedit { opacity: 0.9; } .tab.tabadd { @@ -2553,7 +2565,9 @@ export const cardStyles = css` position: absolute; /* the base badge, but round and 20% smaller — the owner's wording: «иконка похожа на иконку базы, только круглая и чуть меньше» */ - --puck-size: calc(var(--dev-size, var(--icon-size, 2.5cqw)) * 0.8); + --puck-size: calc( + var(--icon-size, 2.5cqw) * var(--device-visual-factor, 0.9) * 0.8 + ); width: var(--puck-size); height: var(--puck-size); border-radius: 50%; @@ -2702,7 +2716,7 @@ export const cardStyles = css` } .rszhalo { stroke: var(--hp-bg); stroke-width: 6; } .rszink { stroke: var(--hp-accent); stroke-width: 2; } - .rszhandle:hover + .rszicon .rszink { stroke-width: 3; } + :host([data-pointer-hover]) .rszhandle:hover + .rszicon .rszink { stroke-width: 3; } /* corner (scale-frame) handles: hit circle invisible, .rszknob is the bead */ .rszcorner { fill: transparent; @@ -2716,7 +2730,7 @@ export const cardStyles = css` vector-effect: non-scaling-stroke; pointer-events: none; } - .rszcorner:hover + .rszknob { fill: var(--hp-accent); } + :host([data-pointer-hover]) .rszcorner:hover + .rszknob { fill: var(--hp-accent); } .rszcorner:active { cursor: nwse-resize; } .rszframe { fill: none; @@ -2793,7 +2807,7 @@ export const cardStyles = css` text-align: center; cursor: pointer; } - .furnitem:hover { background: rgba(127, 127, 127, 0.18); } + :host([data-pointer-hover]) .furnitem:hover { background: rgba(127, 127, 127, 0.18); } .furnitem.on { border-color: var(--hp-accent); background: rgba(38, 166, 154, 0.18); @@ -2874,7 +2888,7 @@ export const cardStyles = css` border-radius: var(--rad-s); font-size: var(--fs-m); } - .cand:hover { + :host([data-pointer-hover]) .cand:hover { background: rgba(127, 127, 127, 0.15); } .cand.sel { @@ -2922,7 +2936,7 @@ export const cardStyles = css` cursor: pointer; color: var(--hp-muted); } - .pdftag .x:hover { + :host([data-pointer-hover]) .pdftag .x:hover { color: #ff7a5c; } .entlist { @@ -3059,8 +3073,8 @@ export const cardStyles = css` color: var(--hp-muted); cursor: pointer; } - .rrow .ract:hover { color: var(--hp-txt); } - .rrow .ract.del:hover { color: #ff7a5c; } + :host([data-pointer-hover]) .rrow .ract:hover { color: var(--hp-txt); } + :host([data-pointer-hover]) .rrow .ract.del:hover { color: #ff7a5c; } .gsrow .gsl { min-width: 150px; @@ -3144,7 +3158,7 @@ export const cardStyles = css` font-size: var(--fs-m); padding: var(--sp-1) 0; } - .aboutlink:hover { text-decoration: underline; } + :host([data-pointer-hover]) .aboutlink:hover { text-decoration: underline; } .aboutlink ha-icon { --mdc-icon-size: 18px; line-height: 1; } hp-dialog .body { padding: var(--sp-5) var(--sp-6); @@ -3419,7 +3433,7 @@ export const cardStyles = css` --mdc-icon-size: 16px; color: var(--hp-muted); } - .menu .it:hover { + :host([data-pointer-hover]) .menu .it:hover { background: rgba(127, 127, 127, 0.15); } .menu .it.all { diff --git a/test/device-marker-polish-contract.test.mjs b/test/device-marker-polish-contract.test.mjs new file mode 100644 index 00000000..42465ee9 --- /dev/null +++ b/test/device-marker-polish-contract.test.mjs @@ -0,0 +1,54 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; + +const source = (name) => readFileSync(new URL(`../src/${name}`, import.meta.url), 'utf8'); + +test('issue 212 applies one visual 0.9 factor without shrinking the hit target', () => { + const styles = source('styles.ts'); + assert.match(styles, /--device-visual-factor:\s*0\.9\s*;/); + assert.match( + styles, + /--dev-size:\s*calc\([^;]*var\(--device-visual-factor,\s*0\.9\)[^;]*\);/, + ); + assert.match(styles, /width:\s*max\(44px,\s*var\(--device-shell-size\)\)/); + assert.match( + styles, + /--puck-size:\s*calc\([^;]*var\(--device-visual-factor,\s*0\.9\)[^;]*\);/, + ); +}); + +test('issue 212 Text value uses a stadium radius based on height', () => { + const styles = source('styles.ts'); + const rule = styles.match(/\.dev\.valonly \.device-core\s*\{([\s\S]*?)\}/)?.[1] || ''; + assert.match(rule, /border-radius:\s*calc\(var\(--dev-size[^;]*\/\s*2\)/); + assert.doesNotMatch(rule, /border-radius:\s*50%/); +}); + +test('issue 212 feedback is owned by actual dispatch and lasts 200 ms', () => { + const card = source('houseplan-card.ts'); + assert.match(card, /private _startDevicePressFeedback\(/); + assert.match(card, /duration:\s*200/); + assert.ok( + card.match(/_startDevicePressFeedback\(actionDevice\.id\)/g)?.length >= 2, + 'HA and virtual/run dispatch paths must all opt into the same feedback owner', + ); + assert.match(card, /private _cancelDevicePressFeedback\(/); +}); + +test('issue 212 removes the global touch latch and gates every shared hover selector', () => { + const card = source('houseplan-card.ts'); + assert.doesNotMatch(card, /private static _touchSeen/); + assert.match(card, /PointerModalityController/); + assert.match(card, /_clearTransientHover/); + + for (const name of ['styles.ts', 'hp-dialog.ts', 'hp-help.ts', 'hp-color-opacity.ts', 'space-card.ts']) { + const text = source(name); + const selectors = [...text.matchAll(/(^|\})([^{}]+)\{/gm)].map((match) => match[2]); + const naked = selectors.flatMap((selector) => selector.split(',')) + .map((selector) => selector.trim()) + .filter((selector) => selector.includes(':hover')) + .filter((selector) => !selector.includes(':host([data-pointer-hover])')); + assert.deepEqual(naked, [], `${name} has ungated hover selectors: ${naked.join(' | ')}`); + } +}); diff --git a/test/pointer-modality.test.mjs b/test/pointer-modality.test.mjs new file mode 100644 index 00000000..cd132fd8 --- /dev/null +++ b/test/pointer-modality.test.mjs @@ -0,0 +1,77 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { + nextPointerModality, pointerHoverAllowed, pointerModalityOf, PointerModalityController, +} from '../test-build/pointer-modality.js'; + +const harness = () => { + const host = { + enabled: false, + toggleAttribute(_name, enabled) { this.enabled = enabled; }, + }; + const listeners = new Set(); + const media = { + matches: true, + addEventListener(_type, listener) { listeners.add(listener); }, + removeEventListener(_type, listener) { listeners.delete(listener); }, + }; + return { + host, + media, + win: { matchMedia: () => media }, + change(matches) { + media.matches = matches; + for (const listener of listeners) listener({ matches }); + }, + }; +}; + +test('pointer modality accepts only explicit pointer types', () => { + assert.equal(pointerModalityOf('mouse'), 'mouse'); + assert.equal(pointerModalityOf('touch'), 'touch'); + assert.equal(pointerModalityOf('pen'), 'pen'); + assert.equal(pointerModalityOf(''), null); + assert.equal(pointerModalityOf(undefined), null); +}); + +test('touch compatibility input cannot restore mouse hover', () => { + assert.equal(nextPointerModality('unknown', { pointerType: 'touch' }), 'touch'); + assert.equal(nextPointerModality('touch', { + pointerType: 'mouse', sourceCapabilities: { firesTouchEvents: true }, + }), 'touch'); + assert.equal(nextPointerModality('touch', { pointerType: 'mouse' }), 'mouse'); + assert.equal(nextPointerModality('mouse', { pointerType: 'pen' }), 'pen'); +}); + +test('hover requires both a real mouse authority and hover-capable hardware', () => { + assert.equal(pointerHoverAllowed('mouse', true), true); + assert.equal(pointerHoverAllowed('mouse', false), false); + assert.equal(pointerHoverAllowed('unknown', true), false); + assert.equal(pointerHoverAllowed('touch', true), false); + assert.equal(pointerHoverAllowed('pen', true), false); +}); + +test('controllers isolate card instances and revalidate hybrid input', () => { + const a = harness(); + const b = harness(); + const first = new PointerModalityController(a.host); + const second = new PointerModalityController(b.host); + first.connect(a.win); + second.connect(b.win); + + first.note({ pointerType: 'touch' }); + second.note({ pointerType: 'mouse' }); + assert.equal(a.host.enabled, false); + assert.equal(b.host.enabled, true); + + first.note({ pointerType: 'mouse' }); + assert.equal(a.host.enabled, true); + a.change(false); + assert.equal(a.host.enabled, false); + a.change(true); + assert.equal(a.host.enabled, true); + first.suspend(); + assert.equal(a.host.enabled, false); + first.disconnect(); + second.disconnect(); +}); diff --git a/tsconfig.test.json b/tsconfig.test.json index 236bfbd1..86535870 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -21,7 +21,7 @@ "src/types.ts", "src/space-geometry.ts", "src/signing.ts", "src/initial-load.ts", "src/space-model-selection.ts", "src/space-dialog.ts", - "src/visual-continuity.ts", "src/mode-transition.ts", + "src/visual-continuity.ts", "src/mode-transition.ts", "src/pointer-modality.ts", "src/render-device-snapshot.ts", "src/command-stack.ts", "src/align-grid.ts",

    SpBC#JCN5yni(gCxxMDC8#ckI4!Sxxc^2CiQ{@(WV#mWppXP>Q#7R zuG~8;GH?#&;}#yNWNWqIo;im{>~?VJUR`!o@G0 zmxJi9oyS)2QMxH1Oz3H0f8>V2!|Bht%$O)okRC>+=qkL(8ir3!HWBz+8Bq#&d72ew z3_8rRicR*`CYvWqq{B+Vxf-bcH8R~F-EZvZ`yfQbvc{r+uc-IDhlc)TVi%XY(n zm~xQJvH4*_>MH9TM%Hf9Yq5oIE-vvI$5tidDz4`czpuM(V@7Z^7o|_O!_rVjUJnb) z=U%nt_MDf_`5^W_P05PKjCA=3B;XBX$P!^2HY&hRROIfrk=f&JmU5p{s}m8&PJ_7A z=67BoaDY6h^Yc*4z8MV5?x)Ag6tFr7AyUWxlg@ z4e-)Hr3lWJ6p>+$cE1sa#;t8vHf9vV#6MV(@!KLbL^xE9?DV3BE~xYs=qvERjrhZHxmaJ{{l9gst!Qv!egdQ33iDm5x z#OP-0mj00onv%kIHPC~kknHXPaVBVC)BE2{)ltmg3;1NB;7sHU=2_>X#g9oE7PUs` z00A`>LHPQZD9Wr-dO{xacf4t~EKEUH?@|*+7acboXj7?NQUPo ze4ZYhu{1p3J=yxN|LiLdaIiqM39RouMzjQLrbLZh#6`(jf^CXJvR6ip|<$_hg=AO zCp-vzl#tCw$hqfwdGUE}s^^VPRjYJ(&V0M3DbfTA0z*i5|3?(13ThBQ&uATxIC*NY z=z2dD%{EwV0s`N;?89HDUbSTShQu$DRiR#9I-7uGZkIJ!HcWG=Lw%T04D!VRj~-ab zXe}AWZ|R3g%&0MM3K}v@xYyF$(ccUDs^)1CIk zpMFXS_uE*~gJMF#yJiWHCNr|$8@#U_(Qy#u z&;&Icq(pm|e6+#I@;X%n=q*Vt3Rp&OMXLyNHE34HSU83_wk-tnzQikd?=I_uF?(hh z(C{)p4cYKhT#9{`7#Cvg;j({!d)5X`sgIUN)ys0AkRfZ)&dJ9@K|z*`K7<%jOC8VW zb8~8FMQ*{##*vo|b0aC*dPjy|_xbr4wd{8rMMVI2%(8|!F&GsYT{*5<$St0CgbEL)_dxderLNvMH)~&0aknW#qx2?G0<9##KPq^UXV7&fD)AlY>9GrVt??a~DV%s!_~EA~;}?wK-qw<2(yRA8?LOGTsa;KCEv(&+~9 z!If93AgcW6{B7OGKm($%NE-5im4!UEkEW>MY0WFKTzH6;EE|#V;nu@>fh-)VNre*= zJa7fqV$nQ8w=`hLk?My)fyA;l$^zAGH3ZD4Z@U+Qok|;|*M3SAQG$ld`mV{W&B8D9jby*L0_k!&**1g)T;=@Uf&VBSsAfmr574%{Sl zZXC3>)TZHY4(Yp7cfz;St2|$-vOmN6jaAK=%%YQ#!8aVjfOx2ZW zW{^#_P+JfIxET*Dfua z5SJA!{Zkj2qo10!6Rj!RanfmTPGo593@-%xPo4$aH4B{LY( z!ESYzbz5*78KcJtQ0q~1=zPY4W%HVE0dNfX;k|My5d zTsa9#Hyb(gtA9CIRGwl|ql_ht$w@;pwB}jtlr-q6-UFS5+k>OlYCoQ))hfp{B9Upi zCdPIhhi>!Kl~287T%@;u+&$<*`5}}arhs9;Fs@1ST~d%wk)HBu72JCuK}2FuXJ7|A zT;Bd?kLE;DgUR46;a#Bg3}Yv(db*)x875Qxx1z{!HEAUR#SJjZe)YjLvoxWQ zMG=B6&D;mJKr&+`Ci}t7$JO$=YoR926jyq*^~spKRocWYq%GM<35q1)WuxVT7oa1$ z($~+zLm(}Ri_xG&^xN%!y$07DM7J()K(s{a5(AOV)VtliRj7_!me5=O$7-n_Q#V3RqKTy>wM%qd$=bZ>O+ z-eZ7uQ>Ii8n`wVPJOMddbOkC`C3YxC*Y-jLEXG9RQ4@QX0(}{^k)y*P4Tz3F+o3h^T$}sH3Bq z>UE_Q!&n=#9PZ3n!7vfL*tLJ|6uead8 z@qF#O<#(%3<*+jCjR@8K?F8yA?=$De2!(6 zoqPS69k=mDPeGo4H-gZyTGqA);sQ=o{vMp9bJ_X%4lkdzJ*4t^MRy*{fY(|*Ujv>m z7HF|m0-JNnsRGuK+x+7gFHglT#$UJ0z>ibt-~+zi|jZolJ<9LF}7cc&$HO8?1vpzijWn4v5U_d%kFApY4@S+SVT9S56*g zo&diTZC1Czbh_8t*HaZ~u$Z51I_X15&-g+2ci>b4O)HLe&xa|p72!emUKu5GAgd1P zC}-C$J{1+ytzPAQQ^`awO%`(RfE2YTd(y}Eg7q`49}$uWCQH{s(Y3P;8S9<35Else zv=V_jHO-u%43L~gXHNI7!EQxnr!7M`-Kebe+4g8USr#d?kJsND!IQ%IF{}|Act`|* zw17jPm`epQKA-6zo}{!eFY;8m#jl?Ux=|vGY!QefY} zn;LC(?yyxZ)vfK)8a8IP?9{%2MEYO0pJ)08T+5u4pg8K~?8VT8mK`s_FtF*VqCK8^ zgrwjv5-XtZ9VSvp2(dv7Eg8AQ<`3J_()fV=ZpW8xo%CPob`d1O&pqoe_PmJ(&bzaB z0WY?ndNfpoRi#sKBHQ;JUmtUx{zi`Wcl_DqSPj@;{sBJw%xnKNE%s=%cpqMPpHFPq zRl~os(t3`GKaX!8L8eY%%6tzE6R;$aqgY=2rF7L?#2N41yoy48iaM zV8^)hWxBkx%K^%6&wbg2i{1Be7nCjM9kvzV(Jwmsk-d8x-RSQ(0-v6D#$VvW&nsFl z`(c6xVBw+l^)JcFSK4y$(|G_zh%mO_li{6`SU(k(k%z$F4a=1{aL1q9#*O`e&bvbu z|0Gk}f%p!;zS;SiVNNNE^;a{h??#_`!Q?eJhmT~jtWID_hGIw9nAY7km`L? ziYd4$dc#g0IYidEKl+K>vtZ7kp`oeHZSwKc(xjqUdH^dPdzsz5rwXgjb5%u{CvI(n5lfb z>nPGk{YQL?I^QJnJyrXDG5vbWafxp3Zy(z-Ls@SNzU63CtKb&Iz0F{AS%EUt_j(hk z*~!FmCHqv$FaBZ+7b`-wv)O-)8kr~}6xH=+dBlT0HMRCJfF&Pq zDuwH#G(O8uORm1z5-EX3E#k=JC8=#zH5x$bJiSFI`iNGkhQDp!01vzYo6gp@PpygF zPlNy;@Vj5>nUj_Hea?rjjO)unc*oYb%&g8@4zia1l%_p$o0#$|v7B4f#C$W1Zi_`~ z@631U)s2~A0!zgq!q%bP{j9T2`mllUFZ*9(&L$bNvp@QMC+Lr8wi#h#wOE}{LzBky zxHMr0tnvt8s3d%D&fu;uEDypeDZey{`5CkZ2M&-2F&r~BfW*X-Ck^~2yK60VPCaBg zGvgUgMFxnI@4Z&*BlN8aX;YF~cC6b8zS->Q`hC|i2{jm&Mpy-kc1%nyuGtOSCxxje zeA#5$>FN&Q=k7K^=KMZgsB8*{{3;9^t}~g-G3~HwNG!9!-w)j+=s$BB4hkXuyTAUx z1}49zUhGkeF2|7(;P=Ss#)%89X!*1B&yM{0Q&cVbsoz7RiS8(_6LDlN=IgZF)+JD@*4Lu%fcFCT^X6K#95~fU1ihM%$rnK8;wK0c@qiWX<$LsJb_wCIAy6buTiQ%DMsA6l_hay&bwbpBqx$SK)UR|E>QnXa^agO1g&h`I9~%mGB_^MX z!pmzuhu_*CF^AqnZp7dO-i`dQkGQ^s$j1w04walzM$W_Fm+RMHs)V~OqUTuq=5|fT zRo}R_@O4$Am#OvFF_~8p^-=lPnZ)T7NsBkR#2nT;s0a0@Tem+N)O{KYoP3o8Q%C$qhNn2vhk9hX-*pKK{$QKvwM z66Mr)C4qH!q8*s#-bm zM*CqUq+Q@(-oj*-xA^vM`OM+jmA~2H0I&^NP*9el`cNZDzovn);Tp`Pqr4x>eF+eg zOZvT((Zv%jxrU0;&3CBNx+cInEuaHwRa{u#d1!C@J- zE%Iluho7j>1SdAOEnL!rHChNZpeN!_H!fq`j+IrM8GkE9gntw6B0+y}l{GO2*7m_H zf6HULXutREzpbaMZ5LMWOEKg^HZjL!$JMGehmy8u@4|dj zz%(j(u23TEG3sFblSUy@$eTZO8qB$$7;hO#pgq$&ob0BiGwi9*m&=RGShzoAST<~S z!t*d(aUaxz9?{7iEQ1!LcfhU2u}S!Ko-Btr&AvS#PJ#sL#rl!)=w(~V0evg-DQo>1 z1+o$e4+J}76ca%Eze&9BS7V_QUdTV_8%7YTEESkudzwE5bKcot+`j%?A0TZDyreAl zL!GG%MI>bD9lFfie6Z|XKKHChO#}gkQU#7yy9p{| zb1<#uP@FT_$mq5y3zfCiXTD|3bT|##25sBHoaU#dTsd=n%!mnN_BTCP-8lfxgfLxJ z2PTysRis_@IIA2=vT6ZGBee~bON}Hpve7DRV6F{$m|5U%57h(Hb^gOB2kYNnmDd>d z<@3!?L<9AX&)Iz2$ZaiFdBd7?N0#8r9&jBQ9)Pr4?=fn!t#Re=ctzVI=|?^9992iy zTU)3yL%mTUY+hF2y-h5h5!w?%_aZ=PQie`mm^RE`GnK9R_W4xO+%b?g63#OOip;$X z56!E;*p%IgmEIy43Il$CU*r98fR&cN=PKW_DsiA(AWwEYMwM2yZ%RMw)~?h%fR9VJ zC|=}CAr!mEw!&N|P^D|WA7L-M+oF1oEW~PK#R(*7WAdpf?HHL;(}Sc(z*FmEyqpYX zIoL?;&r8}wrt^K>dvYz;Q2DiBstls&m%}y`Z3FCS$~30aioZCI*eMa8xz%n$K|fBr zqo=yhF}?+FyOg(oKb7`98ua8?0C&QM0(kbg>)au?ep{3laP|_rG^sA(Y?p9JPD5~Tn zBm}DMTMMCx8^KE7C9(PxUj3EF5_SI3!H~=|PNQf*+HP!F2k`zLc2c{7m-QSwpR&$L z{V51eB!BTafR~u#ylkr2_*`dO4G#`A7#+P%m6Cns^x8Di$~NmG^3E{VUG?biV6~$c z@@660$&znQj<4KhZczkbNi5dC=0_W0UAQC5H-`g0r%T33zc9`oqT^fJLsQ5}!He;a zy$yTXyw>b|)$L_{C8}(V#~oP~7gSx_0IvMq99Uao#YK%7Z39%E*f$$AKW`1i*>XOrkndU&z%J2{fEtmljwI94x zOvHq;G&15C($3IR@bt^XYk+p ziX5?O4a{HosyKLZ%OU7Ch}FyI$PaBjTCzR;!7l-QGYy0J%~eeR8^j3z8+EGn%WbBp zsk(&ye*yn4Si4#J$r$%JCMMbCd4T~V!qit=+o5GQ_A7qG)j&Lj?@{Ey#j4n73G|de zv4^tf^84y&`5WKav-pVD>&_b>N`M<&3T17PodvUWf)%~w{EfS(?h#>`@vAzkww;63TKx&yb3=7#ICD&A0?O-8TN z&C<85>f`NYjfP?}y$FX#P~|jieMX1Zw)+)V!yQ7`@yfeAT4P}&?rH3EiUL^_7u}4P zFtXRv&L?+sT1?`Yc_!@IO_r+$D6h$M$;4WxVXcnY!B8>4;d%ab58R-`v3smrc_-iH z+HQFcMl*E07dP-Cp3-CC4c6-T$8-+|eBZBcq@^WCQo3R2kdPJ-q#A(#ropy&`IR#tEj5H>) zM*69;m-JH{>OWCilK!6e&d<;AgkP)I{Bt%QmW|i+XzIVwWIIUMmAUi;IrbNQ3Zu|B z(Dm7WeKPQwQIEF^Hs&1c=z>1leS!;?`zrLvkn1b_n1*60f_>^Rmj4%dsU}I&g+?p- z_Tl_URPM<}Wd?#q(v$c0tu*dGdESO}IM93DpF(__z2zLiRpiK>EGEa}FT0sQgOS%F7OW+ADmUR!{BBckJoBuk3Pf*7B+2mVmY@<|yUw{mjSH zN0H>o-k|r=YUi={=Q5$M&9I)DxN-sUGhgg(t$Y|>EQBcd*qw4=S)K^8&%FU4Mwz-9 zNWGc0)B){~PS~9aSe<6zIQ@A#d!fVHgly(RkU@7oN4j%*e_;>A6WRP?XVdcVJR=*l zu9bRvji+NSnF82n9z6&sdVb=?xTwLtWOGwo&>3)4`sD-4oZdzV60E5Em@>K&S0>#Y zboBBSQqt7g=CxC=f3^}Tb?#-Bb`V`o!bWZdYi6HCU!L1KsBY1%mYGM0^*11YAKJ3Z z^I!{U?-8O2vYtO*Xnw|hE9AU(BE6S)G07t`Vj)zH`D^k1Vle=&QsCm^k$9?;TBHn* zeTVpa7Ab!KmAo3j5q?ho4I_wBO(5BZSv7bVk{M!}RIjlsSGmL)9?(ha#)KFx6;o4) z_BL5i88&TfkaKD`WSTy7HM{YXYmS^g2_O17H*i(3xS3qH(4R3&OXQc+;-Zp=B_p0U zNgNU8=i9xJE8pL9@tm(REa}}W#H#cx{m(v3TAf&@#a*!m38;YF9u_>Wt!}GzSv~OxvJ>9xKyovFi4iymF?-7 z^<0n^mC$T@=I*Sm$h`68U6VVsr3}Y}U}j(May5Z(fR|2F8<>OPgSEbKNU@zOa5<@O&*?eU-b{%eO=u0p4*Vn7u*d4bV7+OZl9#Q{H5`p8W#?Z-aE$?*Bh59lSb+@Y_&@F6JsFc=%PS%ZL+iTU`D;DqKq+~1Yos8Q1Kki zc=?HV|Fh#A3wt_<^`7e%_o79zgF%UZ@Ze`vK^~o9!=!F-Y}k9>kI|CKMF0WmbDEO14mq{bMa#Pv4!(r4KqQAKWTQze=&s zd~hxy?vt|wzz0c!DclV*|H>Jj?pGNK)IpOzq#BMa-$iSlZ&M1I7>g{2;Ss#jhbb+E z?+hSm2bx}JQ9c8GfD{F$XSMt-nc}1-Gvt=eIyAN6FPOwFyxVm{UWt53bd5t8Uia-t zL~5Hr*zTN~OTbs^7(LXqDPW|%4or*6a$C> z+UI;8dcdDRmAU){KplxpuN{#%*U4op_ssA`Ja{G{UUJ!&oFK? z5d6J8p#xPTWdLT&n^m+FP^T(v@(SD|>h*gQ0X!C2Rq32l1_Ra^9KGZ(dRI~X?wY1; zPg_(=#s#j__$6;a+>PzVrHTJH1@IO@H%_hHhRn^?11+W)I0WykwHd>U52koLdL@5G z#nr`bckH+VV7FOp6#c!CauCeKp{eAggtlc>1sDFt5$sUG z95r-w1kXqwa)X9{<`dNX%=&F=lE6g9db!xhh;KIS?@Mo3fTK~&EbamONr@gkC5_@| z`OJBpK!%YE}T`{dozSSs2XHEZI^QpQvXNP zAhi9aA>^%aNXCIB^+u??Ng}m$p~r$wt9^(>{vChArYTh%u59o3=rCeI03hLjerR&}lL9D>KO-FF1(~9TlV_USHDPn${y} z=QxJKrvUr%mMBkmX9sLqB5|0)#m}TKL{%g5YPeCp&YOPH-q~?J_ZGWH1FQrha4dhQ zIp}7X>&;svp5UPjKgSePo*eAWWX}GSO(m3q+KX7Gecek_HZbZGfXAT<0MBiGC2u%A zWKRB1A0i5U`USI~^af7IWfEvv#u~P>0G3c|g)ch($%Mjqb-zvFg_Y*^DA%rhqSe=t zMnR@PRQV2{uuqlii6Dd8Dry+8(yk!?jbB+p6z!dF_0o6!+!b6r^O=3J_}fDKTp#W> z0#`^=9UPvhGu>OX+Cb?==O%RrA(QM9m!vb5mR5^Bf3il%{<@NM-5>Kpm=fD!>d*Ei z#Y2s1#*+^($-b23|xi@TU<=xi=xsM4ZcVGMaF1)a^#v{Wo~MUFGNJvxc&EvOEfrU-#o)ZP;DtU*dU>L@@LdP zB<<>wT^nR8qxA-JDWgR{N@1*G@viyr-h$ah%%;;(iu$D!4ln7T zS{3$>peo_-Tda-S&Cv1Pky|T?JKnqJkUi6@y7O+LcDi!Xu;)wW^5@Eo=Yx-bDcrFC zus91IYf84wJzZox{!JJ5+TE9DuS^3ouibIwx1B?tq)@|<@2t`TiN}{{Rcr{!@!J5! zIR;ohN2qbFiIP-v8ro1RM=TKZQ6^re2ER`x%K<1h=&P@fqArufku17+qEWt9uC7#C zI(TFeR_D9cO;Q2E*!}H|7i`0rzkrLs#hOO%u)DMHIFyfULtNCtS^FgmD60#I9K7_6 z5r;JDVy?%AvFqr^{-K50N%NzGni?BxTU$r7q(07Jw1Hs>s-{mGx9%;86ClThV#Rc! zo5P_#!WChelOy)QHS^XhB#qa>G9m9gJKcEShXi(C@O2F{MdMk9>-u5j)Snd}=Ly$8 zJxJog$t}XL4Z*)GQx@SW^OvO z0ft+kZZfK316tMxs%S24#R})HgyA~Kg^X#KTZRrfox)HR=^!Lkkvwk(I`tIxX=>MS zm|M^R_F)@BEskFC4@8aa+KsZC|r#BF6`h%LW{B8uGSVOMwcdwHd$d~z*N%UT`neCN?PO2|e# z14K$;a0P)?{!}BUFj=KNsQQHDpULJSP$~=zuV&x+63MObHA7Ge-tM2|6IzrC&kCvG zTfU$DcuGU?<~ZX2b|fIFH@c~jWHQBCgiq#wkx~mRyOTiI7*QFA^vuw0HLA>ZoTRo}Yw(vHug_Yu@Ag`ZYWwM z=dgW6>!B@S6)F-)U&$a{H-^P%wwX&;uoLb%rJIxZ`1N&}-I=cuLLW(%n=ISAQY((~ z+V7984>M@E?`-u9;Io!w5PNMN7nT@wt-dVKm1GRfLsghmFU9=`GE)~)#?g<4#`>2h zb*g^jv11k*ODSe^VMcJ^$y^Tq!J8qKcDR&d{lRKDJ*#q6#b1z99NBerh=lq0#RBk_ zuVurmGgL+5T4e4Iq=Tv4|57A39caCXnw+e)URSNWDSgvq+ad;KC~cqsYXS6pWTXIuL9dPE zW)knyvZOmds*fFYMwmYxcO!RwG%Xyt9UG{r8T^R))wR4 zOccp5CE8$FGkUngPE>}dJuY7Q*x)`uvAmzKZxDg1h^uw}>kI7*-F>F1-Wj92T$ z%K_29^XOwDVG>`8Y<*+GlJqUGybew7a&#JX*H#MFS$b?J2sX*v=Y)(zm(lOTI{$M!kLV zpD*ZhS`Jz3Gp949@9`(0#Bue#P04`$o?Vz#B!vGWc=Q1BnzkmVYuWX_11p~y)2){( z^N;&TIPP(gLES2IaCpveAxdN`3&Jf5mVQWt(bQ)GRM`TX7S?5_$LWEDmZx7v2G=Pf zka^wV79^%QKyBbhJ?{ZZM1NL&=Y5=0C4t64kBi&%m4#d0*`Q$mC(+k=>VC}&?+t;& zI~1?ml65;2Y<-KJU1roHo_fRPdx<%O({KZxdalN&<_6GqdDE4q;`L`&=U5yhI%c#HqMo!8Nco$$@e0u1eD$wAw3 zyh!%DKC$2X!G3!%u+Ll`3FI*osAffN+@iORE%J<wjdnb9JSToyt7i1+M%&9i>A%jP4@7Shx;)P!Qj-S*xm%=~~XW$IS1-Uxoqu8W0nx#Rh=QR%}VeG`#W z5&rL8n*l$97P+OnKO<%8Xz6wP1Z5FlKlMcoqLM`VJ8J#YE_4gWq;K$Ft_Kony7n@x zEgmxUf-NXWv2dw-#_AzRL$m%afcW+a5~{ula?WBU*qN#{kG`J#OceI_)&3>ebCQme zYWWRH_x*dfyz?|3jPK9?Hh33}u!o<}Re6tG~F<-)gzI%M4;)XzXi@WRF zZ{KupNj)%|<8Fi$7(;KpE`1z!QiDcO(;<>VE7M-}T!bBdtADnV zTkKl)_|!rb1<4N{lT(d2jI@^s)2)x$mh;!nME)MTRgRI^ah&mJ2w2wy$?f$ldAaV% z*>AnNyPo5mH*eWR2|uSH|G_T;Gx!qLlb2-P{R>`MCMjy|AqF|QS5DLjHpez_>na=h5XqojT>-mh0T~Gg@x-UawWNSX!I_OyNWGp{Kv~?c-@5b+iJz}oh_X`6 zi{6uUFtAfn_hEEbUoA_ckp<)l#Q8H1nH6~j3NU&Id}8P{_n^@np^umQ*ch8b`z8el z(r@KOrqTjS=(=dm!gcKpUO(VA2sj!M+ZJB+Bl~xRgxfiSMP&Iwxiueq8g6=nIeypS zQbG%EA<}l95-oy-9XJw(CYZto@`-sW+9L^2J7J1&??)iA2tb_LQjk&m9v8D?AH~r9 z-DGJI7#Ood5Zyx=g>GE&7O=bXWutT+)_T&&h!5U#7%V}GIt?&r*ath>_H8f_2!GsOT_DwX_?Q41-mM#?Cu4AsPp@>51pEUVF9iI^5Br(9?e@qEexwb`@rBJ1gG7ugP*Ec9-=I)smxp~f z&i=RjaY$7&r=DfFI{ddjD$aG;2&tH1`r%er-&Jp>HY-0Jf?;e#U}t>Nj)Vfah5YCB z>Rr#cR}@wgh}3X=KEy5hcLriqc%iginLyXA1Wg0gDA&dXy)UNFiD0?3n{?7c7lIkq zsGHkw61q2;uHUqGn+};`WK-}%^)*EDP58O7ZPr;`R1aO#cM^ zxvAZct-lQ-(JdYQ276wnMnfJ1;{waac8l%eSGzu%x9_>Vfx-cBUnnkb*J5Z{v5@}E6VOahY=Av45E9`T+xh*5^~MtisA5FZTfa8} z)h89EoisylQU`kj_*$QY&x+}_X74hJ60#LqO+JJ3P`;N}K&tG5`(}hV&<9yJ_at{s zLTlr_3CiT&)Qnnw1{(-iv1Q+Ft|Bv0$SGRs&AWc#HFm66Cr1FZ*pGMG)!J>4M~?S( zE(?80xI|UjF$*$EBz8e#R5vobS$LoG<%68b*tVfjpQ%nd{2;3KLqPJgT$~Y2sA46h z-V*86T^5M~CZzs3ZS4G`!2sZz8H+(ikXdF#+;4rO7Jw**EPoI;JpT)56XidLbPQ`E zh?6F0)00;Qe-q}By$KRY*idPm@ws09dfw?UIJ*SDo1vFuz!kuy$nIY29$U;r3!P~6bXRJr@5aH$XI>})A zlca6K%dR-sX!RB0Z)#z)Qh*pX547gRm9R2*`c-gaM4Qjpm!0^yBpkWp)}OFDawv>P#Hw%wq0JhHVH za6hLK(t5@-NdEBkeh~Uv?%7dU_SO34O65#=&{#70Y}Wp+56TZE7YX;dS&pHG)#O{4 zd@H1AG#WS>WgE!Pt4BYQ?g1@l?W*CcgM@nGCX;6S(K8=okl``@Lh zklLj{t@FfZn6f_)-2~MJtNj&fO3y-W4}^;5mF_`lgPuAVO33D`c6*s zXak+*A@l%~i`2PE)^4|5i`BVTjaFbD0*?FGrs&FQt~O1^M~n884W5NjmAmZqYbpVI z;FKn}$T(Xt>OhBN7XHCBpjUba6)Y#gu9*AXWPsyC{Pram<(ENc@V++Tu-gJZTR{`9 z?4gMs8}q6e{dBd!2xEC-G7fSn_Le_*)M+4L{O7p&dsyKU)DE=u0BI>F=NWTA1ZPM= z(K~Oha)2LT;fDWcLV0{l^ttbmx!b>gH>zob9s%!jfX;zGQIHE9U2%fOOu-J{Y}Mpy z)O5)KU)1*lGh1z+foPf!RBEaYF~Sb#dRc_X+?@rg9g;qMp5S#&L<;0=@#N((*mg=P z_rBGmc6w0PQXPjBMv@_8#wS!Osu|# z0mSu>X^(Z6>8f4WC4C;-j4U`srRRwO*aOp-vUp>R-u83oalFA=xp=n zGa2j2Im}QBEXBNsiA-_p#_QXR_^mPn4{W59R{Yp=EGHGa+)vZnUXJem&ZF2`B@Mmk zVYreBEM9Iv<{n#}WYyr1g-$^uCYg4u8!v1Ulh&OOrT{Z0rE6xFP)~hfov#{WchE;%H*D+~+}l z-b;&=+57+PUiGPdV7|QU{f&G)DeR*tMQ^>J!GLmMS-9^5yuPtpYip9-Ps7E>G(akD#C?i=GW8}TLu;nG?P^ z_^U`0X~#w`SG;Afq#RS$*4vlXxSxTnF zfWvogKd!w(|L#D{Cr0V3j0pCkJGcK?cDdS|Sa(#5h|1%kTHc(0e{A?DJ#$j@GeJCU ztLtK^l&R+)61^GnZYcf69U)9F4f8fCSW+HUiy?p4aXegXTT~Lx)eXw#&$*@im*s?> z)WFC`j2kG}xb%@)^~-`ko8KziN+BLjU+D!TiWGFJ2B^|C7D{1BDxes-CRPi&gD@UJ zV*~Rmy$>V?kgLovxieE@z{=s`qW_x5^$yg)3>NTcjhx!Hal=R90l5v#3_nd-^IeCj zkVK95f?qmXF7Li&JoD^|NDP&0n_mz#+uFkc_XA>r|AlQ)XD@|=f5DV;m<9_xi*}sech}hzkFwzhX%gY1^H}aj`oDfJ9NH#eB<-W5GAIo3eHBj7+DGnc zfBfB85Q>`f$pecVlDd{lXg&1S{g%-l=Z7b()N>gpr#Uqy`|eSZ)UR6uV%R6kspa+>WnS?tW~Q}{G6f5 zyCKe)QdjPMfu8WC$O2CbW85~khxt~ByQzAhjDzHCK@KVhX~wtZsbh7V&8E?(XCgqY zDS69Zod3)4*EzSke2Ph+p-8}unS{O!sC}fe5dn_(6C%*F2k)8LsB-1 zK9<5PRuyR_m$xGSL!{rU8eBkJir^CZr(F=8lSh2V_mRfZw7nu5iol5-@sO+X>?~_t zyavVRWhB8;3OkzxbIw)RDg#!S>A&8fEU*|( zBb`8k8|nNfeix>F-5&Hd;N$X(Q8+}q@h*r*?ZVMTH9jm0!y*U3;Bn2T#L&N=FD~?b zJ*kgwiw)WrYfjxtZ!cAk7Nl2byR8fwJ!|L!y)1i*yD?lu8DCh;&JsEMAZW^ogOHmsw5H)D@lW*?0vV}`; zX$h$_{H8;Q^Kk-WNNz+2i`V=YbG~GT;hJ8O|54{QtL0Egjz6#a-6DsfV0oO_*Q&&1 z%4pJnUu86_bcDHyO}nFCfjZ)tAY{g}Uo1vGQ;D$fAXlmt9Sdn9kapJhp;BTA17HHUQfjby-< z9b5GJ9_t^Yz!u-Mbd9@yH*rpr_&tEMtHwR<;c@f zj4<%#@Gd$pD)n77(2I=s8WNPRh7@cmN-|f*a znCuyWjPaR4AHshyTh8&)7dm=wqgGh;C|Tuv2lJsX%Fhd!Nii~9cPC}9qU)cR#Jg|V zOn>djdcAa1H*yR_FXGxSwKX3M7OpAA95y915R|U_z0`&_ddu ze%i!6Krqb2gS~zhiFQ-nT@?J^`+fqPH#Zq9{j0rbOP+)^`IUaAWr~gzBl|%A+4NQj&J@3U|22q!9l5YsB6`2 zT#M2j+vYZ!eu$2rqOK#P&qTSaRpHChFEM>za4Hi*Z&7hNTMS!%Y1c54~>$CW>Tm_sn_%zW2CFxtlr25A1KV37SdD{%VcEj-%?lO#$HmG%K?#>(039{-p2ssCqHm7O4rReyD-L92x zyf0@BbQlx<=FM^UK@vvs!C2?%tfQ@ER0)px*S&W2y>3SlLK9^h5AQ3pOEsRpWxQaV zod2UF!u&owg`s4yu((sV=MSfc=2dZ#!l+2?MX}rW&sqeIB?Kkf%6WP56T#CV4#u1`sGJ7Pe~LrZTxtx zEafhL+z}@CG)p3uZ>l_Ur7mUI!>9HGB$bVx$ax~pcNP)QZ~18I<%87$&A-g{1lXG| z)FO`{PUVb_O0h(?|A=V3AbMNB^ibZ4bq5*PT^kqwE$6BF`0`w-|Qb2Z2PV zumH~UE8&dS6qwybO8S2=&sDW}*=n^-)2#PoK>6lS^K`?R0Tjc6FD@#6MLD0P5myw` zI?>GLFn-|XM0;E>4SH8e3v2V#@2&)^rxeavI-+fe71VJnj{U|T(xcObACbg`yv}c9 zV7@2A#Y=KwMErPma-K^Bb0rY(Qo{f|Y>P@T-?J-k;Hd~K>l)_H@`cI$JH`y2E}^p# zzDKZ;@pGljc^7PvIsESd%DU)bLi44s1ehk#bl4o}p&b@A_ruh2RK)P|NUrH!c`=X# z+nQ4}A?OE3fz)l$Q+V&uZwR7X&(5!W{AqVGenjZ&cO6C@O=%86ooc+=^oapI1~wjy zOPlsAj#*1Ls_ZaVa+uj{$y#;)!iR{|qDJ@T2O7uLB3^^w(1?d zf`B2Q9KHJp@j+5x7G=03Za_;St;h!0#&9h&C6ayKX!Swa{Sb0@Daf}M_ga9Tdpi6+ zn!!)|r>*>Zvf4accBx$&{q()whQIiduy=t-7xtU&RQInnVLR5>-v7PcNWOQ9J1L3i z+gVU}1n2I3{(@B5uHNea0WNbaxfsq3`3935W&P(;5=OK^19*$X6g(8Jh)S!{^%O@f z%mwvLn-a)!Ytz>x%bA;_--cgVC;S8eUm+`HzXT3^D>xQ%z)+3qZ{BPlw1fW$qB}Zds@?u;&Agf#0Rae5fj6Q&p z&Z1b^&dUZ+rTk(xWn26<2!I`A5ibJ^UL}c`a7jDIW(?1W+1w(xv@e!FRem{rq8-XD z(KC=u#P;)BUlAi{Re=DY1fKZ4=yUGCSr~~<*ZcWje+dIGoo_^WJ3Cq~j20IE3k26K zz5cf&C$Wq5bAkD!1^*YeX=d1f8XD#0GLX{KmqJjC5-3lvUrSqvmvB5lwM*Bh70+BS z5Q@3*wkz4{tK@*LlZtDt1OeL6fLx%V-6i;4xhf}Q^DsK8Kx$7?|FaiSjA)jk0JXY7 zN702~w)|)+0@s`V<(PMF{=S1q4F$3C1jaP2^khh=RLMDcX(U9<_4^+rRLmtehDtHt z9oVS>>|NEF5kJQwdS%TWq2y*sY;MJMTFibbkIG4Q86fHItCHmzKe{%vn9cq5Cj5uR zVFVovLqi7`-a^Y5Y!>rwR)#Jw5n8*x!{9~6$kW>jjUoaH6|J#MlQfoYvZ@R~`3ii) zfEe%gF>eUOfQPmUFeWrhPrA=(53Kj-cgr}s^~~dB6lo2OFJzv5Qnx(&(%Ai;7FA#K zMPI#f`-lfC(UOR>vcwMv<=m7TY1Z^(5AlZ}88YnBflIs$f1wEj`)h1re{+trsPmfW z2DYy|jC3oTe+sjVw_Qy@#^U=sdZ47@mqBcc!2(XMu6)`9FMqrLcP?y7()ldNR%K0b zKFd{?hS+CJT2~;89)nRxJ zLnb;71_tOm8ds&E%IWE%L>kMbH+6(55sad!7Q?6nzkdL$h~=cSC8Q;^#s(&UTIco8 z$Y5-DMFl22cI~fa{by~fbl+jhyc{(!T&v5>lqoAl6!SRgriL+n)mr zhY0?DfJw-vUS8EuN(T@x;(G77G|5MVD2JpMadgeKE6fOBm!9RO!|-{6vbVugLn7e1 zy!u;w|H6h$^TYe;zPAr8%wD03pBHuC`aP+&?QBus?8nMmwrWt}>I>U!8Ck;LWUCN_ zPUp*~GXN|>>XF>z9!lh7;2d(mwh_xc8Lw_ir_f67&JMQsxdaLue@KRGEE^NyzqsVZ zTOHg<&Y<6|4p}lxH^EuBzp&~dpS|@O5Z^|+;ocxBu#8nAFyYC?p>0XZdPBPC_RbL5^I8 zxOUiRFlk|@X+tAxnNm!2J#v;u8nV40f{lZc#f&4o0(%nUm1?U$AMP-u*t+~lQXxS%6HM?JibXg+ib0|Xy*Fn5t}ii$BM1}vCw!yVYUxdjFst3&mL;wLs( z&zG;*1u#2Qg2!s&ecd1py?@Y|*e22J^TjmjOIyi1giQkrS#~DDMtfr6OLSi;u@`xc7g`sq3Q@IIJ*|pS?Z=2Y( z-oKys`BeTBzO&=xQZV%Ft+J6FlLlN#YX0G+pjg9i!CbWIV=-X-m@(#Fn5_;t^-J;O zPE!A$QZ+#E1<2+I41iI-?6Q}9U>!%b&H>`)mN&|EufT?%C3E;!1E}{RDtNJR8`E~9 zMmTG!m2QPz?7+V{`>h!E{3h2qQ&zV7WgpRrXVF%iR{1M_)U{kxJ-}w^>$t)L)O}WIT?~dHd4fO7|1-AY^Y4HwEl!u%1THC`i#AXg_|w^X&&@x@Q-DznI9++=X+^|pc;Qygf(ToO_L|ip`OPFPq+y#gK#Ap>5(f5A>^`2 z*5+?paCD@x)xI7Cai_&w`Eq_uXbR5tee0#?`9PGJ^Oy4`<=UxFh*4)S^;?EKf&9ID zE{+{@!nHAQ-}Vj0bwrp0A^^jRv99X-52EGCO-Sc{cx2L#^>{A{&~d_yGpVM_L0BfN z8Ui-kzEx+M*5JYrc_%JH7j71?)oCbq!m4J~_}?1>yCh$lp+6hq$7fer0rm{7gl# zKP-5!{eRgQnEpcRN-UhX6v28$0}X6qWqP?EFRd7HDa=KPRIi!T<#Tcj6CvCLxSGmg z0q@OzyORyP8LCuM&V0u{7rW-PkTBUur5O09m9zXC|1UT<-V`H;McM*Z=-kgQ)FrK2 zBMOCsf>%l*vBe_Oh!r7!A(pYfmnKsq9+fm1p6PqI;d0L9v*u&xOu74UWpm>N825{S z@14L2h3E0aIQNe=Vr(5cJVZLhrL+g`NdZx)*{8&4T}M{@Y$sNJ$^iS)d-|*S41)n5#SLXlPY4p0D zpf1DoNG6de@@&<|m4`(*gYVm=0Zp4ulQZgNdUBH&vCN`N1l9=8A-TAkF?P{A=3f2C z?{rsn7{J|-Iof@lBTacqhr%DLH(k-W<1@jzwHBI&CXM19R_mA;3r|KQmx{)ZrvD=m zS$n3TrDIBpJr8*Vg6{7#&~T+ttqfwEGn-BzAU1ckm{^?2Bo zfv)XG6Q4lld?t6>C}YoHOJ|a~i=0CWf;=w>QqlPxQMdgz-Ln7S^NOZnl*+Cy+U(pU z(r@H%?ag>73Yu_N9uiC14PM28-fV`Y8o{yxHRN~?TEO4SUD@s5%>qXHcC68pK_w#9 zGi+Y7()M8w-F>Bj05a?EZ*HmHb{e*BZ4T>a)KDq4+}IS3Q!c6K69sP)7c_PP-2un} z5av`=wOVr3Zqwh|tN2?(GRIjfb-l za1W5FPe4-XpP}u7Ol;AevEejB%rLkjZEkr}1=fL|mF^+$8@~=~;HQD?{GaC^)M_ST z4SAqJ9km1hKUz-qz4m#y^!620ydNGPepeT&)eqy{Qgl*EJM9IeTs~%6B6!Rq9lChG z6OO~&vC8%X2Xxi=f>bQNO6){4GffiGGJu>qn6?nal3RWX9#4Ybw$z1F0@GpZ@%>p*J#K|w~qC(R|zl|6LTPTIIk#HVUk_ant^$+HP?+hU_-^dxX>v2DOUxu zpu0a1a71|I1TZG}bWpZ>rBui>;*6kk0r*H+tRmaaV|sBBbee|K8!)*#vbi-C7}I{g zXZnaJ62RkXpW?L?kZQ+` zHq?}3%nI8NoIJ6Wxeq^FUkKJHkG!YhQW(?N8d0=%Po1pSI)_+`Z){v$^Bzz^79QDi{a?CZ81E0q zB;+nZvmW{0!>D11-!#7E&&b{sDrlDCDbrKDE5o5>t>0AxNrxH+@3^Le!3MKF9SSA6wUwPS$boB&CrZxg>*~^HXq;V-@n#@ zHq46|dl@-XjYUsaTEs0fgk!M|Il+qP2Fvo+<4I&`H$9HV6uWx1YI2)u#{U;#sncHCc|=OS%VMXJ2Yfa8LT^IPBE{{ZUZ5eok5UpdmsFp@aJHRqN~y2O z!{JRK*U-HW?b`3YWh9xw_yRMhIQxr)@fJq(@3&s<khjSf9h$*0kRU4(zKKIs1F#7(2%;!3w6OJJIeR-^kZ0WIk#}pg<586n_E8 zI2$!Erfh#ItPXkI9utI@rwgo5Twe;AVg1*KIAh4TmufUkC7o68DW-V_DwudE422!Y z>ZQD+fDR<`Uc}DsRCO+lZgVTdgr}!8fvQL~ah74}u*LJ0M#zG|s>x8oU5z6x!GV-U z&;p^m`JGrEVh}nbJ#IS$fl&Zz38*dH1PlVNv1lBiQ#!0{l2sDY#QQwEjB%`7xQKA2 zOo~HUsNYoPC6gD8i+s6q+i2jOmi8@b1hov(Z&o~)wmN=&A@_mTM8GiHPU#Dz zj5jlC69ptpIQlMZNJNQTY`4>kw7v(3m$#!(Ct6up9|C_7RHZ|3F`Rh1;4&Os$z2tY z{qY&&Kq&r9q)Z}qC-r#Q#ax0VrAuRcj}P8qZaTU22}(t4BnZy5Y4MtRa*H2R&T`Un z4s}jUTf|zqp^3SjJ9CRV>_@j%Jq^`qiKqpE9Q3B$KEUeY>lJiira_!b(|s1i*wVvvY_N3-??P~rb9aU^ZL(n$@KtDY z%U@3M*q3O7lRlk}3xkKmcvnnrS>~-DmkyqaDz(mqO5|Y4 z2mUHx`}6>(CUjYtt;0Fc^UQBLbc> znrzi74yN1wW%`OPa-u!^1r~Pk^;5|?P8*vFWoVhW&aLnSw?DQ0g0Hqx5SN3LjTnw5 zw8hTxJ119#egjXLrPc$nkzoxnZ9-|gGpclZE_k}T1RYRQTV4D<=qnkC{KiK=n5V?+ z0FoI7^BuL^iN-tlp3G=sAR}x(Oa+QfuDZ0iFeOwl1>0Cy#{pwu1FxD+WPr_=fE@Ys zS-A$_2Sn=Q%g%A){U4EoKDl&3F-T0#Aj^}SFL1^ToqEyd(z*D>OFyNhga0L|*HEgr z(LTvuPAfyJ%EZ!*zm=g2q&Qu)P|5GX#41yu+SR`DhmO|3#3!=xvGIiRtgsy~qVxUw zKn|FG27LmpT`Lw!CrDm6v7UDfk;*z*5P zq0G$3QajC6&F#_^3^(QqZ}>_LeZ_g+SoF-)YG3?ennFyV@{@ZgA}E=Kj*Y>9voEBN zNm%0x2uKB338A&mK3W20$$Uzb=xV3{QjLGzA)ZHXCxPc7B1A^}nI#|^2`72Cxm76; zlMO@?0B)BA!V_%HCM4`+atInZr@4}p41d1wy{5JiVMA3zecfUz%XKvTF0hRZ0KN-< zMAEYfFqG&}S*^7}3BuuoFcLxn-ei763fHKwgSvl1`6CS-L&+?UchJQ!ga_OxWSf9u zf!XgUf|G~J<*`&y@nPI1mjl@V#iF%XBe9y&0Q_FDcr2`-c8fw4%TkH>&U!y(T{yfo zYZ|?uQC+t*YF}{+b@g;Y!~aYBt!?L>or4)pnn;YlmdVq@wuEBmkVbh+Zu!CsHBLc{ zsodQL#1%;WCMAwf{UdC< z^~6XW3-g@|%@Z?4keZ$t{Q~IVi+)stJ#o%F0&p2NFS{<~6b5{ez7t=w5l4g#75Q^N zj3>6?TWDeiJ=T`)?l!%dIhOWquP+NB)QV%|yk>3tG#mPRE1{;0Z0AivPLGFM|&8mcNsW{(#x zd}Tu!x6#C1X!ZLnE!foW4MBkSS*n)RfW7*z58LQG9i@xx;_02&|0d-l^XEggGj>%M znDFcnbz8L$>z94H{B9b}-5fs_%TO=}o%O-FAJmG#iKGeSzoq`HdF}3H-GCeFz|t#vfgvKWe1SP+S7OTFyLu? zNHznjb*R!r!h>q*oKA26cSAfciJcTg;GjrZAYh1y32@ops0Ni_4u z$)`XrKaS=qGvl~!lqv3?%-R1v#Rvhu3v>gw>VEq z;RLZ!Psu}u9Tm0W1^q2c^!I5v4~FA6Un76=sz236{UgVsvy{0s;IWitk^Bo|n;`!3 z|MB#eVQofB+ja{SDDDI(?(XjH?oM!bw-gEPPAN``yL)jh?poa4DYReq-tY6>Klza( ztQ_~uteI=BQ$C(H&6i%oha)3?Nw-I)F%&ka_Ezk&4EO1)$a4@UJ`c|_4lOo3a-t{2QCY1}OXh~N%~ ziTn2<5HCHXyfbgOT(`|r!tplDJ{u05i!jytM8~)$DtazN)+p?`=jN*H#xEiLK8piLHI^>|9-V@zAn}V?XA>fZxOR}o?rjs-F$AJ2Hk`r zqs>G%H$Oydc5SV$D%S@60^^gs?QVnGxAWE3ylm0qnhl``>zxmbD;px%K8KZ6$ybaW zoEYvaJ@gVt;jI(!QrJvDiHYQ}(B{$F_4>x3VO|oMRZnA5`cIbuQQ~F?tZ{Y9AmJek}A zZT9?ffGy94mmA)Y{~hXCLp^ajh-AOJ=RP!{LowhPo%XLNPL5U>lzh@GR`-F|p>&2* zEyh97%BgXR(#J0su4i%J|E}%(Dmo2aDB|!FaOG3w(J#_C@pvgzGKiPfxvO^BIffQB zG8Y{Pe{l{wH9sA&N#E;y zi%eu|X2}(B0O2Djllf-R46@yb~_Gq8F(Pk11qcCV9eR>7AwQZhDW`D8C;cTXcT zus*dV_1m+r=-DGQOKLb(evHt~40QULCpeH$9nF+^=HboB*F@!KJgdW+y1VCRpy;rQ zlml{4t=4e}4*t7(WKtl?4)Zw4DT`+6ALW!v&i-dzb-QsWq>Y)a#1-`CWLk#eKXc%u zgM_43ZYaKme;!FthEnBBbOxm>$CIhd$`eF@8vl15& zbN!5mh8fP^=*N>G7n)a=5zXMM4EvCH1_~8I(BaY&wCBDYb1V-fKdsS>)eg-)9Z{lw z?QYg2a#{r-2JY9Q?*m4OS2QDYB=Pk93fZw9y#jhp$0OPpL@>+LL<-iKH+ESM|@9UQ2VdVr!}qrFzE`-0|8kRVKP zz+va~fuD12eEH7;4gC+mO=%zTAGI3Eku0-6 zbD5V;(K$86g3GMQb2T1)Tt?sr^+f3tiTNbeKJK4!I%qruNPb`WZF6JT7C7^)?PD)2 zx^!T}qwr2HHM?{Y&lbnxt+>;FdpwsalupKvzyK$lT?^=78%9}Dc__F<|_bt74-E|uR$~2KMboRe+ zsOkM{u(2~3t=sebWcp*x#Oryk^RjCo<962#n`!$sgBJ*H`uF$!j~nHM#~$i(@9Sdb zPGlr$@coV~Nx($THkYWV&-zmrW^31Ve=JY>!aCBDYJi5DkRDQQF2BcPKQej;#8HQV zFy)xbnwNJ=c-j1`ahbyuukUsPZne5L8NN&TQ0+~{-=?Z(8%8`6_ds@SG!;*A3Uzkm7Q|%iNcDSfdmna zwUP^Al9)H`FHEDXdZ!x>?h^Vak8#dd-2g$;N1cx_d`=&a2e{=yS!relgam3aTBa5?V<$_Ss=@%Jw1!%pw0B)<1-3F$Z64&uO}b75ph6oA_MoW;Xww@KNBH4zLf-UQLa%l<*X;pJbB(tcs?T>e+&jFU2gCzOB zw|1+gb}`jjb;i&|=Hq@!iKXxdi)LKkN8cNOn@trGqpALCSa*mPn-k=oV0F_XQB)q% zv3aT6`{ z7Lg@SGJ?@DGgyZB5qnEGFFEc^?nix#uo^B{M6%I-D~ROqmRGUXH#RrGWe{6#btu}8 zD{}!^0mvc=`6_1IBbno}g1ypc&Oiz(dP7sSepWF&pTHh(^>a^_uG_ z)EJn>Ym6MFc$lsIl>*lf5&q5q8#>)_{e!o1OXdR62H&LNv*sJI%A5A#T+CjW-Zi4O{%X6pc>#yB)<(ADET}rjVZc@@I2X?F6w7{>EAX(fZ zFxwh+wxFL868zqJu{Q5J)N*5**#aVn?%bpA6GGCM*?DX^A|RsB71{Y; z=k!U`YJb1PDV(cm@C#ivWvE*(HmwRqUmZK7&+Ka)xEy7=kBlg0yc$j(6N_!Fr>93; z$<&) zj*36u$y=e-`>ZiIUpoEUW-Y-J`Ni^%oyQX=q)(;batPg*g#@%q{}xAjz3{tlZ7&Ae z_~W-{Zf21Ssvb`|{J>{{;}2Th;gF%#?Wz(!T(lwHQL~^?1L039Pn9l%Qpa)n=DG3x z*dxlzLU_#9hXSIdabSW{7bxP14+g z5Eh>%{YYxhwN}QV@^a_L|{8@4jOvWqcX)lLI+MB5pPT*jn+m^(zStAKz@|R$tys z#oO*Jrc`9~TOmraQTPGaS{KArt!^hVM z<-{Cx`{Z%~Nv%-yz!uPljKcEnL-OsS9WDn(96dR)c@7(H^|ul%Bu#i$DB!+P;%fIHV$s`+DIy2$j_KO;3wF!88b#*m!C1`paSh z*6}na@mL30|GtAVZ(NVz)E^HAV?F*un_FiFN9Qw!njEz*hCd%tFFTH^=tt|&vy?v4 zyO)1u->LmEYKPT)0rAaM!SIaMuNPg2RRqYZ>nt#|S}FSF5GLE{0sP#<$R@nvYGgUb z6(UdA`PtUiMuc4RN|FI)&~u8>7QU-$OTSok2C-^|Q+9_M?vmT|7n}Fn`wV zjws>^)xqscq>y)^r;;aEP{?Up|g0IV+-Xl5h+PH>hP2hQyqrE+~jj+ zR@QoDfcsE1Bf0%J&P(9tuUfAg3p3PJOo*Vyt5q4+H+$P+KWDvZ!Unz~?+p0f>s_es z7UA(q62uY-qA2g&UCb1IxK9?tE+(N2xna4IpOrKCclUZ$<8~woJ(de0_H?5Xyly31 zfslgVVc&wZAePc{${_e@k)LsEAql10G)XxMS=pGHdtPeAVKu?TS_~d{)Y1gSYk;B* znx2uYO@jL=_z&+hC<5tTpPR<%*5zq5S?1F`K!H86jx*Q{8U#*^7c*e|xY1**ygKNW zD)v{xtTfc3@D2V$JHqXE-c5hx_vjtUecv=}ITk7jCAW5;e>1&e6oXoTcr4`F?!$_O z)?hRZLd#&B9EtwBAQzC~x43s|TSjs@$_xpLNYVS3$?V2aFhgG@m$FPbwjvPa;&y@+ zRGfR(p6O|HY##Go5%IcW2i5H3n|QiHBgMZ#M50G@Z%QKXxT^YML=>1Ghu0t6rlE!1 z_De$NNgT#mqoWY?UVW4dHISQy;VE6}R@(6VqP)?yr$vs$aIlWBL8dPWH`{3oE^jAu z_wQO1|S9|vXgUJvb_cUzDQ^gh(A8tZ}e{gj&B(XZhVP;nuAEy!(ICG_gj}g~G z9f5u}dR&z2f=95~vJNfoMkOy_&bPZS5?bdZ=qL3VKN*|8uPwX$+v3$+B6Tj6!^A>S z_|$dPgMdq`UjWvq+HnS~`H%EIfBb>Qkwd;B}yRx?HY)Y_h>MHPP)}f}o;UmBsCSvxOE-&EHZ@(4y z%5b|usys36NWSq(C0`^gsOZPyPJWQNzq9x`BU}W4&cb6b!9Ax~n9&9SbFGfN{|ABp zCB^rLBuD6ldFu1s9L-*e=9wYLz}~2218y}-MFcKa<%Awth2e)NmbHW@&eNTaWefbC z*Oq}kV#42jsXL*Y4tq2k`W_p5Go`aB%;K{Xuf@uM2J%fok4*V?OFy2`hCc5;zG>s1 zq03fLv(W}T*HKOvuK4Q&Ba0s_P7!Gx&b~*8L)D6u%0ibp!JWEq=4#zCkDYg7`Ii`lDJ_@+XA)jm6r^ECs*OUFP`rkIz zUL&eC>E$MhOElUI4&0OEt4s0}x+a4vSE6NvZBtUeNofY)+_<6C(=a!4^!(KQs-O1> zN@!aPzyTENt{_TAvGt$y+d5W$mI-_2J96nb@QP&Vs5?jD=m0G?H~%5=--l$HT0HB6B2w2pbssJ168LC1V`A*GY^0lOHFFM#=tsMBm7H8FN?&?cXIs zlUA3jaW$EznSsPjzmc31&ZU+u{BCiP%-eRI^4J`scD=KsZY8EBU)t&n1L(!mynf&e zY45DNOArIuNflHc-*XIa#?@wNn4N{*_6mDrgFb;foCh^K<9z?B{U=M7d6kK88!hW= zJ2e#6t58y+HRez8zX>}HR58UloVVR9a=ikS&c$8_$&Z|9mL83lUX$?c9uoMRX$J~2yI%jZS zfpBYtC}8s8ub@6HL;W&|on ztIompVdV0azez2@l|_{afAUUZQi&X!b-M-N^@H(@jq8`H5!WVK?QHyaajP(T+rY?1 z1AHeAjGTz|)l5&#;F_N4#ZXP;CP-d==P*_`+-NHM96J7y%w}*^52m{ z=d#)N<*x;y22|WzD*E-Wy^jLPJk9pKPU6p`Mj1&Vt?amOb90}p*|7$$3R+sNQqZy) zt0U>*#6K=+Es5J0a`0!V(Mt=m?SsaRuKP&>Ivw4S#OLPh0J-CD zX)2c}@I@}y$f1EN331XmcHK?BViD4T92mu~wdg~aK8z!2viMdD%7wB%G=CbW23~(t z{EYi!qxkz&I-SGZJy^t0&{S@7ZS8eC_?6_p$9fc59%=r5bBIq$iyGFBb7&}_1kzf(^VFejU>-C`U8YCPf{mQQK^I%zDUiguv!e`KPgD0 zOx*Aw1&Jg`=8sJu9O`tFtU-9b*x`c%b?r|;t}65I#yPsXz$-sF z&}W_C2rz5>nhXbh_kN&-5h*OAfM8E?6B03aJ{C9lrKPK1uQ}e7_t~nwJ0F)t#43Ya z!dcZZFHuS6+9SyNX#k_ag!?V95ZCX-p|j@-5$(evg*~Z5czt5Gl1}lk#h-!Kf#tZH zk(>f%9v;MoR0nlJBS)O&ueoVcpTCs#K?8z2oOSL5N>p&*&;{)D!Ty2v`Oa#3Zlg;R+M3Bhlt_r7sj+^>!~~wm z9ReT0H+9dxuqaSH*B-g0lDVypPcB56qtu!0xY@w1dhS13%bfO|OsC#u3r?<=n%3$D z7Q<-&tIEbmq`R*3MHGb4*`S6MHfm$;8`fjX?7&vKY~_$ooub$-h`Wj zW8%2PkusLY0}2kS&J~`|UN5&l{m&X>ORS@Fu$z}xL{V~qHN6}GY_mv=;;(PMx!gN7 z+Z&T-fmNuU#6#PEm-~uVIveV3vEdwiT`q1rLSsArv4J3lWU0)!xzH%gk~)GQ7%~f- z(LtJ_hUPSJ*0U#}SP7|hcBsHG;5vE4briV{mIYcU{;;Q(!LPk$u9uhF93B=BA|TeAfZ5b66`25fi|K`gV9( zBkX|E7R#i%vCwNd<@4>0)xPi+>H2K+5CJOI6nN&b4tB<#{ zdr*gj4I3*zel*|W3y#=0XG2E``LOv?lbxTskC#`ThtPTJ|45_q)}JxPCl<907GUGC4b51ed$HmXD!I8KS}@+NnVc2bxt=&aw`%nF>u{7}g;a9bpXL6wt@1jAxp(Ctw(X2j5u zmXsS{NsopkkjqnR4F$^Gea0L&dD30kM;b_yFnq2E;F7UH;_$La_$;}JS&rE0>xQh` z7kj$N>*o><9DSmcs0h~{`rt%QhQ+R7Sk(t{_ISIL6K5lp_#EbEwhy(ej*T={Vk~cy zsSW?C3uJ=@QQqt`(COA3XSWvLet?Q&`pZBgDg-jCQ1+ucI|I2+z{~5`Xzwi*-$ILG zli+IaPwfVF(Y8ChJND?G(}jBQw#;f6Gb^^wf}}E=j})(yuYl!?BF^LMb~{D*P7a%a zPGo{5>AyMaC$Y5Y;}(I2HOLm8coAuqUpt`0`&Mxf*Ja>r`F|C6cjEW-mZ(~a+zE~^WuqS~%gFd> zhYUf$g7WJjOp+RL=#GP1$n;R)#IhJ5;$J^N2Wt52s<3Fxl!WRC{F%jOYi@7+F?(|2 zSPvEjvH!!|f_3nG#rBrQ&)eag(RH0;7~8KOQE590al)@~Y}?SNH%H0U$h-T?M=RKl zLO+5GUnM`t9K*mPY90HHX)}B(ObB%)?Z*HC3OlC}V4;{yqO}H|Qz3yxxZ%lt2TT)i zk&yyM7hVXJor`t_lC-@_ks?&lk~6T3^xSoKnzHvdI`m_+3xbJlf$kcI{UHe;C7*#j zd^qo0wzS6oRtIOGA4*-UNOz+lB8W{#a@P;EU80lc;A^-?m8C=Z2}?<8QYQu?B#Bi3 z_d~UwVxzM^6&1*kOynV4N-2P!x1BO9IZY{IAGUNVcxA;)= z!j1>?>`i+~oG*(pE<;pu6NGI}z?`B_85L0}h5|uQ--Ef#8#2T45Pw#1Eb+T4HL6mGPD(^Y+u_tdeGiE9!>lq1XC$t~WAy&`h)L3a4Ao(=3Kx zwp2F#}23jmCe)RwapdH|Cm`$|(*Ze+v|c@TlIncTHtD`P&;P9E(jX z24WExXtH-O*+|qmv7NtAX*y;xU3^d>hi_UTPKqi^})64SI(ZiOGo$_DNR=8#!ZEf_sK_xM}koJYIJG-$rHjQ zo^44kD$7d0#(cFaGE>TbS6~E9QEZ14n~$x=6=RcU!bVj>S#=1@yB?T8-oD1!UqWia zv%N5mp){F*PkzQ;2e=rMnk_seprz~_6{lB9h!I8dS-CdLABHoHaO>g8(S0m#jy**% zGF8rm<&Oiru&5RYPueWIDV^Y2n@pUu(}Sl7V3L)kwEFSb>IS)ZGjAYYyf+dkSQ3C7 z8vqwIdM48VWEZgXWF-~uX=)oS`n5vw|H9l*lG^B?B6lH6`W+PjbjL=W+XEwwWI42r zQOlUKR^By9@@(MgXZ*_{HY}1q#=Jg^Vn_qw1cg-_c_YNqlVBY%Dz_Aa;)y@7u>xJVGA3Vg=f zU`H>gSoN-2XXFwTr{(HrC7QwaK3)&${-b5@iL#1XugKbCOIJK#_yN|RX)TWV{~a)^ zl0v*i9Lpk5z_sihf zkiArpE2dY}TFja7>QL^1;IPdw`mevQXcdDj7m=*KL5$FI5;Ra55uQ~czsd*9n6kdF z%|Lmngjm2*G)bjJZe+j`G$GmO>Ry44XNO)ARv_K%4uHYqYuvHy`C6u{&HU@4eD=c@ z=u5!^&|(;apjhS6ceHvRYNeDQPcYsgD|$!jbcSi?iueWEO>a@zElPSDt`Z4ugVKMT zsLAjypJ;h7ga-q4S?v#QPem9rkG$9)3d(d>)W&}Trnzy3n|h~YoBt%81jIzsu`<4!Tm(w!Jj#U%09kZC5)vEew{XlI_>)A1|gtHlNU$- zte6$^*O@C`;AUG*Z>klxo&#y0+GuEZum>1834C@H;!+H>pF84l4RFp52RH_N3R% zT$3%LsN02l3*6EhOn(FAyP-H-^?|MHdp4QHgs4de!698vX*GyNjp+->g^D zl*1ROLrnC>6QwgsUSWl~m{D74?djCC%mzmYZiLxTv-hc>vqM@ZKcfQxZNtbB6l0etk4lo zP2fYNj!s6Rg2o8Vg4h#DCLSq%u${|c@_L?8AQaqE7W^lC>hlgC8^i9NfDG+zW2xzC zt9zdd{I>NhC{>u%?LEX4VZTAaY>8sssS$bI9*!o6k@IDBJLF z=`E|V7R#}Q=Cc|b(anc$?ZwT~%nE_cplSZ6(+Uz()7*6z-NpIEppLT>gFI@#f?_E- z9wM#6H>sep z;=?_t7Su9%HL6jK6&G01w&ZRsaS zHv!4C&R*--<6o>99d?loPa+bjLm#C_x`uL^K&1&tLa^k?%uW?w_LB2RVS$YYO7_0s zZhJ_h_i-RUt#>#;kx@$=)?zDAYZgN`nIXNXO^7S1gm0Tl5(hJJcPKcIgHTRhG8akF z7P0lNnlB*YI@M&>X{)Jl{^WZ1c2-WNzCTb%4h*sSjNI>j=SCm@``kjDVLI?jEJ4gP z$TAB4Dm84oxjhwI)4?yoc$ewB(5xM=x(U}=vvVnDv-7t#qsE3|nkAOGkleFlq%Nc7 z7q0L{X$O+nDH_cfJ$I+Q0vhT_rY^p&`Wr05ge3S0)fB|aUn9iwbf3XRckTll4@3kq zLI`2mRo~8sl;0o(KV)`#UVOQ5c}Z1!K(-dEIe}3M3&1Y{a}-WJp9|Ejy&9?al&l@|c)@2V!SdH1*6!o~`Jj$!6Q@p7ahLF~Go zp*lLGS9bb{^9M8Se)X)EWhuov9_QTxc*5t9!#xE;{__@G0>XBQcRMpb;@wFr=45!4 z+;Knxf`Frl$HZY;OpVz(*(r)O7Y7}o+|Fxt6`h^F!krr@SXe-X)Ewp4UoKl!)8ZDj ziUcA@5@H$Wphvydc^O66eYSu%(DA}O&DxJrEB*9SsUWu=0iK=hf46$|dr9QJ5o?H0 z9+_1UJJsFIhaenc)~NL;#xKLt)bh4UcAl3xiLo5_lOvzV zw*vzSJah592%%3UM&EpF3%>X)LDQmbLuTyQ5gU-z+^t}&i&!oRf7uIU`8H6B`s5T?>>cGZ&HK%ZZ=Kg!HBv1p zqe2Obt>`XlrGc(Uo24=I`Z2x_U$9S@d}K*VR-L@G5EHgB9bc^M7(-%W{(}(r4tkdq zS<|?-%hNzeXbhhXs7*&adyC*mH7ZkfObx3ajOaJ3{1Cf>y;P z>@c?KrG#R3 zdl38pi7r_Ds-2M$D6CNe&KB_ z%P0{4HWTAahS+f;P;FiKJ3FHFw3+MjlVPiK_wP{Tny%Y%1xTo#%PG;;b;Q`%m~PK) zdI8jU>}Gi7ZxZePm$%Q|-kUnH;kLGLa>d62piM0_Y(mA5%kuw)7&D!{73-p@Nj{r( zB4a5Dhm7A_fXQnOpGkrZUE|=yZ*{$B^8Wi>e+9ni*mv9BTU13RRMRKSIAZ_uL>d)! zTvFR~ z#|dA;f^KUSDw44b7VK-X8cizi3B> z`;9y_JcW~fmWZk@%gDlAzN1Ee{p1Il-FVNq$D2lh2flJ8$zowni`B-9&3Z}fYP@3! zGd=qEDnc|GXQN0mTlJ__N~SR-CZD4sG8P{KaOZz}uV>rIjcbIu#$KMnxb}6cA{cn4K5cB-ik@Yk1U~*1}m$F#`UTFLE@Px@ax>~ z!#xd2S4|@w62gQmPz2G8oPc0t;278n?4!CWyL>6&>PIz!WNY>*K786sEpjX=haxRH zf@0t+d^2&ZLI_#<7)RQyoTXfDxp8Q&_d3gq1*_zhc}m;g*R$HT-I(rxr(5iY7~L-O zr_0T|yFBifc~w#4axIgmj^+2~5z&YQK_J>M>)hJJ&@w3|5H#XXuz0No!0gDMbmVP! z(AT0eRietvWs)^$?XYs?qSC$=kg{*?JXDnU-jL?{oQ67Wzol}32?l}*e?O!54} zvFv$fEc8(r0w2g5ph_uScG2d++&bHb=2kjBtA;O8BJMQU>A>KushD`IMOC2as?oFx4PKH3@EjB~ALPkUMe7uaW;oJ9wCu zdk?eL(g5B0X^R_IF0(vQ&*VJ3Xv-$R*5Z@;iMvY>N*``{5(iarh$Sv{X(0vad1@~FxHzm$aY!ShfbFe0 z)nA=Q7M_D4atQhO%(|%?Lee}&WT21Z$+CDJ65|9GDVJdz;vUw&#(8IQYVV6RuVrJO zToCB*OWfz4lOH*kJ%5~^1K*x+{Ja0ISR{t*cODnTE>#=i8`6OXPCWgkiQw;%BV0=5 zAC1sHSHcj!Bv6GPY+W|6GO2>2kJkzqg)!wBC|WT`;1Q*Fz?f;&Q2brXABK)*&D4>^ zC%i`XGCy8YX{@UuEAkFokGah6`gg#IJ8IB~dPLq?D=u~}ouy~OUMugw6Sb;0O(O;b zNOKy)ANQwFPanQfb_8zhl20lG-8fUs7x)E&uzk{Hv! zScSSArterTYma|GZ7=Bs$X!`{9GjbYJ-<^VZ)!T5-hStbGvb;dBOb=Jdicy74^M(4 z>8Fo)(@JB9yD2P4%8;p8Hru4Us6V9;hGvOpARVazsYR{o;;}T@39^%u)F9M?7pqd1 zGb5b!iN-npDsVT+33`dF4Z3icVfBFuwEOc-|K4Vb&yugQiw7RSb{1~(xPP~DwYws%+N`LnB5lAk8E zR`X^NE&*F?cf(|i@&wil9Z@<)jmE7^L)92o`I_U7T^CA+%Ku%2%xiO4 zU|3GW)r7+8NU4*j1X-Hpq!1oGiJQ<}*?Q4rJ&@n`K-L`zf=JKQ)TwaYe!-22gbVFq z+Ma(wH@j8jY0GH7U?Qbj48j*c5$4>r1fbR6V&v&ux%jvuef%(fUR9`BHN!@PP|t+8 zxC-@Cd=-jct!TJW*yADu$4gcC0q5NBW(c2hiTeovJ09x#cZKWZTJ?%4_DPqx;f+E& z+8umWSBL>tY$VbNjmoLuM_B@&a6=l`xiY$#mUw2Cf=O1(77 zTFdpI)IW&W5u!AC@e)S@6I@F*xduf=#lyRVgs?D1F7&v@g=VZ4*w;94L8|+65WopO z-X*4tXubo6J4D0I+Z!(&^qbN2MIjBhZJ7~a(-SRss#G-#30k!evlaZWpk^3kTO;PX z|2WdI6>8SdtCF2a#;ktwGplA`%d?r9zGGAMQj(A`Y+zwu%3it@SAwQ455xnL`p*dv zB(>S%wEp{vx928)v(qQvYf1ko*N0>rhSAf7Ji)?j(@_Vw0*Xm^7M+O2m7x4wUHG3c zt3&>!h2w#Zkc>(Xk)6Glh2{bOGAQVt5zPcy}x za<-db@sJuKzC z-YgdzPk}=&NSFPh{H%-vPJP*y>+xzEbUZ`;+!g%(TAJsN1c?MbE^Se>So6jt=Tb)s zVqmn$?cL_$;9nBa+gfUP1~xQb=SHx>5uFixHbfg3bLogVD0=!GK`d8dts%40oTv+y zTuW)k_Yam82ciE7UNAU{L#R1C&=e0>-Ax&ZP7D&hH)>s%CL}CHYb)rFxH>%yQ>5zS zj0=|tr3zHW>E+*h8uC+_@WjE1q3@{K6O3#0{)$OI-dcB;`H!Zsp-Z;>A0KqQelteY z7djhi#UX5|?s@#ZaVqe(Jcw>;#xU#S$eBC=mY=<3BZ|R?4dTwT-4tAPjs`8oBJu_o zctX$&i90UWD8}RnHi1ADk3W}EPllOq5vg3hpI@RRg62HkHbnG|`QJ_%%|+2Q>rcocNdFz)dO3o5&MO-y_vm%gO;P%Ao7j5PxR+duEk%azJ_iiZa8mmNr$65VqeR!=AP^YZsFvhRZ*wM%7P; zDDBm32VPs=exibA*67xmJS%=0>rvhuHhFkv#z-sMj%1W}p1pX(Om5^j+qBq@pAAA) zXGXn57{vubwW8D1Te6aNaB1?hPQAZ3R7#0zV~h^>y44mYzhz5dUw%hJH~_V+aQrDf z1@H6h${h|~MA>3k>oFCI@2hN3p`uEj3&&&8Yov3HjWX4myI(hew)E3MhDL zUC$7V8JzET}4Gh$DM0wbjC z6Te1m+6VaDs@*pNH_-ds9#Hyrz*@z7{jphSU7_Tc=Ih64ZUsNYWI^H;GRxPKBLgl< zWDBnN90}J3Z90UB?ySBfn7%?zyv{T$=EuspU7o>)OD-$E+lg0y z$Bad@aTdO-UPj3&VY@q&5(LZ^dHT@I}qdrzVHgXZ_((N7n#ZjZnK3S6|H zpUE)KrFqlh6fu_fa<&$2+9B+jzFW^KqO?C~u+MTVwLOO<$d}L)2N2RfB#;C!?LPpA zTNp_%O&AI_>vYrQ6ePW-sN~bM7JByO`Y?A1p)*xVn-IVe-t#e;2udP$#>iS>Q)hi8LD(;6lPYP2YPA5}JNWe#s@+MwBE`QM;EDgz&{^iHl9BCRH_ObdyTw9n5 z;&I~m0(JB22lspMvI#P20*UZrAA0b0&!5Xb$FicYZ=fU7J5An=y1NjBR}+Q^;M@81 zKbW$%-uKF0KDW1(Z(e6L{(q6p{`7RK23@qUzVFM5LNT!0H;tnIGE_mkdx#I6f9!3U zc%LT|0c@Qo*i6pycRG#@^%5hlDbJEzh<$%lDQP^TmiZ86f@MhE@1sYbj#TI5H2Xl@ zSLwLlES6R6Nh5a@Z1ZH}tgf80B0Sc}fg+oWh-uO3}#`rU~IY#!ho` zYQ!MWXgG;`-0tlAe3UWKo1uL37o%aYMCm324oIP{n}eMnbjybYyxQtUK>LFDH{4pR zxR9`tAj~)$#nw}gmpBzWs~j!lgy%4liR)yT!PK3QW6#*;tpuZ&#~hiE@lri0KAxJZ zZI)jrvWROX6TBJKor(ns$@4pGXJqNrt3JM5eYqZd)=L`Xx%n2uzvP9S0UWOGjxXmR z1ThX8_bTF5;Kj9^N%&Au<~P+{zH@jU|5xCh#;|w12n?{Ig!$aY92P{5&bHUrnRhm;d)9e|SIXRVczP5?x3~ z8rbqP5+6xDFC%}3jeswlEtM_u_xV+u{m82l9Fz3|)UfUc1n*lFExdIJ>m zxPe!$b{d(*UxGEmAJ8UZ&* zYqB9R&tO^nwor?KR_HI3tD}HWLJ(bc*@Q|2c(3t`hhrJMUjHCh!sNXTRz zDUiu285wI5VSgM5{QazUg@w|aCgFuQHqt?^89ZUrOB)?bq-ou;A!k`U=&Oupq!F#O zxFpUlmlA$E7UBBT#+>eKuGe9Pf$bxbb}vnfvgF`*e=vTPZ<%>vHMVV++1G-KHQNS2 zHk=~upH*wjX!1!6zuUQ_S&WErF^ex$6vqNaK(2ED>I4%@VnH!rldH#-@ymx$Bum_= z%Cs?YGdPWpB4W;CLH+KbpeuO8luj@%@iy~!q`~2UtveDHD!%DNHm{Gy!miSx)*lYO zX7Q}o0VxA964b-p2N00+`GNX}L5ZIp-*UHKoYFq2EmgjKFO(`16Zypy$JI<2wkytVHyPlLtfKYoKN|qVgqi5jXHd$jBLkPPZ%0cYe9mGe9WG1n8``6D^@*{v_P1 z3hwz6Yw+q+K(PBhv}_;&sU@9tg0lA63V=>8lILwFSR{TIX>YtI@3D>KgNNVOp)h|(GfD00y}8sa46Ee zfdD+QMFsc%qr5rlB#$Zu(4J`Ny&BEO1jr|1ZHiGvS$PH#N(#e_LlKweneCj)ja0iy zvYcGD#$WodRhQ-sFVRWyD6opWx|$pAPLnz3v66Xg(U4u7HhU29QpQh;c%~KCHS5U% zwt2yj-|5Lsfxijl@(1ob0`-fm2jTE)(=MEb+8olZ8>albwyrQ}0BzDsDM{?F8xYtz zdc#pBg=_mMERtrM?$1q5*R5evhHv#}#Js>OjRDcAvJ|5`KP zP8)qOo=S@Df!OYMR~E7`Rir@c_4k~sDBH-N$q8Mj8M1HK@E{%U^tVx9U^7LT3yHaL z3{j-}F@R@@Pw=pMii5=RN^<2oNJtoR^e;o~VFPiW1HA*HzSdo$ol|Gm017*?KQ9-C zzYu-=Kd>N-6%K;)$nJLEx@nVa<4T@{%n{cu7kK!+ZvW7$A3@A~p?O6W@TS8Y+@RI| zoY!`npD2DYDb(q)@C7|TB!8)mnkqkceSzltH49?+T57c~hPlT;EI&?j!Poa+3B;vP zL8i(juem7WgW+2YzO@^0FWs+&Gs5D@@>7TN=T;rdl;4U5_Co5)>O-(fJc>Gpp1Fud zw?@c-l(fwj4FnH=%Q=aZwS5TU@c;nK86wjTbGfp5=UFmZG@b_!CyPQe(nFaZP|Xg` zQRbn~!_6x@b1*t&)Y$hCj}Zy9s6p~@bJTYGQ6x{z13l`u!^veHG??OME%a>`aXDWt zVo~PCUC0jkMVEV?G(oLZ!FwE^jSpx3nc}$L4pzD(-!OW7Sh{n2qInupxLK9*-Zn?^ zM3wGdbRVP|rvBE6!RVsyy3(^?`8fQqu5J0AZPzRn!FKdu!anx0TFm4!c zR|3y}2GYRO!Z1Vfue+XuP6&$uxb@f~mNRw1En6ykY9gNND9`7SEB83hJWVz~QAtg{ zLh5WC`904Vmu{<_SyU4{~4pmWx51ktgDplzyt0ZH?GuTlf@<$=4> z3Ko`jo}pw%Uk$yq7{AJu{g#1za>KLHk-|duze8}ZNbz8y10iDUJeta$?M^91tKU$!y$;O8q%2py-qnq zU_be-YiRJS4_om8ACnpTJEWXQM{rN{;=J{t?IeoOlQBhOVt@?G65jH`2;3aaE z(q+(ij$s@a7}@J|L$C0mh76q21w5HW;iP&XSE(J{v&9Rza1pT_H4NU(RHK$WZ8CiR zyAlF<5}f{<$hz!qXNQ60OtioywQqi&;mpsHC`56~iQt)U@x9UkB*LZp9}G7fx6Ri9 zbBtMLuG0QUy?RGugo%vUc<{1>jaox~0XMm_^70v;@J(H!5$}c?3*g5xT*}cNAD^8^(bRj!bG2;$7tFx2FmcP7KW9iHjR(^09Lb**@B#uY z^=6pa1(~Gie>*gp$ruwjw2X@?OFNflz1^|(3(srvo}oyf{J{0+W_rIC{qZUhu~I>2 zG~l+`eS=w6?bK5dY>Dwv*Rn>3ut^=#@$I_}XM0)qPkF%BOS({PuIOtBBatFw1@{|V z{3&|&u^&-&%1WdPSa*vUz5(Y0W)@u+1;`VCbZSe*mnD(Bn00{@-k&q`%ZPb%Sibqs zK$+M?gytU=GAx=u_h$y`S#Om}%MT@0s{$u8v2`uq%Awy2a|t9v&*|Bfx9`LuQtVeC zSnl@50TzW}gVJY2LHAw1;$tcnk>HgKcxgo@x!y!EUjFkZN-y7+LcLlQm72k^-JBV{ zEO8C;oZ{wBQj_MY$k}Kqb7(P3L1B2R--D~bCeDms-+oF>so-Gbr8%aEp(`nL^if=J zSI+3kAnth$zWlb}uJ|_t%7$75Npd4|{kr6nnHDQQ)z_e21vW@&^eeXmGKo?blE1Y( z!J`{!j6)xO6Gw3ek0}|cwgUWRyg^}s|60Q`So9b*yk+E)E0T1C%)Jv@x~Opt!iw=b z4p>HZ4zfEvk2W6;O!zE}6C`YO44Whp?z37$6pGbegmv`F0m|dthsFz$nddb8)*Y`W ze5IN7OodHbHJd${@ELa%8!BKUb0C!@+0XT!dARa@u0lCxIo?fRKe28%U6Fb}bS~wU z4O->xO_+VagS3=P%L&B?h2CFSWfb3fD{v<&keMFVNxK-|(5Z(MMdJ20yA29V;JQ9M zHFrH;L++okh^SW2s_H@@HbMt+AP^KAUcsKpzU4u_^%6f$)9UcW6Ry(HarPLd=H)B= zx%>;L#spqmnTMimraP58FyJ!^!VG zW=@2aBsXJZj7hzjD(=E_$E;E5=rO&~N7R$eRe=d?y(Qs_8S0QZDlx!!*|NF1cNOp( zCy|>^7d6W&pjJjT=S@+oIvnHIfWmTrUDaOV(si`I2Q@^;TRrkEB1qGt+*pZfH8}>& zJzpCI{LG$*n`TlSOKKI;v+ zlNwl+DuElSkY!?>`4$*2GYB^@vZXLIr_@=A&8;~VM?4zkqC(ilrY*Gmvqs)AdbN4caJ-1be12nNQm z7Lzq`QjjGh<0!#Ql4~ZnE%&?VD zZ}VoXbk?_Xyo!H;04i=7^zC(RLkrg;Z{Ue`GEP8Q_|eaCJl^^tvB}XSj8VRzow!Z# z1U4D-=#Rd>P**}vUdGacd$GXH-HNINHOTnHctPC93~^KRl(4$wEXoLs#>G(KG<14i*3H-*p^k&CWpjlyG$fMgXa0N8zFbx@4!;3iNZPyhr_1w>=rGF$FXh3?j0&wzgxl&(izgj!8^4`rhPRs&`Dj zH)#${2dYK-qR9L$&R=Q{fW9+rFk8cl+m5p>@)_T|FMNW3jf8h^n9-wZ%pff;y%|k2 zIqVy$Ixsr}k~+_@nhzGFG4(+XkEMvp6ZN{)rA$CFpk0%STd&j^xM)Wh>0+7&du`6j za!lnx|69n4UB&@OACcO{;XVYuOV{9Ox*8y4vNR@-C$6x=QFupUFe=laZSIV$mT_{2 z2~-QG?Hz7x=nNgiJY6eKf=Is89@yxQvd6Hojzi;b4j}lg~h4pS$gNoRjETZ2yl)2 zMhQeTpF!r;cXbL?ge548lvm*oSR6$C8- zS1#eKKMh`&;TF`^F1z>N=rz?91{|ES)CT-*f?sqG>X%J?X?~)^l$7Ab>?)@muuikR zDKTdCk~x+E=`i28DcHfoGoKJExuSHuFvot52i_4r@7z&9OfN$-+bq&|H@sfW#)ozKWX1Q ze^|P3Nb;5#lA4fbecX*_dLqj%LTpfTwV`%!xS-Ii=Smw-$BGlDM?MXHl=_tfSit zEjAA@)U z=iuK^3TYS$)mt>ddV3EAdQ$4c1n?ZC_mWTBFZ(8rg>RVsG7SeyAlVpIa1_h+q2%>} zvxA)PF*5ExI|M~IeE}2rhY{VMoK34wmXFIqLB|H|87()eDnbkDt-G(S4k zj2XEXDZ>96vV55{RS2g{u}U#StAfBSnqXj&G(Mu`Jozaq5sx_T{n~w=_e1;D;N$?L z`(=v7l3dqsf!>1??^b!E^lZCgWggwh&|`T}2|qL_PHizHhJ&&0BG61C?IuCLRo`7{ zd+p?Vl6b)*ns?6oHgwQpv~B~3PgjlZ7vInRPrB3p5*S@t-W)6G8V5lj;=*ZfY15+S zYBG#Cfw!t&JujWax3+T<&*ior)&s`;^@C@A;zAE1-ROUH6EE=?b-hYyQ%sx;G?KFn zuU&bApr&5||F|M{wAfN_{U27K;WZ%^fD!z*zi@+qKl1i_IQ00AllRNGHbrj%-361H z8saKP?YCrKLk5(mT|_fiIK28Ngfhq~ddVmCA!xoJ&Z`aTNQCzlA$ z68AU7a9CBwjhB2o7H>je}Y%9hZa@7JZ9{9hyg;h7u2_MwCN*r}*9~MV_hx&riSi zB0Q?!^vbhNn07#B0aF>1coB%d4U_N`(`Du)7EOU6iEh9CX=~$?uzl$AaFmaZ9%<<@ zS`;l1(sd^$y7k)>7M&Kxyj#CC1;+3nvZ2K?qaNKyEY~o1kn_GhZVvucxe<6X7J_52_vtkmWzP2-asSiu>7sQ<~O-9R&4Ct0G&uy za>%(1D>8r)(;e5t0YmksW5_f;IHE~4e)<%x+c z({L>L-S1^tD-5n0z-(C|r9YdEL_#sh3cFv(nI3@uL5cvVDNAGw|E3ane%ivUZNa#9 zXY82T!t4-5IbdHN0sQ=Zqm|S_^BwU99Kv^gY8B;YtpNmqh4L!L?PdvKwO}#eOK5d9 z8vdV&M3mMt)qi>~2C+~jJee~Xqh4}Jmnzdlu39aYfl^4OH+P@!z;tdyRLREoKeWjC z3X#OjOTrW9pFDK6byR_RStO(HT0LiyvJ$UL=u}HeLp-POK;4gvvK4Nd`LY<0>y~Y6 zkl8(~R{_?NDUUd_hkcGi)BMz~?>-Yy5{V-<*756@kSUrRY62&{H+0NfuRhw>gqH%O5h_y<{}%t>%heDN^+9&xphd{O?{wheDjgV4W=v#S#mnGq z@eM*;myzaQK!KmHO{w-nlauuSv+AyI1! z8UuWwhD^*@oNTk~?4~R<3P~mGS76k5TJ03*u%^;OTfg;GQpnikO3#%UB_n&RZ0vfo z;H+cw{i~LHF=+@JurO(EU00WAoB$IcWo(>;N4P=ptfTrtDC)08xJt0abok!lG;rpg zU=CW!6=rl2BP7WTlz6RjwVjo8f@LutB72!<4@6xs zi76Cy_aJG#r>B$!JeGtfm3s>pH>%nLi>#ucvd9~pIYK2`UJsx8)>=%$3h6?4D<}D; z;hY6O!14v#1l;)8A$KEM894m~I$qK)sD#9Sz8?RP&?9FvDDS?fEh4W%a4PRu=3gz- zLi}J4AV#{US;{y6{g#t(WUi_V2?bhpyJDdzwiNec+-E{nD1mH7AwqR3+PO0vv|&kH z4CAHM%g8pFf?3-?);OU2sJ@;qHzl?VB0&2m0|n!2N1kAS?Fz^fUVMNNA%rx5czh(w zI&b0+2gxU9uU*5g%baZD;g&BUh}IL)h;*JjcxGHmS2xVlw&jK+s*&I7C?XqA8mKJ) zL9UFK@qgtc8PgBX7}I?is!_ZH7!>Nm2$wXwt=%PFvd(nL&!toV0>MxnFJKj!!Bh>( z|K7tZa?*m9+_X_|m(M!O?m3X8G*x5BZw>ew@osa$6A})JPgi1K2R9W`pvCtTDB)LsNuW+-7D{f9`SB&)E-hh5IOtLNKiF^58l*mAOAzyz7&8glY!PG|1R-bi# zel-Gu-FunyYhaa+5-lFTHMnX-#M(Y7>DKRKXOLI>)EhluI42!NY=q3I-qHLCU)oH! zqD4sjO-!u4J?&mYX)(;|`?Nhm3SqBbSYeQm3#%$kUJ5iKc`4R(+&#M)ZZIYO)Mqm2 z{^7!C`arYpq|mxsO&DJYblQPRN!MAYiwWIg85aF@YC2@_uJpl z8GQvX2*jfm^^6T>!WLAn|En{WiE{4S#Z7K+u&N_tI_7(oa+jj~bMO%xRsRfc&bu=O z+pC0P6fg39L(<2hNU<2z@RF=VW#g{&ym{q@g$!%>b^))<`RUQn&%x+$XwGLSXHRhA!(Z)Laev6ihZqc~*io8vk z;G1)0S-b0)WHzZ}O|0GEYE++w1m==|{-RZ*$o6B@K{Qw&A2`;S%g?BE?rx&<&O$mp(nfoLN3*82T>RClOx`MSpZmPgWExjLjMJMURO9{o;5MEWoLj-X1@KA{L znd~i4Pl@$32VoQ4dT7b8Sq>ujG zeVbS{rFLaa9UDymf{Gvcpyf5Dcn}gMKIakAD~vh9w@x=eL$U4bs)-U^;RCC?8{4O4eVy0y@8fsAl8qQ%i;tGE@On50+nW0n~+Z%LJ?OOx? zSG)+(#^AU`E>j^`;PRI-FaF?R?hlbZh__d3zXicv1%+o)owNK}#}!=vFguG&`g-^T zn+17=+))`}*q@(zf#iqr06zmMOLV-hj{yjwu@ z89G3~%g^t7u&Dx+^F6&fAFNDAVDp2w3DPMsX%W(UR8)?6H@3 zMA+l$z6awbq3t>H)PQJ&uur#MzxU#5VqieNZXuy=WQX8ZI3kDI;Nb&qu|#!m#ZP4l9cO@A1Nw&7TwgIRm=Q zb6bPk(hKbsTpN=rr`!v^vxQeHV%U8ZE&k;lE68PF!_ljg8G(Xr4?V1nK`V6ZcQ|+d zR~8}h(jOOgrw8B7y8M!(FEb`O!z6_!iS<$1_jhhaJ>lt+&?nH)T=?caIr7;*(DDhmX`gGeRUrYh0?M%yVXF-=?-yIt7%=G^J>okvTFf z&#-k%FzuGILWm|uL&dloWmFshGV+&eIh%*L$wiJ0E6ZR4mxAed0Sa=x_z{%(Q2MlN zG*RwsyOVi0L`USQ$@sKXOOwKzHl=P#@k8qYjlBV1moLqBDA{C6)Rta&jNu(xt3 z`{m#U)^D?j*M2B`&goGYjS8#9f~A5slfLVI7hNfaMPyLavi}Gi-Z2;-W;Sq2)`LK) zFa)RykSf;c2D2SCfmko0M=y({jTCYc9TC13J8Uw<+QEfCuF9XN{8%V-Si1FPSdY5! z%G*|18Y2}~ODMgE5d<{9;QTiM+9SG@lya{C2g!XOry-0Csh;~IiYdGValq-V{arjJT zi5oxeG$y!lFP)N`dsHe&HKUN@G@ZF5q=ZzEc^V7()}%lNI*q+shv*o7?S}JjLRa;y zNG5`Y0U_LPn##T;6(|$(kyL3P=7YExq% zDAd_TLwMP=PLp7frVjrsJu+nSU8N@L!-M$_KeXr<)@V1I>>D#f=H)*txw5?0|BCzd8xDF}JN z9acM2_-{nBBz~zNIU^apC&wpKsT+GHi!YanO_wG(`~H)(c~-bUA^gzx;g~W;^*gRS z0dW;J41Zq85dwS-MgRwQ{BiO#)p0-W$WIFF;FBZR=C=Zs7&U>wc=_`^c5Z}^2!XMf ziVBc(4Sib`&y+6l`zM_vEKS?MYN#0Z4v~!r)2&t)1?l zx@Wvk--U5oE48qpPrVX>%LLdi{c1t_4^{w?mDZy2)}M65b-*UKCo*o{7dAdDhq+f; zEd1ubV{0Ad{_7$;7uN3qsK8v4pi2_~$p9HX{?`WqWXICuYvnsFKRC?%mUt9g0|&{6 zd&Sh=^LWqdebXsGln--59aA}>H@u~n0~kDoYnkc8-rUbE&+V5#suq4m$k;zXvJsn4 zo+O{GEzQxa`xcgOtG3>5dFJ13uKx&i%2(#*ce)GH_KI=Oggj_s|CLxY@c_7CE(UDfvmoQ2ArjN_VZW}n> zw-D#S&T_9tyjXP+z1UdjINYb2I`f?7ds2Db=fr3D)?}kj2!ihiI@BK9?>Sj$l zXPWEW(|sDu+{q6*IN}bzS;)WPJ_&d_IeNZfdHyhkb%p#Jc>Zgmjkmo*U3b>%FbbjkkblNSnF7b7Q40if@E2lTW!bA%I^F)p zJ9%6rv`-}M1~nO>X*XOe;-U)ug!Aa0VV=E@5&!#b;goR+Xz${KatZu*jqw-jbF`aJ z)#dYg^7LuYwg=GSM`+s^Xuga&-ki1d11Xh}l-kci27$f0dLuipsV}kA@mH7>LgHS# zfxEFTt?R9GkljR=S`|p`ir=!fAy?}+!GMdQ_t($o=qA@O%@7O*%Q>~qbiS%{?mxls zRp}eIpID|Bf55nfb_#!EO@gV0au&Mo(seuTnzr6va=JnWB?Ir?@0XUD2A%Iaw@sGM ztxo7cfIoMVBYzMi*uE6^{?*_t8SL6^5Jc67aj+#4PP4f;@Vskjdy zMtg&9Nc(1X7|Zlwnj5lUdzDdU-+u%Nf8)dV7*STI=4yd zPQ!;=-2B5oZ_OYfz2E7ElIuIan{*#npN|bDcUfRwogIrDU7b&mJJC>)m+uRK)N+iE znsI9AjT)082rJNBnm-RsnuCm90luQN9Wo(SGFo#m09uu)foFKkRx3|oh(1T()+JBV3`hIj*x+Dk>GRUU%5%r_J^GH3_r}lT+p^51 zv!^PP$EuV2?d!m&YWCp0fc&S&oaNgUc0xx@YXJ$I4hJ=fhWkO^rB{#Mjhz*i3b>GS zM^hvX6bH;Fl&PlsDFw-k&g(qk;D>FY4syO%SCDW@+WZc+1N`mt%DHx&6e*b`m94kg zuHm>%{iuKZHYZ`3#t`H{oDobSDyx7?tlEyl*!;+)y!kKanX}V2KyGY=Y4}+A$2A_o}`wMa*tUl*b znidv%<}Op{5?t|R{Ly3=Yf2SdpHwU%`IA>C;%=nDCa0euJgcE+7Rz_Q2k{pGWH0%Y zaRVYyebQjMt!hQej3A>ofb88bsXfsPkTU6)Kt@79%Y=Z|0eOyKu@*u}jnr`b)=hJI z2EKpC=~;cmY*b8jJWsofuABSTJn@LtsO$ZVTM=k6dD5&xJrsIvjsIJIkei(y&=l`C z7MROuho_{^s-RyxYre=7Jgn4|n3tkH<3B>+?bnwc4y`3pFyk5p~a0ZF(&` z-y|Wo6i=R?s&A4;k?*fU179XXJdaRGuim{}^7^bwDoY#Kc|9musa3V+o`ZMj(@Hy* z@~TY8=~Gs2DB}rviqIaQlgg#9pkTF^u#HCH^@|SM6NK<-b^|PW9GTD*>AQ?hkJn0R ztojDOe(@(xj?~WC-0OOspj-?2&WfC4LkLf;f#gqq+>4 zU@ufNd0Hs&4gaoBN{uW=UD*ulO;&hkv=nP(CQ3ZX-k`oANh2_iC<>4#z-0g8dTDWL z660|2zE>|;Gfm4)GDQ>knj6-)q9+g5%w>F+^=?mVZ!gIdT^g#F;${)Z(NRcf{W%6o zpZr0Tz@&Ag@J>hju5lIy>BhH60`dK(KDuT>d;#(dYNDe|oh-IHI)dJ5Ej@W;Wto(= zRJ_*;#uj}`-EzN|rCITL0?)EI#iNTh{kuQ|h;jP2BUDa)2kq*utYYqnVlkgv6j}_n zOiyR}t%v#dUhZZizhC^g%bhmo{yr51Sm^_$zg?Cjd@r&Oxr00*pQ@#%ofg|~n}d(9 z!#IO<(X(?6EEkrMLeF-;iZ+y6$KpZ&?Ply4E`v$Px<;5Ew;#q2O(B;*>$+~^UAMy+ zrCqeyme<0lk>x5CP3q=a#&h$Qlj3R(C8=hmicG?C)nL02L=Hqz_;q-K_;TR0OPFLa z*x=QDB0a~*2%Z>({WaW-gq{_n(W60#8%IXtSVzPtmE0W*EwTa6b(1Gt-awwZ)_gnV zN`6G5^`1JgSe^B&VGS$9FE94>_Q~uwp1m_`llIMZE%|{)qP%$-;H<}Rcj-G7P&)CX)Pr0o&F#l8xc4_qWvZv?@SGeQpeP4voJC`Jfqg?O)uYs)Ioa)R z*O!pV%gaO6|0x+-$U$Kuk?jCgikK`y+!*-mhf~_1O`HvhUWulV_tR3<9Pf=XX5o}m z*h(_<@?;JD-)z z?){J!Y#1TG<{L#d+>}w-eGvU;%eVD7?(oc$nO;fT|jbD9r0o)bO% zuo5WfBC*kq#l87u>L%Z{eapE)I!=igBqWL~?)?DazZmWJ0?M`pgP_?PEEbqNgwz3W zX^E|4M58sczY;iFlmBeAMC#E#=W?~FRBVMK>~jF$t}(Qvz@`3!+u`%C+!oQO9CRG3 z$lUQ!Fffwygl@SyGz62kOS6njjfWRb_B+B4ZeQi_UiIts(ST_Vmq zh}h|DCmCJDTv9SG%FfGAFO6k%_ro1{Pc`|+)Oux&EpP3KbkP7N6jrMsMh!Wd&(3Cc zqBu!t<8b=J&qN|LNu8m*s2zkw#nK8dtV&?4?2dMNpiLoSb2iHhkStx;-3Nx=^y$^1 zuY8za@FQu!M4{_(R^=8&{DV_|J$7$sAyt!FynL@n_=-JGoK8oH_LN<+e>6%#|JtAd zt+AZ5Uo`AYWpT(e_n?6?z>^x-z6esey7tY+Lkq)w#MJ!QT9YBySFH5T+moJ*o(CcL z=$_X+V)tx|CX_X*q!=aCL;zl~@nyc&e=YXrPrsX%pu_2(sorzXFG(m8;4?E-h%xZv z?8C(KrFc)8wk(FyH({rRt^qrBKX8j*+K-fQJly6l zUy26alvq$!AaD$OEI(DwI&K8~nUTC5R3eq>--&AP^Nx0_T)7s`C4B7^aIKq{brnOR}6`8NdfA_9DY2LfBL{(%pxERm4HtQ}%YbBf|b3-|7l;KIhl{x=$RP z(WC$W(u>@N%W8y#S?!Chx5rZ5!$jQ^qGk3S*B0u8#~;7?{dV`8q2$8@%`xOe)b*}= z?&+@C^sip7+$a+K^23y}>8Tpz*%wppqA=6c_fXjc^64vBkM0Gp|9Q?b_DfgmX+#W& zp2+ly2eQ-s#?p4a(NL+pnX77xWVF}=3ub8!#S@VyM5mp_)6F%dUFO!TgzfE2bE)E( zO}t#ngeMWqGNY&dW#-p1@zu!7irh45^r^!Xb65^Dge^#;Xy<{pZ%ohh$cpK zk{}<*+L`Ew3)bmL;a?vCMOw87-wz0y3fp{ldQXV`eyMd}f2O{>#@}IQ;Jmg{)p=FI`?6(Y?r}Qu>5}ky!sE3_ z--q6Uoc(`u9B*oKeGO%Ev0+2Xu6CXO5?B;+Jcm#afWg?+M3xPgia(IP$_fa6#FmLI zM(OUH$uoOt_FE&U_ZdNhGHw%JNVKP|LeD2LCp`nfsu__0PFk<&KEg^tr zub!4Kp2rWp<}br_qAMhlbbtV$YCAC^}1t4ZWI${E9A8pv|a>(s-nWZ-y>Rv za5sE{adMV}K}88q#q!UbekLDAm9Q`^=+d$rrL*YrRJ1)PM1D)M{y93uD9%~=w8{mh z?kz7Kol{_0h{v7{Y$qK#;tBpVO$PaXdxK$bwvx|QQn>KADX~2)FaMrG-*{dZ2k=#v z{Yn&#gwK-xQY`{astB^-L#de( ziNTxE9~cNP#L+OmuCcvZd_J3d9+2Y>@NCm&C$i%D$oPN4f~tw5mg73e{lMLi#!JMb zg20Jf{9FlcHwGZ^dKM8+pdyBZTG-SY=#{^`pR#g&0+V^daIG7a;JSX&Ia9q7D7_b~ zSHMa2&DBrZ?ttGGGHRc)IbsoSbB>7nCNrZkUi}%ri+QO>CL^Ew>iR*>ix(_i$#q`d z)WF)exZuohs4va>n-L&Z%}ED-18`yID54wXVFCCIk&xIbGQw&_dV@hJF!RaPcUNgK zM{9#VZR#oJQa{8%v{o@P;Sr3HWACHc-UQsd%qv@C$WQ}_a9bRJ;mbX= z>Gq66UkuSplD{{0XhFYopaQ64(tnNOxl0qr@Id_MBJSyWhCf})xQimq)v>0gGu8HP zB7{27VV$vmOig(lvzc-Egc?NsyhlY9~Z3)u`1YVYXxt_S^5Vxjz*zcOEqD}p~|iWH9V z>@cxhUuKxRd2P2^4N|uOK8$!!vXm6=i;TC}x&}N9ccgfv4Y@ZawYzA){?LW05f{a0 z&c}qKX|6=TxLQ#V62^^BG6|OTrj9Tbk1Hls*mO=619MnJSsg9QQexUgy*Jp_7j%G?j*_MK+o&NfboF%vo)Ar9R~tZ+ z9O^~_p76{ayum5X#H6EV#~Rc;O#?x|ow0R0elApl2$}sr51UB!1*xiK$Y<~~76g90?;Jk&B{yCxRR&K7R~A{kP-Z`baqtXLt~D-$M}&Z4Rr|3W6iya;w2MOS;ryzKTB_L?z~$K%4Az;?czV*HL{HJQ)D&XOzQ@=HjPP z4=XU})_7)_5M(v6Vv!^`Zm{xKT1>4vhcFU;h^7`PzPiZmZ-Rzs9r7+$X#Ts6~-mw2+kaX30-VC$@ zq7TJC*AXI(>(l^JNADRB!kzZfOn-XxAM5iAvj(0)_1|BdOVTYomzA`2RJR}Bao|h< zsjbITcq=D_$ZJ~jw`GX`h4o`D8@E32m=j@r(yKuveKAQ*{3n}BxI;>wX(rTKBO_1k zx5_j-VmVez`OGc`mRyR5x7}7``3!XC&};r=)Z6&SlY*B6-h%>!W9AzsYVTL8^C*v* zB;zVfIfczv=TlN)<8E6sQX?ZQMHY}KRY@T0=R!|Q$cF*n(A)f4*F(--nSWINhH*~j^smWGgNg4!KSSi+If;6~= z!k_2{)^bsXis3P+3+}B-XJO3?He3Pofq~^9xV7}6PtnvaXf4&4RUZ;TZ^52q$b8v! zhLVT1({5;*6^1qPEwRc;;4wBYCe#XCF8H2JtzgbIw}js^YFZ{ zVJEjKk!IvWlev`NNHz|bjj7%Da%}o=!orWjLKWTQTeb0xO6zNVUm#_=lMyHa)}2Wy zhZtzuWx(1($j!JN&CMkZI2 z<+zIkS6L4^rdrI8Od}l<10bOM>_(iH2ZaU?&?nxs1 zs2V?vx*TWabK?-SS1z_e`&aPlp4d z{b8;q4lRXWO?GCisHo#R-?bv+6E(~z6SnRU9o*74jDk(Lc>4b0E{I)Ss zwl3z$8dnW#Q^d`Zmjs_&fM&5Rt^Jkr@Mg<7yD82qE-895>AiZIK6yiKR=ii^#i+dP z>;HP4$SiYZ#FR8TlZG|EEn#~=M4;ZS8(BN0T=7ttz=G`iWY+#E75FEp(DZG|r&DDz z+%!{o^`r8+=|3?O`3$N;5ll8C06wRYrN2{ZZUqa0PriK(u#eJCqvKX4ICE(qD6k7h zsLZBkP8d`F1d3r;LkdGmnOP7-&zENBAcx~8+E*7e3F&c#U`(4uSTZz5eu^NR138h@ zeVATu?=Ic~79FY)l0+rRmqACxf(Wzwdm5>03j7AzBq7}15YuXm_9GfO`Ck?$Tlh)x zj}?WOeiL{z`t(AK(za0B57O+lat_*2P7MF!p`u=C2>M@zo#a7eY&z5GgaQr$fTi_} z;>4t`mzBFqsd_C@>=x~8Id`a_XX|N2%B;n*Hx={s9+oHb#Z!~Y!bQHvRY7u=E1T1E+Kx~r3y`YvDu*k9JKXjw z)8Kn%312GTk3s)FE~F57SG)F#XlZ@%;NjpjEr#pGfuy7-<*f0lsjY#Jx08kW6=VK* zR`1-=s%Io3`m96cKN9>B3wLtE5JV!Ag6Tgg8{9VMUzY?$$u|5liUf%ppKrB}j!8&* zzpgIuA*Qxd7;w3%{*Gsv!5Z$Z{|$y9}u~w;%7s>SXfva8ykrHhIg(He`%JzuT3Dl zxu6%X&|`2UAWot?i|M5i9}_cd5kHC@y$4zNfpL4Zr;R>Lc>S5A<=ZPNRI#D4L3@$8 z)WqS&Vwdf{FZI3AsK)KKOiE*6q#T>u2;qFd)nxJ`I*!b_$cRi^a2epzJsDwq@o|?5 ziJxEpbV+f0)!&k;tm{Sj*~iiRXtQrtM72o0a%_SUg0O5u?a@;AXCqY%L&EhkO31wZ zSu5c;_%&AN?tP04=QE0+ATZ3&$qy8cv+>5LOF;!}!;nDMTTO=w;7(6L8>l3HKg}-k zecsU6;qWKrKnZk};M`ra5rAk_GP4sGG$P%9VD~H-YjTlA$g&;r)D~#)#HV~_jeQfB z8IBDRb(!O*F@;j!z+zjm#wD){W4UgQe7h)|^v#3=Z%z`ZL{}?6I2_Ns{vz@mdKigA z9gaKKej;a%+T`-+HMxJ;D%5U&{<~%}9eu(7`Oh-TRr}WAF{^H6{nl#8<9~pE-<5;m zRMV$vQZuXr+^#i#r^VL8YO{Q|mdPrTQ3%~I=b|l!zr^tf)g+7m+0Cn)p#2?5bWx|j zt(U$l&q(l+z|D})QkMw6%HP7{?3Yj%HLvs#|60%oH{la1?0{9uA%OT-ye8t0Kq&ozVJx%ti&9B8Dt@vW451zuTrwSY=vli?W08FxHGDj zQ_>H0iZo1R!@yrU^;pv}`!UNjAZ&>O6ipu9l=rcv;kf!X5?pN(*U>~&Z_OpRs#(+H zZ=`+>zW-2AWmn+W*zF?fLpY>Rl$g^pZEm!8cbLf}!PRi;gJF#X+Z%n)Nfn8;5al6@1!p%$SHiak zOZnLdmUC>dg3j;HWlm0_P^(?a_y5P#Sw}^=ztLVqLSX0|I;C^yW@rQ{5hSD;8kDXf zhmfJ9OHxFTQo5uYX9#JO5D)?B7VgVA=XdXAE&gG#W-XX`zwzw7Kl|YkfLlo{j(vY2 z!Py=~S?;@q*^5`oa(7VFq3>rM@k5LbnCr%Rf=7db!VxSGI!Y&>3rvYV11A)9RYGOz z2ujWO_U{>fv9#}A(2!OYUs@a|mcssH_r>FNvQ{`eXeJN!0w;h2H*6k|m4UE4=GzLJ zwQKQPkMlVPMLF4ehp*AgXUhv6=NI0SlT7aUvwtOUW zB&R^z%dmd*0caQ>m+rtf)uEFo)RW*W0Tj&@Oq@D=E#D+lP|2Ve8AWPYB{gtQ;o)zG zRX!g#GV6%0uaolF2&Ed>P-wu&86>{4_*IrMy!e^Tu&Tsc4^==i=6n&3}npxRnqu#S6xY4mA77Tn( zrk}~2&f3J$GX;!IOYdE;EWKw`!0q}2$cp^@yrGAZXW{rgOWLR-pRUu_49os6$|eK$ zeuyx&E39?7UF8R?k}>`j>G&E8w;7PyB@7DfXdUr2!}>tvv*vHnu;$c3WP8)dc>CI; zxrRL};yx-5x7D*8JKM==_jw2XB{ee-=jAq)+3QOTLL?Pl^uu|g1pEo5Ka2GO{=be9 z+TCnRZoY0lh-c(m`kc764C=j?m*;vte*)pxtVszTJ3;zIz?i}*iX?y%9;Idpu0%%I zX()YJA;LTI^jqTjJbyAm8Y(*#+f=BuImjGIPGilcvBUbNC?}KJSJxc z6&oO$2eJoy(RmD2;~sg!duXLN3owel0XL9!NYY{u9baFNnQ}y{%^QrCkZ8d3`o1!x zWBnnirt=@goWx0jgBX|sJOcprOy`U-;Ou>O#Ww>$cxjOZtu95jsdF$5VA-EzVNbp| z_e1|k|0#5tk8IL#(OMN8hoZYHEfD%6FFylolepXB{vc~2C*0@#w39=gx0ogdu@BKWLzoF6w^PtloinBCArO`?~R2cL=XE;N>b}Prn2pcuRh_vprmo z`-xj>B$C!%X(~1wtwr$h!O;PQ66ViS7=qHa%$)lPvkwI?|7gKVL4)A4O2Z2en^s-e z__St+n*S|SNBNA4f_{}$DPK|e$<5(}B>;Vh})4>J^AT=>u8 zob>dMIpq4TM44?e!G8_z3#xCqwr)fTWalp%o0{D_z-;$HnVu9&cj5#p{h@p^XmIfN z?d)IpIs4aEI=L@$LHM}b=PRG)75cE^^wJ{;3fSyg_(A89vKGX2xawVFrj3WX`X9r@ zKH>ZD;uM~)0q)~Jxp(4I9q*G&Ma*b9TyJxJm9pB26~1I>j20hG%+PrDZwZ~o3Rv|k zm*uv(hTZkktSlOps|R&HQuKQnmeik-8(whfcXn$#KI_4%=E9K+tpJCTvj0O`M_kp? zuT;(CzV|iP6|I2D_>0F|hjcq+Vj|C84jCC)4be8v)>G)sJ*9h`;#+RvdlFj(Yo-cS z3eTq5GhT!MYvzypL_(zl4&OZ6_WK0*p0&l2B~hr?2ecDjF*TUsaSHLjZ=rXmvmu4A z(AnP8tPU9at>B^5NrQ_f8%Qjk!ma*sA7?OdnSU&9i=X2Q7?7>ef>FJ`4lKPW`7S-mHS=B10KPXK-<)#2W z2beHwlt>sM#zSAgw?+JDMF{!iPoUEzO^)KngBwn{D$)?ZJp)8vUtq}x`oLwSyn+Aa8Uv%hrGwuA>8wF!1VIwz=Wk=~L9dD}q^}nXZJ&T~W=d

5Its0|fhgQQ?xl=ym?EQt-!4X1+tBSyXE#Oj4djmk!R3800%ixc@lG);tC& z+n}Foh>JNW1**<0oc@F7LVK8LwbZN!K)3f8U!f%1@9i|o72nSJpuBu4%%;O;wV8!? zCRk}j#+?91jKX)J@Bn7xTfq2H)G98@Y_#>C19AW}3olp6RQBiz^Q z{M!fGeO+Ae+o|Aa0|y(Rjzt2bhtcXQ!RbF zpIP#5r#HQiFkSXIR62XE{@Z@Bh6|@?DW{;eH3N^YhZ$eXVZY}7xy4wPBRhTSfAn3k z*7=_Xm;{ea$xql0UdBz}L~gbvxlEqj^54CM?zPq@i)Ad4iLU1g=y4yF|Kzy*TSGBR zw?T>mK`;BW1w)s3r@!+)&qu4yAIO@&V^NCwjvr%Y zZ|SRVVj}K$b3mIY-cVm3CX1%-2{+XsX%Mdl&8i4=?T))Vj2Qd89P4%atva>6E8(wt z>=pF;JvI3Ds_psZAI|orb89{ln-UKG%2vl_yyW;e&)S{{_kMoCdD98qzlZ*vQQ{2T zc>39Wd}4fopP47(bu*-qM8oO7JPPt0pVz~dnM2ZVscSbgNbR{E&Q|b~@#!xk_7SEq zFOt`+!-|JS2|EcI`!1nCjTY%opwbn{JZp(=64DKzw`q4#FgfS?!S%Z$_=* zbIS_7D&vH${H(8SKlQ7IApsB$sZhvP>;7bP2YxwwB%xtoVEC8xazypF;S2O-^%^4< z!X;tp`IJCmlol)++I{h7#o-H5i*9wTgq#r%S~EoC^bP@A9P0b`<(^8|6Ec}E21gau zwASFD8yqBAJNiKvC4BI~A3j?#3lSso;Lj=-U=L??tO(PQbOzQg3BB{lx9j%$%VRtjC*{Ga)CTLfk^>NaV&!9bs6-nPHmrqoUA@HV| z+WG7BfoJx`1V?I(ByI!Y5c_PHRsMI6Es^tu4B{X^`dGNlP z(0K8%w~OufP;Hk;f?+deYYi$^&?)57BLPern;r|p$i+r`Y7$&F3~G;gh)QB_wG z42wWeS|a-foGB*#p{Uu9IL!L(sio6yhl)9p5nx2G7Jjiygoim}|8>?A760n}Z}$2z zSk_rnrul1JExV4T+@du#HKGqYpDI-IV9!^v)89Y-PB!o9D@ z1x5#SoR^zB)(^)fCVHRn2NU(G=h+Qs^55@6;ZUn+YHcl>%c>huRC8dW_+v#|m+jeH zRnEqv-%23ucb%*X4 zBw=WBU%Qzn%(0TA{UCOzidrATy&a&Z88w=0T)SNv>n$ZPAk3Q*$|&Wcngssx{*LZ& z9$-CeR7w#({lNt2%mH-90t(eEQOq2|Zdb0Zddd0SyxeW<`_kRL@H{E_F@Dse2CBMb zmRm1}zZq&j+W9e7uIZI+W@&xtSpxm`#-3A<9zJg+lZD_<28hOeE8#Fs8AUKoj*;&s z2QLX?uJXbwqf9?(AeE&L3LwMGYC#o*~gj=4}E zwSdrn-2*WHhZQ_9=4=94u$hNSDzM1Ust*dOI5Q!Nna4i0yBz#zP+qD;tHXAyG8Lj6 z4nVTLxTrKd&vQo-QuI!WJAs20L-H09Ro`guRqd^VJI> z6NdNc&+C6E+#jg$c`wHK^H@b;4wjW+#cbEU|3)yy+1LH2G|_YU5iq*Iy*7iYAwMQTrZ2H%K=VI@S0PzF_**=SX`K zTjK(PD)inErx%W!;$C^2p3g54#Rq=N+b5vX5w&E+_o+}Cv^#r2{ET-HGiy|(M*Ip% zMW7%8;7@Mx?B_*d8$e&~&-NDW&mq1T#0;z>Txkr3L>jyXH z0`2yur;*D}25I&Sw!uHHw6|D4vSob)ooSK9NH_y&d|#U7dvKJRq+^sUc%pP{IdyZp z0_~#S#Gpfmi6u$ZHX-G2PSzS~zZ9=>@lu#z6L~netb|fdwh}9@vDBX<=hv8zMd*%< zZBeI1H-LnxPYi0&udS5v`k5glW5`ouk4@y1$T?a9Art+|Lb~Prpm;YVDmyfn31J7h zjb%6TDG`)Be1H=GJF(j%@Gi zw4u9;8~qzni&XN`x2R*$S(xi{@Qz77-`U zzz6NqH~8t{69R0pp5?OTcflx#Sy%l!U(@%uZhOi^aFK7xQ5Yx4yFr^R&FL#iDv~gc z$+%zbw?_S}%m~f)E!Tt+~>rKss2v& zpDb}qSO7qa0g#T=RkV|rswu|&V33mJ1Kr|_kfGI1r%BC^V9fflxBZR@9{}bRn}>^+ zoBS7NQLvB{lo8ZY7IZ{Jm{a?Z#-vCtV7JXqdB`$8pDCtw$vP9S>{1|KsaYZb!!r=(m@p z21|%p=iUI>dB@Y48AUf3=Ijl}Oj;k3lnz>|=j{WS%7IfN_t0;bEsGn^vz&Qdf1Wn} z?EUH$y_vhjk>~k})3MNbqqFF;()n=yXHSZHe)A=5v6DKTY^YO2{4V*Xx|TfXgfbQQ z7$+9WRYN5S%oXMvj5NA3`6?9&#VQI0b(UT1CtEZSKOP6)v^L(Q)KEWYdDRp$0*2f% zBuxa+qfbP~#Dx<@DJ@VREW8LuG-tU6a%BA?z7^B5#$JcJm+7;i6v+l6HD}GntEH6^ zUDq9Rb?BLzg#GLs+41a{IcDV4`FyHt`N7TE-LC}X-#&Gp^a6p~nJ%WF$)B1$WL8u1 zC7R4;@D+=NoOSd<&)Ax9Sq%w-#Y?sL$XNX0icoQ43B(Ed%7U6G&;qk_mYGNua*Vd7!&xr#3tWs81&V~MY zfTuzQ?Ibf!eSal1NJs&-XbPRVnWGSMpW`5?>v*(>tVm{1fSt7JQm){g>B{{&z5m9AIA^o990J?uDKj1XioxUEoO}>Mf!EB%AA}NPaXmu6LAXgFfcK< zt6vxsI%0pPrUVg+;1Z-}T0Qv6rkV*uYSD~qNo45HnNRd$LQ7!)|azYJ{O!bu-_MMs(D;jXE z3yR2Hsc(xxI#oOrth8|vKJUb^wJC?Xv%=EepC%99d|~kxn3vJx9RQYneXq=|EyyXQa%g`u1S^ zNiAPA8VsHQoAtHdWmmVloR0UUFvAA(eXkz%Od|8Cev|Rf?=9{BK@E2)nC6CNmH4Le zCSbD_Z9P47|H*TfTX{Zh2KxM&ht8c^#&ZXYTk=g%BaX_~N$$T&W^D`hdn%4rL0Cm{ zND_zb+w31WR)gNT4bfJ`7tN3ee@dRBE}eJ$_;@92jMvEJ<1Qf+xzx)tWldaTX3CVV zGV9EL6lGPHMzPvjuI*W_u=oM0M|Jf%khuia4mcU9{_!TzGmNVMxfm7gg+#sp2hWB{ zg^vaZiRUUWQMXAv`TL#IIPjkMFNd!6#U+aA<5TzVG~#^WM*{eyO7`E|kic`nxvJ?h z&e|rwF2Ud16=I2X*5OFz_lvG}ZTnPef&8{ER+>R4|En=(O1Kd743r6GIana#`5VHf zm}#6(3$wcibfhHJjQ2=Ai~xlJ0{#YP_A`YJ`ZL|}D~iLWn^xAB-~(vS$etwRo#iw1Cn4KJc%aar#fgjZ6Hbtv zoM(qWZ9dto&COj}ZiK3#Oq5xOO6ma-UH+01$J1CUSsAT9X43nt*`5rAZE6sF)P7N; z>bwZKPN4ATR}5Vt*ZPGVO<{1RzF6eq$fk-k=(x{<@r{I6sZuF^$73eRW=OKZgL-Ic zq-sqN6mOf^RYL;T99DCDUBclQu4UrD_$2?CyeA0kIv{FClgl0rV}nRsR?Ij4a-YH} zH(!N7-?go0FA0tdz|+tN{_yfsF=_bQB0@ASyXZZ>60?hA9h-9fbwHr zSBML~Wj^YtW>n%RE5@i49y(kjo?@D*P~ND%kfxEj%>?C-lz9$OU(5X-i%!Jx3o62E zD$O>Ov>LTNgzM{d_Vo^}o9l=wb2Caz%e`)#wvBZxcd+4xlHWb<>;E})hhG0w8N~h8 zM-nhkV32}C3g%y5v{0y~9rO<4yp9<)7 zOimdJ2xx@3j$V-jPRg#)wbHwh>=!}IbvdP~tRG12{=YIcA19Xi?xMG#so>5Au3i+1K;^GWo^)p_@NMtOr zz>AAk_MEwxGdS81Sy7;|=z_8QJP@*t^x@BXG$)pS-A0Hu{8Dg1HG0$stZjYD5&6(a zZGjG4$^XnB@wbV5WLP}fn^R;(b)#hm-~kGw{@LXms4DTF-8zK2ZNc@r;;xAX%R#Kw z)=#VZ`}-Lg8P-+QaQSnC$&((dwp*E4<-lNVxmG<6rZs{5Sg~0!6JFB#uwQUr#4dS0e+XUrbbKzbzOJR z759$ZIPsU8*}+7rx9}9MWLmkfVZ&NvVy`Igg)~?mf0S@4F3RKW^y|Gn;&%n`_%U95 zLjjkQ>I06hi)VN$M;urdGf?TDd0c=0`|MX;eT-&cN5+X1#Gz@|aEhXSc=g=Jj z(%sTsI#NTYNP{qRN_R*%(%oGmB_N`{H+w((f4pD#LL3Loa9`)O&b59El^!GMNefIR z1mfA~{x`hLZ;_rAI;Mqt~@7zUz#P0+_0 z`~PWTRv80+8N`ne9w~6ne_}x;>IGi;fj0VWU%@|1?Ra~CqQ40EYXM?u%1Q>l1)}YM zEd!!u7fylhELsGizdGy5Vno&YgVt18WXA)hpsnU;z2ApyoYW{3J@i~hd{v(TT&U9P z>0T-J12y4Q!q~$@%k;@vNLpFdRDPw25epQ6ztD{pREcv4_}?S7MkV9so+XYaiG6 z2H+((1BD*96S=XXtjhr^rEVhW&%0qM)VbHCC}YN?Su7?C&y&k@SB_{@%lTxaV*cjY zo(dKanHgYX?N1JD6!GnQE=}zksvMM>u!ou`L}3hb?c~POPv=7Q8ZBpRFf2_c5FeXV zV)!k8X1>ZQsR|zQnZt6TO8HF@aUK+moP4^wr`%)8qXlwmvp$rY1D-? z9&DIX^_$Rn{Ld)M$~x{X7y~rTR3Dx@;UYBM4?Y1(uqNbk{s%O~xMVYt%uY+Gmh(QP zQ{^!&5!{q-{K;S7bs0Q{Fw1J1u47xsqwo1))gC{uoLLx{ojUFz9PD3;(it#Sirz<^ zRsQa}xWWgv5x91&$Mq{DD$7YMT64suF3kB^#0>(lIVVz3(<8w`)6~ss65dT=K&Xlh zc?dCk@kWK7(lz`DOfERO9u;ww_t@olp4&#vaiLn8U-twugFKrESBa5+I_Z!ij(aIH<_~y6BQhW#L-TFLN4b~ zRoGiy;*jM%9CbukPJ9Nke`N5gy zx}56DE@i8h>o(W9=x+ezFeJ_ST0l6T2-k_;V_lKk`01#&ngPB^3uo&Wwz zSsvYwbqz5LHt&YbG@m>YyFt5a+fGmn#?1$qQsN?a37^eF>GOXXlbpmWRC^hESz7K) zFlS*qS*fzwpwHvIFnxvZa%Ic{q9TJ*HGvWhI*_U~|#ZalNw_@Bvx*hHH)-W%vX#e+AK-&|#at z@?Z3ZMOh?E2HYG)G{51I9*n2tfe}5vQZ^Wnv}>WBptq-Y#`B{sPC69AUtjf z-Hmau$|qC+yztVYN+Y5$o+s65fa#Wpw84ygB0Dnx$)JV9=E-0&z(W%DiEENYaA1u$ zCAv`=N84Yja3^Fr&^BcPx5Z)efT#k_DwH*ZD^O&?Ox+iKz!OldP)~_C5$Rr*X|+hw z(Uqri$yO(tFu`+?mdc`eP57GKlS=WYrbp4gi6nDscu{qnR62CW&6s_VORfl8zG?8g z*Q9=qvD%s_JSH*XWc3lvVvFD0^1)9Vb!@-fxW>)CNzyi6#B7bHcMS@1kM zd(;kvuK`qb{K~LJq&azaQxy~xtZ%(i713h-nB}ue>5Xx^N#1eO`RM6#2jXv6S70I* z$@+_cv4&Gqvx#H&+Qqu~ypo4c*6iXW3%b^vro1N-#nB$=CHqszUV)RWi?Dat-V6YC?*IMJjMTVg zkr&UJzv=TeEIQ=5Fg+0bn&C*!U8lvK^u|V_>O%GJrD|xX@yUEucm21>=j|!@!7oM; zPY#_A^(BedNg5j@452?eHze^bA+&?iL3{8Z0&40f^Jc)v@> zb~I7>l0>dgy{+bMqxHZz)aiwIM{->kr3(6suY8;QMjg7AcD@If&pgte1D#haLM6m6 zI{oIp5y6$FXeKVedQ>BNE3mk_dgBPy?w&VS`_@V}jZs*XPa*s#{agr9*pvPy;PeCr zyZIWR=8I{<#KwKXpZFy;%rqCoXz@9Kz#tJBVx>^TrLt9h5!S5ux%Kb|-`~s0%}pRi zF)(z_W1pIm(F&-_+%HA$SGxBbT@7Z$)Yn#@{t82hMV&FRKWTGsuVP}wyzX@GP0Bg( zg?FO@Udt@^BGQ2VyKf1B+ zgA8E+8m)b7EGmbVp?2v+BU1nQw2R9^1WPJ_aPWn6fj4PJ!@;oRbSQ+8jT4%ol`rwi z8Wk|_W2qCO(&CVGaIMd(MHRB6(h`EinX1k)=FCQ*^-dTGJ;_1au9-!Sw^Q2X?$BBl zNpMXg4>-yx7bSk?Tims4OtSDm_%T6=LqCMjqwBjdJ5u_@E7n*c@gJScVA(T{1WNQ; zEX}@!!|f!oSbdnV0vLelZu<<3CDoC!PlRYVi3CQ&kw$>iWcV)8@vdI$$ znF#)hH~M{Jk6X(Zi8ZH_TfezCtK?hsj`kDU)l&};!>hDjJpPR`3`@eHgBX%)kUHer z{7|AhGE~^o9L;q}3TlwGRWm-vzcXNOCEMK+h&=XesW+SlOy++GSHH;4huz1>VSQLt zJG2k?7PdW;e|~gh<4BCE)(ix{#IRP`L`+buZQk0AE9apsn*w7*)1ZEYfU(?m-|Xxm z6JQomBcLYdc3SgR7oH}ZA-$ePzGf$NQ)2q#^0Q#0O7pxrfwB+&%+_5#7)g(sAe^AJ zwP~b-&>@WuqQc8~SwL$nnhKSA_I0sN_6Kl7e>ffW59G+ z6SFsd>yW^JB%DTwTn3UVUxI;>ZUPz`hxIr)g#A7wQSy-opAl{5#hSAfm3Q$$pDM%&9@yD#C@zP~&LxUUZpq%1JIc5-(XOsKW4*V#7#W_3svumy8dx zf-V1SMz`eP-GtHBj_+$gl#7yBqCJCUmI%kiE9e_TqiF;}jXf7Ln-&%>o;QYF4|h`C zG};c6(d-!d&|W}(EHeMyFmGM@1_a{%01ok`gId*3X9!^R1)BZ^2C@X~ zEIqD)eOVwLdYD^d5>0vwWc?*&KT*#X4KJH#IPboH+Czje{p%;83y%nN?hvssrj*%? zuNQ%&+9@X)^0SV_dD2r97~1f@0XVW$IK8e-JQGEqv!Q6NY-DVle0s=7Kg*jf7Ya;~ zpoknqN7s>^%p^V7apWRsAaz7B?O9&YO*`h!pBaYgE}hjUG}$~Pj5zh{?}WgEo*wc7 z!sgqly=&NJU13pJNx`?=A2_ZlwB7C3-5C^jap}taC9p%`M8mG^dj3Q;DtcE(jPP?E zi=&9QY+~$by8|oh4?8Z)9H`DW0jBh|UBFb72B&uz z!4o$qg{KQ(*atcVwoVyL7Pgv7tc+&rw_c}O}4O4-%bPNRd8uot}Ckiv`UrG;T z%QG#<0TqCCLMqWhkx&jc8FaSc>eT4Qanog0#v;(v7k3@u(r6ZW04$a-F>IzC3vf87 z+>q)J776sw7gBJ5no(f1K{dRa_l?Yh_o+ zm8DCIGp*!Ug>2asy6Rw~|39y;r-cbqE?V(;Fvv2M8xl8+MOF>aE;TvSATfhBB+gI; zbIFBFmd5GZw;Vl&@6^4v$0fiXGr$UCC(G}OVht#s$UG5Q`-R`y@jdH%#}&xwp){XJ z4Y1NDBv~0cKbJ%h+?@`+F?t~AJheOOg-AZZS~A5w&h_{Q1+Qi@z%*-aFSng~%-wi9 z%b*#k7Hm0*mXuQW9uq=T$}>W8D0m`Gp24^LQ9W4I{}(c@2Q?SSTCFyh58arg?K>UP z2+m&C;DmI8d|=ogcNc8cN(JG|8cmD#)9cU8v|w#6h~a~Ut%|K|G!u&5%Yt%=5OmN! z0ej*Q)3=8vszhO*kC6IQOox+XHQqUiTE8^1C+u%w35r46fVic)c2+p?QapI03`SyU z38KuvqT~hrl$KWL-gL`z8Tz3|62Zw*WYRed4guS%B1?D|MM9WxWropoL#!g=Lo|wx z8XU+F4reIF?1gnkc3fC`W{6BLyoG53W51a*OsQTiBCJmjTQK4d<#;mvY~NbwIuN(P zegP+Tz^)FmhQByc-)6sOWi8~;jC^)XKeBxvK6(C!=4#@f1iLwlTG@P(Q?Qoy_+CpX zkNOjuWEE|;AV5^OI>IY>bQ{Qv>@$f+)N-TZcStOPy2ALzKm4wXlm>fz)6P|6r!VN| zby#X@b#6}edSX>&kh)kYaF=`IeTV!{E3j=yU-4|wOkE#cUzdGxnGepHFwn_mqMd}r z6-+#JhCa`0Pr24|Z$cvo@>I%x`DlDzv|<(w{mj>OjX2rpUB0FM_)ju~J%%Zkh{qie zgImD#CCRy&~csr#`fvArgz;4FmB-7hlp)#SO}?5Om75%j4tgS%{%*!fd1@* zy!eM@>B)Zr9Gh>?QMQ2@4GW&aFKZsxE(~q9PK~aIVGc4ESVcffU8KH7I0D4c%#6+_ zZPh?TK93?3H6<4mfXK?F@pk4W13 zE%$jX;twAHai!tkCw_l#{>wSr2!DDnJFBTuynpg`eWQ5rvAKsY z>C5wnq2$OfSmb&i2M-p9G<3R1BX^Ybzoum@Sm^!!gwPG54Hhx|n};gpc&;HG8prqE z+hWBXFnMADKvDs$=I9yiq@y3V%f+uu^##2D0)Chc)G+6-pzFU21*7Tr&I#?LWYevc zwclgFR_%%p@tt7TO4U>M_3ECehisEZz>4Fag@zNqOZB$f{C_elYH>yrqe`mZgx?5F z@+0Wqw~0~s9ocF!6^OsD(~mwi+8OF8C>P>$Tu{%`gh4qDf!ouKES**r346t#?|E<#g znMG!CJ^v1hZgm(9h*x>V-u|6J$W;bfme~&D?NnN5 zi#FgAwWMB@$dQ`}mtHA3I01*H6?lQm1*#*&mG9KUB70%d&@{nuZ| z#*mcFbX&(W1Ut^Zjrw6J5|kUmN#kCe7hmY76~-!$&6?7}p$hZ4k_gcimGttCz{kIe zDgJza1az`By`dM0_O|hkIkgsyeuBT1_xY!Hdt6tCzOrPkO86&*ang)WGF_S?NEI>xQVu<<9^EQdg0=z%!V`ZD5-)=Qtacnzd;i8e6&CO z^ozfRmU}N8Eqp*|IYDQ;ryScw(b6T1GH{qDF(gHzW*&?%AarFIJD|^(;F*YPOf9wL z=RD)t{z{D(B$mOF$O_iW5Lzgk3#(*L)ooSHohf^sAu2yNQ>NJ@OZt*BIb+`Nhl{)& zklabc-YJzdsX#%`%DfU`7JZks>@Pu0(8lqaRrRHXQrobMMruqDid|8;TWdnjz?>2k zs-R70v5)8x8SjQYq4a@*NP;n#D>~9xO0U6%nrl}vkFXSdY23?0U zoltti(PspqUAtSrZ}I%)$`mLmLJDpOjBoK%AdNSDty8v0MR3WK=0*^cQJCd?OtQ43 zveznZJU=MOPP!*j&ewDJa}}}`=vEja9KGy&@_v6MEB^tru?fVB9~>2Ow{>dI5ztHQtLh%G~wDbJscg4d$xtq zdw?m{B4w*{_%etwba#f6>8^wjm$G)x*x&+-Nlq_G6}|r;2W_mcle?nS^`2d9gZChn zlDcD$Wu(7~fscJq%|>+Wd^-s-q%;2nD5naVaI;D=&Ngv)N7?qq&#(= zGOx*pX7X3WxN$Dum|pVK;{v9Jpx9Sd9Fk*0X1w2)z4-5H)cjQSGm;S1ygXVY4NGJQ z<9E99kb*!N9ONLL+Z0!b=v;TfhNVr!5qQwHh(e+L`Abk*&NE(&&?6`tTk&;ZTplVo zX$L^sTH2(bCK9sN+ES2=*NmZY!B~QO0NI;#MJw6R|M1cuz^4QD@*#i-5`NV;!})ApW+V=uXB##@F!vJd^`F*d;v>%V)gt!YFX7ZAFJ-w;#dKN) zI)CJJIxQOCy6ec(41Wi_^J?wYNEP#aya^WDn|cpKR>g}V!ic0PwBuYZeIDAcBSDww^O`Dq90kGsg5ZzzssyI-CYY%6o_%wMy!$h{+Srhp{Tsm zR}Utk?5e8;9AvGw-3LEIoF$}h(DcmkU5#B0s+BErqo8>#Ky*c#RptMS7(uKNyh*R^ z?(HWaSwp)r9=PW=5Zp&(cSL*kL7QW6a=OYNP%|I5?0&H2(#H+sYrL}}|NH3I@9C7# zFwF_zTn;v+*j$s-nb1v2qAEo*9KM%KAl6*jO@B_eesQ+13zzR_z1}|%?9uMI45rct zeef7L>+ArVys_xQVmjJiN3aVPB*d*QZq;s$!NTU03IF7hW+G*1fRzo?IO+X7pW}j+ zyVbaNBC5~UyayFF>|Z^r;2(E7_3#p+zLDIc*TvkIdC!rlvgARnWWAUEReK1*}f+ ziuRZHho*~+9rnl5g4H%PFI%@7QS|OVK4=qHPX2Cis5MdbwUo7{%V15&Z_{og3 z^EA<+^no9*aqGULbv}pA$G#~GA5|q&hb$KTFIQkwTcgS^;5Eve*z3q1p!ft?o zZ9#XrVib5e!z8ComwD+!ziC{!OnNR?_w2WRi$ei4F-s_6H&dM~v$TF6_;5()L!HKX zWOH#U=+tsHDS5sKi~OJQ5D(q`t!K*v)lr;~$;nOOAW!HyQVPOhTMZ7)CE5E{ z+mB0vJ<#6Vjz<@WH~GNBv1tNs5gK5|M146NrdKX(D-^g3Tup$E3T!yN7BlB_lNgzp+An!w0W;$mXvYf=1i&Tgx~o1Z197RCuhg$m zm|p3Ti@_vZOw&0j{0`M<8@z_slfqWDd-}UF-d2H`92IB>G}*&TP2V_y`S-C7E#s!x z&jHDxCb^o~+HBtDGG7jPX$e+b>(U}lw&5X#Zq<)jSQ;-FF8R{Kv2gN0Vj6F27&6iFygh_{K z5g~1&bpSU*BTiZEvRp~7V{3GVvqZbJ!v#1<9H2nfoX-XjCHOc5H0B=`(fnnIs zI;<0PQjxK{HT8nZpg&+%rgY{$KM1T-!rn)+8t9Ret8}L$iVr|GO7ClAu)Nj6UpXbx zwxQlM2yL2y_0_2%Au|#ZZQ@%YXbe&Xd2snN@EaqrcLkj`F_c|DsQs zFTTtPn+2m32)0|J?J6fcvQ75|{Z%v4k%6?@S#vz!ZSzp^TTA^#1Rz@lb?~0x<6obE zNS0wn6s;w~wt9-DG*$;L`G+2dM*A`Ru$pT~PrDr)&rB!xR^wU6ZrQ~?7m*OlDaU+d zyf@K;7ZJ9)Qn0$D1{wZPSC_DE@BmR?1C`ZqDzko#+@)6UJbxhrl@5(@9jY60I2EicpF;nT#9@6;1Qj zRZ!e{(!R|fl3&fAmmMFOBVZ4)@6)W}sT5Y_?$bx-Vo&AsXXx z2wgwo_(EPY(K(=VLyeW49XC>>j)NVf-r}GhmWAbh7m$LKXc6y)DQ#PZy-LnUO|aow zW)lvn(I_Nt8&`$ky&4zSwNV2uWhyo$ly}EW5i)}X-OtS#Kr{fIvsW@HoH?@5{sW4% zK|Pyy6EoL-0vgYKt45Z`s#|0uUEPg%r;BMPO7lGO1$$bQOf8o-*>2L#pr$xF9F@aV z8UQqu3397X{rk4Lw0TK26F&F^rE;}A$G5E@)i_UIT!X{da~>BJLidUtk(Rm3325}B zI3X1uz#ek*@2FWU@P)cxBx3=)kF*>#RdlZU9KJDIDlAfuT55;+dc!{mtGb`Jkar=G z#sL{q7!Fa}&!{Rb%FG-n79_1<(f*b>rZ1#`MMo|+2ge+cxB^O9My*PXN<-b)^oqVX z3303UOD53<7uPjNNPQfHhj~+?bg-pNI^kW_CM_J#N=@jNNJ7`o)Ft4#HZ@xsYuhqN zVboYXZl(&=KToYF1ch@|9j62OId$JL|F`WBM;OskuLe#5^ebiUo>R;&?)Q0Dcbb1T>Bgah}E3NtUKX7f(;b zfm+FwXJ_>S#?z>}im7qA=)v&t_K1_?Od-57gf@LB@6&rK-S|E_kCg_O4A$+7e&Y!j z!sgu>ekRzsjS6dXVvwm$f&8P_W;S+uNL#XY1CLcrx3x)>Uj~cz)$8(Vhm)GLSGZ%n z_VW{gT5Sz>uW^u+XTv(9Q%34Z1@Q=;+BC~(v1orhHw&Az%|AJnC`HdH7j)_gUr7l$ z@YZes#jvEABF(NQohL=1dK4qfMlMAm9(sMQo33~)C$&;HXXFRuz8qGXLlCV%1G;0| z4{cMDlh2>|@X)0yuu$VM%EPj`g3cwZFfU4ZK!wAaTpn$>9;D?&3m9B}? zjW1U~$z6}9O7&*q`lvGB%H@eyhY)XN3c1%PZbg75;G2jI95LNn^Pg)G_1Y7A6q?PF zxOeyC^V{gTsLim1!JkR0h}$WIlh3ezpc9Aqjdu?I+D!pppJ&m`;jioOOHFRC6^rVgQ7cuKAqR=M+w zeTtKO{vm79&-XL=qMZZvqwstaUEV8lS88d8?IM<*IXna9x$hoI^b-#WLN>XjkzwiX zkv7?y6>CJHF75WJ+7L=f9EhBwXa%Ptb{#4*EfyEA)3SYgd9g*xp(g~YSzml+$S=8> z8cUpG>C>WUJiRY0L60DbC^XyMa-84=J_b)_w{I&kS9IzOY>+=b+`L+H`aGj;bXA?) zeFUtP|K=wf4bA9*L#{+(1NVKYh)oWKB|fws8FmbQc(3_D{y`V8j?WzH|MTa&Pguvp z_y^U8$fM7)&mLU9XHeS_c;G|(STl&lhDPPVpRQj*-&=`;Bj^y_TxHP%Jh6Qf4j$=*=9oDKYVEcHnff`Objz@shSHD8lepLQ<$DcYZB zS_&WSih0yowb@%94B^+4D(=9W^jNfTdaE5?U6}H|AV6H(@Tc1HpWoBf6L)sYK?(6P ze9u7(P_Gx0;u5UtF#auAZjI4i} zFagfj7+;?=GIe0#Au%fYbu|GvJiT%x4!?OPEid}zY`_P?S7RHyZ{WmLnsOwlNluxk zJi3mErVAro!d?6e#!yXm5?!{QA8kF~J^?K!3 z)lD%#V4Pptj=&bSI+k^;POuX!3sL*;U%}f36hN9%+U9J_|v8kzf>bn zHDaeQ=QeIef<59&WX)ym$&}OUD7>Ud(~GP{2l^wy00TFY{!b&Vb~goHwR-c z>QGxhy_uu_|3c`L&Ut3G;a0^6g>{L(Hh72m+G`_t+yOW9(_6-7BvOWHV5C0;tNI=G zFf118ng`t+2%jM$x?=@sFWVv)b% z`fE{9fa@gKTX#|r7Ak`tq7j{jg__~uWD^4&@;tv(!o{a#l+=L8$xB|nJ*!qq{Ru4h z&uu6I@$z%lOJO9ixI|<;-VTazh>I{Hy8~q|-&l98^cXk=2mGIWO+-Xl4CL)@^&xo( zq|di^x2T314Y;Isw_uvjQmUR4!)G4mtCLO?X&|xgl+$8WNhqRG0KON#={LX6y)EF; zN+>4e#roFW(~}HxYe0~P@ikx%OLg_#&*XQHjf6?k^St&l{~l$2_h)v;2+`7|$Yv~= zc|1;9Uut(_&Lz$@ zb>EgpxKCJ0;2#mAr0`!MmG5&{g6U=U&cH99GV8d0q!y5Ax!s}m@;Cdw+IA-*N1i%Q zg^`I+k?QSzV0Rd4e7mW?dY9BL`BcE{jWW6V$`T_djcw(mqhLJALBq_!iCg`}W}8>gg?C;*e!KCT!%o z{o2s`?T=F9kjb3y*uHVzEIQa2mjvgsq*xOVx@ee5H`x2J7vLSUTCWXB@#Hb3Z%3UF z?>@Ml2=Tn=6Y!K009SDKifap&R~WV2pd#mk1)G_0^hGQKJ(p+NpvkmXCW>Xm381mE zfIFFcnMo23B;jW)lM{y-|8)Cva?KpX?yDhPI z4`DMu_dfNDt@<978|zmcOn`=ca}EzEHJ!^54AS~l{R|M()%D~BKM+J75?~vJMiw&L*$0TWTH0K1{(u! zzpee@_(Q1o?YsY;5V|#QSRfsaFrK(~>s3KIun6D|(F;RsF1b2cq0*0(2DLx5<^sd8 zDzaD4cN;KL_Nk|e<_PaY;0-#LqG`~i3b5tC@uzt3KG2-dsG8=u;hX_m4GP0PXr z#b0kX`CX5F5*_VOMsQwueqW__SBHbXcu_N9?LB_7tA>>ZD8`q);<@lXtL3aTIV)-F zw0}Aw>4C6~cjIT2-+E5}>HM<9EH_fD@Prd7baK;k|LV7gw2Zibu%P>20BZA+H>|$m z@q=2~xHwsLcT$c5sWSX7XrQfX7zd%>$3&n@{lks z_(CI=L$Iq5zfY$(p@&SNc;@iw&6h`JiP*hH_j~OkwV2hlp3KigV#QuV|&4%4% zf@_SyI08C^DjlzP2Jsc}h5~hmt!PZF}ov-EOZg9qxq-?nF zYMhhxg3xGhv_3I}{yjx0*^VvN?JeYn{tKSlkKamY0g`7qe_f%*8H@ToD}Q742~(%P z3@0SHPy7Vm{}hI&Nv0_s`cdoq=HNq62@}Md`?N~Ul0kj) z0dH9QTD#y-5!r#jt+}TW=~Q#~mqQ5ZC3%^2QolX`0R$p*u$mM=Bl3x_+5K4fn?>b; z2T!Le-u16=%jX)mzs(LB!Wo}ctqqN8ekj@H8gskCs$;O^+zlZatb~zDBuGg(>KJKf z0eZ5Oy82|?W;2q|hF89%N|_W%+4-m z!Tt>BAD{z?!3-?Xw7&i)7C>ZVfJG28!BiA7uEWa!1H{z`wNKR+P~SQz7THpmqHU!n z4^l!`$9te40~wyMwe)M!WIMi<9rgq=ZJH4?G61Qr48}^h?;K*_{=wbbs}?1@#$U3!^%rC1Tz%2jF$Wc*R8$vP!A*lxq;z{&>$ru2M!F;S+K{kbGG znh3cCSNruQ=i7fYF|e5NWgR6Dz-hrX&F^lcW7uKpSTp@eZ_1v=Ht%8Bu+jwB{zB(v zL#4}qO2Dyu`^%#%%3cH_<3#|i!4?t}3X9&8m%~m);kvRRxI)jilhHrnGO<>cy7Oq( zM$-`$vMyjrn7ut|NyQ!J!Lc%i@TZziz^lO=Y~~&yTpy{-EqPh&Dtr9iPx755NT(_2`CUr&dv zYSdYhmVXi&+GsVb@ zS5s5~`IwjLhe~1j-alRJc(_Q@c~7+4eFJzB`JOr_f6oOCc7ygp5BDu|lOEQbVwI&_ zm{@3ZDcgpFpz|ialY6SSv#xKDpU8$>J+R0i!ZDQyqYVx%*{^6lM!6P~5PMh@?QWeK z!di@qwl=Ft5x+GUiq&v}Y#CC!0M7sTw0N#XFJsT)jX^8{$cDOFy&(!I|8=r1KcHqj z&N3xkW@#hv(?539B-Y%oKT;LDEsYh#b4@gUbJ2nr{DY)rQ%3Jc&=Eo?$kj5i zWSOMNxu23#1qw+o;pzL$we0T`rM&_7GuDTD0sc>inXHN+&1j%8AwyvzB0ZLV`jEf8 z{?#+xsvXwHB5MX=lhqb5cCvHx?EM&y+=XUY^L~s~BWcW<O_I830|ES;mPx=pP_3IWDN*Bb@A2{~O)P80wD;U}LZ0=YKC0>;qecRZL z;3uRAY#C9RGsz6t0DJwi{N~B2heE{&d?Wh0FFX`?6Nu5vF>K44WNJ*G4R}0;3!+E0 zEoSM$Q(}ozzrGA6a*&w(AzVjaTvSu()a$4bYW#$WQ85H7XCqZtRzpA?5)%nrSO!K?8qL{hwa*QY#iElBI>=_1W?=^L z^F?XG419F+_H>lDvld+-F{<6`dq_fNf?^VwlGMmC%q-_iPWm=Vg1Qf&Z?<6s>%sQSAQgEmvb=N(uXy-pw_vO zE*lC7Y^jT>3K&;&K3J#OzwjvRv$0niU&mv{Il)3-FoifA3gZ`=O?bRslxYFJzuyMT zg4?8Wg2ozTLaT^w|?%TWE%ZYIF!Z|2a;L>+cO2JQT=44mn|X8)RQk8lMZ1KLxEFs z9Ls=6nWN$H)umRqCtrgV)B~q z4WHnztWksyy3k4PMsqfP?2-mYg0z03Qhi2G_WO}3A;;SQV8q;IN^NZ65QaBm0mGvN4Ri5o zj!VsjPjQJrq-ApT_C2P2wuetFI;D{z(_8W~=>H`Qloq8Fi=Mqp--|`a6K8s}JWIa& zN}>4ad-a_&%Dtqsv4WU05!JZ%14KB8->u<3@VTfA%3x=LR%BACmV799mi9#Es#^O) zpR=TzqwRPZH`*?6PZz3IT zzBsZsP*-Ym_}v8W2II5gxG8Wjt7tUVc;!6&nN=bd+nfI%n>u)4XR0PGtA;$2TsHs#z07!%jag>X1@r>GEfAlq8cvP{p!fE z=Et?W??WYo`raeK|K&@<_dTd-gwB@TY6|UaXpp3tru#ogUZXEM-Zwc) z(g&KX44+AG4QF18`XQ+2M9!Aw%lGdehmpOfV zyKW`oIcZE!D^+nN?Yl>ct4nukBc2ACIPxR?E^*NC!fH^i0gc>5-6D0ri&{pjH>r?^ zoE3cx19JUP6M?bA{nYp^L|1Z4RdV!nBtPKRSM}PZe-`G7>^;5!BOuJ{`y1z3Ee2*WW%mwR}F?xHyp*ecFOSsrF#z83rK1&3g+^6Fq|ay5qMB2 z_K#hIpsG0En|tqJpJ4Ej7*~{&Y>zSqwv$pz)?aS~kAlMo!%n+rBgq+!U8t~RQ=Yyj zeW{P@SR@}2%Ek>S?j%S>RaA4dC+DlXk7^$Q?!JC))jiSHkqAEZ*G=$c=`@IZq=vu{ z9yK{Ib}h40UKMU^=X6Rkyp%k7k7wDmVC()UTS8;X`7PvxQXz{vRDcA?BbiSbZz^b*lXD#a5j$Q;32wNcI>7L z4~T0nUq{6eC!cNDq%$#0kMk=R)A2Cizc7`RF(M#rvfWmY zCgC=fQeUa0z+ztZqXmf=2?ebr>Hs-N7Q!RG83>=67#L(7}^KT z;gVKdBK)9?Oe8zZ05Us{upKuYDwPiMT?)5N2}|LDC?KU^lLXhf5=t)EKCn32?wrXl zB9Os1>_0ror`Dn2P;X}gN}EbN5I5-Sprkzd244RT^!E@;N=$11lx6NDBPPK4b^DEs z(><7UiM0YuUIp7K^X|*$$3;FxhZ@$WI$F9|!E(K>iXmYj1}lW6^2exZ#vFB?;iQy4 zSfV9RbPkEbd2Qe0`0fqu>3<`CoTuG}{cl5ICWOVatdy~w)8g*)N11fbBEZaFzL#GP zmK+w_Gf8`0Rn#ng^Q@LyFntDO@4g)VU-nL~5O&TjmDcx#@^IW6sU|25MAn0@oy|xP z03NiNw+7rAj9hQDNFN|8WF;LTB0`evZm~jK{oENrOY948=>Drt_HKWlO_D2F$+EB* zh=K66xN~r6)+GhXfIj@&T1F3w5#w93tDA{9xp8BrDrcIc;NAy)FEjM}S2k$If|gK1 zG}`zWq?3ixX{uNdVk1dT;m}Z&*mZN2`z7^2t%)O^Y#hUu?F-63%%%Kn?gzzRfphwz5(5J-HWSTVvYqg;u*}G zKk%Fbo4>*+V$V6n=9=?woj57+RmmfHF%FS?0v(Mv`^2gs^$G5CR$|lO>ZW&yJ^Y=E zCK_Uhq;(NM*p1Ff{&5EiPm0xj$#+3ZN>=`M(-&%=XC-%?Toy*E?Orv^vpstl7o!+K z#wnGo;*kpV?uTOHk`w1xg(4N|X-PePd#W#V)l-@d0wsoy&o)R;{IVm5HG*}JJdiv^ zHpQyIdF&j&f9gGFp@IEjh^j}(%6PdaeUD$@Ft3K%5J@G7)(<#g3vTXZjQ9&5ke=id zg~mC>j?vGreVTGE{>v{;N9g7Te@9) zdTiLz=f{E;m~dq}JdOtJJUjR0`S{L?VTWt?ARubr1!rq53x4FwKw`OHiT4(AHmiA2Qcl8Aor7)a?AzgX~m zGUWF$C)D`fJ6k4c!cM~(US%W9;D*{#{aMKpK3*-%A}2i7bB)uFN@sjpN&omPC;4HD zFp)!|&Bu$Ntuyt}3#Y4)GCM zXj(K#AcL+r#8W++lYp#bXCT-hfniu#vP+uJ*Z^-0kroGb%Yh-HB?m>@0SY>M)34$B zD(H;wK}wauNEk_p5!6RgDaeTRVoH27f~Ti=6KLM#s=3Ny*+hllkj1>UED*Lx^{xiW zTA%639FNmVlEE2;#t3;b*u{~EJPTcpH^lZ6WTj&)#v7A`7{)O_ohMjJHsRK_YX8Veb0W;16>3`n%#0C*jNlJv{v= ztIPLLw|PM9K}W`AU_t61HK!qSZ1Y&&0M^&aVc&O?*twrkxCmEtY0XLue-fxtd0RBy zAr-tzZGsm^PMb_CwhNCm=MQXuSMw#W!GF+r2~97u=Z#nmS%0ugl@~k_mytIQ00z;c zr|ruqrie;OEY=qrHmI9Dh~Xn&S`br~R(%s$NjevAZ zN_TgRbT^1}x1=E5-5ikaPU)`m9)I`V_dgi;oSHMUpJ(s2zH0+&Fe$<8rZ8<3JxoTz zv?^fY|HQ@3ausWGF;vUY)-RsN_f}`i)qqFDlG47GM*r|j#jwpk%PWw{3M~k| z)^-}59;cSrAUUa4Bf(^8AEH^))lwDjD`G6^S8MzM@562)GC6kawZCJ__R$5Qz~QS) zs|wv>XpnUdJ|@Vy70BkvYlO(0RwZ9-QiS6DXNon)lvLIF6ET zoumk+T#ehf-1{6;CjBEj_Jj(#0w?L3CsHRzN(tf5b)TM$@*Ut&-fc$>Env~aM5Ip} zhk%3ST<9$%Pg;Ju= z#Qgo^CkYs?WrxDPiW!~YkGEnRKlRI%rtI|f^vfVoX^Ji*>FkE{-C>$^-H%PC2WOA7 zr5Uk4qamyn+f5E!qFtMQwvj~kg~jgdLSCa{f=FJ`p>HpCCs?If&$C*PeE?s9%fv)x zz_D@yU@}T@Vv4GgANs4NezMc$DYc8^UirLS^r36IwuiKTF!Nnd6S=Xjm}XQO8=6y* zD2o9|Qp1h1|3_A8VZM06pZl-e)^y)E?F`(1eu%}u36caB;PNY_lER*#zNdS%GOEqn zQOBqGT~VpWNo6x@m5h$I>(N7OX@b8UtAt-;fTD-tI`0EarPWd&RSKdJaun%;UStf+ z;(_fgdT|~jZ*?mI5yfk|MptA+b%z0|*=0 z%HJ>6#vcQU7Bp-dSK@_V{-EO!PufyCpsx8r(lYm)Uw^|ny=u*N>v9lFUB=iw&JXW^qptTp@FoNa&=~_!N-4TdoWz%z^=c0{3Z~~iJEE~@BuqpH%HEeidh6+U;gZH#ugb@7@po|f~fkd z(7}*FIthtkY=Z>CY+PDB+akv@Iz$NnDmt9P+=M_vdQ34)=-RpD7RFrHZ$GD&NrNg# z{C(7jZiflD6|tSpyDZbAu`Z z+W%hoq!YKbG4V`(e%MzPMgdk{MZxV5ZByyt;Z&Pj$x1JjXtMaS%pX~L`Z{7K2xHNu zv@}H%J%pu~2e`oeN|^#|C*S!?|IKn%909>2+v6xW8iEfWUhK8!r8Rmy2N{zEE4hs6 z$TJvQvm}xwQc?7DUHou=zGH@F5J(eZC0Y5`3yJyvLjs%+(hIuUe@m4X=&=>*4|59G z+e9*>zh)g4bihJt>?Bpnq;I6^&%9fNUmDCnE&&^K|l_%^BApvzZ)dv__cj_IBXSI72#W^vBYgGo8?PZ zSq#9?>!Let#@h?6xMwn*TCT-lB}7_(e8vEZ*&VS^ONU$-f$>Mko;WN4?iJErvOx}a;*k%aU@R3Lhlvi%SpS0PN$2RHs`B?oQ8r2fBYH5 zC#C2cO`uFJFy+}kbNRJ$JUGR0ys?%Vs#5ruiM#c0HKC~ll{m!Q-26lx=_R3WkSdFXpxL8>tc#wNl4d40e4`l21P`jBF4IPk5*z zwvlU$rJQ7Es`K=%Ob{}=fkao+I)O#GP8xB@lSsT`&A++F*P+O%43d7otO%mYt^E!2 zP-6>6*6I`gGK?gzFSjC-Z&CS%SwC_Lt*Al z2RwUXTLL`E{%m&cp1C1*o~#d$z^r_Y<`S@4b}vOCqePf!o^+$G4~g7qRbXzK7bhgs z#D}*)2=NIGF4)=MIa5r5vmBQEM4&KU?>CAQhQKZ0N$fWWi4MBBO6ximKKGug0YBA{ ziumnbjj;ky5UMpo9|ZRo5xB&g<-RA|Wr8?7sgM^*)~%Jum031^Bv*LDWM~ zzgJzxR(e1ElMNfd^NBeiB;bq z`rGuWt7H4c#cFHhJV(cGh4*gcE|*>>7x1|q5anyRS${@@WQc>lfe$M*pF#?>DuGRC z(&m%uwrMM}7u9(3x9uTN<4XJe6jOoG11{HDH+@qTewho>R0&d5P!P_i1nhKdgK`Zk zt_&+LyyR8`e*#l?H54SB->Jh`bgi6PNDLn-zsjjRnVXxNR+$Q#=vKTvqJCKA1r&?Y zw3g%|jKjHMM#5r|baD)oNv)v)58a7zsq^}^-Ts~*0DoVeti&aTiU}o~uVY#IIAHlO4|ATTzVxy3IUs{D+|6A(Z<}HfQ zYV{reg|mRm`SPZKzmcIH5VMilP)+BK_J+sUO2ADa=^8{z6d}y@J`mnfru1Z{zzK-03xlVYmDjO+-yFEiZqj)YG(qWM#ypTRFH-#>y+XsR*_{3~ zb0{Q?oq<3{iSlC*^Y4)S#09_h8l1L-u(|lK#KbVf>`MxQuvKVbQj|hc6v{%Jw!~g& z16@J{%l!PWhpD0cyPq)tl$KAtAC?MDO&Aa#w`LCcV<5mBHa82*$j66Scr*j2Gkypf z@71d(^`m?#%^G##ZbFbb)oUAs!m{K-j(rl?@EKvN{=BMk+BTSYrMJa5g z;q?$J2nchU4Zp7-Nk)}KA}oE2eCUFWL3P23>+PUa#Qpg%0I{nB*SuYKwq0-M0cQuj zAO)6|-T5!THR;>d`Nr$YdB9EGkcvml!OqLh?WB>u=eqj}%o&2GXw%Jk=NpWCZ1C8G z=Z5PhG%G)@&qee2?6i*gs?+Q3P#p1I6zaugJmCFi1p2>T!OQOz2VaOrw#iT$0;>); z{Dmv*1gJGmm0$|!USkt)evzG?z|C98nqA=#QHkI!^7&4`9!IS#Rwp1SnNes(R!VwB zinMd#0oMntG8776ONY1b^!A~o_f4wI;<1HDUFA6*#*{!tA6#}}a=XQ!ZQ_QOTE=nG-jCE=9F^Xb&f_>|Dig{1NsaCJFE8cxzK`nDtb29YOU z=K{|w2mAXfGBA{l5VobBm6gL2&2q0d5ESIz&s^mI2MNW$WjX|HcZ) z?)MP_SEnfao$Gy!%nxmqdb_0g3uk*PrHN)b7EC^4k6(bd-oF=@>NTBs0w+A!%!l_Y z8YQAFV7GHlPa$_qYb!cuNDvOh0Pz=cqtdH|4Upp9@Z$tXU(QslbZA}}D(4~@q+tW% z|IZPTxUr*6x40Esd%fP_3v5mF1j7$);iG7~0Uo?hqvCT8uAi6Ham$+Hg%yp6y8K|D zS`-o|%#caHKl-xD@SchT-mGhnuq)G~?byVI5?!yi>p8@@{#SK|sFWc-4co@}g+13a z>?pXzRLR4{;h15bB;WsQQBKQ6qHz9ml(!t5hCxP72xIP3J^)G;)YZ>`bhxhPwl3F~ zhscfRjt$@Y^Y-UI<+{`Eg1^tb_R}rjhD2ZbAV^Ay&Z*qDk=#GWjga5(>8`vXSoDW~ z@iATN&+97>t2u1zZ+A_78=f5}ypCP3cj@UUemlMa;Ct4Nn;A&X%NHKjpVX zC9IXvDe%SSr7NBYsq2oFTkh`X{+BiNs!8ctx4qPRgEn8+k^Qvzx1#MxNbNabYl5{A#GmFw#ju^!16!|vGAfT*y!U+ z=VmD+ZzbZ`W&SOfVL6^(8C?QufKGcy!HAnLQUz5y@~62 zK@dg}^VkrF;3iglfgb$pmIA2hjra-dP@)zKz5cT6eQ1PMK>D0}2nYrJ)+%@LO%N7p z@u|FTvMH3cC?|VaitZ5JVr>s+p89elrK=3uveHSB!v0?a;4OwBJylF?0V6ih(AQ&Q zOjY0j$^X$d^xivoJ93SP?R%-(cw)8!`#;oxkB32&UEU{EtUg_olNITPKUoEhK+xuLcJZ2mkM!Tk+*oD% z^?o_=FlIop#|Lsh2mG#fCE5U_e;;lsQVGQe!r)zP`wA`Qo%8!yxc#O$R*^a#;8qvX ze?boU;@FYuS!2Ic4=b=A^fzzMOBMp;FuZ@});2-`NWCt^AD$s*o`9WL-bqNp&D32^ z+j(d1dkBH+fw@rgeVUHR3)nEounqV1!1sw!pc^e$5`3qm+%ka;fQ;Vwvej|zz^tNq z=e%hhZvuyTg1VAv_9f@68xk9mr9|lObRW8wC>0)%&XZHZ5IH`M@eGss7T`y8{NOd< zKoo5r%JtKOSeqfsWOi{yP?h!l+%*CvegGoFNe_I$O?20d0{Ge1=!>DDp>DbVRUFtG z(qo-9`sMrsO?VeT;bBM}6}@+L44q%!>XTJrxq#b?+!=b5^@6VILt<@5&v`vxYr_?| zf4K8#>uV#PWU`~v%Z$G39H0TN!R?1cUYFDQg;>KpCfGc1kEazMJwK;(zJ)O+hRN6v z3A~o#SDhdJ_>AbTp=iB$hk-xnlV_&7HhqDh>ub z{inyKj=z1RZx=PM%QaJtdIMjNM8O9umKGLoI{+{)%7dvFHEkH8MF}3>INj(X6@WYM zxL2v|?!%8tv(Kzp90ch_$M?OA$;O2q^uiV>;h{jg@U_nPJ@ej^>XYo(uMwOOPJ><{ z1%T)92Gw!bRTsR?`gTRVVBiUPpdRHIXVSt)65z zo&DQ3)yB=(L7}=Ji_+=bfLxEWSZq{R-d;pe0fxH-9dp%6fzAwbJHca=r2Ya8I`*+u z_YRqN-1U9KL3XhZsD69nUhMt9J`W*C1K$U31c{fTLO|B;c>fYtzD2QER4TkMk04@3 zp?|fQr>pBF=UUoIF@5tbI@wObaco0UN0A6_3q(tU8yQv+hhCP9I{|&8P0&h$%PJl` z1|8NeM}VAkP57-4B(1G~T$WVCgfaE4axJ5NrSXN~Bw)w-#htHe*2qp4OGKUq_|rdH z?^@!u{BC(`5ywMmbr?FHj;Oxgx?&AAoEqTz3h@Z!<;6)Z6E|5A{>Et`c9y*GNDGU~ zCxxaHXx^IS-lQj?*YSdAqO|@ZGRV!H@(~YJVKZ^Ie!wD9t=#FZRBQMet&izr` zqq2Gz{;^OM!Tb7stYsRAsnEm~Ai&v;&pH8-{rTjK@@Ks)%J1cJNW2Q-vpg6QxvTpE zSrt{xjY4X>DEO-8MZUujeA4xH@|lp=&}U>oTi^K+{0e|U81v)_X!jd{=*E1zXLSoD!-G5ZHcz$;AB8S6zI`n*%fi_ zllJU5yE1+#W+Na8cr0wut2%j`3H{>z`+m*uvz>fSSQz@o!#=O)*(#2rSMWOj0|MdW z&_pJ0&&EINk`aqE+`o&o_XQIA$MAwz1$P zEE)uUK1MEN;eWdY@VPc(#)I09^qMm4jx{)i8HHuMmtWd~U3PBq>JYMu9lvqLjaxg_(pY*$}Y2nq%;45L#(k@j(%^OQalx zWyw6%{{gsG-&={v>3=*@fTp$%0qCXFv|`{!q=RAd7e5WNwmU?~JjjS`r$YcR2{71e zerxIWdBr6sQYX0BAc;QyIkBavhx!Jdsqje z27NdZE8Cjni7A%Zr84Jghsay?J@b#kB|PE1Sb*O%9w!_Galg8)$QHy$z8oF0SL8qn zRKP{B(L<<_7bKSOo)Emny9sOGMtd)c=-vS-yQFWn%SQK(Zxa(^V`Gq*Kcn|tA2yy1 zm$jWB5ivHYab`gz?+zP-V=uOm&ayG0YbCo@MfCyIi%Zh`T!ff`EtIlG_<()bh}h~E zV5vs9bMY)&c7%?uqei&x!EtKsstdUK@bF-};eGt8rZc1_{BaE{dbviQ5=G=GF`h)& zI(;hlD=5smNc^o_Y& zb`FI1GW*W*<1s??4ZCQq`jdba)*Z|$IExp{@j(T}i#&bE*g`pflF7O4ERh9d{4rhb=xGO$UN6FtWCZL@sL zPPpiD!~1}NE{55mj;{GgmUHyGML>4cRoS)WlJ$*~|*G<;%m^(2Mq)fPFK*8C5IY2^*VZzF^lOos$ z9?N6|@Mgrynm}!jUs;!bC0+~du<^2>4Z?+M^^d<(#?ZVu)=aCaR(XrRNa(*vHcnnq@`WCivBx~?%`~f>V5fl+~b1fU_Q{GSc zIv5tl9+ROxYg{PiI+GCk02u!{<+7T=m`0B&QI_oEQ6-mxCLC;B(1*l^e}_z0>S%M? z-%=M~iSp87;_4a{1)us%B`LC%(pm#nEY1;Z?A^>@#d8U>NWNQVaR)YO_wA5;ijMVV z!u`2xlZ75s-EJ0fp_*qV{n=YYJbe8Z+%A2*h1q4l&2Xn&v)J zhP-4}gIVY(?vqJjWfs+OH*Jl;0`0wDXlQBPUb@~MA)CPb%Nul37_ceW6$n^c|5CGv zzs|Q})ph=UjlU$HU4}0h+d$+;ULhvdv5HPF^*2diXGPLutBy87XO{{UbJD_;o;`{+ zr8oDRMAG5tcSFeaS67;lFH6}U*d&&KaD+pAYP#|}#D$1r8phFdFD~43SHduc6ybLD24Li(GxUl|l)x>E-dOT#TAWspdh%C`_9lS2~J;$N% z70xgUzSSI1bAt>vGparku;-a*25Z#*U$ek0E-*HzB#;XQadSk$IaaSgZdOcFOlIExJ9GfS^Ef3SRvVPb%(K_o2Y8hS}*8N*mAw3W|5M^ z6^Bf=_9PDf=?|cV+%HrhY`KTd(y!5~)-h1t{qm)2zdyh>#J!`XfINjyk+er#Ut!W* z?~=4zQ7j}vg3L`xBy^sUjc6^|3LV+!_G$(V(o^GkCc0mjm7ptLOol|^LOv%Tc225X z1CnN86D!lAFF`;lL!!EH)-b;mJIz(4^<|mWule(Dy*@t);r+$01(teGfl-6$A%lT! zBLe;(I|rNU zh*Y8v6(ti+k8&5ool!vn0)_!V0#HP#kazG@qi{AsIAq-YZ1W!V&L}NMmO{&v*!buK z5MHed+<|UJVe#MTqZ5>4N}Kk$H2C0cxFv;|G{@@PQOtxx4j7D);PaY!^rtBy?oX@Y z3U;mHp`>lFO2f11OAn1wR3GlI^6ttx9F03hyr^lU_~Rg7t; z9A&QQ#aW#p^05X;1X#sWK}%!nnf#bNt^OSXC#jJ&e*wC+N7mj)142$2Y6SOCe2>*V z8UsQsYK{;!Dsyt_2nz)A_bC0=a*k1yGLtP|uS=Ef7n|{`kjCwng+x8&>(oA{Z7OHE z1h`*ce>Gea>PaAEr5@5XN%#Hw0OJ7oP^H)iyj}(T{{3+z5ULzAj#F+M!PIU+A>a)Cj{qOS=GQEQa z^9zTOoxj9DL%Ru>F1)K zzEUt9(^#Tg2%rPP55pLZU6y8QT>VGmYpKQ>sfTpQKO>MM43umIGJLUXb#;faVUr07 z(=)49BEuF08rxVxR@G4&X59MRrLA<$5>p$K^4^z!CorV5j_+J_;fsZlw2TCiRY&(@ zdNmBwYd{9gg&-aHR#epd7ByR*ljF6snnF_URZlzJgH}}RHGl3aF;f&JDU{gvs=x)n z?Eg%8VvSDYoIT*^*Zek(tICovJ(JjMncV09-Y*20Z^9O_p|0aiuR&?YLWPy73VK0Q z6I_oPqw09KTBh+Uq?E{&)grR%zD(G-zPk+l z*JF9Ar761sT?STL>;pwo0(_(i=lXJsN6f7iLxvR48eyd;x&QB)K~IVi<&s0Xc7k0= zNf>xQyj_*Dcf2l_s(k&CQZC8tP}Dt!7j5x1ve_^WilEv{A7N|$pdd#WVw{sg_<52vK`5^mvN7*7yeflP+R{rqNPQEXX?!zmV2(Ks3Hle!?gz{wK7PF+c?;8|mdV*59!wOZ!FIWXJ%A*uZ!@#SFe_04 z&c;#b8qLgTx-{Yxv~;JX9Q7$Us9TU0YBE6o^~$UaqMvAd;<^wh=;1saW5YsGFqjAD zc8EUDQ7zrUMTsat2TOh`^Uj-_Q)~Jo(cJ;KPjy%hd*_4?M=WC04V}9hb=bKPz7lRjLOv{> zMu#Ih{9Dpr?b2Hw^(^-9C_k+Gel&D8=FuuXS`X!P>Gye z|BjJL6$j(HhVbn&Ta01I0J5v&a%Y56>~3RsaQUKxm3}lsy9w3Bvc{>E<}eN*QqkXN z-8MTT1qzg{IGOcm%CB<9Y1Cm>2YIY14K>!Vv;FR$kD%d}VN0o4CTNt#M7yOdL*NTiV(<~z|6=3GNYUt#S5~=` zrX-#rQ&D_*7XBBh2;b`=*!Lm#E%$P(WJKPisyp=0`j4?HK7nClWm=_u8r3eZwR@LM zo)buVOTUESB1R7)0;Qr&K|{3@M?hJ`*~4y;eMW8V=NWt3avu4=9Xvn`w+3{KEc&1i z!j{Qs@0{A}colouhZ#~(%PKaxmrQ5}gY@6E!qH#p%Cd6}Vj|TMllghuq7+8o$7|6B zXXck{?Z}V?eVpRK-O4KSYyw?(;2p`<3immr?~KR6!N~Qx))wL55x@%pO#YH$ZmL{} z*wig;x9`GdfX9^WiMJm4e1A?2pcvb{Sd8teE*0Qc`8 z+@mf6+R@G0ibE6j(}~L(>mym%OP?l*M37u1(h8f%1Q|W-FMg?eCX8>)q@a$gnQLW{ zOT7PiE%nvN7;A-O+lSGjF^-*x!T%k7VKRFe|FZq;xvTuP_5HYs4o~lG;p%_^pZyCX zFf!=8HX$x0`{|wRWvJgi(zz~uLEGa^a^Vxl4>{`=9~8FDGGdmt6m)V%O$3E(4h7stc@0uFh9~R2%8FZlGQcVsu(geNSC`kOSo}Z4$%LxB_ zSLwsMOHCD|>ohJ%?wh@WGY2Biv}wR0aRyys?J7iAg6|%#_*@_os4zU#mI@&Wx5>zA z&6RDx3ldVz=Kq@vQq{>2ZdiUxO4g)oy`;PD5$wruTba;%S(|A6v;H^AZY(W#ixqv4 zpdwca{^3&}UGvRJ*&(L-E0u;(!0X@Mh_h(cE)hY&dso3sg{0Q&AJtrH19-rs#m#1W zf(^~5V+%xH(hYBcv~ml3mOk&y(4MXwZp=a5>YuX^!>?`_ z&*s7AYIjF%Zb)Grx)WYTT$9BX5wAsqsERq}P~`DN!4oevWMOm|IGFt8>qlYH7BuyPlP0b6+jDhlx^xLKJRVAFA?o1;?&lPd@%O6wuSH1F4bF?3w4}%#P_PF&dta zgg>cc{4DbOffLyoSLYI%rt;I)NbkzRNY-1Eoc=b}SA}c%>#X{vnsPwp@153=I zm(EAcy(@Mc38wgC`BWtNDq?6Hfj;$oiy!2O^%I$*fNG50pmWY0v8?dt)~mu6{KT4$ z^S4>x@&WuLn%@2rKPB=A?t@(AkP|NYIlcYKQ7PA}?uqry(@Hs9Bj`yKzboI|{_5W1 zm=si6fz%HZ46B*y6p!@-?V&=eOYyI*dY1(CR+b4B?p?r*v0I)nTIBd69q5U;WrK$h zR3!_DuzU((CBqT^z$SKfU=VrGnoHEO%!gdLj2$B~mS&=ltKq6;{Iw-+& z9scco`DC$Pc?S`e=g*n`r620I-4|+mD4MDEI#qDcRQ9F22Tb(=g+yrD-`?w(BEo4P z6dZ>pK1Q@EYnCvI}P8FcT^>{p*(5%%1!i5r96zZn|XVx zGH43+{ERQHJAxV7~>#925h+ zImzSGA#N}v=UGVOFPk9ixpNi;(E>_BF}3=jLq6pC6MWGZujfK#(Tz<4;{EnVa}8nS z9Vkjd)>NAvHip~R-M#MaTn=PE7~^lpJZZtTr9Wj!;q;MpU-r7cN&no4=ZjGb3y{** z)J!3imD(X9DX-w496C{J5N&y4lCgW(nnx|?+k8y-C5L|Efx9hCz_(JO7%dIOo zvn#v(%CY-@Pe1(@cPnH*bv^*z>0;ie-Ip$uL};+JyNkkt8gI2)7iC1q5bDTnHRm}G zSF(i?7A7I^0=#zl_#bp#o*RKlUmQ&!#Q{Y zZ@k&g9TC6#B{C1|>@hh#s2(x!`nLFNTcc7dgL@!xMtcE_O1mXQ9-@Cny74x6=86ZLMxq+ z8ZP}|I<`xMknZPF`4(6Fha;-33Gn_^1pM7CGa%xyTBV>V&u<5Kt$BN_0$#zZzJE6s zfxWK!+jubTLhkF|!%h1C{eMux-P`?y=Xt|MC+E{9SQB{m6?*D9gE^X%iu```?v~b( zMWWu;{72-u7J5A?j`3w!)_0#XlmK3@>vm;Su@QG2j)LbM!SfxQzu*6-)B;PxR~Xqe zr9G>--dd?3>#xlsnhtcl_;+PIC_7sgpBB=VAy7rOJ=O!y&ZkSqH)`;aL(yg~$;hPa z_5T+Z5Ghx%E^&%GzU%<;tgm0DlEjEK1ErZhf6z47WUl>~C~wGGp7Gs+rmy=UN;1*{ zrBbY%17Ac4xf7fX+>83$l|)8~g12pX*xGOlE8_HCE-v0^bN$1neOPdh?Aq2^ju)F9 zzGse$Fp4r}BEM@x(SCO+%dj+Mg3tW*O=0PKnV{c@>(-4)jlt9%=nGN7YLj5otbfo6 zN$sW`oUd1o1Rjm2Z`+?E6X$gr1;-U!I9<%gg%@rZmwgm9VC39?Jkl4Biu&A59~r5z z`twJj!{0J60i&C>tZo}biLNt+iskxvx7)REo*ASe@5S?MK8HPO{E$^u3v@{4)_{A~ ztb~#@$znR|Fmzah#`a*+G%-12XUHdI{!uo$;c{TmN{eiFgDcJ(pY-?c z&FM&!zg+zu4(M}AiLBZ>w)gq`2cC{Tx_1aqVk}cqeN_2R62{ub%NyFt?9tH?egExD zFti0pjUkTsewhGNA3n8~B6oK)Cf>U+e7j!=+7lO+?@WU$NbpX`^;!FJxnhbn5+XHy z)cAEp3U*c}4`!fA7x=27YB)7u<+%Fz+HSDQqx5}7o`4CG2eS}RdP>Z*+qz5GtQ7T_ zjTO&SH<`4^WQA&MvIw4YOrD9HQR8_?T{LE!+CfJQyBDjZ*PKs=c~4SnCYg-gkr&HO zaiS1BckLg$^_=lySjyC>iRE7{LdFf%Ga9=ZhmA<|6pyCKCQbqj_*4Q^1OPafNGnmVBFTiOHNvO|JhX&IWLOR4U`1EkJQxsDM*nj%L`OFh@O8Sk1&HR6gE`e#Q_u50gVM%nLr%41$^u&* zn;p=Z6~dIOP)eEFT+AMcvALBP;4pFi!j<%q;h7cR^c|GIF^?||pNyByEQ;-{2x8%_ zM@dx`H!RM?B-@z{o=~A;NRHyLq`fOs92zcni=V0#kL6B z19IiHb#q^c4mC?@)y@^V;PaG*x-r)2q_HcQu5vs+8NrMKwo-45~VZ zW`;?n27U-CoSGY7hXZSYrimB^oDQC~u8kRES=22@1&+zh_dN}C;+)l<;o_NkV1^)@ zhEz1Y@9f7h{nNvj!h&p!d39CIZ28#;*NWG2eUVG`37nJrBV<%Li^D$09K70Wl?Yv;I&^8b6C%a!qZH)W9AOuZGwyFhMMbsG`xOl zUS5FF&lWO`KSDd-Z)^y<1E{9*;~m&0P4S-JB@k}Sh7!c6JXh*jJ=V8t0AO`&i;F!X2^bTDJ3L(7~ zD>y+!1;gTdTbqV1j@V2p6cD0|GeAtAOzpw`{e_KMhJGfiF0Z~`P3rzwfi-K&!im3rP%!yp z*}ON(>~RKl)W}^nEFuqWLkUYw@p=d$?7DfY&2QZ4%#UXBp^Od^P5?BYk3*h|#JP|2 zJ4UzZP7&pvZ@=i?KS&Z)e~tS(;dgbZ`By<2Pxv(>DnkT$Ov>$gx6OQ%J0?si#aA{l zd&8D}E>QP)n1)M%fI78GU~oXS$8T56LcR#+i)}DwfO>d7*z6rUe*Gqii&yOb1zOZzjEPHMG0q$M|R zY_j2-O4ktQE2{_PR7#%4z&?^Yi4cR0Jxrs*@Hq5)t{8dj4UWY z6;8!T^P|3%xWZ;#EPVc3r*e560!4kN%XGLZ?8~Q@JclYpMS?@SSX~8Tu}s`$3^EkV z6pZoY@5SiUtfNugiww5E0xRJviq{ara_J?IpZJ#pq&kSqf$VWXH zB2$LzZy2RwvS=@lua1UOXT7IM3}(PPE?oP-qvnaSBm77 zjCY4jp7HQ;0A71fJraB7bLrom~!7;WxNMq62AgycXz%z z&M4Vt#ciVi=BEkgO3R;6z92p}UyKY%%4%}N#P8j;Vuz_ARz(dDRmxk^fr~b&AHCdD zcX#lVonage8NzH)9nja@)3yZ#J@o{jRGe&(x#xiNkBvVY;-r%IY4?m@1$4=B zsRfI_3pI2qTYH7H8ByYRNV{{2v*5H+%&<+roG|MoyU&q1vCNWxq-)FlLO7b4AaN>C zjI!j{zJ_yxV)+YZRP5U#lpz7J%GYfR2JJ83-Uz0&ILmN-?n2n)(6%Kb0zT5@NU~O| zp9OU00^;S+Ec4Zc$IO+=Z6A@nxHMi7*nuUXsUIUl^snK4gI>Kbd`iV_ZHF=#$xt9@ zo_0$#*k1Ogv}_H9#^o0Vao~c2!u<660tUW-gjSm)3XZ8Q0t^EO zl_SNb3VGwz6twc*M!DPt#>(7CUldK{urx$y0H|jZ>+7xzCuhNcyPLHKCmH{!=P7NC zsPF8$-4T6Sb9|y~?RtGB&GC9+7v=plWAD*#tT7FxNo+THuQ}WL!^Tc+AT@(dlV?sM zm9C6taA`{KnKT za4za~962QVe1&v!nI{6(O)b6y8|Yqm8ddQej(JYnCOF-eBRnA#6gKkJpy*bULi2Vv z%kV0iV~zPnJbI}RtbRA?cY#9{>drZL*YAT*wSA8KqnP|7e7{4 zKKA9dX~S7+=xhK4igf8{pGd)jGrcRw+@1&WyJU87Q6{gExDL4;-dag-afEu_j0Bx@ znLh%YzpiP@<|@d9Mna|jn81lz!ut_l93~T7NiT*4HIR14hQfYmI>GwXF{L z1$QlVXo&E#RY4j?F^_<8Kb_$+Vr>bv_(ozt2@KAUnxz$EwALEccPZ>uQP z%aeiJEQWe3RJuCU<7ev}>C2xXvDm$+Kgo2n&`P8qa$G%9du(>TsW8Qz=vSK0KZPJU zbP)1(8K(8(o5A)-0|foMAB=zAP&PR5miSw&Mv8CAd|sJ*jhOtn!#X>V?7cR1=@$M> z9l7K(wYeR^^2;~}Xb#$;8eVmGbGbV36v3lt{cmHc@KKd-9~6JMdoLTT-`>BwgCr8J zo@RGKeO(qQ1q$)+82k2y+wh8cExx9`G0fe%VCbD_fQ}D5A#F1yZz^*Y?bYgQ|EvaO=x! zv%&#Oo>fj|IC6;^>ko*o7AP*qW0-9Mg92%lD3>f&9jKcH^{=oWXu3>GhK2|^Ky6Vh znwY0c$nOENr3vKdgd#?}OTr%1W9;>JJ$i&Po@xDBsaNOUsR~>N&|i=K-W&Qq4v-i8 z*GKinHiPV$rEJDSoYQgO=u=vb;k^<%7`^jPb`X>;?3tw`{xUz3P7-Qu(e1xac|rSC zvUlR{r7x2!k0GBmp_6J>hJZG?&ul~@ySu|M2ehc(c7Ge@{K1RqSEQDxNA$=4cB07> z4U*M(6@6-mpc?4jRdzi_`)qEMia7ciH+us@6K)RU8`x-da@m7j4p z+Kxl58N&Zzo)^={foS01+Y;*zcHE-x@o#5xFW+vVjj7t9NAs2rgDSyOB+A8%z|Z|T zjDUBs47*CxehdrO-FELhx{ywGZaIqrVZV{90^1@7kA9!cwG9vA-e)IJ z^hr`9iXyEs+iivV7q44}iuPW0oR8aqA~>+O2Aw}qDz2iH(Gs`RD){Opu9)Jtgt6hk z>lg2;@5?y7wj(Bmz1KLh3=U@Elf(##eSpHKqcAHrw<(*2FPxGxpJ3lrEfl^~e^Na! zCM&qU_ww*i6RS6$$lPzSbadb;P`_1UOKMwC4>XHQs$c*eYBYR|b}Rqsff18BoXCm= z$5i0B&J@$ATU0{?nP~7D&P(8>sm~+RPmBJat{|^fLX!cBQb6tJ#;Jv}4ZvP4tu?Tq zj`rdx|Gi@_jWuRLH ze%=7%kxznPLENv(Z)sLMiEz&WLuw*8{fEYt@pNKS)LcW7=7krHa_yFbN@&F_f7bXw zim@Zq`<<-PWle@tjilA=F<_YjZw~$PPxj=ezA{NXfjN+3j5zGU|7#CfmWY zsj)LY;n?i1DMa7M+!C$XU>cGmPB3x|pXzk|%(A|%aite}mw~JI8z8{+rX4T1>?$(- z1ebrFMer4!OY=IgEKri>n8KjekhZ)YflPmNbK}buWrNOK#Y4}IM6E!)y5P;X*uD4q z3~oKRkI}HLCi-478Dp(u39GI*+el%tryqyrumFkuTR=$|uSlz{@5M9Bgi}Su5Yo~GKU(6;WuVpEIr(50dargeKLk^iPL9p3?=QR$tga|(wB$3^YlP3mhmI% zYE5&R>Bf#~r%7-6Q_7N@c&hC|7IBpoDOwnt65&g!!5O0;?SZiBog?QyGrAyg=+og6 z-;9mF-q`*SV+RRG!OnZ3p9_+S@udtT5&Kcah>Vym8h;cJ*44E}``7OJtctULnav}a z+_1%z3N8GV2;s-GXI=9kMdla4H9~1QMaI5VZASKeP2x+AMU1i+B{N3(``RMG-kdzLIcOxOw$|> zePlZV)p&lULw#hUL(l1GH7Xdv2l0oyrBLG~oP4__N4*1N;|phGGgW1KZ5k zs?l?((z1$+w<{`rEoEDyh z6G*d#QEfrt;Z{QOdM;?g3=f~5OWJeIc}SWe2$+<|(^#-TI7*@k5;o*kJqr7MD{q{@ z$oOgQ$wE<0TxoAhncE-ItQbcjRCm8Lt*C!xR$cmkG@WHo8%(&ii@TKq0g6L$2=49< zh2ZYRB}kzV+^xl-xCbrn?%Lp9ihFS_^viqBcm8K4v$M(0?k(4|4Bx2J%~ZKa(94sZBFD?Cqi77{S;tclS^hWY0pT)Imbf(Kmb`O7+OxPifR_^BXh zYMoVKE%!`pLKXt1f;^$XxQV*B4Upcael&5B6EG#KuF_|1!BX)Rl7?>yHyy@1xVf!^ zr6UI5uHfi>YyHoZ^7mW1$r8~z$9V9&7o(ICZqbZ0ze4ZbJm_nv^C^tajWw=>K){6lgJk ziVVX|pt6*x=^zsGl!=cO`V3(zC85G3wUEaJ z0U!7tpE0z_>xCoGwC|B0EEbqL6ZW|%c@?6LhYR*oV{0OmWzq3A?1yznmP2+Iw2r?s zmC@uBL+UG>(&c!yVh~jhtLYpnP7M+=TF*k9n9NPIZdT>mvY89AvaAN|?MlZq7u30| zR>P4G&0G1@-W-a`Qutsr5TFRlWKdPqb2VI-!b+u^N=Zv;yS~FMhS2)?j3hTd?*vEu zx8x(MO$eZAHWO(Q%S>^6r4r(kpQOYl@p}?YkZB|EQ08i|<=5fKfl8e3ASvD#!Vi@d z+Foi^EJ+M<^DL7UH>oi|Pm@TQVK8gCPWC>Ju?9n|A(p&NVS5satQh9I>0;#leh%Af zN{mNG6ceU36TZovkFo$*@KIrAoi-n4ElsAqve@|>{=Xh#KjZh%O&gD-{r(Kq29rjJ zLBLB>YEh=R=bxKqDh}C@Hf3b&myphYVOTHlR(d-;E_d;;OE27o4@mH1l>Ks0SUOAN19hiQ^j*1r}(!|FDw#-Pp*pIa@FgFO;}? z$$WK*2p7?Y9iZY@mmiCK!?u_QEe$9kHjfTK)l|J8nBJn_`@_vYDuD_kO3NLac~M7E zAH2RyVs;!q6MkR(2x8dXK}+_|1{K+NCF#vG&^+j>&AAgFjo}EWX^x-4Jp0E zWE3yDHw@+fdzH@H>}{{vwb@mGj1=%-2I7oq7pO!EcgH=~ND}rTqUM7zxmnCaIdiyo zYHHBE$pz=?(F+odkMbYgO}IqD3UA6W4NsrUXoikig1V*N3K%Y;^!0vY z$wMkkPxI)S7puKH;{DeVzoHwDeE z+O#N&qrCZktNqIc83p@sY8_bC2MoTd)H8j$*wLV=vSL>1fgXcwEbhymlm>deEK+pR zQIRM~0o!jaw%WmKVx%?D5RX)Ub4iXt!+JJ-yy5-T6K)ImKr!9O0-KU#t+4$+)0uKm zhoPq&ZKbPAE%~7ymw05z!smj5+tKV2^*|(%#d1AycRq(~)y7mM&vP~* z)%IHiQyL-6fTuk&_}KSBm!3h+?!QlW8~(1HclGOD1~%&sV2;$s5m~l!;*L6_)g+RD z!Uk&k0jAm5+UFU1MA;LhzL(e9?z|1Hz3Nwpf|!(RQKgN9h#KXG zWCZDBEC-&jM8B5qj2TfQlHQc^d~NBa(t>dfa(ZAIvAZ~mBqf9*72mYRSS~ZMkd16@ z!g;}q0;~}pP}a^D*CuWFB0cvQmUsm$eNN{rpG)8*tGHl62_c(j=kM|5Ww$L(<~ zyVdO!R!*%tt}zQ~cc8ETB747P))Oe6-B&V7ccm%%1mqz64S(d;qXO`1pW6EMKNLC+ z#1rW!_%G`HHe_j~2c%PbZ8=8t89x}&6YS=qv%BNyc!jsNE1MPCD~EFSJl)-GJiB(k z9@GC#m`+C<8HsY4$)Vanrgm=L#~ogWXkx1qaui@-{qmcmu^0%MgnjL>hJ!7ve5F1L4lvMrz*S<^h$=#bq8(Y8<8_nUDyqSlt_o0lo7J_I=iHAUrRa1J1I}nS_ z_|^+Q*%Wf@1CHTD?yb+0eCXidS>Tnx~Kfn$`CyF=QaCB{8aAIggC;{L^xV^$SD6Mmu$=f#&v#U7%ZJt4ljA-0_T zTYhgA^9e(xdB$S>S3Q=ig{qykg={28!rV2+izApraDa(=vI_PY<43DJ$$9%JCL{(e zT6(oVx!FOMF_6Z!=zrd_SV@WEuir;z;S!!Jw&7>0l~d zG@1X=@bp*lg{y_+D){H^ zVw5CsczOxw(yYKP6vAnz6VnM+GM84`p9ZEx+FW7OCO>oOS2c8^(0{)jZLzKsTAcWC zE!*(n^nAQ($)eFz;nV|0wQ{H(? zboc^suy(1@>Q-=KOpF^{NZ3^#aj%c@PS>T3O5=B=RhGav+MULsvSy2IgcNJYwRg(Z z8xLNlXq0R%lfBmdwYh8CNvPJS&?u6h3}XWT6)lZyxQZrl zgQcB+*Rkz>_X38NiKl)}4#r5_lKsQ_I>T+~jokcWRkg5-R)5_{-C@W|H5$P%k?u($ zZV!E#^x<`nSfVz>(s?Y7xg78Q#39lo;!vbg{y=cCJ{iNABQ^TyJymF#Wws;t`|eRG zzxd0Ta3dx3Ij;%K47Sdorie%DpTD-EBak*m3Ru^Cs|=Y=r8&HT+<;zx&0BtxY-Jzr z`T#n(xe@_Wh+n^nN2*OwR69W_xlanuKm`9bkYBJZ97%(y@}e{s$UT@Jua?}>;#r^y zu}LoD6=Av`>mXhM|0cEgzp6^ybSEI8pZ^REMz3MUrF~(p`R<#v?u^)OIrff`*G8yq z0{W||W_-E2=j#uewmG)GfAR}%BcD>KU{i)*G{ePym+j`0kSqY#ic5Z_>YGcunk&vz z?i*8~4GnTg++lfWaBCwb=DRMZ!a3A;gp^YRWnQNpX2>&M#Hb>)Q*@{@SAF93z}@6; zoQ|L{G2k>2_AC&(3}WvKYQk<3jk6auBbV0&DKD(b(|GBu$eULca05r*$L5poDVw_$ zO|r-RC{{B?8Gb?!z2B4upgsG;GZ*Q(ko|!~2~Wrp&cK5zENTgZruC|1>gq+Vg=##`(rU@jIT5he34`&9A!*uC{6&Q|Ez1Jz~?gXOB+Zd=&%Nryv70 zqp$)U=D1p_-fAn1P?^Z=j)z_E7UVtiq+(zv{JABIm`>A8Y-(!w=kaFN%l=PpG=zN& zsGhKz-8Hb2S&S>{T32H(9NIu!#!ob2tH2{DPGZDvyjDntwCJi!k)yZ9K5yhST4T}r z>wV6gSVf^DkwDOhpaMKW*9NJHo|XZ4V(i3Opg&%JVtpT1nu;BvfE|i-6C*wDfg?jJ zy1cy)*v(3uM#xZ1wf^OeFGDOXyxzUNa|qN+On681c=S2>-gH zwXvPD2dc|FEpB0vk|t160exPvRE$5rM@gkQ^WzwM-V>|F87O(XR_D<`JoINz%KT=& zOx1-wJ>S>Ote+E4?z$5(iy|?EVmHo?t^KU0+f>|6Te2VQRq<&Tjyz{K5%%j zogtUh@!$-MqEzONH$@p$4@2zHPsrF3>Qx;X39?*M*|4eMu%BW2v}S6&BDt3+((--o zw&^rO%A4zOT3=JCS^#T)Dw+)cM@O=6ItDn>6gRTxC74Cqe|Sk?vfwP%&RO|ON`vP& zPZ82^L%e3}Z+F3`!Hw#6^47OT$IFwUEJcM#X+C;Ma5EMEn+DohDdYoxhdkqmj0#as zJ-dJn@lmGD3$Cxzo}_YGOb+Ae&%8aJ3cuwv8V#VB8HK#(BTy%zo26cUZd~9syx%Qu zfeSmPI+zAqov**ioStpgIe5~rn)stt&-V;M-K0=Zhi(QLAAcP4mRJ)0_-=1B`hamED>2z$pzBOZFCbDAb02&bs-%}z9y4tOS@{6z6OQ1iS`ftdJoE>71vFTDbKC)kY_ zVaCReYbR@m&adgb+j4;1@yNajFy8c`{V)2M!(^q-K^R6+Ab%k#p za%{hqY|Zg3T}Mss6AIQK8(Kp-B=A)6k-FGhe7rjR>d*SGfZEO$2G4J12TI3_|6JNZ?jtre5dg-!@SG}_^iQV_54o#YXFeKwNl z{`Y&twd=9c@!9|V?UCeo4Y}3w<{nq0=nG2}i_ZI7=L; zlUuf$b+gr%37o??FCnV9`$tyLcf>0nN>Jo z6j{-~2i1x7qtWFyI9ZDk4eOT) zpAq;DIGC;kVdvFL=3!4+@tv(Q+y;a~v(B}tFTf8qJ;rJBG7P6gwmL-k;7SLGeX=Co z&C~a%3^g;KiZC3}kVDN(++O+qKBWxdCm0rWAPdFSQC3#(Y)u$C#gbQz5Y#K82C_74 zvH19j1$DqYVfQSlkr+{r*sI4%VS;^0Cz#tkd|hNIYavltohE3>et1vb$VIPezjP_M zsBMfV)zmL!GA%eJy=Q@ms4@(aMOPO=XpuzMcFOFwkgn6V#rRgsMt1?uhb(+n{uxQr z6pjtUgAmde>V*Rael9(mmt!*{;6YuJo8-e_qPm5SF@`qbk)mT%N2gOn2tYgD6(@pv{BobMm`8on-vgL%JL4QG#RBfS1G-!K_ws z=R5hc#n#~{{LUKvCLV{~X;qDdzN9ry_`z1|9DDY8LTHH~4)S$*`=mOo@3O!As*fkm z+h@>Gg72NFJPC^ms+ao5s0p;957k%N+`BvPMK;z`-8W!uaYZhwdqgu!!x#!?bfaX^ zYji5;xKN=JwgEw(_3z398HRwRGGKrr0Dx!z>sR~jIU3bV1YLV*Kno9HlMJKkI*os} zH{n9Rm~eyUF=x}a(683ooMf`RI`g5-z;|a1=w;87y&HQ~! z_2VE_HH5DnLtg?NJDrl*@4Zt6GRlr;s+sRyW@Ox9p{F20eu_~drU%!X^50mFk6&rZ z%S!ugcsd0EO;HjwtR?N#fNR~m3f8c`YT&K8j>>>O-tQ|QP%WI*x-~auB1eaNpE1BR z7GSPur*wYM=?CywQV+lM2}s8-`nL0#Ql1`b334d;JnL0b(ZvJ(&e_EiL4s@U!=`@l zwB4xb&y#Zgjip}S( zz6sH1%RTC2CHY3}Ns^`hA5gn7#|VuDN%D|jK-|@@e{Lrm_Y$vD*|lc(w8Cx$kz>8@ z?IFxmlwPeR*AtyY6ngmy&iS4j-_sd1A;t%?zCMFoN$JtG(ubz)hc4HRIm@F3Gt7zZ z5dynA+@2L5ttunmO(7<;ugg~gbeV5HCx4NVm7hcDMrB$}WjNZ@b*I#)u9eA|KQ~ml zad&(||2eR|Bpq8W3P@=wyI9(OkBpsVN)DO#yMm2xzQq%$%{5tX=}qZ~YGaKeLAUyR zStgo>+*5q>P!E$RFI*q*NcerWTXWE!+a-g^j*vdi^0fxGcaGcjHU=UaSF2Fr^O!{_aK*^Jhjt7pD)0_7$U_<$|OYAO{V3N z_$iwfc!ZWZ-QGfbqot7lyvCnnf(|qZ^ zPKC0?GQ|vE9bEmVDyGlRgTvDFjGN?B(>e4@m6o`iXZStJyTYC75p#py_h3vQCE4$?{mEYgX2)GPH| zEV^)KpCn63L#s0s+fqIx;q}yCyU>3DEBsJFmA6?yq3Qd}nTdP$uO`7WgyYL~1Zt46 z?16Nd+(Lf%5;xm#Qsx>MgJi{f*zG7hQ#}HY7!Ox+LM|7U;0hb$zmA5X2L?Pmg0;t@ zd)$d9RbOl4V=MWEqO)S7MBCZ8i3OXeWy`0<LJ z{WlWV2UbzxL7JODu1z6SRuAhUY1RBv_k69#Y{>vS2@E79WOw2rj!)+K)YP7JMJ!TL zgOWaNvMScXZ^j_8RE;aYJVh8yv=)a-fbw7zh80G+WD$Q*fN{F6pi3q%pD$6#ytO#L zL~TBLj~qVrI#cDVSEUF4--gJrEbOyyo0fV{v*EgJq*$L+mN?biDk@udrw-YFdbyLW ztWZJv5ks^&HgdX??yFJ4mw2`nz~N%)0ghn&1jM$RckvMF{}STQ8%D0iWGIjS^DCIq zSd2Q13k{YdN)fxrg&(oiXgko|m}axL6nO$(CHg&L;k30$-$T6^#$IU;0vEp~qA4V5 zCfu%#eU`CnupK1bA05%KQ)AfmiRX&b^}tOtpCq+F70xeK)OshA({(#hCq{PSLi%|%`Puyr ztVSclR9+{r;AitGjcU>&ADHw5Uvwg!8#&Q(uqj*kqhi_dozbfA&-%A(+?}lumgmA* z0z=1VLBAy=fJ@_L?#Uu6>pM2+JYeq+USyr@KW*P}QLc}=F^6~e-Wuu}gzq#9UC*_o z^!DPEFaJnAp}hFnnBZfN=VbU002jCHDa}PgfQvG%m-WO@RKP@qbL`W)Cr#r8>AP0j6-1z4?gf;ND*v-(^7 z;k%v!ddsB)|H7#sAOiihOCPJ2>3N6l+k|cdlJa#a4(!`+Dd;mMTF5ypQAER+a*m{q zI632xSy)BC65@*sl3V~fEeZDFfLu7n_pye~0$E2GrBR%1SB)3syqn51ggtgLtGu_I z+1bE;a6vwI8cBgsmgL`Z3F?by5C&T1 z?Ue$NsZ*XJB$Nqc>m6kE_L|l0?@Tq3=d|w6w3=R67FhJZj@l?*nNM08fPxQ%D;*|C zIU=Nh(8VwUp)byv#cNz~Wj0N*=9-ze{>}hqSeu4HHyPwn@F=((Pu{c%75g@XsqZH= zHsW_wLjyX|fPW@Z08#yejYSkT=Vy!vtL z0h}RNf>40xIgKM%Q7XDaH;0iilmU4bsxk}TL16A=@5x-!K$wROT1nDc(LtuE9FMXJ zf5e4O_4b2yH+5-63LcCWRoL@8>XE^3U}`5D1P*H27tmHF0$5vQ)K9twMxYi1TRgv9 zj;*-*)3p~RC;$34kVggi`-8Jv^r$9lvliWGeZH~9KQUwhk(&TJB%6(qDJEh3CP6vp zho*Sp^eD1KZdv&7bBjMhlV0TbKaaUH^dGe``=fFpVDZf=rjY#e9YMzt@k<#@@|vVI zNd7`5Bf3X#V)7^h-|sZ48*sO~kH213Y@({ZN&zibhJZlckkN@nl@spax*VZ#m{^GUbJoAi$`h&5gTWI6 z3rE>M2aOzu@}hq-V_5B6;%mI{Z11CN$oqn|Di6rs?Wq(nWnf*eDaw+hf@I0(+0>Vl zo%j7TxMG35s1{YJ4pMK&>5y5nTBuN~aFP7XZ$iv6Ebjbn3=KXIRilMscHxhUK?XFU z9w#cH#s(?blPs1@18)u+ej@@(MuNGiY?A_Rbh*Xhfgmr^k5}8Fh}hJeGbI)e7(7d{ zGfQMMmm&4O)FuE}le0*U`sAM{lv0D9DeuN=rI={8V$h5ZpI(VxhI)i&zDRZdpQvNjr5DUB}qJ!jzfNPM)>7 zs(9|KSH)}HH@!}SOU>mO5N$)mE9`tj=yacARvV4 z2m$=Rwbf9706*-3aRC+E*hql2wK?)7T))M`*K?}Zo9*kFMX%c-z2O(g>OE$c8qBj~ z9>;+|{;RJ-QClh1&tPQ|aeX6$ZYK$rMIfu1>vmUnWnu zlPBVl|KlH?rs#anzeJW&2nM3dv;_G^3)dbDz?0z3tjZs#K}NjSR;SZ=(B45JYtFTR zDt%H(d<@!M5cG7MmaUkjTotvl(rpgPXI^|etEVF|Da!a1oo^2zp4eyPr4wC6(o((u z30Y|Vd4nZvk-fH2dkdAQ3>ex>Dx|`3drnGDXKNqu*ci3wK##!Qagn7FS$z{W0rn1V zt#7&rpPbI41|i#O6Hpx1Qzje;Pu1y$ZPBLx9)dY@;>n~OHB+IYN(DzfzO}fykh%xP z-4EzTxg`UcYTF@*fB^8?B~PqPsxP4Cg3tV-P6wVUiSIqE0Hhnrts781oD*NF#DTz!E=YjjHDrqLN+{$}ZnnRtLERXA$Y);8ol!WCkZ z4V&f~*D$(pL>`x#qb9Nv9L#piofg=8xM%^oavxJee?YV&erz;;i{`3CJ^66lhe^bt0Q3xNrk*t1n=IXb1s4$ z7aQ#BD|&!%e@EvgIhv(AW@9T*Lc^pChl7-mZ_`&DVnU$ccYc`v=L`jOpcc{>-V+FPYY**`G_@QkSEb;YHk_xl4DpKPR#TZRA> zk=%C46WhL=*ihI_XKYJ|NGhjXTK;!s`VMq~m8X$~W25ogSqutoVH_X!8OP{=z)+&FHA+Bu<5{~FyWOWT5kUfVf{Wv&y) zkYn@b@?!a=jp*=Fmt-}q8M3T-aL4h|aBzL+@@)vt4#qTYrtiP2of%9HMk zpMxdek+s>6n~ozR?RJE?U(9bLa&hHwY8j)okuzT-y#4Sa|4CLAjpDNG7J$r@xxHbc zA2kJ>j_(zytFWSRZZ|E9T?B?gZiN*qkFr<~usg({8D+wU1nHl)96NN~g4^#(wVxvk zaxhAAvN}(Iqr-!uY)^I@FR=}cN@4po!x{=@?mZoC-!7(&6>f9+#}%xDu>6CmU^cl# zitf^G1li4EB0`UqzqS*0ZAJVs8_Ae9^3SgIb$n-|Wbgf<5jwoK% zc8q;LrR{U$k_rf+&?=~#8&_;S6?Noa6-SsTo6K#53_Yu0fwfRy z7u&W%L$OGm7m@W)@zE3u} zrE%p7d+J$CCF9`SO>9mic{11~*+%S42|-SJA|}VYG6Z{w{KCnpw5O`!w+=Q^2R_O= z2E{NDUYE!};bN9U9cI*j{K#)ukexRzDHv#|!W;vhLM|Ft*j~O*N|T~W83F1K>&9zo zg*kC~M5w1Qvqq)(5jflG`^+$L0#2qy;mf92?*B%C%4lq>$2DqHF?7DguG%pEH%`gB z0tT~XhHN8GBZpZe^!1z66icNMDF+VB;=uP8u|DoH^xXQHNm}3Bg|?44xC@pQe^{Q9 zoRg@;ar^s*!>=ew^wcPB_;x@Re19%se-r&c!h9s@36e&_eqiovRSiRmLl`Clelg%K zG+LVCSJ#?e`=eD&LRW>i14T_`HLTEAKI<w&WZ*YF zkUe?*xkMVm-evc9->l7Bm1KnmoD9T(s?OY@p4k~KD&apWN!(<{BedVl|O9{ zX`RTAMn4d0A+eV1b3`L3PXlV%MniQLFL)>Ay#7xs*b%ypLZ#>+kLrbd#Cs++xL{!@ z^vQ?LMY0A58sc=XMY;508A}v)c=|q!wEU7-Uc-nD;mgQ*21U@+CB=-xkNBa!Lr%vX z;3BKz4thhy77bunFZ_q80UnZ7s0|L3629q1HC1nljM7wpFUa*KAq{z z5iD|X3gt}MxN9pJBtX7G-y1wY1&JbwuI0JQ614%!C8pYXZu;Y?-)Cq)(VXWt<4v!X zGMM%43kum0Q82K`&;^de%s(t}l?lV3b@ZAQ>aA6!INCpACfbuD5y*x^4MY;n%j6HJo?)rxN*_`;VV*Jtlmr3%qaJ zQNz)b>v?sxImhSQ5FD=ma%N?V7irhE;q8Lr{i3d*%^3w+Qr%USP(*B|&=!`3XgE&c zJymhriu_ve9xN8s$ZE3@X*5b*ym}KUmS1!s`9sPXKg3#Cl02W^#0(EHclnX9KJy`$Z(rZekrk7F1NIfm?@b&H<^5ra*g!W(PJUaZ^NJwWI2W76XAF$y&p(#dz z-dMC*1Ey#JXJq_N#3@Z=*w@=e2&il!uqt$@{ts4##=ZqBqd1S)xM>?j*%NTVYID#k&_XMVG!)oD^bt3Utcx zKf|bn{WwW_PN<<@lsWN`#zTBEf-?POcl#$z>8zdeGs?O)$#d>687YLb94MDbUHmoM z4&}I8>-x2jX?;R6lu1OJL&{eF2(w|d`cJk#cV2)V$wfVFt?$1wCl?n&hH%nHe2)Og z<^;l+!1qUTu@3NN$7!K>n<=1@v9}9*U~Q5r=KSoO`fAn>{^t~HMD$hyHy<*b*2|3^ zXuf6nWqc}VYw$J}u6l$Qjsv4~q1bKHsvExcSx7}TE9F`nzYZ(G(%9oc51$mo#LV}< z(b`lX4emgf97S*yBFh+A-~15~9!-E0T97er>^MaxiyLuL!Cv4|Gs=!Y3JwK(uc<=H zCUD~QxfvghFe5G-KW>U&CA_o_1C4vpT~^G(@`><$&aN|RSmrB`LK|l{l|vJh;jm%j~%s# zewm=D6o43-8TCOQL3+V4kd4d>KgY@=^iUn?Qm6q)DHUC(j;ETnB!+v}%{yDqO%68# zUql;;?&AWcg-Ht?fnE7H^gCoc@`sZwi8qo?qn3S6?cuO;n+-)-b4#q2{@vR~v-Oo8 z$v^5t>%ri9ZfRGx1S!(lNkDk!FM*R;K%N(K+)lYmiMk^(DsWZPc3J?oMz%v%q|Ss9 zi}IkdyK2pJBVCqWWLlQ&6xbgCj?Cd=3;cb2g1?*vilE$}K~~_>^Md3JeC8A;GR*$t zcj}_JRM`Ka?w80@+Wnj0m+k~MX%C}6qYJ8e>B&27ivt+sgQa+Abg;H9E;Gcm=mwNk z+olED!|6p5EhCoi?MTI6r1X>^o>_IxI@u{|r=>&;P8 z{WSUC6k(OUZxR^()nfr!@(gh)nk4&kc9Gb^g}luy9h~Zn6!OvF(J$CpmnzzEoSwPB zq8-nC8P*SmIT;;CQE35B z#+VixR@pBdu?@9glT@r+(^ON6HeIl_h+4OwLn`8C=>_3)1VN-;fYewryXKMx41N}X z_OtaQ_UMMC2!x=LdgOg){k`$4hYpLQdf^LAd(Hxh#^?#CJ3*YW0pbE0bJAE{`RtZl zjY36Fdi0_C8F0eyuF8kelDklef;>a)WaCH1JiW;fOVmKU^6> ztF@f)ro%vlnGk3{ejA6Q@z*CfT9)yhbajlm4pF6b1hX$z=(8HiXCC7!<0&a-Mr*5uxrryM!kXGC|ou8Tgh)buQrCMJI5g#JI(GsEJBxZkYQjHL4~}|Z=!(wgWjJV<*x)KTHFUK037L0P9_>~AL!~j z3~Z`VAcnl z{oLkm&Oi41NY8z;RK1U>Ts~8$oQJJAD{jy?g)`Qw*}aPl`^Nm8;l5>wynlUvNsO2W zgszPFuBG1gt3wyI0P@b^p)b5l-tu4Q+W!54?N0D|Tn9-r*yke{?J(>ez2wC|rIRFP zx+fvJ!1H;nt)U8FZ)+UCc1`SPCx8id2VC-U&mu9h*y3GNxzoMbZuiwcp>5=_MIlmd zdj`gt02PV$_w+Hb?L87)eABrQRz)G6LT#nq2788F?fY`heRy)w)SAt;X|Z4_>OJne z^J1G`(Qn(ra`dGtHZ{_Jfe&r4!uL9cJ#$vgVY>&$7A72GwHSY*qg?xq)mK!xDa57+ z;#s7y$-UzEXoXwZKFbPU6kWgnZ3vB@_^(eu82}(x5bV|eAXE5XY5uIG1#;IvP###w z@lsD}3KL|-4$(AEn!@n8ffvZ{z)$nZi6jkf6Yf`3bHe*}aewL!Jx$Tu{Hr6@QIyw3 zj_Yx0g)u`0s4>7UVp4~0pW*d~=#Uh5z-l`26<%~Y;pe7aCUNXo0Eem-m-vv+BVm~V57Ramp|w<$8RNMKI=UDHm0;; z|E$oHMIH=`l3l4PpMX}Xi{~{ebrjUDrEIOxWRZSOfn(49W2r&%N<{sykKoJw6L>8j z?PZ&Uqr5rT8rDlaF=j7n2!M4xUB%uqbr2Ef&{;G76|0?;xE*X4J*vmu-TpD_br!7U zL(z58_BVN%UP7;y{Z9VPC)MqAbJq)Ly6X*S9{$d^S=C;OZmYmc7v&8-&Kl3n zfGrQ(?e;>8PGtx!t!AIuxd$`(GS+Eh&mW?%tj(J8KY}hk^k^M99V0nO)GDq^}j z4yBwF-F@IRoIr_eW~k7?uoH;6&qQtdzs~$bdOM^Bjsr9@nxk=QMK<`C-QKh#oRh?_ zdZ#z7$uL>Q4TV29(3>0#0LPOloz;ScYb&eUQ7)pC7zd3E)C&x}&(X@B}O)DICMX4BF=LJSI`iJYRa1RQDSLLGuiQatHV^=31uek9 z9nRH(r51|MiY~F7A9ufPV7XmL6XjBRme{BgS}D@`CMiudz_Lz5oI7iaj@WTx8!$b+ zphvrdbIfBFe$mY~*KuU{GiBlETZf8Gq8NI64-H7ecwSeJ`U!D)b1v(_IQ>_6Q5w!n zsdSI16PA|PvZ2o+@SKm#6(S%mIBajz8HO7i*myQxrcQF6xiBCt6N4=*RyKHw0@`2} z(`jjV^BD$S^01(mtYHSduV~ldkhz&I2Q!&SAZwH~I4nr?*CwSdZoVHBY4?AJn{=~C zM1!L}X?{def|TH5R56?Am4oRy(kt3IjwiZqsPlwkpvf7OY zu#-_2<9Gf@*3&g>XSy$}p=IWW=Wr)o~tM%dH~Z1+!HSzHs+z^{brA5sR@znY(@G z=GonGFE9K&mOAo^MMISy9KO5n??$QZf9*PQpbSsxiGMTxox&aGc;&9^4vj)jN;z&G z11b&&JUw*&u0PK!0qPi3jZ-@jNsrTt=6XTjD9}Deaojo6Lr{w8OU^{OI%cBlQmx^W zY1d`RR~xo}y?bn>y=XE`B2!dE!DC6a{^NC?=}req!4l`ATj?P`T%N38RcR`=_4a;- zj{cR4K*+5B0*$XCu`!4?QfsbR`!V;e5Sfd9qvnR1h+!+fTJgt|a=Sgx(x2^Ke)SUe zLLOJLk)ZcU36RG8XpxSnO2^u$^!17QCgT*PRHZTp$0VA!|0fnOoxeeiaCt{wn%os{ zF^Lnv)7pOAKl%--{f+$7x$Q7(Ng^3Frhsc zsZ`iv0EK=7`J6|@0X|{1aZBVuSQZRd{UbkjLooX#=0TsCK{ZuOg*;GP3m*mexKfb` z?UBKa%#8(Fi*|u+E_Z)5r>6owophRZL=jUDyU%lkQK|+?RG?1DW+xdX?JQ<%<=a`FPhN@(rp$GJB?rZ&o&o&`?UYHS9o$$)?OdnNat3j zV#w)iOaxx;;5D+6=4$->4Xt$nfRSO|? zQHz+7l&RqNn33gWoMR8G3Kpi%;@%ponctD_={B<}=TjemqxzU&{1x3j*7w`T7V?45 zHf>r_9wlC7)$f2qMPVEQZ-OBk86OcbZFMdKRpcju8b-p8IpSRsu>9c>wW~6vG;^^Cs(jdXla#a?zGD(_(}cC9Q6=u0$Mdj2!UFkfjn+uY$9$ z{p?pBdG$J)ef45lAQBt`sjk$O5%9zgcrhhqB+Co6|D zcp(HZ_Y_L`>Ez6zh8xFrbtjpb)hog;mv4|B&lXMek^vdlz15z%Nr^@vjto>Wm00KO zmK0_t5)AxQ+(x93_r3>KW?zjl9tHnZ@ILwy0TGnzd(M88%gPU(6pC1x>NtPq<1a+7 zQe~NCF&lXuzmqlRAcFj>XVCNByPFUW2}YHN&e|-H6^xdC146IfdYQ?RJlU0Z78&|> zFewQQW@)dP4KAsIt%=Q8ig2zLFEdJ&WquFYKDh;`-Bi?Cxlyp+rrAm}V%`lE6xI=H z5h=PR6$U}pKhTcYa&%VSnZ0Vq!fERU<#*QJUrPe>e{zFQ#vv$~Pzcn85$cD2#)%!o zs2z4ok90tl(*}O)79ZpyQ$f<&+Al|CYNs9s2Ul&fCck zN3FR^`JcTw?WwGw2Ws8R(1)+=+mnEp4|uZZn`tT3;3e24cR3^3J2{B{0}0S-9<7s z@ijgFkE*{8i>eK~2T+uTK?FgE?r^A~8$^(n9uUcql8}-fU`q{xbSot#4Fb{)(gM=m z-6dUTzu))$u5->m`-0i^>}&5Q?sczwEf<2vi1_sHhTNIS_gkswSx3~U+T024v3S0| zb-rC7<7{5!(t|Esa4q`j#J)Cm z#$T%|N#emRi584vTf)kT#=iLi`Ml~<#;rh2XPmdU`>dL6cbPBMn1F&*lX$DsYlE!s zY?%aNVo>mF!likOpr;#bafEeWX+7i7lat~$b=N|^9Q_hHjnW}UNH(leTZDv##vUqu z8+0_3QL225Lx#Y!pj{ms-*mQ%T<;SbHu=obWwhBLK_VHu>W4LW$v{A-h-AXLuLB~M zVRY!^3Vd72wI60`(d@sd-qynVN>kM=0;FjQy)<7AAzs~IQ{nOJip=5y#&WQV^I{UT z|J(RZ+{b6-+;YRjWgFFI=kXb%Tb;@>TF1NYTwi|3#WGE0**~rr@DA?fSDaP%r;ieI zmru?YzZ8&zwN1{9Km#{T%A{AXYk+;x9>MS2>GZ-5I2r%`(7)XBB+y1u^UE*{-j#pP z#=Ni4o^XtsWFvU*Zx3C4Ho+n2aQwJOm+aLiR*MOBpO!86%)cGC`*(`}R3D&8jJ_Y2 zP0__F3B}g$)RCpQZfST-7`DAcaZ(K3_8;6k?wQ_iZn8gQb~YPrFK`^8Fn$Vz`4ZUG zaY8+M;9x@fDLu6*Cyel^({~d}koIr3f~OZ)23?Xzis(CsKjPeRCuZDN5=ra4=dnf49wJ)Y%kT)ZLREJO5nFrB zQp5A>r98g1rPMp;QaAt4u?=5ZA8x_S`f-{rZ*<0SUrDQX(5tATcQkw)D`=e+bDqQO2{0gJB8-QPd$Qnk^dNUVTSing7XPSHqM zD9=B_R-1F4=vU?aIH>(djKuA=tujZN7<)RQS006ZM2(A_)l`sx%YUeA3s!UD$VD!);rx zX}-Igs@$@|78bChS!2TdL)iJ-X2;t4Jv}sz%^ELyMZ!k&d+uM|2d1)QJ?x$yWcux4{Y(aKk1RpQ-!PeLI?I>cE11ovWjcmcRvP>7Zp<_S_c)AS;Ep=bs*bOJ zd@Vmz?kY9dL6RynnX?(WX&Q|x15q)MViKXCC)h0dUrz8i7VP zX7ebPXW@(<_g?Uq#SV|^mmfP&Dt@YeKY1O)S(a_&nZ>-H^9Y8n+SIbB5D-oh8CW&_ zMmYO`=kCf<2Qm^kOU?`ZG9M)Aa1^Hh~3w@)e>!tCbfLM^023E4srl+*gKjUmy zo&$pV0t5$t)_O2apAlKn1Sf$5`grhKQpq)!m(ex}0E-H_5n$85mdfz3chPjiEy*!!D;6 zT7~n%{ZlsGw+zVx1dekX_Xwbw__OlgrsZw#NLBH>5323F2%g&^7)#lMpxsGh7<1pp z;^I$27n&(%&VDL^svFak)0k>p4n{_=uW7wa6zmhN*5AZMWsBRDjtdZYxw_`-=)yil z$fCzBm%>UDcEeC9-cRgwRX?EL+bzz$Fwzy-1JJ#Rdq%n3|tTkv@wU0OYrcWJ%`{UdHXW{j9+_vRv|5=+{v8+8SbnJ)v8h9jS= zW22!#3R*E>t+v&FykZ#joFS}7g*KNj8calJt!)mWkUtB)0!jr91O!s|LA_&9k=iq} zQhunIQ*nAMhncfhYt(h17GgyCp_7{Hy}%C=_X1pH@)|j=qYk>rrTOO_t1F-}A9Gl{ z_LLn1Sd#uoz1EBz`R9pP8*a>I%CFun)?E?K(9OH$V&QE~8d3J?iFDxy#HG3ZqDnFQ zOMfoV9;YTQt=rJCxUK(qF{YQ%}w~U{firP@E6oNfE=U>xN=9?maV`JW?_e&I% zt5*}X7QEfjMxiG7^GTsJAHDPf_+A=BX(OwQdxqcGu$#oos zI%9V0=N7?D}U`sy(vjiWdZ&5G|U(6^cK6bflj`HFYE`dymXr- z=%9uj;Ds1oV^6A14+TLgXi)k0^k!5-&dgbFFOZjqk(HQT&lNw0*?wHSK?3T!g+f*; zs?^8gy1P!`pL}M)!O?7@6yJd{F01r$whnOTITxf`CPB@1YDD*$`h~rUk~NpMN&G+xSNa$#gH_6pH-m0r5v3 zN;vGUnc`s*J-H7TV9#vos?7k-$J)JWsD^xsjNXSs8og zN}l@azLVPP&kwVxVqT>9)%`!LfXwtmeoW>Mb~NZcV>X~-@7k5!C~)HQ0!N!LDz`=KldfkPG18T+5Rb?pC@a6 zGnT*-KRJM09!y(N7Z^>VWZf3b&3)RQMQGMZU_0JpG z$d3(1uE%an&HC1K{uVMe7vL5ca1)*a8@<`5Z>Ab4Djrm*L$bk|Sf7ihAF|A9n z;y8?_Oq+vIS8+RJiH&N7tVeOb{+({3*N_@KZGy!^Grc)GRDnYdbld$2Pjj|=#P|cx z=F&>5P+Vlm&2a{Ul54(zw*Qj4HW&A3^RJ(ky0!zf&|g0X%^e;y9xPvx7#U6Y+P`4k z&v_W}lI+E3zl2td;-KGp@#NDRw?SmC03w6MZx*;Iruu+VmXwYrj7m(ks|^RV4R zNs!bzT8Fu4;cZ9XcZ90cBk?Cq>8#4+nII4io387Piu?#uk>V}~;POi7mn5kihcEZ1 zlX(`G zqj;W+jAF6a7AU=%PvahiKW1=$7^>kiv*_a)U|OYb^Hk&)=SY*ubE;}=GPGU1M6qMT zXzD?M@Vk5|Y#M@0V4#`2ZG-r5KtOXN2k!%hYjlH8s@+tt-D#LcH^egygLgg%FClSO zVX}6R{dxS5Kl9%F+Z%NAOv?9%+=Lb{;&F_0r)ybBz714-US5!`UK4=o&(6Qyg}-@X zGvL*2M*&Ckb@$BdTFdw^WQoNlmBTSM`BXW+^B2%7j=5qa0|wJmhUg)IctM_*o>&l?ZPM{O@bE3xzOQlPT+^CLQn z<0GlMz4C%c(8Hz8bWs`pd#!a-??L0SqqfKws#tiN0XMZrnVSS4@fUZIZ!byh;n;NAJm zCZ1f!@J{lu-`jW`&@V8mfLAdgo6i2*BjsUMKW+e;T2lojs~e`h)r^p}7q2Iivq)H~ zdS{hLfDfsmq^^!xADsup>mnC+U9ZhHte(`0WPCZV+n6JyR|Iy0eLYq>9u}u+ion5|ic$#HoM%XXAC6?SeCC7Q>E5u~NqNR0c-+{(m?Wj@ zP4=;zMZdjn=e;9zH_4(dc0x`K6nApOHG|nk0nb@3lX|cESp~Wt*FIT7barA?`5Ddb zr^n(uH8LJSuOmx@dtTVJz0hNk5r?bQ-R;6|!k)Pnh3WQBYiF%-NkkIU$_yU+y?p z&U(BX_D+Aq84b#4zqO5Zwg3kURVib@CCRrJW&$#NRMRZNjnJ3^1`mfiT(5e@46wzC zYf*1}x;Sd~arL64W{t6)UKohJJ$Yj&kTXhRA#_!JX<>2F_{M>b7d zr8DCn2}5TF?k9d%JzJ{uucMP(Bjm_$s3O5#Nn?Jm50n#_$~Ra>_CFj)k?wDS5bhvx z1Z^XEtrRbJ-Loz)60X{0Wfs<2&q@Mtwu>Dh4dM*S8&y*Y^_dKXHGj`x4p}qQ{ZZ7G z@U=T^Q*!FD{3lO*+={g8p#i?t?a|jeo4H)x>^Bnh>|71gdl3Uf?<9IUOWI|@RA4TN zEusC}%BscC2_#9_>5GyFnA|OZZX&*!22p{@x8B4cFi8KvW%AaPw|v(M+AQF3Z`0F- zn^xDC5YJfm%76O23MuorEjo=zp%FQWrG;)DVAjQD$fQf&qUn_EZgG!USxHlP-E52zLy?nHl2P30?t@nu12gAYM9D&i_5A)h zMNbzh&FTNaOLJHhRxD)85eK<9f??~o67@WPcv5P1uWcA%11c}p$e_6gSaWM7U%Kw! zNlh%CzlZRh*IZ+TYPPxppd%9MzFpmV>?zIvcrr1^vHXuC6wViu0y}}sk>L*Vxr85T z7IWM*S6hOj{jco(8`M;BvTFQ}i>|9eD-g+eyzw(Pn5#K9J4ugN|0S=UIe0@$oSW z-t0#n+}#k$&;EIl{(z1YH2%E|J@dJx^7#|e)003e?pM){9*IP9Nb4=H+n^p;ZSVuF z*Eb)hvnWI^?fWkQhMpWMXoSt79=ecQ=B8xrnPPjTVb#^Xf4 z1w1NJOdsq!9`$g_Ye3DX{NFB6PF=u4Z(?5Y`rrdSCcz^(^tSkljc@M7MKSsr>2uo5 zZ?Q@L{q#21olGe}D{c<)@bx16xUH$7wTB~Yr$?@JsSGNlxx zA!!~-ZEB}j0}S9oMWM^vZc#+=htTo0#{~`&y>M=ZO!3q{=u$&aD#>nSMpI@;%?QqZ zYMVacjNq=iDX6H1Yy4WHi?{POR$dDg3Dgk}3{qX(L7OBqr&6{F=oUJY#o?zIY0uF| zP7z3NAqRc&{8zm?-4Pu}p8OO_?_`>pVnD+jhnk{%+yEvq{FMi(D$v78Rf!6!77;y* zH6(lQu~P)C4^mE;at!zSIzB2>+U$csWrUcydUw13=q01v>yd&A4@idadVV~ z(u;AmY}D|UazKpLg^E+vS^U0C(RpL@a!9myrAls+e52Q_AQp4LE{gfymU)P1{KYb*?8=9^EY;!~zGJW0$LJclZZYHo|MSPu zNYS?MLGBJy=)vcdHCs>1B6A=ye+^sIdJ>gQ!92oab*_`S^e^~aCk)Q zC~H1y0It{(*>m*g1(s*SgRp{0v?P2Oa!qp9niLS?6rIXw9c5waQGhTd)8d7ssdsg{ zn1CW!VO+K??1)-61ds(98AVlfuA4eCYJMWgr?en?-J-JY(O`l6^UYExaw@BkR6SB$ z#J#$%m-?67`U>G`YnZpHx!~Ks0xq4z)Kjv8bDzuH*v%U#9{m!=yx5ign{j;m$j!P;_P>dqam|3d!iI~`Mw3c| zl$#MP#D>&Kdk&EPa4=|^YhUVcLX=uYsdP4x@7?CHKOUTWQg2nm??5->A3Xt|%{_QN z=GL!niLo+IA*lhk@%(0i;v<)WaPPE2s%nb34#f?#NYXy;&Kqmv(S(7?(Fk>QtCRJ3 zJ(J0)DefVWdEjtS{h;B#_sd{Kg_gJ7H}t{M#o<)4IuNh+$nkv4pu zX5w?QcP@Q%aaG8pUd_xRca|pZPQ2iG&(yRrUD;UID=Q{0et%MbAbojZrY?EuL7WZB zBs)r^{e04yg~T5QNolSg2X{NAjeP4>oG-4Hy6B|u{(TWP_VILZs5bA(S~05{CLEMH zxmXca2255Qi7!X$4-V`cB!LrFSy=H?pPQbIinHA@J!5K>$;-~$_4pKf2A4yJ>(ny^AiDer`zRTHy{5M?TjvwZ zCHgf?B^(8M0)bDpdOBe|zp%h1BPJ?&dm;`TEO=k_u=QCHmp9zbc&hl`w{z`dLQvH=NfIJr%bh-3K^wFOo~qO9g9qL}tE=y4`*TsI zz{OE6QNM}LWsuWUj0tc}Bh7Y$XZPW?NA{|_thzO78G0rr#=B&4P9 zN9yS$jwVlY)4elshf#FiVP@V+Qmn5O(?N0X)cW&PGd|jQ`njv4Glg{DfuHAnV2|s; zH#n}fO7r!ns+KtEjqEuaANV*pziT}Uk^yg4SN~Neno#ykReGuMRP;79wM^mL_rWja8-uWyNSSB}06o`(CS`yP$?2;xL|b+#Bt`yNjv+VwQfr7lCe zBYW!U8V+aqBc;drajF2Xjexm1qsyeQFF&QPRx2t_PV`LnX#mXT+q<2Erj5I*{z#=q z!w2_=8!NH=5qyJ#Q_o`}pv?f&hTe!)tQ$ukj6`A7lYH^kdOON^P7Ula{oxAztw`Pwv3HZ~Kes4jL|}`y@*q z);|F4E_{=zX=rxRUD;jFvqitI7?04Zwz3iL=m0Bc7~mCvH zSyj`arhjig^1*HJ&6p()t@e&o2XJNmnhsvB6;zpM$xhbgJn&KKm+w|0_`ABY3cQo~ zCIb{b2x=??>=*GxJqpHJOPfnLg)D--+_$N>U7}j$MI!o0Ace`^$%@Y ztSRN3*0tM6DIZ6dn@HdDWc5`naCUP)+={s6Q$CZaziL7Aie+Y zV&i;r1pqcQ=I~NsDKG z8=ueB?qtP)+ozhlC|3Ta$y&+9p2kJJ+$U_=}T98s#JXWuEJ#5;K59y!CyTz#*| z*Q#*N3wvwpiivW{kJI0lK9r5$;X%GI9{1P0p%(4=z!28-v}~-`G}{=eRJAH7#pMJ% zmDkkdTO`d(AaiGH?z#*=C^^Av@f$Zets^k`$#gMyF0lywt0e#@H{(u($8}?Fn)h-J zb_rPY`}ur5x%8}-Al=7zV?grExXP=m1>`Q!s(J^!*hsP3&y7Gz)Vx2#&NG=r5qClq z@YLcY-kGO<9M@}l_-CH(51O16G5O%17~ABhAo>FT3*Q(&8^?e(eaS?=yZp_tQ>&US9-quC(h6S$BO{uHZkB`c( zn8eO>d~dG`!BHr!K_5DFl-lfjTL~s23rm|V0QV~COf#N9^SQ_9*aNW1-d79Pkj1#j6uI2um|_o9Gbvk(5;Sp&}Q z7DzewJyQVO`bw>c#(^z7DQ&X+uYuPy&G#e!5tIRtoZfuD(x00Kwy?|zYzmlx3Z??Z z(XUTXbcd3+|9R%l(V2K|U4pj>-T{?{v$CG-&;QquuM%pYfS+BC$w|>Twwy~ooR(I7 z5>TEYZ2Ve1zZ<@pEqpRtp$^v9*Jy#KflD3=EkG`pZ5nJ|6{&O#_*=m39Qb5CQ&SG} z7YMK^TZtwoOn;vY-Fj?r4{p6z2s1F(*&>gbd{pzp>*Wg8RDbMH4rrQLgAYmcWp~l1A z*Jl*}$aMsUCaMckHN}w=62Eu~OFo38dWzFx7cDeIN&P2Q7!e}kHVIH<-Sbk3&rjs` z?|-i96h!Z}vHY~Dx36NmQ)_zE>Gl*I1%K1=pHg9T(!g}|RSVKK@UH3uj@yT6=SGn~ z`X11hSKVVpqeof28Jhnju?@D@xm7tNz9Fa;=91cU*VtN}jKXcBeXacpM7t1oOc0@? zyK(m0Ui|n1?iO$r4OH!5q3x~>(X7LSI=fFm9OCg1NI8ByWN|>jSf>Ebyf!x@ncI3i z#07fULsmOeRavd9Hm;QOjUHp@>BaLEOCXY6pcO(SH9v8tXxvS&YPl11ZBRY;$-6@vj#tp$5iC=U)he7^zP~ZP=8;R<%IvLlUzqZ?!gfVpiAGGB_kUK34# z<_~Pd$a@!j9yo!+RQtZ^A0Kh@T&kuHijq3fe@9{<^vcCgU`_e4{~Y^^&1&40Nv3Q^ zs?OD?=_0oFL+plLjQs-ZG3g?=(#(DO3is2izHtusMe+2OKT@A&{S&1LMLY~ZNhh{} znd&|`ShWki3D5=t9LFs^cmMBg{qK95bQRsL+x@b+UcCCuJ~olv8d3k^RV~D-R_EKa zxB+OXRzV7R3kgWzw)G1QJ*~5YVk2aIEVu&8DBFVIq%_uuSWQ=pH7%u+r&s7Zzm-si z%mDw*(`4B-c*V?Yl^+H9j&LFKm5pCO3v)PnKf~`-zy6wQIR~P*dkoOm5uTw+M|prJu2WNH65^?*Ddm;Qu=O z&mHGU*Qw^6;h&Ji%8o#cTd`iF+)7h2*KYz}byZ$Pd~3kS(ivZC{bUS{s?P3w0VbQR zp`(~g$p-mm7ac6mGXAp92i=TF%DHHfJ$5Tsq4iKvBhS|EZ%wNuxQH#ulK2=$>k-#$ z+3o8S7udoL&Nr`B`-_BVS9&-`O>3-v>>msqlOQ~$uxFH zmP=kbrt1pQ4u9XpvBo4ePzIIS-&r{Ho`Y<6lFX>p71#LSGU?(@Wx)uY_(^TZ3dONg zD-5KrAW}UZ|9?9N_}6Y7wVTnIoXaku6G^4>nXsZ1Ft4CuM6${!K)w0v5v~~5_m+V? z`5=h+f2uH`#1&OQS<vx(fj{k%Ea2~CUm(5fBz;}|oH09kZEKC?hNGaR~9nLk-#_Q*vq z;hh>Vmw^#evrr_{mXzBhiAa| z-tOf!#;WG~)hEL1%H{fv z_e*TM{S8;cUn)d-#D%9&pn1&c84S@6?$YOd@AXQXepOWXlrT412_;uh^#-i3M4D_YTLyLdoCic+8XbcmipuC~ zT2j;?xcIp4pDSSrXBincyk`)XR#~M*Kkhn-CB;;mE=o&d&lVacmkyz$EYy>?c z64(@!qoxxs!Yk@4+CP2{v+^~BVoKkI;a=YH9_~0a-ESKR;=J>OfL}%wRA`XFvg-xH zgkoeYD}-Qs^;g}uhzX!C-(i-0r#hiPn!H4J9GHgx-iDiI6)j+fArQ>!zZ57YG9F0> z(8tjwfBIOcD@cRS`5dvd@5z|4-jYr&fqF%u<6nN9d1*0cX+qiI)bkmXj=_ozp)TUVAONU! zaU|xj_Yvlcv>QV`UR~2W*;>&FaUFT(>wgp8i5t9&yra0kRllS3WjG!{(aklX+%pp% zDl-w*XWYmgNje{AI7a@HP#e5N59RGsWL!kAh_7L}UHqt8JYYieb6NlQlIh zF|#$Z+$*ob`>J2F`XrbO-^#t!0&tDWvjcx?+xJPZ5>mOBP(FJ#XjbmM!VP$<4(JOT z&(`#t*ZFk?f@!C?f3k0nd9AHAR|Y69J85GJ-u|uOkYpv6#No^K`pWAV(q+EI>o|O# z#3_u!XIGZN8)b3xH@we}U7hJz%v-lF-y=UI%jZ0JgVHoghFdd2U9C3p`1kVA5bu3U zvlh~1D^^{~_h)@Ozs!EGx+?%l5zgJ9qQdl)S)Oocz-fkDZZszXz$wo?#Rc;^-W_cJ z73Zo^zw#W9vhQtY;s2R3(Feq>ncQyNr)z0+HSJ=qDb;iA%Ft5pnn+J>Sj^bsq8j8{ z%D6#kS#)4PlsJeXP|w%f-XF&G##pDjXXd;dJZSCd1Sg?(H40=MVm0n-G%XJIYxZfJY>tFAw<$uMfZG|02N1xY zHtmFmo-7I?CEdSciUK4a6iZ>C0ICk2yQ5J*{qElW=B%s!&G}2{SD3@FM&DbrPfjFo zZp)8r?`mPkM`xQU@(#R@&M7+!D5yM&VKzVfyj_uBhbmuvU57B`sj1=^JFkw)MoK~Ns0wKf2h}lM zbX!uj;hGZ-@fT7wC*cpKXx>pqs2veWyD6ejhXQI<)Z6xcYqg=j<)_de#!-YC|8DRQ zyKT1)!aIz-FoHZxNs%jm`iq+7ha6Mj^KXq=6vtQ=X?&n&4juxXt1S4ur8~}osDry# z7ax7|$K4fr+(1{x44E+Yz8)6=d%3RV7;`{WI+N~N!E6%f*(ar^+?JGIP6{o4ndFzD zb%fV4F?<#SLq8a%wAQ!c$7F)3>grq6#8=?7FWSyf1-6c3U^98^OF|$msz9~1PL}B- z`NFg~U+7476r3ObsV9fVgY=GO0Pk2eOr2hYmkX!$9%PR_R?; zzB%+x$ER$;m(b&YrCNv|n>G3=dN=bqB!0;y&dzR)6Mh^p?sj(Din92nKO3;n+A_ycVJjM^%XA>{Do&ALp@d!Pjkxr5r)M_LkI2xi{ zSzq5*a{OgbdPk?)o^HMg6*+f=d%m`C!}G6q=m`J*a(m}sHa=Nhvi0uVm10pzA*FA9 zsgSEZsz7u8*gL@dh1xZGRX4`4)AhaSRF)--T-bu#APW~~=BG9A5jI5}V({VHH$ADo z->>;gPT-W-S!&4c!SpruZ&iA95X88E9*>X?30mv5Gt4MqH&_WR;oU#ekWo|Q`Ji*| zTEYF|9`}5Iu71#Ow(LqYvS;+L6fLO#Ara>_;iIAOf zdlCB`_o`jnm-pi+Ss}OzUeo>se(5VKu%0&tlt7d^Y*lAjRVDkv8GvB{;EwX@29_2B9yf++ zu@a)UHvZ$?A?~)vCSGT%SriRZPzGgCz+s&Y+w(B(M@~weh4V_fkbv8R>s-Fyl7Fp| zrpkeAJtuDD;g@4d#l+Ec7mL#6GhS)Ja?O_~{^-^RUF?3Xh^9hQJc zb2K1BdrmyQY^_yCZ1ZlFuD#}C=1#{D>Mv@L1~P<$(B&p+e?i~0osQE9zu4Qb!1pn@%odv<;cBJ35@X?stKZ5?Io>nB@x@7{;Y z#xJ>&3thv_vr>B1+QLb7^s&oQLQzKXEvCY2`yk)??T2bv=mr6ff+6b3)(Q^X62QSZ zH`bNGkbRp*<4)UD^$-fzRwrn-2?}cuIC}>T&Mk^gDD5PH=qg#VS9QASSah`a9ksh^ zpa~F@Apjk4U@FZ*HG2D^tE#nsfb<+;8ahx0v0`2Tu^ z7j9dC+0x^d_|)6I#<^VkUFlO1pneDSh*^Ee2Kp}9jn&mOFX2K7$&=7u|3p740~HgQ zbjBJMbpxv)>_#ucZ%iMGFEPl+{JaS3TP7);qSZsfKykLd$TtK5bhvld^nS=*Ex6kg zC@XpU3(?Ol}?&lWDj~3w&a3Ia_Z#8lm7H~%ZHHBh0=TTFffSkFKeAe4n_9z2! zl)7Zq{hucjxwIQymxgt?5|3t0p|N7$R+qhwY+5V1CW(q$@h)B4Y41TFb0t$EHCL0I zceXlD2#8oxLn}m^L*4_=h8%c`mvw|O+}nGqbWe#Mwby96>4@GTbuaBujOzuV*GEFDDy;iE~H5}iEp69kAqcdRg zdE406a;Oj@*LY$w2p};^LCXPkg<#UMkL?Hck!qsBj8|yAJ&@W`!?V+2#nLUMOy=DgyzUC1pOs$-(2| z@$~;058Edw{`d8!yErM76ViJGJr-9l`)Z|ASCqgf;$PnVu|?79jk3k%coxjS{#>XG z$0J;;_vi0npk#)S-t3AKQkn4}lsbBtev%+mhg3qNsZj@AGJ}OaE{>*N-!77w;-1d5 z|AU9NF~MbG|AU|ilX-~HUaT1%f4n7Y{^NC&U-oP38N!%>C4H&#S61Q1(4L0eZBYv7 z^dzh7T{EnuJ1KE;;qiwiI^{tTMc&%K;X1Zu?G%6Puh{Uo5|)R#AGkE z$#F2=6tdYc#R{;)#rP90R2B8B!{u2{QAS)saQCikHu6_gTNL`?lz`L5`@IgKku04B zjPA;uI=U~i1W82J43OGy%w<*zRNJP%Ed-}Eg5=9AWDG5QV;HWztphKchCXe*ohm=h zVxQ=10*W(tY<9bZ^pYqxDh1ngHN#80QfeB_BW?QN1eis=kEuQhC1y|#_8|sNWv3EH zXNs*)Kuwz&;W}_$7v2ru!MzFI6qU4g9%#D045%og`N_W+nxKud(T)s216F>+e~N7wfKHQG$s@GHzHWean>{^}**rjn8@g zOmM>|l(WlycJ+`pas%bye%>iq8?9Bk?EGsmRz|wFo5&;WeM*Y$!up$v)>F?jj_Kc& zzQI!XmD-mimK# zTY`lR^$!B0h;B(Zyj;l6dHm-hFU^Nh+qgJ7JQlVDKDf6uJXfpKtA?PK^wYI$CR4A*_jyu!1j%L1EN(}kqAq#c3qk%|L|A!Sg z!SDn0e4iXT50}X25G48tKoF%O()fr~_E=MrV7LJdK<4y&QH)A=&lvKQ4i)bO7 zDU(+%Yky+0LjmQWk-+#*ROhBI3yh&s0X#eUL1<0sW|)}H za2?p^L`1xD8~Bx|3dStvsH6xHFwG{yLdBE4py#a4=?kmV;n5y{tOu{?~2EU_wAb8jqi-f!MZm?F{>xIsdlL3BrJ>oKePS{`44_4F%? z_+nmp7236zgZvW@3uM?zW`V>b zAzAOB->bbk;ejvTo0>m9ZX47c{$O6f(ZU_NZy8do&Hz} z=X3dsd6dVl(~I*31Xo*lxVyG3|DTD{MGB$&ct$THq9F{CGK` zB)!FaBoQjn9LxDkSLyfhb`uvYrdCOzuCq+#B9^ zSu$_W6iCvnnNPDj_6i2f_IP@`l1B4!6kawL_(Jif;{wsXiuF-!3AAR_ibtPJi zHTc=`SxH|r@wTIb1lK30j`LFY!~dcRVNMG=aU7v;3QE;Rjg z^wIBuZ5%esTuvJX``)ClxhY25HeSX=!?0&DtLs;eYcAW~?)t*bp>9RMFAu#-o1wFi;ZF z#HnEMsqAYxH--FQ@*<;!sS_w?^*@?cGQJ^vwBc!9%e;3hCDb&j-Jjc1+yM`d1K;G! z@qWCX_9ME(^ueZ^wvUt0I$y^Y;QpQd5J(7tv{n9L$ zwRAUqm>6U)C{=DsV%O`9aQy=IX zH5P7c^sU_wh^)Dr-Fy?%v!hk{Ru(tAwA8_->$?O%zHi_xK_X8!h$WQDNbC7uvGGsN z(t+iIUh0;S&S0u^%{8|9}Oc@T=@HN8M3FK1) zkV@&=HV*Cisd}d^?^*iaaUsqBKV5xgR8-;ntq20bP*R8P4hN7F5Q(9YMxt1=3&w+vicOEu_m`TvTa|{A5+q6SH=szhcu`l9Ggu-w%LHXO129}?5dsF~1dyWG zZxjQr%}Fu2(}-+3Ai0addd(%8oK;D_#0L@V34^M)Wvmkk;M1#FGr~^7aVbb?OD@5@??;2b{Z4wH17O;}j{f~y##Uwt7Luxa&V~3WF1!Tti|Nti zguy}iPloH*F)CTVC#%1>Rgfb{Iy=*@tI7?Vrq?9|WE-<@xo0e{$mvlHT`fHCyINYX zYKsjL$2Z+pdr^}~2|PwKj5{T-(4JKR?{}Lcguh=49>Vzbnar4%e!P&+PalZubz8W9 z^7|1w)!-9hgdm$g4Mr*=ZjSWJaNR}6W7iv0* zIyOu%0_r!`zv*F6+wc24Y|p#z#k{ERWNf29K{(_*c87kFZzuWSkb@m=W*bRM>=Ni}h8yN5A{%rNIQJXYi*Xg4SW#}k7U zDyb-21f5eooSXyCK>L?yBqu?j3V|7)T)Y1FM#(tSuD0qR`|@g;qKnU7#S=c%d_9fj zs$F_zpmp!N+;Sp_dJ{`sXvD@Zm zR3ACJejYF6&)cxcf%mzqzpGb`w{AZ2jowTYpo##D7`U{`SP*NTi$c&7$4GxQ!-e;Q zv7JXO5LPNzR8b^Hcg1|kHc)?cxMJ?F(h_1;B?{IdA&?o+t_)TU{k*4fVOan(?@6qb zl5B?bhq;Z0>k+}1m*vw_xJw8jnJ^UY-(08EICe!K`Rz?=(l>D`J^~ptCHd#~^_|>N zdYb&Hk>_RzIxi$@mJ*0LHxrd_5a%Xb>C2=8C>~1#GwyVbvu0oloREe!t_%?`qIE5i zr^KcEyxb+NovnJUsUeBp3(GkQW%`6oBhiSOo#rSmqsxVTbMctO4Hg^__{m!G>lZ_< z!Vv$7?nFZ(EPyYv`5RA8PveNERF&VW5U>+q!#nm<2$}HkL%9fL3p>lK?E|nm|GyAq z%;f5?>^gc7h=NX|Z^ccF`r-a%RxbJjm<%_$J~&M_N_Jy9-w|-4@N{P6=qMrVX(Q9& zm~np)fou)KVUu!j`Xxs9>R`YA9>;Ozh-t(oD;JB&*;wv6CEH|MzQiWz2SWge!_sqi z@g?9&gj~Rx; zje=ugp@|V}bQrTh7Y3>p@;_BU8q|7q&d$o|gbUEl>|qdmZmTsKMXBm)Fv zRh{aeD1G!&G)~NU&UU8ggZtuK)j3FERej%PwiUMZnHiZ*6&Dlyj+WcU5C;+KC25rp z%FWCed*ysX?oj3}vQl#kwh0Q)YF%u6tGGmtXp#=iY2az)?g=;;gK{MUU z$kq=$Vd7gc200ZM7nqmY{9PR5Mg`mTHSS>rMG**Y(=JDQdXH%bUl(I0Ek{570I&^; zOlQI1Auc=WH`d)x7TY0c5?Um&`chN9|B#@)yj$KDpnQNU2W0P<_mQWrD!6m*U*;1+ zp9uHym2a$HPH^pCo(s)Wb+M2V|BSO0qu4G*({qN;hyXu#MKif-8r?*JRn^71l{XZYV z*-X0(7+z5;Z-F~fq(|Sg(~ta4PFXjb==rM6%~~n?<0xsD5kt@a>s==!TB}5t8Q;f3 z#7#q#PBCr2xU>@Ll{-=&`)CH4+IWX8_FXk_`wo~08(%$04eAFVDs&vlMVZkOY>wQ# z-C!n#B=ZU|Rj({tYsi~Iq25B!aOIkLAvP7u*?-t;Mptmk6u4F&PTG<&O5e@~J@B1M zx0$P>Y*;{$vF#SN3)WPt6?o#}&bR6fHH+Tg=+1$$otE;xatgbaCPJEo8g}CC+2E+b z;~vF6QLr02tyI!pc;z&eAZ9x} zXe2NwSMu#XwaZ*$z*l{x;i5;ihMR&W{*G#s){d2IbSiN~yibMA;y&4_rfeomrd6 zJF_iHN<(cE2y`xlzLvVn*~g_q%md_2X(z=sQc9iDs&E8-UTd|~J^sNx2(Ec$8YrI% zI!6UCj-c4TbRt=VmHs0;c|h<@Ht*FYfDuq>vEcHKT;MwSt-HCeo5bNIFgh0Y@aoS@ zq*1D8A@M+^>(Jo0da8;GUN)AGUk##&nQlj$ZAiyF3ppkXEOE65@^w`bxUO2U{K8Q6 zgDNJ6m~#fP6>)SVoslW7XyY$dy7->8@&DxtknaUT;|;5@tsq8FBUriP+TF;L*qPdm zN7t;2v%$;B(lF)ktQw*)Hu6V6wPPiM^Td0>XUerYhUyPFK47=40qt!Z{>bvMM8~0D z&vlw@2#nb0x?f9I&X3aDggWFqH+4|dWL^wrRG?`zk3A?x>PrIk+*zjBZt} z1Z|@F49m7(s-R*ldRQOAQzNir{|zo%kMQ}|<`v5P%ebCOJT@yM{6Q}&GujOZP>*!F z0&UcfRt-;+c{*Dpz>iP}xFz$YJ}J_h1Xt9SFW*^{FrE+OXxTIq*NWv`i{=W3{A~Lv z-^Z@hE2JbugE7Y9Ixo8h%PpnUU(OF!>HP=u6Du9@#Vo|e&NbMU&CE3rasV6#kF~l5 z0E4NgfD%>xl6cc4=QqoG!I4)=$%pCHMIaT=ZLi*IA*;_Ic=DO0c5YrT(!(~XS|yRq zDSWri`wO@93F6^$w;HGnhD8mOK)OK=aqM+bSP}2&_lyU6C>jU^+cvxOf-FJ$5_3i% zTtEy=He4@ui4m=5@iX}3xAUwUufETZHJ*wJzoQxtn<1?1<-d9Fw52>(QlfcqvY1!S~!(S<|FQzSM6!;%N?VU#* z&uI`f2qGoPG8Ba$gSz~(M)DD&7Qc9AwQN&}An+^iV!|A~mw|Dj?FYj03ZH!3kc`nO zFuT%2r7)&L?R%Ona^Jyo2N*)n==sgk^S_#spt9@R z$$?>l&mooAC^`0NvJeehP2Y3?kpjNAMm9myQ(MJ|whl^zz4kPgAme!7t^gpm|EPC= zB}SMoZ?I!)=IE%TiyTpqt_0`3-zkxLN1Y7OMaaK|^Rl3%eTlzdH6h&$7-v-|pdIA@ z(`DBDmk08KTN)*5uUJ*qk@w+H7L6x6{I`H?S~85WPyOCyLOh>Ev>@@;y9Wxc4nr*_ zKTs=z1!Ad2oBC<=WnI++RjPQ9gd&NI)x!D2y}N&8x9il2306kB1a})BVgG}a@sU{2 zthRN!6<@AA%XrU^Y=Ze{XJ~(x3{#S1Ofr2x0_0hAGJ$-2_xZNaZKaaoe-So*KxApn zdmiRbJ;=qhloW#&y5w~cOP&3Me!GS%vKF^fmcRQw|BmjCyDop?&95hWzoUF|Kk^hWEP>J$k8)@){GNDk-)qB z;r-c~U6#G}<(~`E9hZgP73DOoM|q?54V`H}BBZc*UDjF@&*#5WrLfWp)@NLL1$BqN z3up_F##WBm7|(uN9mzJt-|oL(DsKzNlZphw-Iavy{a60)3+)=-cO1hTtXZub^YR0! zp7JRh==IFWiLb5|Hps$19`*eC(|tS*C@+SJ>Yp*&?c=A(nxA9Q{LsJSeQHMZnBD41 z0TK21svJ##j@mKMTisOHw9Oh@S3k8?!5dJ1(h#}wd8Bv9kPg(-h|*KzvX&7%0WbzY z1J-{fyu$Dx-QA)g&K72AeJ%jhNGc8l9R4X~JR!x~v+<1?>!L}a=;JH{wUU}y#Q4m|e@F`eX zk>)3v5~YZ}0Us&kZ7p8JN7v|5t?9bZZ5Yxa{X+1jBP5p>jP_!?2Q+e`_3*t>UCU#)S9G*_j| zcNE>9905yx_r<}+{S9llNHwW=H#bBi>DN64%+~o;{Pn|OSD#M7R1@bm;y|}0(S8hg zzN2VdT#uZL3i`*XQcSz4L6rZyK29Nd6>V^ooMd8fbGaeKx zPcM*m`bC9e$78X7*ZCB1Y>`e=^|M=eA3^c`JqwD1sBjxyqVjAG?NB|>(yYX z;iR~s%k>RUM!FLT!`3*|AFEbP`rpqGxN-j{S?Ovym(szQA|rJh6J2vtacD7MBSUJG z-G6+nmCrK3Pw|cuR&1DL6MNAq7Eu1p(d&|G`f8}>M+qnH=vKU*3Yc@O*v27EmB${s z_!QSC7Xexi(--O0V`9ugao?TH=31HsZFri;%6-1YuZe2Y5(x#^m zOzA$!h*SJ0`QyV$x=m*`AlsKnII%Gr0W)0IQ<1T37w8!cRQZK;H5Nf=`c2rpBkyr&5+9%T$m&g8vF%Ld_joD?kQ-gS?2$5=Ifm61#dGFJ@ASMQ zg)xrBfalsKx0tq}xBmC51PQS{*iakiC*aB&7Go%H=*Bp!2kUYE%h9vY`#WyGr%R5O81*A9Wyi^&NkA z<}mJORqO-XxD-5;pr#(w3w4|M$B;6qs>T}dOWkzFDN#OOM+AvZbW0h`KmiWW5SUZZ z%s8)G>M#m%scg$@O`UPRt{x=XS65goSZRGcD5hp8nrf|-H{M$DfX-<)7naM36|>Zs zAoHp?dm06uIe9%ZpP);;D(R!a<36URjOeV=7(0Nyt^*&L`=l(a#}<)hTY|^0O=A_w zRvB$u5(!pdORZ`YRKE$ehP`=L4e8UJQG@25>_=c_6H4PI%UD)kR_CG8jI-g=+|Nyq zqpNMVBNul8K=ix+_Pp1G?D^UHte+pUc`0YJBMHo$drEBk0B9F9=CUwM@)iKtKh*0C ztZ)S=fGaTIBPyuc_%&AJ;Y3xo7KjKkV#i%SR_;+7nW`cPNQ(-4q676XSl;F*jtTHE!E35}D)G2&n=q(gSH?c*s26`#Jy?eet)VylhoAI*n`MGJN}eY(`lgVxMSICgd6@oM;uhZd_vudB{OCEK zNmH**JiU0UlVjzA@`FM?Riv0~&b7Jr09=i)fz{DhPvZ(#yo+sPgdMl!X~VaPspH~u zsaJhX8VE-l-oS>oB(Cl;Ht(|}sj_i^CAMpdp`jPUL z&caHgEjl=$VTvpzhci0gTi2cg}q2{SaMMd@8}YxNY=jh^eL}nT3{f`C?)7L?uGavLN;k4YHd}G<5N^pp*j#fCMP2WCz z>TkYELKuay`&85L>bPvSE{g1A7k50-xn#>WN}ZGjN_H78P0Y}Nd1PLf8< zTwq;OrJl@qQMxL_8ga)UcDA~z+xsii2uR|k9W<(KaU}(^X4l-q_ z*pq0aBT@TMu&p|>~Nktx#oy+*Hcv+%>X=|CKXlZp9eu`NBzen5iHS_dvko~ zB%~&FkAf>n=XbHaPEaz1Mw%K)6n~$8ERziIO>db#SWZv<*r;ZNb(PNuA76vn3*TxR zs+QJ_kBa(zS_qwf1ZfmE=uM=<*zSsqurh9s)YC!u4I}!H!^>@D()E-9vZ=K8^EFj9 zHO&4{32?_)HPnuzAvR0%RNJcC3f!0Oq;NckT9P`1|Pa^R?38XdT6~P zmB)u@eDL+fp66BFbN5asgw1GAs(?#z`%dQ~b06CmsX!iP)X`R^^I8k7Qn4fk$&62+ zu+6)jcZB{t0!(AYZhBl=hwXTkj|?O~D#fpTM!zucY*&ufdmtj?kMYpnAnDJX`>XlW zKnBhKy2nQ^33l{y74YkatfZ{B5FF7QL+R{RX zM^J0}f60OjclwpVGU696720;rHJ`f7ou1A2O1;KW3TpE~_%R>$XZpua4LGA0-&*c~ zbK9Rl&XT369>S?EQSNJQ@+aWJE@DH=FvXoK{Z`>T0W?mhq%|^9T8psnbHc>~9Yw%2 zK`#(cDv_E{i*ox&j*9245xBI@?+g<=9_b^$e(3eC#)7*hR?)EQkz%aC@ju+8Z&cA$!S#j?0WPJW=H2-wER{Z_DaPDUc zcil(pb4?LLHTzSf2OvV(c014pedhR!$>%Vl=Y=j=7+Z&N06jdq(XYRe1@dIJ3k>PT z3(}~27Psp20~hLjQ~8w85B7(9hq>kY!Tl~HPe#ydH~S|joTmeWe&j@TWSG#kbr{IM zZv32v!)9KnrIQTO-^ifUHC2zxAvh2Upk1Q*h`r_hGHxLU04Lg2XX}3LiM}^EieW;O zD2u|F_o2TcDEK^_10P~id=3*R(90nr({;-2-wi0YN?-?d_5St3X2HQPr%kO$K|NNv zIzHEBLmZDoiI!p4f!b>VnAft&uD{wZdft4I_}3<)-1|o#Z83Qx0aoY`W_$6OE!mg+ zvoOALx|bF5bsgDiK7e2$f-SyXZHv5t9Soi0LHhBYiqwCkjetX0K)#stPnCo`x(|h;Z_ol zj!bGDc1((BIj(Vb)RFoTfOBC=o|nH#=Rko$06gV%D zUOz7Y4`v5d4l#JgoK=e0IcMh4E7eKD%xIhPqYx4WjeXJ*px>m)^l*;v;6= z-95K1coiCAnC{4BDG^L|_{K>oK!y&JqwPfelK_uvkn;p0%^s?HqDdIPizrVrxZ~i$ zIi6Br;7WkhZz+5C+gP|DfXh>6k4`F}$5r(NCEO~LS*N4x>_BG_1V1`mhYjIk;32J#tbBFzbtG7*PfDNI@@8JaWo<^88AF81PJPy zc$JLzY>YC9{zt&NUD45ORT>58L410KbrG7m@A{B{rBMS&9lhCo!O-)k@%1w?jLQdl z^*DWc;5xZ%DU}pL)9Y_OS&2g$3@T|7k(j`IEk|ymNLj`YBwI<)3N>I<_{1B;1R&6K z0?tnNUMK}oy}=H=8S#%616h|r_P56{_3Mf#3dx<8eXd}y!MZTuL$|F~)+Zo!p9|23 z5Ai}cgjD$YTTOclj#liRU)znQD|(-4fzmTCv4Mfa<7osU#zL61w_&Dk#>ZoF<_*Ef zv3fT5OyJeH{7a}R4WJWM4gKkzAqV z2raZ)!t)#NrBrXvGzM%#zMexDjLfFQxb!XaE}Bb~4vN@NaVSecH<};*asY~1nj~dG z)PrBI!yMKUThPf10;sT_W>VN~K=S|~hMKcZ#9t2u_6aeGqfg|(n9BrHE#cZgnwD z6>va`vS%;yb)uT&rl(eG?B7`e%vT~8@6Y?b0asM`+S1lQrY7NKWExvWM3_MPID=*k zNk2e4(Fg5R?U=o(D?<8OSJUBk5B#~n`L_)J>ezw<%G&N7EX>-g8WywvH{i3n=%U@Q zb`K@-18A+i^(93jbzjktiAgW-2%EO9pSYpju8tp}yXb(IjDZ}IBJ{m~mQ??1@5MPI zVZBEhe8$CS8fSuEQV9tKo*H^2}<4x^mPb4+<4=O=uak#k{29hMoZH*>D2hAwBo8m4F z0$R-Y*epu#Qs47WPkU!*WUL(BYgze%l(bzy$*NX$do2dgUnD{tZaPAo&V^Pfdo5L- zvkdelbs`=}II5#agmY*8oTn^o^84m)vZm+shZ(Mxf$HxoamICmP2#b6AF^M>lET5R zz`7XRMHbym89R8thfgTX%h1erbRdE)sz(v~RTw>x;GE^)&6;Nus8$ zXJ&>Zq0^ACIb>Imx5&6G=+Q3r;+ERPV;ATAOB!A~Y?KtbGRGQ)C{bYi*cDW2dV>qM zDRjbBIxM)H*vCHoIr7T`ZxR9@}=Ys#pt1L@>)B@4$lENI)F4A~%KX|cWL`&J_ ztS*7(-5b?cedPE8@vDaC#e=%IDC57v<|N)9G>_ndYt}OfauCPu>wJa>?wtZ|RQ>+; zP-xg}HNl|+-BX`VLR_;S6X%GY<+&B)UuL|e3K!5BK5_UBFsf!zK1|zy;d^j&BPi>0 z@FGHzz6uZ#ZUG8Km?`?GGr4;|gtnB~YUv+1WJ_Lu^&nOf=zUgW;SSYYjUjDutLrpO z5ZUN^xMrUmLke}M`=jHwfO(lsv@VZNX22b`$==@J0^+B+*F`WtDM`N^y#AXCgDWC~FY>bHC`C zP_w8^41Jm8SfKk#VmP2;2d~u#@*9rF4^&bb`KuAx!S;(rs5gQKc{oP2?s9*$A0Tqq ze={kHkHL^X5Y%F6wOPsH&vr9W{7D}7RPcLLMsN!ew6@nj_LvkOGdHM8yzat@$}{*d z7617f{#brovu#~yFaGw}vo*$Ybk6^U0pAD7DjTF-qp0PY4U@tv*>|r!IQAJdvIY4~ z+LGKt$BajTFOQ7WklXFwY#71aqZJOGzXUXWxqsv=npf@i(}fH~>o6}>s>f1XE_%7~0f@Oph&exqLJ+&gpn>EgvNlH;hiW}&3J!|{9ex+1DRacgkzlbz)U`wl+> zmF5Rr_lXFdo>V1}e3GetA4_ul$Xe~i!qRV)Sk=FnxmT{(Bqw z&Mf;V5KWO-FCI;m06#AB#Li2o&YYC^hOx2i?I-uNp8+azy|EyPy&azwGhAFo^uJ_| zlO6A2?c*4}*G5PwiR+r}Coxel=OqCP)*vbJd!3RtYHnHbWa2SyA6IyZLR_S8T~-lUU7E3;`j0m%%kKhDx20Z z*kXy7USR|BP$hM*4}+idmubwM>U&TL3GEOYKW+>4-7GK&v)5yH?o;#KWuaFE=*3K|V&H3p+xS3rcDH9YM zY=|maG!K+TUY50fN)nJ=YRRN&@{*I%^?+8RJ@)O^dF``I(P`%z@O~P2a`1^uZ zD?@k?u8%NczowC;aJ?^%_-gDjNDL7+p@&fYt&{Nzw}9 zjsc}Kt}{^!%YQ=NnvN_EbTj>?u-TCHu$QE`VFPos?fV)pOOO88KM1phgH%ZDEz+i-!p-Bc) z2~QDdtls?c3WNe3X6C&<)m|euFPZ${yDfF*+XJ-7pZ4l8hDk{x%f)vdKgn|AM_FRD z-QYI(_%u;&B1jcfL4Hy%H|0GibC81+>4(qJ01#>r2b1k(0!KPb8ZI1%@3A-8QuMBvpP`Z~s7X^O0&u$~^bZy$ zCSpi&@3fG>6`-b;youeBB#sdHU@)zZdn6eYt$Ni}IWys7{0i9mIMmv$_4AYwBp9N# z{#4$WGX9Zdr;FIgvqZiaoHHik2qZn%L^&6H<44vK@1ISwCxhh&G}zK^x>+``JY>kP zvE3W*{jR6H7Vm67cW$jDchxDTZHX5fh`RQ}gnS)WyF0SP`)8Jaj8guk2l0MK)W8Z^<(PcLH6>% z*j}Uu}&554tjyk~YHnU;TLbhbimdG!UKm-e{yO_5KI4f|Pn$48#!% zT>VKV0Ikxz0X{IA2;(mcFH_>rqy+)l;K;CLhYdA&YO`d_fyL6AkG3@s#lmog-(#Ei zLgQ`9DJup~goqek+NnnldEP*XT_CO1^NvLrHuUJL_*h>>v7lLojCDc?iaYoF*W$k5 zJLl9S$-Ov1Bwd8j=u$g(RKIQfCC3uH`iPWWo|N2Q;#)}Rbb?wiK$U-uG+3sqcEXA%<=ZXkN0srUJr zlU5hd3|_JAxhQp{#XNE|Im>x+hWWJj1ZZ9G>+C(&l}?nje86EmOPca;c=KG}7L71% z;~{wmhe2Ol-Fl*D#T~H))xWDM%#Sa_U^kO#Q;!E%t4$)|%{(Gs8B7LyJ+$5+1_7aW zSp8#C7y0^?k6c_`>A-}o%6gj@(ZD45Xm*1nSS?h#cwE1O9pYd72)t|Xv1XSf_}qvVb z{HFIuch9bW7OdRe-F5Yv{=pH5Rk{BL*W%2855|dRQvb{aS}}P?3F!r=>{)%+03NQ# z!3m{){6;-oAG7A&ajSR7Q_9uRmVpJA0nhG8{$4Iv{re)t?|C!Om&9^-?A~z{D%^qG z*R1Fm1M$H!`Cw9fngB!tunXh><_vT=U*CU-`v@bZ-}^ceM-SZsj^_rc0mlPC5%tpZ zZ*Qscu8my&FX!<;?1xn{ssDA^@iTvhg}MKa0U^*DycW;Xxx07o-rXHj6i*xW1HQU4 d@Z1ph9$aull82P$3-;DMbrl`u8bxUM{{hdj9*qD1 delta 252586 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 Zs z!R^-t-_0FoVakHTg+z9jTyB%ax*EJ*Hkd>l!e-A54{wMKM8G0$ko!`cfkM-v$uVS7 z9-5c(Q(yfG6&COK(jRzVl|q9`RXR~bFfUwCAwDR|Z@Ni5uBxk+NuS-Z2A6Oq-xi`E z_wK~*bl75i>c^fCqPtn_>>f{HdS_H__KhaQT>1?j$^$|IKF+di< z+P;D`Lx&7GfYL||(nxoABS;M0(hS|*4MTTGN{DnL0|-dBAgM?R!nZx=J=e$oT+GGn z{XA>k>$mP3^z&~_07=thDBS1K4jnrNAEdx6^w^vhXK4jv4tL>2?8Ay!N+2bO;tTtC zIoTd0`MYuUas5fM2q><}sfn5hA(e$%vYlXg5>Wb3KK|$u*NH%^9>p zfvh{zU%8K73%F~1Xk(nCv4}8&eHE=MTFNY`3eUa)1O@-Q*;R$-rIZ)HdjwpFO}onD+^j_wEO{AoKG z88I5)PO2k_zHkuPs-z9}_y$FQ@% zq)-453?FrAL(Lrn(nU$jNu+@?>wjue3eaef=*PV(cI#DM&{ha1q})bq?iuTg)({}q^nxR+y*TtjVF;|`ow;vlC2HiDpDNy z!=oiVOF7B{|DRaEK(0y-HXzBDWAY{7l-c0~*OgSq!tQ(rQ(@jG0q=+!EtdN&%2DT) zW>wz`(RoN@;RfaO{MIzkzZ8r&0^EWQn8Z89V#AgF&5 zC)+`1pw7ORvPu`0T;GTJk(Ao3N^(y3v)48pvZTMWjvv)fqRyB@tscAl0s3JsC=nJw z1be%NAs{NJce&(PEOq0?;zE#6B=eKnB(?e*D+W05Fh%!fa*xbBkD)+@V