From 48bcdafab9c526d12979799e13f5798d7136a9a5 Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Wed, 19 Aug 2026 22:37:25 +0300 Subject: [PATCH] feat: redesign device marker faces Issue: #179 User-Visible: yes --- .../houseplan/frontend/houseplan-card.js | 871 ++++++++++-------- demo/golden/harness.mjs | 39 +- demo/golden/matrix.mjs | 53 +- demo/smoke_cover_tap.mjs | 2 +- demo/smoke_device_icon_design.mjs | 175 ++++ demo/smoke_device_preview_parity.mjs | 2 +- demo/smoke_static_icon.mjs | 4 +- demo/srv/assets/houseplan-card.js | 871 ++++++++++-------- dist/houseplan-card.js | 871 ++++++++++-------- docs/ARCHITECTURE.md | 25 +- docs/CHANGELOG.md | 9 + docs/CHANGELOG.ru.md | 10 + docs/TESTING.md | 29 + docs/USER-GUIDE.md | 34 +- docs/USER-GUIDE.ru.md | 49 +- docs/images/01-view-desktop.png | Bin 186585 -> 198862 bytes docs/images/02-view-touch.png | Bin 62185 -> 65446 bytes docs/images/06-device-display-preview.png | Bin 288221 -> 298259 bytes docs/images/06-device-editor.png | Bin 292594 -> 300147 bytes docs/images/08-room-card.png | Bin 30239 -> 32610 bytes docs/images/09-device-info.png | Bin 130600 -> 138453 bytes docs/images/screenshots.json | 34 +- scripts/mutation-gate.mjs | 46 + src/device-face.ts | 69 +- src/device-presentation.ts | 53 +- src/device-pulse.ts | 32 +- src/houseplan-card.ts | 41 +- src/hp-device-preview.ts | 7 +- src/i18n/en.json | 12 +- src/i18n/ru.json | 12 +- src/space-render.ts | 18 +- src/styles.ts | 325 ++++--- src/types.ts | 2 +- test/device-face.test.mjs | 37 +- test/device-presentation.test.mjs | 35 + test/device-pulse.test.mjs | 19 +- test/golden-matrix.test.mjs | 28 +- 37 files changed, 2484 insertions(+), 1330 deletions(-) create mode 100644 demo/smoke_device_icon_design.mjs diff --git a/custom_components/houseplan/frontend/houseplan-card.js b/custom_components/houseplan/frontend/houseplan-card.js index faf42462..9f0d6fa7 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__="19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17";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)},r=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:a,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)=>!a(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(r(t))}else void 0!==t&&e.push(r(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,E="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${E}(?:([^\\s"'>=/]+)(${E}*=${E}*(?:[^ \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?"":"",r=F;for(let e=0;e"===l[0]?(r=n??F,c=-1):void 0===l[1]?c=-2:(c=r.lastIndex-l[2].length,a=l[1],r=void 0===l[3]?N:'"'===l[3]?L:H):r===L||r===H?r=N:r===z||r===O?r=F:(r=N,n=void 0);const d=r===N&&t[e+1].startsWith("/>")?" ":"";o+=r===F?i+T:c>=0?(s.push(a),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 r=t.length-1,a=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())&&a.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 r,a;for(t=n[0],r=0;r{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}=rt,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,r=o!==t;if(r){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||r){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 r=0;for(const e of t)n[r]=s?s(e,r):r,o[r]=i(e,r),r++;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:r}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=r,o;const a=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(a[d]===r[p])l[p]=wt(n[d],o[p]),d++,p++;else if(a[u]===r[_])l[_]=wt(n[u],o[_]),u--,_--;else if(a[d]===r[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(a[u]===r[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(r,p,_),h=St(a,d,u)),c.has(a[d]))if(c.has(a[u])){const e=h.get(r[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=r,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__="4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba";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,E="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${E}(?:([^\\s"'>=/]+)(${E}*=${E}*(?:[^ \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=F;for(let e=0;e"===l[0]?(a=n??F,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=F:(a=N,n=void 0);const d=a===N&&t[e+1].startsWith("/>")?" ":"";o+=a===F?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`"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 Ft=(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=Ft(t.r,0,255)/255,i=Ft(t.g,0,255)/255,s=Ft(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let r=0;return o>0&&(r=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(r),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Ft(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=Ft(t.s,0,100)/100,s=Ft(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),r=s-n;let a;return a=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*(a[0]+r)),g:Math.round(255*(a[1]+r)),b:Math.round(255*(a[2]+r))}}(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,r=i.top+n,a=Math.max(o,i.left+i.width-n),l=Math.max(r,i.top+i.height-n),c=Math.max(0,a-o),h=Math.max(0,l-r),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>a&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,a-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=r?(m="top",f=Math.min(Math.max(r,g),Math.max(r,l-u))):f=Math.min(Math.max(r,_),Math.max(r,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 r=qt(n,o,s);return i.style.left=`${r.left}px`,i.style.top=`${r.top}px`,i.dataset.side=r.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),r=Math.round(this._saturation),a=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 Et(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 Ft=(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=Ft(t.r,0,255)/255,i=Ft(t.g,0,255)/255,s=Ft(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(Ft(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=Ft(t.s,0,100)/100,s=Ft(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` `:G} - `}}rr.properties={hass:{attribute:!1},presentation:{attribute:!1},registry:{attribute:!1},deviceName:{attribute:!1}},rr.styles=[Kt,o` + `}}ra.properties={hass:{attribute:!1},presentation:{attribute:!1},registry:{attribute:!1},deviceName:{attribute:!1}},ra.styles=[Kt,o` :host { display: block; min-width: 0; } .devicepreview { margin: 4px 0 14px; @@ -4091,22 +4211,22 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 .previewstage { min-height: 142px; } .previewfacts > div { grid-template-columns: minmax(0, 1fr); gap: 2px; } } - `],customElements.get("hp-device-preview")||customElements.define("hp-device-preview",rr);const ar=(t,e)=>[t[0]-e[0],t[1]-e[1]],lr=(t,e)=>[t[0]+e[0],t[1]+e[1]],cr=(t,e)=>t[0]*e[0]+t[1]*e[1],hr=t=>Math.hypot(t[0],t[1]);function dr(t){let e=0;for(let i=0;it[1]!=l>t[1]&&t[0]<(a-o)*(t[1]-r)/(l-r)+o&&(i=!i)}return i}([a[0]+r[0]*l,a[1]+r[1]*l],t)&&(r=[-r[0],-r[1]]),r}function _r(t,e,i,s){const n=s||pr(t,e),o=(e+1)%t.length;return t.map((t,s)=>s===e||s===o?[t[0]+n[0]*i,t[1]+n[1]*i]:[...t])}function gr(t,e,i,s){const n=[],o=ar(i,e),r=hr(o);if(rs||h>s)continue;const d=cr(ar(o,e),a),u=cr(ar(l,e),a),p=Math.max(0,Math.min(d,u)),_=Math.min(r,Math.max(d,u));_-p>s&&n.push([[e[0]+a[0]*p,e[1]+a[1]*p],[e[0]+a[0]*_,e[1]+a[1]*_]])}return n}function mr(t,e,i,s,n){const o=gr(t,e,i,n);if(!o.length)return null;const r=t=>o.some(([e,i])=>ur(t,e,i)<=n),a=t.length,l=[];for(let o=0;on||f>n)continue;const v=cr(ar(e,c),p),y=cr(ar(i,c),p),b=Math.max(0,Math.min(v,y)),w=Math.min(u,Math.max(v,y));if(!(w-b<=n)){if(b>n&&bn&&whr(ar(i,t[(s+1)%t.length]))>e);for(let t=0;t<2;t++)i=i.filter((t,s)=>{const n=i[(s-1+i.length)%i.length],o=i[(s+1)%i.length],r=(t[0]-n[0])*(o[1]-n[1])-(t[1]-n[1])*(o[0]-n[0]),a=hr(ar(o,n))||1;return Math.abs(r)/a>e});return i.length>=3?i:t}function vr(t){const e=t.length;if(e<3)return!1;for(let i=0;i(t[0]-n[0])*a[1]-(t[1]-n[1])*a[0],c=t=>(t[0]-n[0])*a[0]+(t[1]-n[1])*a[1],h=i,d=r-i;for(const e of t){const t=Math.abs(l(e));if(t<=i)continue;const n=c(e);n<=h||n>=d||tMath.abs(r+(t-u)/m*(a-r));s=Math.min(s,f(_),f(g))}}return s}function br(t,e,i){if(Di(t,e,i))return!0;if(Ci(t,e,i)||Ci(e,t,i))return!1;let s=0;try{const i=ni([[...t.map(t=>[t[0],t[1]]),[t[0][0],t[0][1]]]],[[...e.map(t=>[t[0],t[1]]),[e[0][0],e[0][1]]]]);for(const t of i)t?.[0]&&(s+=Pi(t[0]))}catch{return!1}return s>Math.max(1e-7,i*i)}function wr(t,e,i,s,n){const o=[i.n[0]*s,i.n[1]*s],r={polys:{},openings:{},movedSpans:{}};if(Math.abs(s)<1e-9)return r;for(const e of t){if(e.id===i.roomId){r.polys[e.id]=_r(e.poly,i.edge,s,i.n),r.movedSpans[e.id]=[[lr(i.a,o),lr(i.b,o)]];continue}const t=gr(e.poly,i.a,i.b,n);if(!t.length)continue;const a=mr(e.poly,i.a,i.b,o,n);a&&(r.polys[e.id]=a,r.movedSpans[e.id]=t.map(([t,e])=>[lr(t,o),lr(e,o)]))}for(const t of e)ur([t.x,t.y],i.a,i.b)<=n&&(r.openings[t.id]=[t.x+o[0],t.y+o[1]]);return r}function kr(t,e,i){for(const s of e)for(let e=0;ei)continue;const c=(t.x-n[0])*l[0]+(t.y-n[1])*l[1];if(c-t.length/2>=-i&&c+t.length/2<=a+i)return!0}return!1}function xr(t,e,i){return t.filter(t=>e.some(e=>{for(let s=0;sa.polys[t.id]||t.poly;for(const e of l){const s=t.find(t=>t.id===e),n=a.polys[e];if(!vr(n))return!1;const l=dr(s.poly),h=dr(n);if(Math.abs(h)t.find(t=>t.id===e).poly),d=t.map(c);for(const t of xr(e,h,2*r)){const e=a.openings[t.id];if(!kr(e?{...t,x:e[0],y:e[1]}:t,d,2*r))return!1}return!0}function Sr(t,e,i,s,n,o){const r=t=>[s[0]+(t[0]-s[0])*n,s[1]+(t[1]-s[1])*n],a={poly:t.poly.map(r),openings:{}};for(const s of e){let e=!1;for(let i=0;i{for(let e=0;et.id===i);if(!l)return!1;const c=t.filter(t=>t.id!==i).map(t=>t.poly),h=Sr(l,e,c,s,n,2*a),d=h.poly,u=function(t){const e=function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<3)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.pop(),n.pop(),s.concat(n)}(t);if(e.length<3)return 0;let i=1/0;for(let t=0;tt.id===i?d:t.poly);for(const t of xr(e,[l.poly],2*a)){const e=h.openings[t.id];if(!kr(e?{...t,x:e[0],y:e[1]}:t,p,2*a))return!1}return!0}function Cr(t,e,i){const s=i/e;return Pi(t)*s*s/1e4}function Dr(t,e){return e?`${Math.round(10.7639*t)} ft²`:`${(Math.round(10*t)/10).toFixed(1)} m²`}function Tr(t){const e=t%360;return e<0?e+360:e}function Pr(t,e){const i=function(t,e){return Tr(t+e)}(t,e)*Math.PI/180;return[Math.sin(i),-Math.cos(i)]}const Rr=Object.freeze({dawn:Object.freeze({top:"#aabdd1",bottom:"#e8c8b7",horizon:"rgba(255,201,156,.56)",sun:"rgba(255,188,125,.78)",vignette:"rgba(65,72,99,.21)",outlineNear:"rgba(74,57,61,.25)",outlineMid:"rgba(255,238,224,.40)",outlineFar:"rgba(255,224,202,.18)"}),day:Object.freeze({top:"#dce9ef",bottom:"#cbdce3",horizon:"rgba(255,245,220,.45)",sun:"rgba(255,239,190,.72)",vignette:"rgba(65,91,105,.16)",outlineNear:"rgba(45,62,71,.28)",outlineMid:"rgba(255,255,255,.42)",outlineFar:"rgba(255,255,255,.20)"}),dusk:Object.freeze({top:"#48536c",bottom:"#9a7380",horizon:"rgba(242,156,114,.34)",sun:"rgba(255,167,113,.55)",vignette:"rgba(20,26,44,.39)",outlineNear:"rgba(238,219,225,.40)",outlineMid:"rgba(229,207,218,.26)",outlineFar:"rgba(215,190,205,.12)"}),night:Object.freeze({top:"#111a27",bottom:"#1f2f3e",horizon:"rgba(79,120,151,.16)",sun:"rgba(169,208,231,0)",vignette:"rgba(3,8,14,.58)",outlineNear:"rgba(218,238,249,.56)",outlineMid:"rgba(174,215,238,.30)",outlineFar:"rgba(136,194,226,.14)"})}),Ar=t=>"number"==typeof t&&Number.isFinite(t),Ir=(t,e,i)=>Math.min(i,Math.max(e,t));function Er(t){return t.elevation<=-6?"night":t.elevation>=6?"day":t.rising?"dawn":"dusk"}function Fr(t){const e=(Math.floor(Number(t)||0)%1440+1440)%1440;return e>=300&&e<480?"dawn":e>=480&&e<1080?"day":e>=1080&&e<1260?"dusk":"night"}function zr(t){const e=Er(t),i=t.azimuth*Math.PI/180;return{sunX:50-42*Math.sin(i),sunY:78-Ir(t.elevation,0,90)/90*64,sunOpacity:"night"===e?0:Ir((t.elevation+6)/12,0,1)}}function Or(t){const e=(Math.floor(Number(t)||0)%1440+1440)%1440;if(e<300||e>=1260)return{sunX:50,sunY:78,sunOpacity:0};const i=(e-300)/960,s=(e-300)/120,n=(1260-e)/120;return{sunX:8+84*i,sunY:78-64*Math.sin(i*Math.PI),sunOpacity:Math.max(.18,Math.min(s,n,1))}}function Nr(t,e=new Date){const i=function(t){const e=t?.states?.["sun.sun"]?.attributes;return e&&Ar(e.azimuth)&&Ar(e.elevation)&&"boolean"==typeof e.rising?{azimuth:Tr(e.azimuth),elevation:e.elevation,rising:e.rising}:null}(t);if(i)return{phase:Er(i),source:"sun",...zr(i)};const s="number"==typeof e?e:function(t=new Date){return 60*t.getHours()+t.getMinutes()}(e);return{phase:Fr(s),source:"clock",...Or(s)}}function Hr(t){return`${t.source}|${t.phase}|${t.sunX.toFixed(2)}|${t.sunY.toFixed(2)}|`+t.sunOpacity.toFixed(3)}const Lr=[[-90,"#070c14"],[-12,"#070c14"],[-4,"#131a28"],[0,"#4a3527"],[10,"#e8ddcf"],[30,"#ffffff"],[90,"#ffffff"]],Br=t=>Math.min(1,Math.max(0,t));function qr(t,e,i=6){const s=t.angle*Math.PI/180,n=[Math.sin(s),-Math.cos(s)],o=s=>{const o=[t.x+n[0]*i*s,t.y+n[1]*i*s];return e.find(t=>t.poly.length>=3&&vi(o,t.poly))||null},r=o(1),a=o(-1);return r&&a?null:r||a?r?{normal:[-n[0],-n[1]],roomId:r.id}:{normal:n,roomId:a.id}:null}function jr(t,e,i){return i>0&&t[0]*e[0]+t[1]*e[1]>.05}function Wr(t,e,i,s){return[[t[0],t[1]],[e[0],e[1]],[e[0]+i[0]*s,e[1]+i[1]*s],[t[0]+i[0]*s,t[1]+i[1]*s]]}function Ur(t,e){try{const i=ni([[...t.map(t=>[t[0],t[1]]),[t[0][0],t[0][1]]]],[[...e.map(t=>[t[0],t[1]]),[e[0][0],e[0][1]]]]),s=[];for(const t of i){const e=t?.[0];!Array.isArray(e)||e.length<4||s.push(e.slice(0,e.length-1).map(t=>[t[0],t[1]]))}return s}catch{return[]}}function Gr(t,e,i,s,n,o,r){if(!(s>0))return[];const a=Pr(i,n),l=[-a[0],-a[1]],c=function(t){const e=Math.min(90,Math.max(0,t));return.7*(.8+1.7*Math.pow(1-e/90,1.6))}(s),h=[];for(const i of e){if(!(i.length>0))continue;const e=qr(i,t);if(!e||!jr(e.normal,a,s))continue;const n=t.find(t=>t.id===e.roomId);if(!n)continue;const d=o&&o[e.roomId]||n.poly,u=i.angle*Math.PI/180,p=i.length/2,_=[-e.normal[0],-e.normal[1]],g=Math.max(0,r?.[i.id]||0),m=i.x+_[0]*g/2,f=i.y+_[1]*g/2,v=Math.cos(u)*p,y=Math.sin(u)*p,b=[m-v,f-y],w=[m+v,f+y],k=c*i.length,x=Ur(Wr(b,w,l,k),d);if(!x.length)continue;const $=l[0]*_[0]+l[1]*_[1];h.push({openingId:i.id,roomId:e.roomId,polys:x,a:b,b:w,dir:l,len:k,normal:_,depth:k*$})}return h}const Vr=t=>"number"==typeof t&&Number.isInteger(t)&&t>=0&&t<=359?t:null;function Kr(t,e){const i=Vr(e?.north_deg);return null!==i?i:Vr(t?.north_deg)}function Yr(t,e){const i=t=>"static"===t||"daynight"===t?t:null;return i(e?.bg_mode)??i(t?.bg_mode)??"static"}function Xr(t,e){const i=e?.sun_rays;return"boolean"==typeof i?i:!0===t?.sun_rays}function Jr(t){const e=t?.states?.["sun.sun"]?.attributes,i=Number(e?.azimuth),s=Number(e?.elevation);return Number.isFinite(i)&&Number.isFinite(s)?{azimuth:i,elevation:s}:null}const Zr=["dawn","day","dusk","night"];function Qr(t){if(!t)return"";const e=Rr[t.phase];return[`--hp-day-cycle-outline-near:${e.outlineNear}`,`--hp-day-cycle-outline-mid:${e.outlineMid}`,`--hp-day-cycle-outline-far:${e.outlineFar}`].join(";")}function ta(t,e=1){if(!t)return G;const i=[`--hp-day-cycle-sun-x:${t.sunX.toFixed(2)}%`,`--hp-day-cycle-sun-y:${t.sunY.toFixed(2)}%`,`--hp-day-cycle-sun-opacity:${t.sunOpacity.toFixed(3)}`,`opacity:${Math.min(1,Math.max(0,e)).toFixed(4)}`].join(";");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(Nu(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=Nu(t,t=>t.classList.contains("editor-secondary")),s=Nu(t,t=>!!t.dataset.editorGroup),n=Nu(t,t=>!!t.dataset.editorPalette),o=Nu(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 Lu=t=>t.stopPropagation(),Bu=4.166666666666667e-9;function qu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Zl)*Zl;return Math.abs(e-t)<=Bu?t:e}const ju=(t,e,i,s)=>Math.hypot(i-t,s-e),Wu=(t,e,i,s,n,o,r,a)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+r-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+a-(e+s)))),Uu=(t,e,i,s,n,o,r)=>{const a=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*a,h=Math.sin(i*l)*a,d=Math.cos(r*l)*a,u=Math.sin(r*l)*a,p=Math.max(ju(t+c,e+h,n+d,o+u),ju(t-c,e-h,n-d,o-u)),_=Math.max(ju(t+c,e+h,n-d,o-u),ju(t-c,e-h,n+d,o+u));return Math.min(p,_)},Gu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Vu=t=>JSON.parse(JSON.stringify(t)),Ku=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yu=(t,e,i)=>Math.min(i,Math.max(e,t)),Xu=t=>Vl({spaces:[t]})[0],Ju=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),r=n(e);return o0?r:1,l=Math.max(s*a*.02,1e-9),c=[];for(const e of t||[])for(const t of hi(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 r of t||[]){if(!r?.id)continue;const c=Za(t,r.id,e,i,s,n,o,a);if(c)for(let t=0;t0&&u>0&&r===p&&u!==r))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=Ju(_,g,a),v=d.get(f);v?v.targets.add(r):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([r])})}}}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])*a,Number(t.a[1])*a],s=[Number(t.b[0])*a,Number(t.b[1])*a];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)=>Ju(t.a,t.b,a).localeCompare(Ju(e.a,e.b,a)))){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=Aa(u,t.a,t.b,e,s,a))}return u}const Qu=t=>{const e=[];for(const i of t||[]){const t=hi(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&&Ku(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(Ku(n,"segments")&&(delete n.segments,e++),Ku(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=jl&&t<=Wl&&(Ku(n,"plan_scale_x")||(n.plan_scale_x=t),Ku(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Ku(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?Yu(o,.1,1e3):5,e++);const r=Number(n.cell_cm),a=Number.isFinite(r)&&r>0?r:5;for(const t of n.wall_columns||[])if("circle"===t.shape)Ku(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Ku(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(Ku(t,"width")){const i=Number(t.width);(Ku(t,"width_cm")||Number.isFinite(i))&&(Ku(t,"width_cm")||(t.width_cm=Number(Yu(i/Jl*a,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Ku(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Ku(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(Yu(es*is(t)/Jl*a,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Ku(t,"scale")||Ku(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Yi(t[1]));if(!(Ku(t,"entity")||Ku(t,"attr")||Ku(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,r=s||n?"":Xi(t.entity,o);if(s||r){if(r){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+r+i.slice(e+2):`${i}${i?" ":""}${r}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let a=r.total;for(const t of i.spaces||[]){const e=Xu(t);if(!e)continue;if(!Fc(t.open_spans).length){const i=Lc(e.rooms,null,Bl,.02*Jl,!0);i.length&&(t.open_spans=Bc(i,Bl),a++)}}const l=Vu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,r=0,a=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Gu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Bu||s))return;n++,t>r&&(r=t);const o=t*Xl*e;o>a&&(a=o,l=i)};for(const t of i){const e=Gu(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=[qu(e[0]),qu(e[1])];return t=Math.max(t,ju(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,r=qu(e+n),a=qu(i+o),l=qu(e),c=qu(i),h=Math.max(Zl,r-l),d=Math.max(Zl,a-c);t=Wu(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=[qu(e[0]),qu(e[1])];return t=Math.max(t,ju(e[0],e[1],i[0],i[1])),i}),r=n.length?[n[0]]:[],a=[];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=[qu(s.a[0]),qu(s.a[1])],r=[qu(s.b[0]),qu(s.b[1])];let a=Math.max(ju(s.a[0],s.a[1],n[0],n[1]),ju(s.b[0],s.b[1],r[0],r[1]));const l=ju(n[0],n[1],r[0],r[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>=-Bu&&s+e/2<=l+Bu});l>Bu&&c?(s.a=n,s.b=r):a=0,p(a,e,i)}for(const s of t.wall_columns||[]){o++;const t=[qu(s.center[0]),qu(s.center[1])],n=ju(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=[qu(s.x1),qu(s.y1)],i=[qu(s.x2),qu(s.y2)];t=Math.max(ju(s.x1,s.y1,e[0],e[1]),ju(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=qu(s.x),i=qu(s.y);if(null!=s.w&&null!=s.h){const n=qu(s.x+s.w),o=qu(s.y+s.h),r=Math.max(Zl,n-e),a=Math.max(Zl,o-i);t=Wu(s.x,s.y,s.w,s.h,e,i,r,a),s.w=r,s.h=a}else t=ju(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 r=n.b[0]-n.a[0],a=n.b[1]-n.a[1];if(Math.hypot(r,a)<=Bu)continue;const l=n.a[0]+r*o,h=n.a[1]+a*o;let d=180*Math.atan2(a,r)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Uu(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=pi([s.x,s.y],t.rooms||[],.025,{step:Zl,length:Number(s.length)||0});if(!n)continue;const r=Number(s.angle),a=!(Number.isFinite(r)&&r===n.angle),l=Uu(s.x,s.y,Number.isFinite(r)?r:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,a&&c++,p(l,e,i,a)}}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=qu(i.x),r=qu(i.y),a=ju(i.x,i.y,n,r);s[t]={...i,x:n,y:r};const l="string"==typeof i.s?i.s:"";p(a,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:r,maxShiftCm:a,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=Xu(e),r=Xu(s);if(!o||!r)continue;const a=Qu(o.rooms),c=Qu(r.rooms),_=.02*Jl;let g=Yc(Fc(e.open_spans),a,c,Bl);const m=g.length;g=Kc(g,r.rooms,Bl,_),g=g.map(t=>{const e=Ic(t,Bl),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],r=e[2]-e[0],a=e[3]-e[1],l=Math.hypot(r,a)||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(r*s-a*e)/(l*c)<=1e-6&&zc(o,t).d<=4*_&&zc(i,t).d<=4*_&&zc(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,Jl,2*_),g=Nc(n,d,u,Jl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Jl)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*Jl){h.moved++;const t=m/Bl;t>h.maxShift&&(h.maxShift=t);const e=m/Jl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ac(p,g,Bl)}),g=Kc(g,r.rooms,Bl,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Ic(t,Bl));g.length?s.open_spans=g:delete s.open_spans,qc(s.rooms||[],r.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ra(e.walls,a,c,Zl,Bl);y=Zu(r.rooms,y,f,Zl,Number(s.cell_cm)>0?Number(s.cell_cm):5,Jl,Bl),y=el(r.rooms,y,f,Zl,Number(s.cell_cm)>0?Number(s.cell_cm):5,Jl,Bl),y=Ta(y,s.rooms||[],Zl,1,f.map(t=>[t[0]/Bl,t[1]/Bl,t[2]/Bl,t[3]/Bl])),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:a,glowSpacesMigrated:r.glowSpaces,glowRoomsMigrated:r.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class ep{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 ip=new WeakMap;const sp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function np(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 `,r=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=r}),a=t.createElement("canvas");a.width=4,a.height=1;const l=a.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 sp(c,i,0)&&sp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&sp(c,s,8)&&sp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(r)}}const op={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},rp=t=>Math.max(0,Math.min(1,t)),ap=(t,e,i)=>t+(e-t)*i,lp=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function cp(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 hp(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 dp(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 up(t,e,i){const s=dp(t),n=dp(e);if(!s||!n)return i<.5?t:e;const o=rp(i);return`rgba(${Math.round(ap(s[0],n[0],o))}, ${Math.round(ap(s[1],n[1],o))}, ${Math.round(ap(s[2],n[2],o))}, ${ap(s[3],n[3],o).toFixed(3)})`}function pp(t,e,i){const s=(t=>{const e=rp(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,lp(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=rp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:pp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(r):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(r),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 gp="houseplan_card_labs_v1",mp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function fp(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 vp(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 $p(t,e,i,s=mp){const n=function(t,e=mp){const i=fp(t),s=new Map;if(!i||!bp(e))return s;for(const t of e){const e=fp(t.since),n=fp(t.expires);vp(i,e)>=0&&vp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(bp(s)?s.map(t=>t.id):[]),r=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 a=!1;const l=t=>{if("off"===t)return r.clear(),void(a=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(a=!0,e||!n.has(i)?r.delete(i):r.add(i))};for(const e of xp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of xp(wp(t.hash)))l(e);const c=Object.freeze([...r].sort());return{active:c,space:kp(t.hash),persist:a?JSON.stringify(c):void 0,knownUrlOperation:a}}let Sp={active:Object.freeze([]),space:""},Mp="",Cp=!1,Dp="";const Tp=new Set;function Pp(){if("undefined"==typeof window)return Sp;const t=$p(window.location,function(){try{return window.localStorage.getItem(gp)}catch{return null}}(),Mp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(gp,t)}catch{}}(t.persist),Sp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Tp)t(Sp);return Sp}function Rp(){Pp()}function Ap(t){return Mp=t,"undefined"==typeof window?Sp:(Cp||(Cp=!0,window.addEventListener("hashchange",Rp),window.addEventListener("popstate",Rp)),Pp())}const Ip=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Ep=64;function Fp(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 zp(t,e,i=Ip){if(!(Fp(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],r=t[1]-i.origin[1],a=(o*Math.cos(s)-r*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+r*Math.cos(s))*i.xyScale;return[i.origin[0]+a,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function Op(t,e=Ip){if(!Fp(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 Np(t=Ip){return`matrix(${function(t=Ip){if(!Fp(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),r=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,r,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-r*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Hp(t,e=Ip){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 r=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],a=Math.max(s,n),l=r.flatMap(t=>[zp(t,-o,e),zp(t,a,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 Lp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Bp(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 Bp(i)>0===s?i:[...i].reverse()}function jp(t,e,i){return t.length?`M ${t.map(t=>Lp(zp(t,i,e))).join(" L ")} Z`:""}function Wp(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 Up(t,e,i=Ip){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=qp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Bp(t))>=1e-9)).filter(t=>t.length&&Bp(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(Bp(e[0]))-Math.abs(Bp(t[0]))});const n=[],o=[];let r=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:r}}function Gp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Vp=t=>t.every(Number.isFinite);function Kp(t,e,i,s){const n=t[0]*i,o=t[1]*s,r=e*Math.PI/180;return[n*Math.cos(r)-o*Math.sin(r),n*Math.sin(r)+o*Math.cos(r)]}function Yp(t,e,i,s,n,o,r){const a=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],Kp(i,t.angle,a,l));return{leaf:e,hinge:c,closedVector:Kp(s,t.angle,a,l),quarterVector:Kp([-s[1],s[0]],t.angle,a,l),turnDeg:n,bottom:o,top:r}}const Xp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Jp(t,e,i=Ip){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=zp(e.hinge,e.bottom,i),r=zp(n,e.bottom,i),a=zp(n,e.top,i),l=zp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${Xp(o)} L ${Xp(r)} L ${Xp(a)} L ${Xp(l)} Z`,shadowD:`M ${Xp(zp(e.hinge,0,i))} L ${Xp(zp(n,0,i))}`,depth:Math.max(o[1],r[1])}})}const Zp={window:120,door:90,passage:90,gate:300};function Qp(t){return Zp[t]}function t_(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 e_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=t_(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 i_(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 s_(t){const e=e_(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,r=s/n,a=(t[0]-e.a[0])*o+(t[1]-e.a[1])*r,l=Math.max(0,Math.min(n,a)),c=e.a[0]+l*o,h=e.a[1]+l*r;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])*r-(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],r=e.b[1]-e.a[1],a=Math.hypot(o,r);if(!(a>1e-9))return!1;const l=o/a,c=r/a;for(const o of i){if(!o.open&&o.kind)continue;const i=t_(o.a,o.b),r=i.b[0]-i.a[0],a=i.b[1]-i.a[1],h=Math.hypot(r,a);if(!(h>1e-9))continue;const d=r/h,u=a/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(i_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(i_);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),r=o.filter(t=>t.target.partitionHost);if(r.length){if(1!==new Set(r.map(t=>t.target.partitionHost.id)).size||r.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=r[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),a=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,r=s/n,c=Math.abs(a*r-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*a);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:a,length:l}=n,c=a.b[0]-a.a[0],h=a.b[1]-a.a[1],d=c/l,u=h/l,p=a.partitionHost?a.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=a.a[0]+d*g,y=a.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=[a.a[0]+d*(w-x/2),a.a[1]+u*(w-x/2)],M=[a.a[0]+d*(k+$/2),a.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:a,...a.partitionHost?{host:{...a.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 n_(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 o_="1.65.0-beta.5",r_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},a_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},l_=2e3,c_=1e3,h_=1500,d_=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},u_=(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}},p_=(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)}},__=new Map;let g_=0;const m_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let f_=1e4;const v_="houseplan_card_layout_v1",y_="houseplan_card_cfg_v1",b_="houseplan_card_zoom_v1",w_="houseplan_card_nav_v1",k_="houseplan_card_kiosk_v1",x_="houseplan_card_view_v1",$_=1e3,S_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],M_=(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}},C_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),D_=2e3,T_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},P_=t=>{history.pushState(null,"",t),T_(window,"location-changed",{replace:!1})},R_=(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},A_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class I_ 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=gn(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={...ea},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 _p({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Hu({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 ep(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=++g_,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+Tu)>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=()=>{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._space=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=In(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=Cn(t);e&&(Pn(t,e),Rn(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 oh(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=R_(()=>{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(v_,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=R_(()=>{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=d_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?xl:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?xl: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=d_(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&&Ll(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const r=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=$l(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=d_(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"),r),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=[],r=s.points.slice(0,n+1),a=s.points.slice(n+1);if(r.length>=2&&o.push({id:s.id,points:r,segments:s.segments.slice(0,n)}),a.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:a,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>D_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||pa];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=Hr(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:hs(this._settings,{bgColor:null})||null,northDeg:Kr(this._settings,{}),bgMode:Yr(this._settings,{}),sunRays:Xr(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=tp(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"),r=this.renderRoot.querySelector(".hp-backdrop"),a=this.renderRoot.querySelector(".zoomwrap"),l=a?getComputedStyle(a).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:cp(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:r&&Number(getComputedStyle(r).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=Oi(this._baseVb(),s/Math.max(1,n)),r=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,t)),a=o.w/r,l=o.h/r,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-a/2,y:h-l/2,w:a,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 r=this.renderRoot.querySelector(".editorchrome"),a=r?.querySelector(".editorchrome-inner"),l="view"===i?0:a?.scrollHeight||a?.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:cp(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)})}_slideTo(t,e){if(t===this._space)return;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._space=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())}_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()}}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new eh(()=>{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(x_,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?Op(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?zp([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 kp(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,ip.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=Qc(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=ip.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=np(t).catch(()=>!1).then(t=>(i.resolved=t,t)),ip.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,()=>As(this._serverCfg)),this._config?.kiosk&&Number(this._config?.cycle)>0&&(clearInterval(this._cycleTimer),this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle))),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Tp.add(e);const i=Ap(t);return"undefined"==typeof window&&e(i),()=>{Tp.delete(e)}}(o_,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},h_)),!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(),r=/^[a-z]$/.test(o),a="z"===o||!r&&"KeyZ"===t.code,l="y"===o||!r&&"KeyY"===t.code,c=n&&(a&&t.shiftKey||l),h=n&&a&&!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[1]/$_]),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 __.values())for(const e of t)clearTimeout(e.evict);__.clear(),f_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of __.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:__.size,slots:t,dlgs:e,drafts:i}}setConfig(t){this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t},this._config.kiosk&&(this._booting=!1,this._bootFading=!1),t.default_floor&&(this._space=t.default_floor);try{this._zoomBySpace=JSON.parse(localStorage.getItem(b_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(x_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Ap(o_);try{const t=JSON.parse(localStorage.getItem(k_)||"null");this._kioskScale={icon:zs(t?.icon),font:zs(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(y_)||"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||ih(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||ih(this._layout),this._virtualLights=gn(t.virtual_lights,this._cfgRev),this._serverStorage=!0,this._adoptInitialSpace(this._model))}catch{}"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=m_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=__.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>=Xc,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:r}=((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,r=0,a=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>r?(o=i,r=t,a=1):t===r&&a++)}return!o||a>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Xc,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},h_)),this._warmKey=t,r?(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=__.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},f_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);if(this._hashApplied||!this._model.find(t=>t.id===e.space))return void(this._warmVp=null);this._space=e.space,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 i=this._effectiveProjection(),s=i===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=s&&e.view?{...e.view}:null,this._viewModeSnap=s&&e.snap?{...e.snap}:null,!s&&e.logicalCenter){const t="iso"===i?zp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var n;this._tool="openwall"===(n=e.tool)||"closewall"===n?"boundary":"opening"===(n=function(t){return"partition"===t?"draw":t}(n))?"draw":"string"==typeof n&&C_.has(n)?n:"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=m_(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=__.get(i)||[];for(s.push(this._warmSlot),__.set(i,s),this._warmTrim(s);__.size>8;){const t=__.keys().next().value;if(void 0===t||t===i)break;for(const e of __.get(t)||[])clearTimeout(e.evict);__.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>f_)&&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=ih(this._serverCfg),this._layoutContentFingerprint=ih(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(yn).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(y_,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:fn(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){return 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){const e=this._initialSpaceSelection(t);return e.id?(this._space=e.id,"hash"===e.source&&(this._hashApplied=!0),"saved"===e.source&&(this._navApplied=!0),e):e}_candidateBackdrop(t,e=this._space){const i=Vl(t),s=this._initialSpaceSelection(i).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===s)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return sh([this._cfgRev,this._cfgContentFingerprint||ih(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||ih(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(qu(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=qu(t,t=>t.classList.contains("editor-secondary")),s=qu(t,t=>!!t.dataset.editorGroup),n=qu(t,t=>!!t.dataset.editorPalette),o=qu(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 Wu=t=>t.stopPropagation(),Uu=4.166666666666667e-9;function Gu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Uu?t:e}const Vu=(t,e,i,s)=>Math.hypot(i-t,s-e),Ku=(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)))),Yu=(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(Vu(t+c,e+h,n+d,o+u),Vu(t-c,e-h,n-d,o-u)),_=Math.max(Vu(t+c,e+h,n-d,o-u),Vu(t-c,e-h,n+d,o+u));return Math.min(p,_)},Xu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Ju=t=>JSON.parse(JSON.stringify(t)),Zu=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Qu=(t,e,i)=>Math.min(i,Math.max(e,t)),tp=t=>Kl({spaces:[t]})[0],ep=(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=ep(_,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)=>ep(t.a,t.b,r).localeCompare(ep(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 sp=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&&Zu(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(Zu(n,"segments")&&(delete n.segments,e++),Zu(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(Zu(n,"plan_scale_x")||(n.plan_scale_x=t),Zu(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Zu(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?Qu(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)Zu(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Zu(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(Zu(t,"width")){const i=Number(t.width);(Zu(t,"width_cm")||Number.isFinite(i))&&(Zu(t,"width_cm")||(t.width_cm=Number(Qu(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Zu(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Zu(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(Qu(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Zu(t,"scale")||Zu(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(!(Zu(t,"entity")||Zu(t,"attr")||Zu(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=tp(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=Ju(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=Xu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Uu||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=Xu(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=[Gu(e[0]),Gu(e[1])];return t=Math.max(t,Vu(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=Gu(e+n),r=Gu(i+o),l=Gu(e),c=Gu(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Ku(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=[Gu(e[0]),Gu(e[1])];return t=Math.max(t,Vu(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=[Gu(s.a[0]),Gu(s.a[1])],a=[Gu(s.b[0]),Gu(s.b[1])];let r=Math.max(Vu(s.a[0],s.a[1],n[0],n[1]),Vu(s.b[0],s.b[1],a[0],a[1]));const l=Vu(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>=-Uu&&s+e/2<=l+Uu});l>Uu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Gu(s.center[0]),Gu(s.center[1])],n=Vu(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=[Gu(s.x1),Gu(s.y1)],i=[Gu(s.x2),Gu(s.y2)];t=Math.max(Vu(s.x1,s.y1,e[0],e[1]),Vu(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=Gu(s.x),i=Gu(s.y);if(null!=s.w&&null!=s.h){const n=Gu(s.x+s.w),o=Gu(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Ku(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Vu(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)<=Uu)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=Yu(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=Yu(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=Gu(i.x),a=Gu(i.y),r=Vu(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=tp(e),a=tp(s);if(!o||!a)continue;const r=sp(o.rooms),c=sp(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=Ec(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=>Ec(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=ip(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 op{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 ap=new WeakMap;const rp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function lp(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 rp(c,i,0)&&rp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&rp(c,s,8)&&rp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const cp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},hp=t=>Math.max(0,Math.min(1,t)),dp=(t,e,i)=>t+(e-t)*i,up=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function pp(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 _p(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 gp(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 mp(t,e,i){const s=gp(t),n=gp(e);if(!s||!n)return i<.5?t:e;const o=hp(i);return`rgba(${Math.round(dp(s[0],n[0],o))}, ${Math.round(dp(s[1],n[1],o))}, ${Math.round(dp(s[2],n[2],o))}, ${dp(s[3],n[3],o).toFixed(3)})`}function fp(t,e,i){const s=(t=>{const e=hp(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,up(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=hp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:fp(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 yp="houseplan_card_labs_v1",bp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function wp(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 kp(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 Dp(t,e,i,s=bp){const n=function(t,e=bp){const i=wp(t),s=new Map;if(!i||!$p(e))return s;for(const t of e){const e=wp(t.since),n=wp(t.expires);kp(i,e)>=0&&kp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set($p(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 Cp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Cp(Sp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Mp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Tp={active:Object.freeze([]),space:""},Pp="",Rp=!1,Ap="";const Ip=new Set;function Ep(){if("undefined"==typeof window)return Tp;const t=Dp(window.location,function(){try{return window.localStorage.getItem(yp)}catch{return null}}(),Pp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(yp,t)}catch{}}(t.persist),Tp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Ip)t(Tp);return Tp}function Fp(){Ep()}function zp(t){return Pp=t,"undefined"==typeof window?Tp:(Rp||(Rp=!0,window.addEventListener("hashchange",Fp),window.addEventListener("popstate",Fp)),Ep())}const Op=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Np=64;function Hp(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 Lp(t,e,i=Op){if(!(Hp(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 Bp(t,e=Op){if(!Hp(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 qp(t=Op){return`matrix(${function(t=Op){if(!Hp(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 jp(t,e=Op){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=>[Lp(t,-o,e),Lp(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 Wp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Up(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 Up(i)>0===s?i:[...i].reverse()}function Vp(t,e,i){return t.length?`M ${t.map(t=>Wp(Lp(t,i,e))).join(" L ")} Z`:""}function Kp(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 Yp(t,e,i=Op){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=Gp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Up(t))>=1e-9)).filter(t=>t.length&&Up(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(Up(e[0]))-Math.abs(Up(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 Xp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Jp=t=>t.every(Number.isFinite);function Zp(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 Qp(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],Zp(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:Zp(s,t.angle,r,l),quarterVector:Zp([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const t_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function e_(t,e,i=Op){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=Lp(e.hinge,e.bottom,i),a=Lp(n,e.bottom,i),r=Lp(n,e.top,i),l=Lp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${t_(o)} L ${t_(a)} L ${t_(r)} L ${t_(l)} Z`,shadowD:`M ${t_(Lp(e.hinge,0,i))} L ${t_(Lp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const i_={window:120,door:90,passage:90,gate:300};function s_(t){return i_[t]}function n_(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 o_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=n_(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 a_(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 r_(t){const e=o_(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=n_(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(a_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(a_);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 l_(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 c_="1.65.0-beta.5",h_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},d_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},u_=2e3,p_=1e3,__=1500,g_=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},m_=(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}},f_=(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)}},v_=new Map;let y_=0;const b_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let w_=1e4;const k_="houseplan_card_layout_v1",x_="houseplan_card_cfg_v1",$_="houseplan_card_zoom_v1",S_="houseplan_card_nav_v1",M_="houseplan_card_kiosk_v1",C_="houseplan_card_view_v1",D_=1e3,T_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],P_=(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}},R_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),A_=2e3,I_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},E_=t=>{history.pushState(null,"",t),I_(window,"location-changed",{replace:!1})},F_=(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},z_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class O_ 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 vp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new ju({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 op(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=++y_,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+Iu)>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=()=>{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._space=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=F_(()=>{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(k_,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=F_(()=>{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=g_(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=g_(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=g_(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>A_)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=np(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:pp(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(O_.ZOOM_MAX,Math.max(O_.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:pp(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)})}_slideTo(t,e){if(t===this._space)return;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._space=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())}_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()}}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(C_,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?Bp(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?Lp([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 Mp(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,ap.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=ap.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=lp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),ap.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._config?.kiosk&&Number(this._config?.cycle)>0&&(clearInterval(this._cycleTimer),this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle))),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Ip.add(e);const i=zp(t);return"undefined"==typeof window&&e(i),()=>{Ip.delete(e)}}(c_,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},__)),!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]/D_,t[1]/D_]),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 v_.values())for(const e of t)clearTimeout(e.evict);v_.clear(),w_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of v_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:v_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t},this._config.kiosk&&(this._booting=!1,this._bootFading=!1),t.default_floor&&(this._space=t.default_floor);try{this._zoomBySpace=JSON.parse(localStorage.getItem($_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(C_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=zp(c_);try{const t=JSON.parse(localStorage.getItem(M_)||"null");this._kioskScale={icon:Fs(t?.icon),font:Fs(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(x_)||"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,this._adoptInitialSpace(this._model))}catch{}"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=b_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=v_.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},__)),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=v_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},w_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);if(this._hashApplied||!this._model.find(t=>t.id===e.space))return void(this._warmVp=null);this._space=e.space,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 i=this._effectiveProjection(),s=i===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=s&&e.view?{...e.view}:null,this._viewModeSnap=s&&e.snap?{...e.snap}:null,!s&&e.logicalCenter){const t="iso"===i?Lp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var n;this._tool="openwall"===(n=e.tool)||"closewall"===n?"boundary":"opening"===(n=function(t){return"partition"===t?"draw":t}(n))?"draw":"string"==typeof n&&R_.has(n)?n:"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=b_(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=v_.get(i)||[];for(s.push(this._warmSlot),v_.set(i,s),this._warmTrim(s);v_.size>8;){const t=v_.keys().next().value;if(void 0===t||t===i)break;for(const e of v_.get(t)||[])clearTimeout(e.evict);v_.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>w_)&&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(x_,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){return 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){const e=this._initialSpaceSelection(t);return e.id?(this._space=e.id,"hash"===e.source&&(this._hashApplied=!0),"saved"===e.source&&(this._navApplied=!0),e):e}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._initialSpaceSelection(i).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===s)?.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()} @@ -4549,26 +4671,26 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${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 Vl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return t=this._model,e=this._space,t.find(t=>t.id===e)??t[0];var t,e}_spaceModelById(t){return function(t,e){if(e)return t.find(t=>t.id===e)}(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._space=""}}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||In(e),s=On(e,i),{areaToSpace:n,markers:o,settings:r,excluded:a,iconRules:l}=t,c=!1!==r.group_lights,h=yo(o),d=fo(s,c).filter(t=>!bo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=qn(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"!==Bn(e,"device:"+t.id,i).kind)continue;const r=p[t.id]||[],h=jn(s,t,r);let d=a.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"===vo(s,e,t.model,r,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 us(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=ih(n),r=o!==(this._cfgContentFingerprint||ih(this._serverCfg));if(r&&(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=mn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);vn(e)!==vn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let a=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=ih(t);a=s!==(this._layoutContentFingerprint||ih(this._layout)),a&&(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),r&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),a&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:r,layoutChanged:a}}_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=ih(n)!==(this._cfgContentFingerprint||ih(this._serverCfg))||ih(s?.layout??{})!==(this._layoutContentFingerprint||ih(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),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(v_)||"{}")||{}}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,r)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(r,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=wn(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(ih(e)!==(this._cfgContentFingerprint||ih(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),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=An(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return In(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=On(this.hass,t),n=Nn(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+Tu)>t?1:0)).join("|"),i=vn(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,r=new Set(["sun.sun"]);this._vacFit?.source&&r.add(this._vacFit.source);const a=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void r.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?a.add(s):"entity"===i&&r.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 mi(e))r.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=Yi(t[1]);e?.entity&&r.add(e.entity)}e.entity&&r.add(e.entity),o.set(`decor:${t.id}:${e.id}`,ts(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!bo(s,t,yo(this._markers))))}const h=lo(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(pu(t.id,e),cu(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?vh(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=uu({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:r,deviceIds:a,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 Bn(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=In(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&&P_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else P_("/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,As(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=ih(i);s!==(this._layoutContentFingerprint||ih(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")+":"+sr(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=xo({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,Bn(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Ln(),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));Mn=s;try{localStorage.setItem(Sn,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const r=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())r.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 a=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));a&&("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)&&(T_(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=uo(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return zi(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*_c(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),r=.1*Math.min(o.w,o.h),a=o.w-2*r,l=o.h-2*r,c=Math.max(1,Math.round(Math.sqrt(n.length*a/Math.max(l,1)))),h=Math.ceil(n.length/c),d=a/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+r+d*(e%c+.5),y:o.y+r+u*(Math.floor(e/c)+.5)}));Ni(p,o,s,.5*r),n.forEach((e,i)=>t[e.id]=tc(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*$_,y:i.y*$_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?tc(pc(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,r=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:ic(n/$_),y:ic(o/$_),...r?{k:r}:{}}}}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 nu(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(pu(t.id,e));return s||cu(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,lu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=_o(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:po(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 Bs(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&go(this.hass,t.primary)?mo(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,T_(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=Vh(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||!Qh(t))return;const e=t=>{const e=Qh(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=wn(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&&td(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}}_t(t,e){return nr(sr(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=sr(this.hass,this._config?.language);return or(i,t)&&or(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=oc([[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=oc("line"===t.kind?[[t.x1*$_,t.y1*i],[t.x2*$_,t.y2*i]]:"text"===t.kind?[[t.x*$_,t.y*i]]:ca({x:t.x*$_,y:t.y*i,w:t.w*$_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=oc(i);t&&e.push(t)}}return ac(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:$_,h:$_};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=dc(this._contentItems(t));let n=s.all||uc(t),o=this._showFar?n:s.core||uc(t);return e&&e.id===t.id&&i&&e.grow&&(o=M_(e.rect,o),n=M_(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=Gp(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=Gp(e,-1)}else e=Gp(e,t?1:0);else for(const i of t)e=Gp(e,i.codePointAt(0)||0);else e=Gp(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:Ip,wallHeight:Ep,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Rl(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),r=e.length||n.length?dl(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,$_,n):null;if((e.length||n.length)&&!r)throw new Error("wall boolean geometry failed");const a=r?.paperGeom??function(t,e,i,s,n,o,r=1){try{const a=cl(t,e,i,s,n,o,r);return a?a.shell?.length?si(a.centre,a.shell):a.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_);if(!a)throw new Error("floor boolean geometry failed");const l=r?.openingIndex||gl(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?ld(i.partitionHost,s):e.length||"gate"===t.type?yl(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(!(Vp([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=[Yp(t,0,[-i,0],[i,0],o,0,.88*e),Yp(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[Yp(t,0,[-i,0],[i,0],-90,.27*e,.78*e),Yp(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[Yp(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:r?.geom||[],floor:a,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 Vp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Hp({rect:n?M_(i,n):i,wallHeight:Ep,openingHeight:Ep,floorDepth:10}),r=function(t,e=Ip,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let r=0;for(let a=0;a<(t||[]).length;a++){const l=t[a];for(let t=0;t<(l||[]).length;t++){const c=qp(l[t],t>0);if(!(c.length<3||Math.abs(Bp(c))<1e-9)){s.push(jp(c,e,i)),r+=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:r}}(s.walls),a={geometry:r,floor:Up(s.floor,10),openings:s.openings,frame:o};return p_(this._isoGeometryCache,t.key,a,8),{key:t.key,...a}}_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?zp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=Op([t.x,t.y]),i=Op([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=Hp({rect:this._frameOf().rect,wallHeight:Ep});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 t=this._model,e=this._space,t.find(t=>t.id===e)??t[0];var t,e}_spaceModelById(t){return function(t,e){if(e)return t.find(t=>t.id===e)}(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._space=""}}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),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(k_)||"{}")||{}}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),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=En(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+Iu)>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(fu(t.id,e),pu(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?yh(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=mu({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=En(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)&&(I_(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 Fi(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*D_,y:i.y*D_}}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/D_),y:sc(o/D_),...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 lu(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(fu(t.id,e));return s||pu(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,uu({...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,I_(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=Kh(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||!td(t))return;const e=t=>{const e=td(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&&ed(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*D_,t.y1*i],[t.x2*D_,t.y2*i]]:"text"===t.kind?[[t.x*D_,t.y*i]]:hr({x:t.x*D_,y:t.y*i,w:t.w*D_,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:D_,h:D_};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=P_(e.rect,o),n=P_(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=Xp(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=Xp(e,-1)}else e=Xp(e,t?1:0);else for(const i of t)e=Xp(e,i.codePointAt(0)||0);else e=Xp(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:Op,wallHeight:Np,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,D_,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,D_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,D_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?cd(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(!(Jp([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=[Qp(t,0,[-i,0],[i,0],o,0,.88*e),Qp(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[Qp(t,0,[-i,0],[i,0],-90,.27*e,.78*e),Qp(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[Qp(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 Jp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=jp({rect:n?P_(i,n):i,wallHeight:Np,openingHeight:Np,floorDepth:10}),a=function(t,e=Op,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=Gp(l[t],t>0);if(!(c.length<3||Math.abs(Up(c))<1e-9)){s.push(Vp(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:Yp(s.floor,10),openings:s.openings,frame:o};return f_(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?Lp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=Bp([t.x,t.y]),i=Bp([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=jp({rect:this._frameOf().rect,wallHeight:Np});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})} -
`}_renderHomeArrow(){if(this._booting)return G;const t=this._view;if(!t||!t.w||!t.h)return G;const e=this._baseVb(),i=e[0],s=e[1],n=e[2],o=e[3];if(!(i+n<=t.x||i>=t.x+t.w||s+o<=t.y||s>=t.y+t.h))return G;const r=Math.atan2(s+o/2-(t.y+t.h/2),i+n/2-(t.x+t.w/2)),a=50+38*Math.cos(r),l=50+38*Math.sin(r);return j``}_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:Oi(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,r=i+s-e+n;return Math.max(Math.min(o,r),Math.min(Math.max(o,r),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=Oi(s,this._stageAspect()),o=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,t)),r=n.w/o,a=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-r/2,y:h-a/2,w:r,h:a},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},h_)}_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>=Xc?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=Oi(this._baseVb(),this._stageAspect()),o=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const r=s.clientWidth,a=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/r*c,y:l[1]-e/a*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=Oi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(b_,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._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=Oi(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&&P_("/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},A_(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),r=(t.clientX-this._drag.sx)/n.width*o.w,a=(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=ec(this._drag.ox+r),c=ec(this._drag.oy+a);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 I_._noHoverMq||I_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(I_._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 Jl}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 li(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,$_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return ui(t?.rooms||[]).map(t=>[t[0]*$_,t[1]*e,t[2]*$_,t[3]*e])}_savedNav(){try{return JSON.parse(localStorage.getItem(w_)||"null")}catch{return null}}_saveNav(){try{localStorage.setItem(w_,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),r=this._modeTransitionBusy,a=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=r&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(r?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:r?this._modeTransitionTargetCenterX:a?.viewport.centerX,u=c?c.centerY:r?this._modeTransitionTargetCenterY:a?.viewport.centerY;if("view"===s&&"view"!==t&&!r){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||r||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:a?.viewport.centerX,centerY:a?.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?zp([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?a?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=a,this._prepareModeTransition(p,a,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(a,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=ma(pa,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?ma(pa,this._imperial):this._drawWallField}get _drawWallCm(){const t=d_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?xl:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?xl:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:ma(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=xd(this._path,this._draftSegmentCms,pa),i=e.length;if((t.partitions||[]).length+i>D_)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>=D_:(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[ec(ai(t[0],e)),ec(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 r=Math.PI/4;let a=Math.atan2(o,n);a<0&&(a+=2*Math.PI);const l=Math.floor(a/r+.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,Yl):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=vl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,r=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-r,e.x+o,e.y+r])}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=vd({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=vd({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(!(dd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const r=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>dd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of r){if(yd(t.point,n,s))continue;const r=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);r>i.tolerance||!bd(r,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:r})}if(o)return o;let a=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],r=Hs([e[0],e[1]],t);if(r>i.tolerance)continue;const l=wd(o,e,i.gridStep);!yd(l,n,s)&&bd(r,o.key,a)&&(a={kind:"line",point:l,key:o.key,distance:r,segment:o})}return a}(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 fi(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))<=Kl);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:$l(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Sl(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=Fc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Ta(t.walls,t.rooms||[],Zl,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){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._space=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=hi(e);return!!i&&wi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=hi(e);return!!i&&Di(t,i)})}_pointInRoom(t,e){return e.poly?vi(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(!vr(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>D_)||(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 r=this._draftEndAt(n,this._activeDraftId||void 0);if(r)return void this._mergeDraftEndpoint(r);if(!this._canAppendRoomDraftPoint())return;const a=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(a)}_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,r=n.find(e=>e.id===t.draft.id);if(!r)return;const a=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(r.segments||[]).map(t=>({...t})):[...r.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,a[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?a.slice(1):a],_=[...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)+(r.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)||Pi(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||r,id:b,points:m.map(t=>[t[0]/$_,t[1]/$_]),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[1]/$_]),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:kd,s=Wd(t,i),n=new Map,o=new Map,r=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Dd(t.a,i),s=Dd(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 a=new Map;for(const[t,e]of o){const i=n.get(t);a.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=[Dd(t.a,i),Dd(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(Td(u,p));const s=a.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=Md(g);if(!(m>i*i))continue;const f=Pd(Rd(e,n,i)),v=new Set;for(const t of d)for(const e of r.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 r;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);r=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(!r.length)return;for(const t of s.rooms){const e=hi(t);if(!t.id||!e)continue;const i=Ei(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Pi(s)>=Pi(n)?s:n,a=o===s?n:s,l=[...r].sort((t,e)=>Math.abs(t.area-Pi(a))-Math.abs(e.area-Pi(a))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:a.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:a},consumeAllActive:!0}])}const a=r.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));a.length&&this._beginWallFaceBatch(a)}_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(xl);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:$l(i),angle:0},o=(s.wall_columns||[]).find(t=>Ll(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 r=this._geometrySnapshot(),a=this._curSpaceCfg;a.wall_columns||=[],a.wall_columns.push({...n,center:[e[0]/$_,e[1]/$_]}),this._recordGeometry(this._t("history.column_add"),r),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:ma(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:ma(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Sl(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:ma(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(),A_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Nl(n,Tl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Dl(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 r=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),a=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===r&&a-l.at>380&&a-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:r,index:c,x:t.clientX,y:t.clientY,at:a},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(-Kl*$_-Math.min(...n),Math.min(Kl*$_-Math.max(...n),i[0])),Math.max(-Kl*$_-Math.min(...o),Math.min(Kl*$_-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]/$_,n.a[1]/$_],t.b=[n.b[0]/$_,n.b[1]/$_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=nd(t,[n],$_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,hd(t,i,$_))}}}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&&Ll(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/$_,(n.center[1]+e.delta[1])/$_])}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(),A_(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:Sl(e.angle),angle:Sl(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=Sl(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&&Ll(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?hi(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 r=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[1]/r]),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]/$_,e.y=i[1]/r)}const a=[],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[1]*r]);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:pr(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(),A_(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 r=Math.sign(s);let a=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&a>1e-9;s++,a-=l){const s=r*a;if($r(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 r=wr(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(r.polys),this._rszApplyPreview(r.polys,r.openings),this._rszLive=this._rszEdgeLabels(r,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(Mr(t,e,i,s,n,o))return n;let r=1,a=n;for(let n=0;n<28;n++){const n=(r+a)/2;Mr(t,e,i,s,n,o)?r=n:a=n}return r}(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),r=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),a=Sr(o,e.openings,r,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:a.poly},a.openings),this._rszLive=this._rszScaleLabels(a.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=fr(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Ta(n.walls,n.rooms||[],Zl,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,r=e.edge,a=(r+1)%o;for(const[t,e]of[[n[(r-1+o)%o],n[r]],[n[r],n[a]],[n[a],n[(a+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&&nl(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||n,r=$i(o),a=u.length?zl(Fl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Cr(o,this._gridPitch,this._cellCm);s.push({x:r[0],y:r[1],text:Dr(a,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),r=this._spaceWalls,a=r.length&&this._rszSel&&nl([{id:this._rszSel,poly:t}],this._rszSel,r,[],this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||t,l=$i(a),c=this._physicalBodiesR(),h=c.length?zl(Fl(a,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Cr(a,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:Dr(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=[],r=this._rszRooms();for(const t of r)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(O_.ZOOM_MAX,Math.max(O_.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},__)}_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(O_.ZOOM_MAX,Math.max(O_.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($_,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._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},z_(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 O_._noHoverMq||O_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(O_._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,D_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*D_,t[1]*e,t[2]*D_,t[3]*e])}_savedNav(){try{return JSON.parse(localStorage.getItem(S_)||"null")}catch{return null}}_saveNav(){try{localStorage.setItem(S_,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?Lp([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=g_(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=$d(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>A_)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>=A_:(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=yd({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=yd({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(!(ud(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=>ud(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(bd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!wd(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=kd(o,e,i.gridStep);!bd(l,n,s)&&wd(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){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._space=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>A_)||(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]/D_,t[1]/D_]),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]/D_,t[1]/D_]),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:xd,s=Ud(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Td(t.a,i),s=Td(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=[Td(t.a,i),Td(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(Pd(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=Cd(g);if(!(m>i*i))continue;const f=Rd(Ad(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]/D_,e[1]/D_]}),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(),z_(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*D_-Math.min(...n),Math.min(Yl*D_-Math.max(...n),i[0])),Math.max(-Yl*D_-Math.min(...o),Math.min(Yl*D_-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]/D_,n.a[1]/D_],t.b=[n.b[0]/D_,n.b[1]/D_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=od(t,[n],D_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,dd(t,i,D_))}}}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])/D_,(n.center[1]+e.delta[1])/D_])}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(),z_(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]/D_,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]/D_,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]*D_,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(),z_(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,D_)||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,D_)||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)} @pointercancel=${t=>this._rszPointerCancel(t)} - @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}const a=this._rszSel?r.find(t=>t.id===this._rszSel):null;if(a){const t=a.poly.map(t=>t[0]),i=a.poly.map(t=>t[1]),s=Math.min(...t),n=Math.max(...t),r=Math.min(...i),l=Math.max(...i);o.push(W``);for(const[t,i,c,h]of[[s,r,n,l],[n,r,s,l],[n,l,s,r],[s,l,n,r]])o.push(W`this._rszCornerDown(e,a.id,[t,i],[c,h])} + @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}const r=this._rszSel?a.find(t=>t.id===this._rszSel):null;if(r){const t=r.poly.map(t=>t[0]),i=r.poly.map(t=>t[1]),s=Math.min(...t),n=Math.max(...t),a=Math.min(...i),l=Math.max(...i);o.push(W``);for(const[t,i,c,h]of[[s,a,n,l],[n,a,s,l],[n,l,s,a],[s,l,n,a]])o.push(W`this._rszCornerDown(e,r.id,[t,i],[c,h])} @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*$_,ry:t.y*e,rlen:t.length*$_};if(!t.host)return[s];const n=nd(t,i.partitions,$_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,r]=n.resolved.center;const a=this._physicalDrag;return a?.moved&&"partition"===a.kind&&a.id===t.host.id&&(o+=a.delta[0],r+=a.delta[1]),[{...t,rx:o,ry:r,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=nd(n,t.partitions,$_,this._cellCm,this._gridPitch);i.resolved&&s.push(ad(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=Qa(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_);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&&cd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?ld(t.partitionHost,i):yl(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 $_}_decorResolvedStyle(t){return function(t,e,i,s=ea){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,r=Rt(o?.color,s.color);return{color:r,opacity:ia(o?.opacity,s.opacity),widthCm:aa(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?r:s.fillColor),fillOpacity:n&&o?.fill?ia(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ea)}_decorWidthUnits(t){return((t,e,i,s=ea.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return oa(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:oa(s,e,i)})(t,this._cellCm,this._gridPitch,ea.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:ra(es*is(t),this._cellCm,this._gridPitch)}return ra(es,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return es;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?oa(e,this._cellCm,this._gridPitch):es*is(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(l_,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(Kl*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*$_,y:t.y*this._decorH,w:t.w*$_,h:t.h*this._decorH,angle:sa(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*$_,e.y1*this._decorH],i=[e.x2*$_,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*$_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(ha(t))}for(const t of e.rooms){const e=hi(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,r=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),r=Math.hypot(e[0]-t[0],e[1]-t[1]);r<=i&&(!o||rthis._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},A_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:ic(e[0]/$_),y:ic(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:ra(es,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=-sa(e.angle)*Math.PI/180,r=i[0]-s,a=i[1]-n,l=[s+r*Math.cos(o)-a*Math.sin(o),n+r*Math.sin(o)+a*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=$_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),r="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),a=ic;let l;if("line"===t.kind)l={id:r,kind:"line",x1:a(t.a[0]/i),y1:a(t.a[1]/s),x2:a(t.b[0]/i),y2:a(t.b[1]/s),...la(n,!1)};else{const e=a(Math.min(t.a[0],t.b[0])/i),o=a(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:r,kind:t.kind,x:e,y:o,w:c,h:h,...la(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=r,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()},A_(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)*$_,o=("line"===s.kind?s.y1:s.y)*this._decorH,r=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let a=(r[0]-n)/$_,l=(r[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,_=Kl;a=Math.max(-_-h,Math.min(_-h-u,a)),l=Math.max(-_-d,Math.min(_-d-p,l)),(a||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+a,y1:i.y1+l,x2:i.x2+a,y2:i.y2+l}:{...t,x:i.x+a,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(sa(i?Os([i.x1*$_,i.y1*this._decorH],[i.x2*$_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:ra(Math.hypot((i.x2-i.x1)*$_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:ra(s.w,this._cellCm,this._gridPitch),sizeHCm:ra(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=>!!Yi(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Xi(t.entity,n),r=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!r){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:ia(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:r||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=Xi(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 r=s.slice(0,n)+i+s.slice(o),a=n+i.length;this._decorTextSelection={start:a,end:a},this._decorTextDialog={...e,text:r,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(a,a))})}_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:ia(t.opacity),size_cm:Number(Math.max(.1,Math.min(l_,t.sizeCm)).toFixed(4)),...sa(t.angle)?{angle:sa(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,...r}=i;return{...r,text:e,...n}}const{entity:s,attr:o,unit:r,...a}=i,{angle:l,size:c,scale:h,...d}=a;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:ia(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:ia(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=la(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*$_,s=(e.y1+e.y2)/2*this._decorH,o=oa(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),r=sa(t.angle)*Math.PI/180,a=Math.cos(r)*o/2,l=Math.sin(r)*o/2,c=this._snap([i-a,s-l]),h=this._snap([i+a,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:ic(c[0]/$_),y1:ic(c[1]/this._decorH),x2:ic(h[0]/$_),y2:ic(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*$_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(oa(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),r=Math.max(this._gridPitch,ai(oa(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),a=e.x*$_+i/2,l=e.y*this._decorH+s/2,c=sa(t.angle),h=na({x:a-o/2,y:l-r/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:ic(h[0]/$_),y:ic(h[1]/this._decorH),w:o/$_,h:r/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.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*$_,(t.y+t.h/2)*this._decorH]:[t.x*$_,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(l_,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,r]=this._dtPivot(n),a=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:r,r0:Math.hypot(a[0]-o,a[1]-r),a0:180*Math.atan2(a[1]-r,a[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},A_(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=ic(s[0]/$_),o=ic(s[1]/this._decorH),r=e.origShape,a=0===e.lineEnd?r.x1:r.x2,l=0===e.lineEnd?r.y1:r.y2;return(Math.abs(n-a)>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=da(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(l_,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*$_,s=t.y1*this._decorH,n=t.x2*$_,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*$_,y:t.y*this._decorH,w:t.w*$_,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=kc(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=$_,o=this._decorH,r=Cc($c(i.w,this._cellCm,this._gridPitch,n)),a=Cc($c(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:Rc(h,d,a*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:ic(h/n-r/2),y:ic(d/o-a/2),w:r,h:a,...la(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=$_,o=this._decorH,r=this._svgPoint(t),a=(i.x+i.w/2)*n+(r[0]-e.start[0]),l=(i.y+i.h/2)*o+(r[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Rc(a,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([a-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=ic(c),h=ic(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=$_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=na(e,i.angle,t=>this._snap(t));return{...i,x:ic(o[0]/s),y:ic(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Kl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Kl,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=$_,s=this._decorH,n=e.w*i,o=e.h*s,r=function(t,e,i,s,n){const o=t+i/2,r=e+s/2,a=(Number(n)||0)*Math.PI/180,l=Math.cos(a),c=Math.sin(a),h=(t,e)=>{const i=t-o,s=e-r;return[o+i*l-s*c,r+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),a=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=a(r[0],r[1]),c=a(r[0],r[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*D_,ry:t.y*e,rlen:t.length*D_};if(!t.host)return[s];const n=od(t,i.partitions,D_,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=od(n,t.partitions,D_,this._cellCm,this._gridPitch);i.resolved&&s.push(ld(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,D_);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&&hd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?cd(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 D_}_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(u_,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*D_,y:t.y*this._decorH,w:t.w*D_,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*D_,e.y1*this._decorH],i=[e.x2*D_,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*D_,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},z_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/D_),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=D_,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()},z_(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)*D_,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)/D_,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*D_,i.y1*this._decorH],[i.x2*D_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*D_,(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(u_,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*D_,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]/D_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/D_),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*D_,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*D_+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]/D_),y:sc(h[1]/this._decorH),w:o/D_,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*D_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*D_,(t.y+t.h/2)*this._decorH]:[t.x*D_,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(u_,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},z_(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]/D_),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(u_,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*D_,s=t.y1*this._decorH,n=t.x2*D_,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*D_,y:t.y*this._decorH,w:t.w*D_,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=D_,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=D_,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=D_,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=D_,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")} @@ -4578,16 +4700,16 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
- ${yc.map(e=>j` + ${bc.map(e=>j`
${this._t(`furn.group_${e}`)}
- ${xc(e).map(e=>j``)}
`)} @@ -4603,22 +4725,22 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @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?{...ql(t.plan_aspect,$_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Ul(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),r=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:r,sy:Number.isFinite(o)&&o>0?o:r,angle:sa(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:ra(e.w,this._cellCm,this._gridPitch),heightCm:ra(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=sa(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Wl,Math.max(e.w*jl,ai(oa(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),r=Math.min(e.h*Wl,Math.max(e.h*jl,ai(oa(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),a=na({x:i.x+i.w/2-o/2,y:i.y+i.h/2-r/2},s,t=>this._snap(t));this._bdApply((a[0]-e.x)/$_,(a[1]-e.y)/$_,o/e.w,r/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(ic(t).toFixed(6)),o.plan_y=Number(ic(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Wl,Math.max(jl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Wl,Math.max(jl,s)).toFixed(6));const r=sa(n);r?o.plan_angle=Number(r.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),r=e?e[0]:0,a=e?e[1]:0,l=r>0?n.x:n.x+n.w,c=a>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:r,sgy:a,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},A_(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)]),r=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply((o[0]-s.x)/$_,(o[1]-s.y)/$_,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 r=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(r=5*Math.round(r/5)),r=sa(r);const a=Math.abs(r-e.p0.angle)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,r)}const n=da(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*jl),o=n.w/Math.max(1e-9,s.w),r=n.h/Math.max(1e-9,s.h),a=Math.abs(o-e.p0.sx)>1e-9||Math.abs(r-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!a&&!e.moved)return;e.moved||=a;const l=na(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/$_,(l[1]-s.y)/$_,o,r,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,r=sa(e.angle),a=2.2*i;return W` +
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,D_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,D_):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)/D_,(r[1]-e.y)/D_,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},z_(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)/D_,(o[1]-s.y)/D_,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)/D_,(l[1]-s.y)/D_,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` - - + {t.stopPropagation(),t.preventDefault(),this._bdStart(t,void 0,!0)}}> - - ${[[-1,-1,"nwse"],[1,-1,"nesw"],[1,1,"nwse"],[-1,1,"nesw"]].map(([t,n,o])=>{const r=t<0?e.x:e.x+e.w,a=n<0?e.y:e.y+e.h;return W` + ${[[-1,-1,"nwse"],[1,-1,"nesw"],[1,1,"nwse"],[-1,1,"nesw"]].map(([t,n,o])=>{const a=t<0?e.x:e.x+e.w,r=n<0?e.y:e.y+e.h;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*$_,e.y1*this._decorH],i=[e.x2*$_,e.y2*this._decorH];return W` + cx="${a}" cy="${r}" r="${i.toFixed(1)}" + @pointerdown=${e=>{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*D_,e.y1*this._decorH],i=[e.x2*D_,e.y2*this._decorH];return W` ${[t,i].map((t,e)=>W`this._dtStart(t,"scale",void 0,e)}> `)} - `}const[o,r]=this._dtPivot(e),a=Number(e.angle)||0,l=2.2*s;return W` + `}const[o,a]=this._dtPivot(e),r=Number(e.angle)||0,l=2.2*s;return W` this._dtStart(i,"scale",[t,e])}>`)} - `}_renderDecorLayer(){const 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":""),r=this._decorResolvedStyle(n),a=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W``}_renderDecorLayer(){const t=D_,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` ${i&&"select"===this._decorTool?W``:G}`;if("rect"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=sa(n.angle);return W``:G}`;if("rect"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=nr(n.angle);return W` ${s?W``:G}`}if("ellipse"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=sa(n.angle);return W``:G}`}if("ellipse"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=nr(n.angle);return W` ${s?W``:G}`}if("furniture"===n.kind){const i=n.w*t,h=n.h*e,d=Tc(n.symbol,i,h);if(!d)return G;const u=Number(n.angle)||0,p=n.x*t+i/2,_=n.y*e+h/2,g=`${u?`rotate(${u} ${p} ${_}) `:""}translate(${n.x*t} ${n.y*e})`;return W``:G}`}if("furniture"===n.kind){const i=n.w*t,h=n.h*e,d=Pc(n.symbol,i,h);if(!d)return G;const u=Number(n.angle)||0,p=n.x*t+i/2,_=n.y*e+h/2,g=`${u?`rotate(${u} ${p} ${_}) `:""}translate(${n.x*t} ${n.y*e})`;return W` ${s?W``:G}`}if("text"===n.kind){const i=this._decorTextUnits(n),s=this._renderDeviceSnapshot?.facts.get(`decor:${this._space}:${n.id}`),a=function(t){return String(t??"").replace(/\r\n?/g,"\n").split("\n")}("string"==typeof s?s:ts(n.text,n,this._renderPlanHass,t=>this._renderEntityAvailable(t))),h=n.x*t,d=n.y*e,u=Number(n.angle)||0,p=d-(a.length-1)*i*1.2/2;return W``:G}`}if("text"===n.kind){const i=this._decorTextUnits(n),s=this._renderDeviceSnapshot?.facts.get(`decor:${this._space}:${n.id}`),r=function(t){return String(t??"").replace(/\r\n?/g,"\n").split("\n")}("string"==typeof s?s:Qi(n.text,n,this._renderPlanHass,t=>this._renderEntityAvailable(t))),h=n.x*t,d=n.y*e,u=Number(n.angle)||0,p=d-(r.length-1)*i*1.2/2;return W`${a.map((t,e)=>W`${t}`)}`}return G});let o=G;const r=this._decorDraft;if(r){const t=this._decorStyle,e=oa(t.widthCm,this._cellCm,this._gridPitch);if("line"===r.kind)o=W``;else{const i=Math.min(r.a[0],r.b[0]),s=Math.min(r.a[1],r.b[1]),n=Math.abs(r.b[0]-r.a[0]),a=Math.abs(r.b[1]-r.a[1]);o="rect"===r.kind?W``:W`${r.map((t,e)=>W`${t}`)}`}return G});let o=G;const a=this._decorDraft;if(a){const t=this._decorStyle,e=ar(t.widthCm,this._cellCm,this._gridPitch);if("line"===a.kind)o=W``;else{const i=Math.min(a.a[0],a.b[0]),s=Math.min(a.a[1],a.b[1]),n=Math.abs(a.b[0]-a.a[0]),r=Math.abs(a.b[1]-a.a[1]);o="rect"===a.kind?W``:W``}}return W`${n}${o}`}get _editorToolbarGroups(){return"plan"!==this._mode?[]:[{id:"opening",label:this._t("markup.opening"),icon:"mdi:door",activeItemId:"opening"===this._tool?this._openingPreset?.type:void 0,items:[{id:"window",label:this._t("opening.window"),icon:"mdi:window-closed-variant",role:"tool",invoke:()=>this._activateOpeningPlacement("window")},{id:"door",label:this._t("opening.door"),icon:"mdi:door-open",role:"tool",invoke:()=>this._activateOpeningPlacement("door")},{id:"passage",label:this._t("opening.passage"),icon:"mdi:arch",role:"tool",invoke:()=>this._activateOpeningPlacement("passage")},{id:"gate",label:this._t("opening.gate"),icon:"mdi:gate",role:"tool",invoke:()=>this._activateOpeningPlacement("gate")}]}]}_renderEditorGroupLauncher(t){return this._editorSecondary.renderGroupLauncher(t,this._editorToolbarGroups,this._editorSecondaryCopy)}get _editorSecondaryContextId(){const t=`editor:${this._mode}:${this._space}:${this._cfgEpoch}`,e=this._editorSecondary.activeGroup(this._editorToolbarGroups);if(e)return`${t}:group:${e.id}:${this._editorSecondary.groupGeneration}`;if("plan"===this._mode){const e=this._physicalSel;return e?`${t}:selection:${e.kind}:${e.id}:${e.segment??""}`:`${t}:tool:${this._tool}:${this._path.length}:${this._openWallAnchor?1:0}`}return"decor"===this._mode?"furniture"===this._decorTool?`${t}:palette:furniture:${this._furnPalette?.symbol||"none"}`:"select"===this._decorTool&&this._decorSel?`${t}:selection:decor:${this._decorSel}`:`${t}:tool:${this._decorTool}:${this._bdMoved?1:0}:${this._bdDrag?1:0}`:`${t}:none`}_runEditorContext(t,e){this._editorSecondary.runContext(t,this._editorSecondaryContextId,e)}_renderEditorGroupModel(t){return this._editorSecondary.renderGroupModel(t,this._editorSecondaryContextId,this._editorSecondaryCopy)}_renderDrawWallControl(){return j``}_renderPlanSecondary(){const t=this._editorSecondaryContextId,e=this._physicalSel;if(e){if(!("partition"===e.kind?!!this._curSpaceCfg.partitions?.some(t=>t.id===e.id):"column"===e.kind?!!this._curSpaceCfg.wall_columns?.some(t=>t.id===e.id):!!this._curSpaceCfg.room_drafts?.some(t=>t.id===e.id)))return null;const i="partition"===e.kind?this._t("markup.partition"):"column"===e.kind?this._t("markup.column"):this._t("markup.add");return{contextId:t,kind:"selection",ariaLabel:this._t("editor.context_actions",{object:i}),visibleLabel:i,content:j`
@@ -4808,8 +4930,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `}_rangeInput(t,e,i,s,n,o=!1,r){const a=t=>{const e=Number(t.target.value);Number.isFinite(e)&&n(e)};return customElements.get("ha-slider")?j``:j``}_renderColorRow(t,e){const i=this._settingsDialog.colors[t];return j`
+ `}_setFillColor(t,e){const i=this._settingsDialog;this._settingsDialog={...i,colors:{...i.colors,[t]:{...i.colors[t],...e}}}}async _saveSettingsDialog(){const t=this._settingsDialog;if(t&&!t.busy){this._settingsDialog={...t,busy:!0};try{const e=this._serverCfg,i=JSON.stringify(t.colors)===JSON.stringify(hs),s={...e.settings};i?delete s.fill_colors:s.fill_colors=t.colors;const n=this._imperial?30.48*t.glowRadius:100*t.glowRadius;Number.isFinite(n)&&n>0&&300!==Math.round(n)?s.glow_radius_cm=Math.round(n):delete s.glow_radius_cm,t.bgColor?s.bg_color=t.bgColor:delete s.bg_color,null!==t.northDeg&&Number.isInteger(t.northDeg)&&t.northDeg>=0&&t.northDeg<=359?s.north_deg=t.northDeg:delete s.north_deg,s.bg_mode=t.bgMode,t.sunRays?s.sun_rays=!0:delete s.sun_rays,delete s.weather_entity,this._serverCfg={...e,settings:s},await this._saveConfigNow(),this._settingsDialog=null,this.requestUpdate(),this._showToast(this._t("gs.saved"))}catch(t){this._settingsDialog&&(this._settingsDialog={...this._settingsDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}_boolInput(t,e,i=!1){const s=t=>e(!!t.target.checked);return customElements.get("ha-switch")?j``:j``}_rangeInput(t,e,i,s,n,o=!1,a){const r=t=>{const e=Number(t.target.value);Number.isFinite(e)&&n(e)};return customElements.get("ha-slider")?j``:j``}_renderColorRow(t,e){const i=this._settingsDialog.colors[t];return j`
{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)),r=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),r=Math.cos(i);return o([t.rx+s*n,t.ry+r*n])&&o([t.rx-s*n,t.ry-r*n])}),a=this._roomWallOpeningInputs(r,t);for(const t of a){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(r.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:Rl(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?dl(t.rooms,p,i,a,this._wallKeyPitch,this._cellCm,this._gridPitch,$_,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(...Vd(t));else for(const t of h)f.push(...Vd(t));for(const{poly:t}of e)for(const e of s.length?Ts(t,s,m):Vd(t))f.push(e);const y={occluders:Gd(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:hi(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:r,floor:a,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=lo(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=co(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=$s(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(Hl([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:Ss(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=u_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Xd([f.x,f.y],m,r,96);b={lit:t.length>=3?El([t],a):[]},p_(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&&nl(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||i,o=this._cleanFloor(e,s,t).path,r=Ti(s,n.filter(t=>t.r!==e).map(t=>t.poly)),a=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||a(s),...r.map(a)].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,D_,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(...Kd(t));else for(const t of h)f.push(...Kd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Kd(t))f.push(e);const y={occluders:Vd(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})=>Es(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=m_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Jd([f.x,f.y],m,a,96);b={lit:t.length>=3?Fl([t],r):[]},f_(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,D_)||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` ${""} - ${S_.map(([e,i])=>W` + ${T_.map(([e,i])=>W` `)} @@ -5230,7 +5352,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("gs.glow_radius")} {const e=d_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> + @input=${t=>{const e=g_(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")} @@ -5253,7 +5375,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._settingsDialog.bgColor?j``:j`${this._t("gs.bg_theme")}`} `:j`
${this._t("gs.bg_daynight_hint")}
`} - ${Jr(this.hass)?G:j`
${this._t("gs.sun_missing")}
`} + ${Za(this.hass)?G:j`
${this._t("gs.sun_missing")}
`}
${this._renderCompass()}
@@ -5305,14 +5427,14 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
`:G} -
${this._t("gs.about_version",{v:o_})}
+
${this._t("gs.about_version",{v:c_})}
${this._t("gs.about_github")} ${this._t("gs.about_telegram")}
- @@ -5362,7 +5484,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${t.busy?"…":this._t("btn.save")}
- `}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(k_,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(M_,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])}% @@ -5400,7 +5522,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._spaceDialog?this._renderSpaceDialog():G} ${this._importDialog?this._renderImportDialog():G} ${this._toast?j``:G} - `;const i=this._spaceModel();if(!i)return G;const s=i.vb,n=this._effectiveProjection();this._renderProjection=n,this._labs.active.length&&function(t){Mp||Ap(t);const e=Sp,i=e.active.join(",");if(!i||i===Dp)return;Dp=i;const s=new Map(mp.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}`)}(o_);const o="iso"===n,r="devices"===this._mode&&this._showAll,a=this._renderDevices.filter(t=>t.space===i.id&&(!t.hidden||r)),l=this._renderDeviceSnapshot,c=this._spaceDisplayForRender(),h=o?this._isoDecorationLayers(c):null,d=h?this._isoOpeningPanels(h):[],u=this._resolvedRoomFills(i,c),p=this._resolvedGlowBase(i,c,u),_=c.showLqi??this._config.show_signal??!0,g=this._config.icon_size??2.5,m=g>8?2.5:g,f=this._viewOr(this._baseVb()),v=this._floorView(f),y=this._editing?"":this._stageBg(c),b=this._opMeasureView,w=this._decorMeasure,k=this._bdLive,x=this._furnLive,$="view"===this._mode?this._editorChromeMode:this._mode,S=this._roomHoverPaths(i),M=i.bg?this._display(i.bg.href):"",C=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,D=this._modeTransitionVisual,T=this._dayCycleState(),P=D?.viewWeight??("view"===this._mode?1:0),R=this._modeTransition.state?.from.presentedMode,A=!this._markup||!!D&&("view"===D.presentedMode||"devices"===D.presentedMode||"view"===R||"devices"===R),I=D?.stageColor||y,E=D?.sceneBrightness??1;return j` + `;const i=this._spaceModel();if(!i)return G;const s=i.vb,n=this._effectiveProjection();this._renderProjection=n,this._labs.active.length&&function(t){Pp||zp(t);const e=Tp,i=e.active.join(",");if(!i||i===Ap)return;Ap=i;const s=new Map(bp.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}`)}(c_);const o="iso"===n,a="devices"===this._mode&&this._showAll,r=this._renderDevices.filter(t=>t.space===i.id&&(!t.hidden||a)),l=this._renderDeviceSnapshot,c=this._spaceDisplayForRender(),h=o?this._isoDecorationLayers(c):null,d=h?this._isoOpeningPanels(h):[],u=this._resolvedRoomFills(i,c),p=this._resolvedGlowBase(i,c,u),_=c.showLqi??this._config.show_signal??!0,g=this._config.icon_size??2.5,m=g>8?2.5:g,f=this._viewOr(this._baseVb()),v=this._floorView(f),y=this._editing?"":this._stageBg(c),b=this._opMeasureView,w=this._decorMeasure,k=this._bdLive,x=this._furnLive,$="view"===this._mode?this._editorChromeMode:this._mode,S=this._roomHoverPaths(i),M=i.bg?this._display(i.bg.href):"",C=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,D=this._modeTransitionVisual,T=this._dayCycleState(),P=D?.viewWeight??("view"===this._mode?1:0),R=this._modeTransition.state?.from.presentedMode,A=!this._markup||!!D&&("view"===D.presentedMode||"devices"===D.presentedMode||"view"===R||"devices"===R),I=D?.stageColor||y,E=D?.sceneBrightness??1;return j` `:G} `)}
`:G} - ${this._t("count.devices",{n:a.filter(t=>!t.hidden).length})} + ${this._t("count.devices",{n:r.filter(t=>!t.hidden).length})} ${this._labsIso&&"view"===this._mode&&!this._kiosk?j``,y=n.candidates.some(t=>_.has(t.entityId)&&"known_xcme_incomplete"===t.category)||!!n.pinned&&!!o?.startsWith("camera.")&&!r?.hasPosition;return j` + `,y=n.candidates.some(t=>_.has(t.entityId)&&"known_xcme_incomplete"===t.category)||!!n.pinned&&!!o?.startsWith("camera.")&&!a?.hasPosition;return j`
${this._t("vac.diag_source")}${o||this._t("vac.source_none")}
- ${r?.platform?j`
${this._t("vac.diag_platform")}${r.platform}
`:G} + ${a?.platform?j`
${this._t("vac.diag_platform")}${a.platform}
`:G}
${this._t("vac.diag_status")}${this._t(`vac.source_status_${n.status}`)}
-
${this._t("vac.diag_position")}${a?.pos?this._t("common.yes"):this._t("common.no")}
-
${this._t("vac.diag_rooms")}${ss(this._t("vac.diag_rooms_value"),{total:String(a?.rooms.length||0),matched:String(h),readiness:this._t(h>=3?"vac.autocal_ready":"vac.autocal_not_ready")})}
-
${this._t("vac.diag_path")}${a?.path.length?this._t("common.yes"):this._t("common.no")}
-
${this._t("vac.diag_map")}${a?.mapId??"default"}
+
${this._t("vac.diag_position")}${r?.pos?this._t("common.yes"):this._t("common.no")}
+
${this._t("vac.diag_rooms")}${is(this._t("vac.diag_rooms_value"),{total:String(r?.rooms.length||0),matched:String(h),readiness:this._t(h>=3?"vac.autocal_ready":"vac.autocal_not_ready")})}
+
${this._t("vac.diag_path")}${r?.path.length?this._t("common.yes"):this._t("common.no")}
+
${this._t("vac.diag_map")}${r?.mapId??"default"}
${"missing"===n.status||"disabled"===n.status||"unverified"===n.status?j`
${this._t(`vac.source_banner_${n.status}`)} @@ -5739,7 +5861,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("vac.documentation")}
- ${a?j` + ${r?j`
`}_vacMapId(t,e,i=this._planHass){const s=this._vacEntity(t),n=s?i?.states?.[s]?.attributes?.selected_map:null;return o=e.mapId,r=n,"default"!==o?o:null!=r?String(r):"default";var o,r}_vacSaveMatrix(t,e,i,s){const n=this._devices.find(e=>e.id===t),o=n?this._vacEnsureMarker(n):this._serverCfg?.markers?.find(e=>e.id===t);if(!o)return!1;const r={...o.vacuum||{}};return r.source=e,r.calibration={...r.calibration||{},[i]:s.map(t=>Number(t.toFixed(6)))},o.vacuum=r,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:hi(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const i=ph(e);return i?{name:String(t.name),cx:i[0],cy:i[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this._vacSource(t),i=e?vh(this.hass?.states[e]?.attributes):null;if(!e||!i||i.rooms.length<3)return void this._showToast(this._t("vac.autocal_no_rooms"));const s=this._vacPlanRoomAnchors(t.space),n=wh(i.rooms,s);if(!n)return void this._showToast(this._t("vac.autocal_no_match"));const o=this._serverCfg?.spaces?.find(e=>e.id===t.space),r=Number(o?.cell_cm),a=Number.isFinite(r)&&r>0?r:5,l=function(t,e,i){return![t,e,i].every(Number.isFinite)||t<0||e<=0||i<=0?Number.POSITIVE_INFINITY:t/e*i}(n.residual,this._gridPitch,a),c=this._vacMapId(t,i);l>40?this._vacCalConfirm={markerId:t.id,source:e,mapId:c,matrix:n.matrix,rooms:n.matched.length,error:li(l,"mi"===this.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,c,n.matrix)&&this._showToast(ss(this._t("vac.autocal_done"),{rooms:String(n.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this._vacCalConfirm;if(e){if(this._vacCalConfirm=null,t){const t=this._devices.find(t=>t.id===e.markerId),i=Mh(e.matrix);if(!t||!i)return;return this._markerDialog=null,t.space!==this._space&&(this._space=t.space),void(this._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:i,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this._showToast(ss(this._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this._vacSource(t),i=e?vh(this.hass?.states[e]?.attributes):null;if(!e||!i)return void this._showToast(this._t("vac.cal_need_pos"));const s=this._vacMapId(t,i),n=t.marker?.vacuum?.calibration?.[s],o=this._spaceModelById(t.space);if(!o)return;const r=o.vb,a=n&&6===n.length&&Mh(n)||function(t,e){const i=[],s=[];for(const e of t)null!=e.x0?(i.push(e.x0,e.x1),s.push(e.y0,e.y1)):(i.push(e.cx),s.push(e.cy));if(!i.length)return{ox:e[0]+e[2]/2,oy:e[1]+e[3]/2,s:e[2]/1e4,rot:0,mir:!0};const n=Math.min(...i),o=Math.max(...i),r=Math.min(...s),a=Math.max(...s),l=Math.max(o-n,a-r)||1,c={ox:0,oy:0,s:.6*Math.min(e[2],e[3])/l,rot:0,mir:!0},h=Sh(c),[d,u]=ch(h,(n+o)/2,(r+a)/2);return c.ox=e[0]+e[2]/2-d,c.oy=e[1]+e[3]/2-u,c}(i.rooms,r);this._markerDialog=null,t.space!==this._space&&(this._space=t.space),this._vacFit={markerId:t.id,source:e,mapId:s,p:a,drag:null}}_vacFitSave(){const t=this._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Sh(t.p));this._vacFit=null,e&&this._showToast(this._t("vac.cal_done"))}_vacFitTurn(t){const e=this._vacFit;if(!e)return;const i=vh(this.hass?.states[e.source]?.attributes),s=this._vacGhostCentre(i?.rooms||[]),n={...e.p,...t};this._vacFit={...e,p:Ch(n,e.p,s[0],s[1])}}_vacGhostCentre(t){const e=[],i=[];for(const s of t)e.push(s.x0??s.cx,s.x1??s.cx),i.push(s.y0??s.cy,s.y1??s.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...i)+Math.max(...i))/2]:[0,0]}_vacDelta(t,e,i){const s=this._stageEl,n=s?.clientWidth||1,o=s?.clientHeight||1;return[e/n*t.w,i/o*t.h]}_vacFitPointer(t,e){const i=this._vacFit;if(!i)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,s=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this._vacFit={...i,drag:s?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:Number(s.split(",")[0]),fy:Number(s.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:0,fy:0}})}const s=i.drag;if(s){if("pointermove"===t.type){const[n,o]=this._vacDelta(e,t.clientX-s.sx,t.clientY-s.sy);if("move"===s.kind)this._vacFit={...i,p:{...s.p0,ox:s.p0.ox+n,oy:s.p0.oy+o}};else{const t=vh(this.hass?.states[i.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),r=Sh(s.p0),[a,l]=ch(r,e[0],e[1]),[c,h]=ch(r,s.fx,s.fy),d=Math.hypot(a-c,l-h)||1,[u,p]=[2*a-c,2*l-h],_=Math.hypot(u+2*n-c,p+2*o-h)/2,g=Math.max(.05,_/d),m={...s.p0,s:s.p0.s*g};this._vacFit={...i,p:Ch(m,s.p0,s.fx,s.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this._vacFit={...i,drag:null})}}_renderVacFit(t){const e=this._vacFit;if(!e)return G;const i=vh(this._renderPlanHass?.states?.[e.source]?.attributes);if(!i)return G;const s=Sh(e.p),n=[],o=[],r=[];for(const t of i.rooms){if(null==t.x0)continue;const e=[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]].map(([t,e])=>ch(s,t,e));e.forEach(([t,e])=>{o.push(t),r.push(e)});const[i,a]=ch(s,t.cx,t.cy);n.push(W` - ${t.name}`)}let a=G;if(i.pos){const[e,n]=ch(s,i.pos.x,i.pos.y);a=W``}const l=[];if(o.length){const e=(()=>{const t=s[0]*s[4]-s[1]*s[3];return(e,i)=>[(s[4]*(e-s[2])-s[1]*(i-s[5]))/t,(-s[3]*(e-s[2])+s[0]*(i-s[5]))/t]})(),i=Math.min(...o),n=Math.max(...o),a=Math.min(...r),c=Math.max(...r),h=.022*t.w,d=h/4;for(const[t,s,o,r]of[[i,a,n,c],[n,a,i,c],[n,c,i,a],[i,c,n,a]]){const i=e(o,r);l.push(W``}_vacMapId(t,e,i=this._planHass){const s=this._vacEntity(t),n=s?i?.states?.[s]?.attributes?.selected_map:null;return o=e.mapId,a=n,"default"!==o?o:null!=a?String(a):"default";var o,a}_vacSaveMatrix(t,e,i,s){const n=this._devices.find(e=>e.id===t),o=n?this._vacEnsureMarker(n):this._serverCfg?.markers?.find(e=>e.id===t);if(!o)return!1;const a={...o.vacuum||{}};return a.source=e,a.calibration={...a.calibration||{},[i]:s.map(t=>Number(t.toFixed(6)))},o.vacuum=a,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:ci(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const i=_h(e);return i?{name:String(t.name),cx:i[0],cy:i[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this._vacSource(t),i=e?yh(this.hass?.states[e]?.attributes):null;if(!e||!i||i.rooms.length<3)return void this._showToast(this._t("vac.autocal_no_rooms"));const s=this._vacPlanRoomAnchors(t.space),n=kh(i.rooms,s);if(!n)return void this._showToast(this._t("vac.autocal_no_match"));const o=this._serverCfg?.spaces?.find(e=>e.id===t.space),a=Number(o?.cell_cm),r=Number.isFinite(a)&&a>0?a:5,l=function(t,e,i){return![t,e,i].every(Number.isFinite)||t<0||e<=0||i<=0?Number.POSITIVE_INFINITY:t/e*i}(n.residual,this._gridPitch,r),c=this._vacMapId(t,i);l>40?this._vacCalConfirm={markerId:t.id,source:e,mapId:c,matrix:n.matrix,rooms:n.matched.length,error:ri(l,"mi"===this.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,c,n.matrix)&&this._showToast(is(this._t("vac.autocal_done"),{rooms:String(n.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this._vacCalConfirm;if(e){if(this._vacCalConfirm=null,t){const t=this._devices.find(t=>t.id===e.markerId),i=Ch(e.matrix);if(!t||!i)return;return this._markerDialog=null,t.space!==this._space&&(this._space=t.space),void(this._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:i,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this._showToast(is(this._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this._vacSource(t),i=e?yh(this.hass?.states[e]?.attributes):null;if(!e||!i)return void this._showToast(this._t("vac.cal_need_pos"));const s=this._vacMapId(t,i),n=t.marker?.vacuum?.calibration?.[s],o=this._spaceModelById(t.space);if(!o)return;const a=o.vb,r=n&&6===n.length&&Ch(n)||function(t,e){const i=[],s=[];for(const e of t)null!=e.x0?(i.push(e.x0,e.x1),s.push(e.y0,e.y1)):(i.push(e.cx),s.push(e.cy));if(!i.length)return{ox:e[0]+e[2]/2,oy:e[1]+e[3]/2,s:e[2]/1e4,rot:0,mir:!0};const n=Math.min(...i),o=Math.max(...i),a=Math.min(...s),r=Math.max(...s),l=Math.max(o-n,r-a)||1,c={ox:0,oy:0,s:.6*Math.min(e[2],e[3])/l,rot:0,mir:!0},h=Mh(c),[d,u]=hh(h,(n+o)/2,(a+r)/2);return c.ox=e[0]+e[2]/2-d,c.oy=e[1]+e[3]/2-u,c}(i.rooms,a);this._markerDialog=null,t.space!==this._space&&(this._space=t.space),this._vacFit={markerId:t.id,source:e,mapId:s,p:r,drag:null}}_vacFitSave(){const t=this._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Mh(t.p));this._vacFit=null,e&&this._showToast(this._t("vac.cal_done"))}_vacFitTurn(t){const e=this._vacFit;if(!e)return;const i=yh(this.hass?.states[e.source]?.attributes),s=this._vacGhostCentre(i?.rooms||[]),n={...e.p,...t};this._vacFit={...e,p:Dh(n,e.p,s[0],s[1])}}_vacGhostCentre(t){const e=[],i=[];for(const s of t)e.push(s.x0??s.cx,s.x1??s.cx),i.push(s.y0??s.cy,s.y1??s.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...i)+Math.max(...i))/2]:[0,0]}_vacDelta(t,e,i){const s=this._stageEl,n=s?.clientWidth||1,o=s?.clientHeight||1;return[e/n*t.w,i/o*t.h]}_vacFitPointer(t,e){const i=this._vacFit;if(!i)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,s=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this._vacFit={...i,drag:s?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:Number(s.split(",")[0]),fy:Number(s.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:0,fy:0}})}const s=i.drag;if(s){if("pointermove"===t.type){const[n,o]=this._vacDelta(e,t.clientX-s.sx,t.clientY-s.sy);if("move"===s.kind)this._vacFit={...i,p:{...s.p0,ox:s.p0.ox+n,oy:s.p0.oy+o}};else{const t=yh(this.hass?.states[i.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),a=Mh(s.p0),[r,l]=hh(a,e[0],e[1]),[c,h]=hh(a,s.fx,s.fy),d=Math.hypot(r-c,l-h)||1,[u,p]=[2*r-c,2*l-h],_=Math.hypot(u+2*n-c,p+2*o-h)/2,g=Math.max(.05,_/d),m={...s.p0,s:s.p0.s*g};this._vacFit={...i,p:Dh(m,s.p0,s.fx,s.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this._vacFit={...i,drag:null})}}_renderVacFit(t){const e=this._vacFit;if(!e)return G;const i=yh(this._renderPlanHass?.states?.[e.source]?.attributes);if(!i)return G;const s=Mh(e.p),n=[],o=[],a=[];for(const t of i.rooms){if(null==t.x0)continue;const e=[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]].map(([t,e])=>hh(s,t,e));e.forEach(([t,e])=>{o.push(t),a.push(e)});const[i,r]=hh(s,t.cx,t.cy);n.push(W` + ${t.name}`)}let r=G;if(i.pos){const[e,n]=hh(s,i.pos.x,i.pos.y);r=W``}const l=[];if(o.length){const e=(()=>{const t=s[0]*s[4]-s[1]*s[3];return(e,i)=>[(s[4]*(e-s[2])-s[1]*(i-s[5]))/t,(-s[3]*(e-s[2])+s[0]*(i-s[5]))/t]})(),i=Math.min(...o),n=Math.max(...o),r=Math.min(...a),c=Math.max(...a),h=.022*t.w,d=h/4;for(const[t,s,o,a]of[[i,r,n,c],[n,r,i,c],[n,c,i,r],[i,c,n,r]]){const i=e(o,a);l.push(W` `)}}return j`this._vacFitPointer(e,t)} @pointermove=${e=>this._vacFitPointer(e,t)} @pointerup=${e=>this._vacFitPointer(e,t)} - @pointercancel=${e=>this._vacFitPointer(e,t)}>${n}${a}${l}`}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const t=this.renderRoot,e=this._stageEl,i=this._vacLastView,s=t?.querySelectorAll?.(".vacpuck")||[];if(!e||!i||!s.length)return void(this._vacRaf=0);const n=e.getBoundingClientRect();for(const e of s){const s=e.getAttribute("data-mid"),o=e.getBoundingClientRect(),r=i.x+(o.left+o.width/2-n.left)/n.width*i.w,a=i.y+(o.top+o.height/2-n.top)/n.height*i.h;for(const e of t.querySelectorAll(`line.tip[data-mid="${s}"]`))e.setAttribute("x2",r.toFixed(1)),e.setAttribute("y2",a.toFixed(1))}this._vacRafLoop()})}_renderVacuums(t,e){if(this._markup||"decor"===this._mode)return G;const i=this._space+"|"+e.x+"|"+e.y+"|"+e.w+"|"+e.h,s=this._vacJumpOnce||i!==this._vacViewKey;this._vacViewKey=i,this._vacJumpOnce=!1;const n=[],o=[];for(const i of t){if(i.hidden||!this._isVacDev(i))continue;if("static_icon"===Bi(i.marker?.display))continue;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${i.id}`),r=t?.source??this._vacSource(i,this._renderPlanHass);if(!r)continue;const a=t?.telemetry??vh(this._renderPlanHass?.states[r]?.attributes);if(!a)continue;const l=String(t?.mapId??this._vacMapId(i,a,this._renderPlanHass)),c=i.marker?.vacuum?.calibration?.[l];if(!c||6!==c.length)continue;const h=t?.runtime??this._vacRt.get(i.id),d=h?.moving??!1,u=Dh(i.marker?.vacuum),p="always"===u||"cleaning"===u&&d,_=t?.server??this._vacSrvTrails[i.id],g=_?.current?.map_id===l&&Array.isArray(_.current.points)?_.current:null,m=_?.previous?.map_id===l&&Array.isArray(_.previous.points)?_.previous:null;if("always"===u&&m&&m.points.length>1){const t=m.points.map(([t,e])=>{const[i,s]=ch(c,t,e),n=this._scenePoint([i,s]);return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ");o.push(W``)}if(p){const t=mh(a,g,h?.trail||[]),e=!d||"integration"!==t.source&&"server"!==t.source?t.path:fh(t.path);if(e.length){const t=e.map(t=>t.map(([t,e],i)=>{const[s,n]=ch(c,t,e),o=this._scenePoint([s,n]);return`${i?"L":"M"} ${o[0].toFixed(1)} ${o[1].toFixed(1)}`}).join(" ")).join(" ");o.push(W``);const s=e[e.length-1];if(d&&s?.length>=2){const t=s[s.length-1],[e,n]=ch(c,t[0],t[1]),r=this._scenePoint([e,n]),a=r[0].toFixed(1),l=r[1].toFixed(1);o.push(W``)}}}if(!d||!a.pos)continue;const[f,v]=ch(c,a.pos.x,a.pos.y),y=this._scenePoint([f,v]),b=(y[0]-e.x)/e.w*100,w=(y[1]-e.y)/e.h*100,k=h&&h.lastTs>0&&Date.now()-h.lastTs>6e4,x=i.marker?.icon||i.icon||"mdi:robot-vacuum";n.push(j`
this._vacFitPointer(e,t)}>${n}${r}${l}`}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const t=this.renderRoot,e=this._stageEl,i=this._vacLastView,s=t?.querySelectorAll?.(".vacpuck")||[];if(!e||!i||!s.length)return void(this._vacRaf=0);const n=e.getBoundingClientRect();for(const e of s){const s=e.getAttribute("data-mid"),o=e.getBoundingClientRect(),a=i.x+(o.left+o.width/2-n.left)/n.width*i.w,r=i.y+(o.top+o.height/2-n.top)/n.height*i.h;for(const e of t.querySelectorAll(`line.tip[data-mid="${s}"]`))e.setAttribute("x2",a.toFixed(1)),e.setAttribute("y2",r.toFixed(1))}this._vacRafLoop()})}_renderVacuums(t,e){if(this._markup||"decor"===this._mode)return G;const i=this._space+"|"+e.x+"|"+e.y+"|"+e.w+"|"+e.h,s=this._vacJumpOnce||i!==this._vacViewKey;this._vacViewKey=i,this._vacJumpOnce=!1;const n=[],o=[];for(const i of t){if(i.hidden||!this._isVacDev(i))continue;if("static_icon"===Li(i.marker?.display))continue;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${i.id}`),a=t?.source??this._vacSource(i,this._renderPlanHass);if(!a)continue;const r=t?.telemetry??yh(this._renderPlanHass?.states[a]?.attributes);if(!r)continue;const l=String(t?.mapId??this._vacMapId(i,r,this._renderPlanHass)),c=i.marker?.vacuum?.calibration?.[l];if(!c||6!==c.length)continue;const h=t?.runtime??this._vacRt.get(i.id),d=h?.moving??!1,u=Th(i.marker?.vacuum),p="always"===u||"cleaning"===u&&d,_=t?.server??this._vacSrvTrails[i.id],g=_?.current?.map_id===l&&Array.isArray(_.current.points)?_.current:null,m=_?.previous?.map_id===l&&Array.isArray(_.previous.points)?_.previous:null;if("always"===u&&m&&m.points.length>1){const t=m.points.map(([t,e])=>{const[i,s]=hh(c,t,e),n=this._scenePoint([i,s]);return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ");o.push(W``)}if(p){const t=fh(r,g,h?.trail||[]),e=!d||"integration"!==t.source&&"server"!==t.source?t.path:vh(t.path);if(e.length){const t=e.map(t=>t.map(([t,e],i)=>{const[s,n]=hh(c,t,e),o=this._scenePoint([s,n]);return`${i?"L":"M"} ${o[0].toFixed(1)} ${o[1].toFixed(1)}`}).join(" ")).join(" ");o.push(W``);const s=e[e.length-1];if(d&&s?.length>=2){const t=s[s.length-1],[e,n]=hh(c,t[0],t[1]),a=this._scenePoint([e,n]),r=a[0].toFixed(1),l=a[1].toFixed(1);o.push(W``)}}}if(!d||!r.pos)continue;const[f,v]=hh(c,r.pos.x,r.pos.y),y=this._scenePoint([f,v]),b=(y[0]-e.x)/e.w*100,w=(y[1]-e.y)/e.h*100,k=h&&h.lastTs>0&&Date.now()-h.lastTs>6e4,x=i.marker?.icon||i.icon||"mdi:robot-vacuum";n.push(j`
${o}`:G} - ${n}`:G}_renderDevice(t,e,i=!0){const s=this._pos(t),n=this._scenePoint([s.x,s.y]),o=(n[0]-e.x)/e.w*100,r=(n[1]-e.y)/e.h*100,a=this._devicePresentation(t,i),l=[`left:${o}%`,`top:${r}%`,...jo(a)],c=a.disabledReason,h=a.haDisabled?this._t(`marker.ha_disabled_${c}`):t.userHidden?this._t("marker.hidden_ghost"):t.name,d=[h,"none"!==a.pulse.kind?this._t(`marker.pulse_a11y_${a.pulse.reason}`):"",To(a.valueBadge)].filter(Boolean).join(", "),u=[t.model,a.valueBadge?.fullText||"",null!=a.lqiText?"LQI "+a.lqiText:""].filter(Boolean).join(" · ");return j`
this._clickDevice(e,t)} + @keydown=${e=>this._keyDevice(e,t)} @contextmenu=${e=>this._ctxDevice(e,t)} - @mousemove=${e=>this._showTip(e,t.name,a.haDisabled?h:u)} + @mousemove=${e=>this._showTip(e,t.name,r.haDisabled?h:_)} @mouseleave=${()=>this._tip=null} @pointerdown=${e=>this._pointerDown(e,t)} @pointermove=${e=>this._pointerMove(e,t)} @pointerup=${e=>this._pointerUp(e,t)} @pointercancel=${e=>this._pointerUp(e,t)} > - ${Wo(a,{newDevice:this._newIds.has(t.id),newDeviceTitle:this._t("device.new"),disabledTitle:a.haDisabled?h:""})} -
`}_roomArea(t){const e=hi(t);if(!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._spaceWalls,n=s.length&&t.id&&nl(i.rooms,t.id,s,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||e,o=this._cleanFloor(t,n),r=this._cellCm/this._gridPitch;return Dr(o.area*r*r/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(t){const e=t.settings?.temp_source;return e?$o(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?$o(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=yo(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 r=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,a=i.area_id||s?.area_id||null;if(!a)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(So.test(e))continue}let l=r.get(a);l||(l=new Map,r.set(a,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 r){const r=[],a=[];for(const[i,s]of n){const n=vo(t,s.name,s.model,s.ents,e),l="mdi:thermometer"===n||"mdi:air-filter"===n;if(l){const e=po(t,s.ents);null!=e&&r.push(e)}if(o.size>0&&(o.has(i)||s.ents.some(t=>o.has(t)))){const e=_o(t,s.ents);null!=e&&r.push(e)}if(l||"mdi:water-percent"===n){const e=mo(t,s.ents);null!=e&&a.push(e)}}(r.length||a.length)&&s.set(i,{temp:r.length?Math.round(r.reduce((t,e)=>t+e,0)/r.length*10)/10:null,hum:a.length?Math.round(a.reduce((t,e)=>t+e,0)/a.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,cs(this._curSpaceCfg).customFill):null,this._roomTempSrc=t.settings?.temp_source||"",this._roomHumSrc=t.settings?.hum_source||"",this._roomNameScale=zs(t.settings?.name_scale),this._roomLabelScale=zs(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=yo(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(bo(t,n,e))continue;const r=o.name||t.states[n]?.attributes?.friendly_name||n;i&&!(r+" "+n).toLowerCase().includes(i)||s.push({value:"entity:"+n,label:r,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*$_,y:i.y*$_};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},A_(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 r=o.vb,a=n.getBoundingClientRect(),l=this._viewOr(r),c=(t.clientX-this._drag.sx)/a.width*l.w,h=(t.clientY-this._drag.sy)/a.height*l.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0);const d=ec(this._drag.ox+c),u=ec(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,r=n.top+n.height/2,a=Math.max(8,Math.hypot(t.clientX-o,t.clientY-r));this._rlResize={id:"rl_"+(e.id||""),space:i,k0:this._labelScale(e),cx:o,cy:r,d0:a},A_(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/$_,y:o.y/$_,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=$i(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``}_renderRoomLabel(t,e,i,s){if(!t.name&&!this._markup)return G;const n=this._labelPos(t,e.id),o=this._scenePoint([n.x,n.y]),r=(o[0]-i.x)/i.w*100,a=(o[1]-i.y)/i.h*100,l=Math.min(1,s.opacity+.25),c=this._labelScale(t),h=[];if(t.area||t.settings?.temp_source||t.settings?.hum_source||s.labelLight){if(s.labelTemp){const e=this._roomTemp(t);null!=e&&h.push(j`${e}°`)}if(s.labelHum){const e=this._roomHum(t);null!=e&&h.push(j`${e}%`)}if(s.labelLqi&&t.area){const e=this._roomLqi(t.area);null!=e&&h.push(j`${e}`)}if(s.labelLight){const e=(d=lo(this._renderPlanHass,this._renderDevices,t,this._virtualLights)).length?{on:d.filter(t=>t.on).length,total:d.length}:null;if(e){const t=0===e.on?this._t("roomcard.light_off"):e.on===e.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:e.on,total:e.total});h.push(j`${t}`)}}}var d;const u=!!t.area,p=!this._markup;return j`
`}_renderRoomLabel(t,e,i,s){if(!t.name&&!this._markup)return G;const n=this._labelPos(t,e.id),o=this._scenePoint([n.x,n.y]),a=(o[0]-i.x)/i.w*100,r=(o[1]-i.y)/i.h*100,l=Math.min(1,s.opacity+.25),c=this._labelScale(t),h=[];if(t.area||t.settings?.temp_source||t.settings?.hum_source||s.labelLight){if(s.labelTemp){const e=this._roomTemp(t);null!=e&&h.push(j`${e}°`)}if(s.labelHum){const e=this._roomHum(t);null!=e&&h.push(j`${e}%`)}if(s.labelLqi&&t.area){const e=this._roomLqi(t.area);null!=e&&h.push(j`${e}`)}if(s.labelLight){const e=(d=ro(this._renderPlanHass,this._renderDevices,t,this._virtualLights)).length?{on:d.filter(t=>t.on).length,total:d.length}:null;if(e){const t=0===e.on?this._t("roomcard.light_off"):e.on===e.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:e.on,total:e.total});h.push(j`${t}`)}}}var d;const u=!!t.area,p=!this._markup;return j`
this._labelDown(i,t,e.id)} @pointermove=${i=>this._labelMove(i,t,e.id)} @pointerup=${()=>this._labelUp(t)} @@ -5813,13 +5940,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @pointermove=${t=>this._rlResizeMove(t)} @pointerup=${()=>this._rlResizeUp()} @pointercancel=${()=>this._rlResizeUp()}>`):G} -
`}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=Os(e,i),r=Math.round(10*o)/10,a=Ns(o);return j`
- ${this._fmtLen(e,i)} · ${r}°
`}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,r=(i+n)/2;if("line"===t.kind){const e=Os(t.a,t.b);return{x:o,y:r,on45:Ns(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const a=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]),a=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:r,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${a}`}}return{x:o,y:r,on45:!1,text:`${a} × ${l} · ${Dr(ra(Math.abs(s-e),this._cellCm,this._gridPitch)*ra(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=$_,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=hi(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,r,a]="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` +
`}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=D_,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``}_roomCenter(t){if(t.poly){const e=t.poly.length;return[t.poly.reduce((t,e)=>t+e[0],0)/e,t.poly.reduce((t,e)=>t+e[1],0)/e]}return[t.x+t.w/2,t.y+.1*Math.min(t.w,t.h)]}_openingAmt(t){const e=t.contact&&this._renderOpeningEntityAvailable(t.contact)?this._renderPlanHass.states[t.contact]?.state:null;return gi(t.type,e,!!t.invert)}_planEntityAvailable(t){return!!t&&(!bo(this._fullRegistryHass,t,yo(this._markers))&&"active"===this._bindingStatus("entity:"+t).kind)}_renderEntityAvailable(t){return!!t&&(!bo(this._renderPlanHass,t,yo(this._markers))&&(!!this._renderPlanHass.entities?.[t]&&!!this._renderPlanHass.states?.[t]))}_openingEntityAvailable(t){return function(t,e,i=In(t)){return!!e&&"active"===Bn(t,`entity:${e}`,i).kind}(this.hass,t,this._haRegistry)}_renderOpeningEntityAvailable(t){return e=this._renderPlanHass,!!(i=t)&&!!e?.states?.[i];var e,i}_renderOpeningPlacementPreview(){const t=this._openingPreview;if(!t)return W``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:gi(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this._cellCm,gridPitch:this._gridPitch,face:t.face},i="passage"===t.type?function(t,e){const i=Math.max(0,t.renderedLength)/2,s=Math.max(0,t.target.physicalHalfWidth),n=s+.18*Math.max(0,e),o=t=>({x1:t,y1:-n,x2:t,y2:n});return{rect:{x:-i,y:s?-s:0,width:2*i,height:2*s},boundaries:[o(-i),o(i)]}}(t,this._gridPitch):null;return W``}_roomCenter(t){if(t.poly){const e=t.poly.length;return[t.poly.reduce((t,e)=>t+e[0],0)/e,t.poly.reduce((t,e)=>t+e[1],0)/e]}return[t.x+t.w/2,t.y+.1*Math.min(t.w,t.h)]}_openingAmt(t){const e=t.contact&&this._renderOpeningEntityAvailable(t.contact)?this._renderPlanHass.states[t.contact]?.state:null;return _i(t.type,e,!!t.invert)}_planEntityAvailable(t){return!!t&&(!yo(this._fullRegistryHass,t,vo(this._markers))&&"active"===this._bindingStatus("entity:"+t).kind)}_renderEntityAvailable(t){return!!t&&(!yo(this._renderPlanHass,t,vo(this._markers))&&(!!this._renderPlanHass.entities?.[t]&&!!this._renderPlanHass.states?.[t]))}_openingEntityAvailable(t){return function(t,e,i=An(t)){return!!e&&"active"===Ln(t,`entity:${e}`,i).kind}(this.hass,t,this._haRegistry)}_renderOpeningEntityAvailable(t){return e=this._renderPlanHass,!!(i=t)&&!!e?.states?.[i];var e,i}_renderOpeningPlacementPreview(){const t=this._openingPreview;if(!t)return W``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:_i(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this._cellCm,gridPitch:this._gridPitch,face:t.face},i="passage"===t.type?function(t,e){const i=Math.max(0,t.renderedLength)/2,s=Math.max(0,t.target.physicalHalfWidth),n=s+.18*Math.max(0,e),o=t=>({x1:t,y1:-n,x2:t,y2:n});return{rect:{x:-i,y:s?-s:0,width:2*i,height:2*s},boundaries:[o(-i),o(i)]}}(t,this._gridPitch):null;return W` `}_renderOpenings(t){const e=this._openingsR;if(!e.length)return W``;const i=this._spaceModel();if(!i)return W``;const s=t.color,n=this._spaceWalls,o=this._openPairs().flatMap(t=>t.segs),r=this._openingWallIndexFor(i,o).value;return W`${e.map(t=>{if(t.orphanReason)return W``}_renderOpenings(t){const e=this._openingsR;if(!e.length)return W``;const i=this._spaceModel();if(!i)return W``;const s=t.color,n=this._spaceWalls,o=this._openPairs().flatMap(t=>t.segs),a=this._openingWallIndexFor(i,o).value;return W`${e.map(t=>{if(t.orphanReason)return W`{e.stopPropagation(),this._editOpening(t)}}> ! - `;const e=this._openingAmt(t),i=e>0&&!!t.contact&&this._renderOpeningEntityAvailable(t.contact)?"var(--hp-open)":s,o="gate"===t.type?!t.flip_v:t.flip_v,a=t.partitionHost||n.length||"gate"===t.type?this._openingFace(t,r,!!o):{ox:0,oy:0,cm:0,side:-1},l={type:t.type,length:t.rlen,angle:t.angle,amount:e,flipH:!!t.flip_h,flipV:!!t.flip_v,base:s,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:a},{half:c,outlineHalf:h,hitHalf:d}=Zd(l);return W``;const e=this._openingAmt(t),i=e>0&&!!t.contact&&this._renderOpeningEntityAvailable(t.contact)?"var(--hp-open)":s,o="gate"===t.type?!t.flip_v:t.flip_v,r=t.partitionHost||n.length||"gate"===t.type?this._openingFace(t,a,!!o):{ox:0,oy:0,cm:0,side:-1},l={type:t.type,length:t.rlen,angle:t.angle,amount:e,flipH:!!t.flip_h,flipV:!!t.flip_v,base:s,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:r},{half:c,outlineHalf:h,hitHalf:d}=Qd(l);return W` - ${Qd(l)} + ${tu(l)} this._opClick(e,t)} @@ -5850,12 +5977,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @pointermove=${e=>this._opPointerMove(e,t)} @pointerup=${e=>this._opPointerUp(e,t)} @pointercancel=${e=>this._opPointerUp(e,t)}> - `})}`}_renderOpeningLocks(t){const e=this._openingsR.filter(t=>!t.orphanReason&&("door"===t.type||"gate"===t.type)&&t.lock&&this._renderOpeningEntityAvailable(t.lock));if(!e.length)return j``;const i=this._spaceModel();if(!i)return j``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return j`${e.map(e=>{const i=this._renderPlanHass.states[e.lock]?.state,s="locked"===i,o=s||["unlocked","open","opening","unlocking","locking"].includes(String(i)),r=(e.angle+90)*Math.PI/180,a="gate"===e.type?this._openingFace(e,n,!e.flip_v):null,l=a?-16*a.side:16*(e.flip_v?-1:1),c=e.rx+Math.cos(r)*l,h=e.ry+Math.sin(r)*l,d=this._scenePoint([c,h]),u=(d[0]-t.x)/t.w*100,p=(d[1]-t.y)/t.h*100;return j`
`})}`}_renderOpeningLocks(t){const e=this._openingsR.filter(t=>!t.orphanReason&&("door"===t.type||"gate"===t.type)&&t.lock&&this._renderOpeningEntityAvailable(t.lock));if(!e.length)return j``;const i=this._spaceModel();if(!i)return j``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return j`${e.map(e=>{const i=this._renderPlanHass.states[e.lock]?.state,s="locked"===i,o=s||["unlocked","open","opening","unlocking","locking"].includes(String(i)),a=(e.angle+90)*Math.PI/180,r="gate"===e.type?this._openingFace(e,n,!e.flip_v):null,l=r?-16*r.side:16*(e.flip_v?-1:1),c=e.rx+Math.cos(a)*l,h=e.ry+Math.sin(a)*l,d=this._scenePoint([c,h]),u=(d[0]-t.x)/t.w*100,p=(d[1]-t.y)/t.h*100;return j`
{t.stopPropagation(),"view"===this._mode&&(this._openingInfo=e)}}> -
`})}`}_lockAction(t,e){if(this._openingEntityAvailable(t)){if("unlock"===e){const e=this.hass?.states?.[t]?.attributes?.friendly_name||t;if(!confirm(this._t("confirm.unlock",{name:e})))return}this.hass?.callService?.("lock",e,{entity_id:t})}}_renderOpeningInfoCard(){const t=this._openingInfo,e="passage"!==t.type&&t.contact&&this._openingEntityAvailable(t.contact)?t.contact:null,i=("door"===t.type||"gate"===t.type)&&t.lock&&this._openingEntityAvailable(t.lock)?t.lock:null,s=e?this.hass.states[e]?.state:null,n=this._openingAmt(t),o=i?this.hass.states[i]?.state:null,r="door"===t.type?"opening.door":"gate"===t.type?"opening.gate":"passage"===t.type?"opening.passage":"opening.window",a="door"===t.type?"mdi:door":"gate"===t.type?"mdi:gate":"passage"===t.type?"mdi:arch":"mdi:window-closed-variant",l="gate"===t.type?n>0?"mdi:gate-open":"mdi:gate":n>0?"mdi:door-open":"mdi:door-closed",c=(t,e,i,s="")=>j`
${e}${i}
`;return j``})}`}_lockAction(t,e){if(this._openingEntityAvailable(t)){if("unlock"===e){const e=this.hass?.states?.[t]?.attributes?.friendly_name||t;if(!confirm(this._t("confirm.unlock",{name:e})))return}this.hass?.callService?.("lock",e,{entity_id:t})}}_renderOpeningInfoCard(){const t=this._openingInfo,e="passage"!==t.type&&t.contact&&this._openingEntityAvailable(t.contact)?t.contact:null,i=("door"===t.type||"gate"===t.type)&&t.lock&&this._openingEntityAvailable(t.lock)?t.lock:null,s=e?this.hass.states[e]?.state:null,n=this._openingAmt(t),o=i?this.hass.states[i]?.state:null,a="door"===t.type?"opening.door":"gate"===t.type?"opening.gate":"passage"===t.type?"opening.passage":"opening.window",r="door"===t.type?"mdi:door":"gate"===t.type?"mdi:gate":"passage"===t.type?"mdi:arch":"mdi:window-closed-variant",l="gate"===t.type?n>0?"mdi:gate-open":"mdi:gate":n>0?"mdi:door-open":"mdi:door-closed",c=(t,e,i,s="")=>j`
${e}${i}
`;return j`this._openingInfo=null}>
${e?c(l,this._t("opening.contact_label"),"unavailable"===s||null==s?this._t("opening.state_unknown"):this._t(n>0?"opening.open":"opening.closed"),n>0?"warn":"ok"):G} @@ -5874,7 +6001,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_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/$_,y:t.y/this._spaceH,angle:t.angle,length:i&&!t.lengthTouched?i.length:this._cmToUnits(Math.max(20,t.lengthCm))/$_,...t.host?{host:t.host}:{}},n=rd(i,s),o=t.host?n?od(s,e,$_,this._cellCm,this._gridPitch):nd(s,e,$_,this._cellCm,this._gridPitch):null,r="does-not-fit-jamb"===o?.reason,a=t.host?e.find(e=>e.id===t.host.id):null,l=a?li(a.cm/2,this._imperial):"",c=!!t.host&&!o?.resolved&&!r,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` ${t.host?j` -
- ${c||r?j``:G} - ${c?this._t("opening.partition_orphan"):r?this._t("opening.partition_jamb_margin",{distance:l}):this._t("opening.host_partition")} +
+ ${c||a?j``:G} + ${c?this._t("opening.partition_orphan"):a?this._t("opening.partition_jamb_margin",{distance:l}):this._t("opening.host_partition")}
`:G} {const i=d_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> + @input=${e=>{const i=g_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> ${"passage"===t.type&&(t.contact||t.lock)?j`
@@ -5939,7 +6066,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_gridLevels(){const t=this._stageEl,e=this._viewOr(this._baseVb()),i=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return function(t,e,i=7){if(!(t>0&&e>0&&Number.isFinite(e)))return null;const s=mc.find(s=>t*s*e>=i);if(void 0===s)return null;const n=mc.find(t=>t>=5*s)??5*s;return{fine:s,coarse:n}}(this._gridPitch,i)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return W``;const i=this._gridPitch*e.fine,s=this._gridPitch*e.coarse,n=this._gridPitch*e.fine*.14;return W` +
`}_gridLevels(){const t=this._stageEl,e=this._viewOr(this._baseVb()),i=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return function(t,e,i=7){if(!(t>0&&e>0&&Number.isFinite(e)))return null;const s=fc.find(s=>t*s*e>=i);if(void 0===s)return null;const n=fc.find(t=>t>=5*s)??5*s;return{fine:s,coarse:n}}(this._gridPitch,i)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return W``;const i=this._gridPitch*e.fine,s=this._gridPitch*e.coarse,n=this._gridPitch*e.fine*.14;return W` @@ -5953,42 +6080,42 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - `}_renderPhysicalEditorLayer(){const t=this._spaceModel();if(!t)return W``;const e=this._gridPitch,i=this._viewOr(this._baseVb()),s=this._stageEl,n=s?.clientWidth?i.w/s.clientWidth:e/8,o=Math.max(.22*e,8*n),r=Math.max(o,12*n),a=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this._physicalSel?.kind===t&&this._physicalSel.id===e||"column"===t&&this._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,i)=>{const s=t.points[i+1],o=fa(t.segments[i]?.cm||15,this._cellCm,this._gridPitch);return W``}_renderPhysicalEditorLayer(){const t=this._spaceModel();if(!t)return W``;const e=this._gridPitch,i=this._viewOr(this._baseVb()),s=this._stageEl,n=s?.clientWidth?i.w/s.clientWidth:e/8,o=Math.max(.22*e,8*n),a=Math.max(o,12*n),r=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this._physicalSel?.kind===t&&this._physicalSel.id===e||"column"===t&&this._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,i)=>{const s=t.points[i+1],o=vr(t.segments[i]?.cm||15,this._cellCm,this._gridPitch);return W`{this._physicalSel={kind:"draft",id:t.id,segment:i},this._registerPhysicalTap("draft",t.id,i)}}>`})),h=(t.partitions||[]).map(t=>{const e=Dl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);return e?W`{this._physicalSel={kind:"draft",id:t.id,segment:i},this._registerPhysicalTap("draft",t.id,i)}}>`})),h=(t.partitions||[]).map(t=>{const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);return e?W`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`:G}),d=(t.wall_columns||[]).map(t=>{const e=Tl(this._physicalRotate?.id===t.id?{...t,angle:this._physicalRotate.angle}:t,this._cellCm,this._gridPitch);return W`this._physicalUp(t)}>`:G}),d=(t.wall_columns||[]).map(t=>{const e=Pl(this._physicalRotate?.id===t.id?{...t,angle:this._physicalRotate.angle}:t,this._cellCm,this._gridPitch);return W`this._physicalDown(e,"column",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),u=this._physicalDrag,p=(()=>{if(!u?.moved)return G;const t="partition"===u.kind?Dl(u.base.a,u.base.b,u.base.cm,this._cellCm,this._gridPitch):Tl(u.base,this._cellCm,this._gridPitch);return t?W`this._physicalUp(t)}>`}),u=this._physicalDrag,p=(()=>{if(!u?.moved)return G;const t="partition"===u.kind?Tl(u.base.a,u.base.b,u.base.cm,this._cellCm,this._gridPitch):Pl(u.base,this._cellCm,this._gridPitch);return t?W``:G})(),_=(()=>{const i=this._physicalSel;if(!i)return G;if("draft"===i.kind){const e=t.room_drafts.find(t=>t.id===i.id);return e?W` t.join(",")).join(" ")}> ${e.points.map(t=>W``)} - `:G}if("partition"===i.kind){const e=t.partitions.find(t=>t.id===i.id);if(!e)return G;const s=Dl(e.a,e.b,e.cm,this._cellCm,this._gridPitch);if(!s)return G;const n=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return W` - + `:G}if("partition"===i.kind){const e=t.partitions.find(t=>t.id===i.id);if(!e)return G;const s=Tl(e.a,e.b,e.cm,this._cellCm,this._gridPitch);if(!s)return G;const n=(e.a[0]+e.b[0])/2,a=(e.a[1]+e.b[1])/2;return W` + - - `}const s=t.wall_columns.find(t=>t.id===i.id);if(!s)return G;const l=this._physicalRotate?.id===s.id?{...s,angle:this._physicalRotate.angle}:s,c=Tl(l,this._cellCm,this._gridPitch);if("square"!==l.shape)return W` - + + `}const s=t.wall_columns.find(t=>t.id===i.id);if(!s)return G;const l=this._physicalRotate?.id===s.id?{...s,angle:this._physicalRotate.angle}:s,c=Pl(l,this._cellCm,this._gridPitch);if("square"!==l.shape)return W` + - `;const h=fa(l.cm,this._cellCm,this._gridPitch),d=Sl(l.angle)*Math.PI/180,u=Math.sin(d),p=-Math.cos(d),_=[l.center[0]+u*h/2,l.center[1]+p*h/2],g=[_[0]+u*Math.max(e,24*n),_[1]+p*Math.max(e,24*n)];return W` - + `;const h=vr(l.cm,this._cellCm,this._gridPitch),d=Ml(l.angle)*Math.PI/180,u=Math.sin(d),p=-Math.cos(d),_=[l.center[0]+u*h/2,l.center[1]+p*h/2],g=[_[0]+u*Math.max(e,24*n),_[1]+p*Math.max(e,24*n)];return W` + - this._physicalRotateDown(t,s)} @pointermove=${t=>this._physicalRotateMove(t)} @pointerup=${t=>this._physicalRotateUp(t)}> - `})();return W`${c}${h}${d}${p}${_}`}_renderPlanSnapOverlay(){if(!this._markup||"draw"!==this._tool)return W``;const t=this._planSnapGeometrySnapshot().value,e=this._activePlanSnapCandidate,i=fa(5,this._cellCm,this._gridPitch),s=fa(10,this._cellCm,this._gridPitch);return W``})();return W`${c}${h}${d}${p}${_}`}_renderPlanSnapOverlay(){if(!this._markup||"draw"!==this._tool)return W``;const t=this._planSnapGeometrySnapshot().value,e=this._activePlanSnapCandidate,i=vr(5,this._cellCm,this._gridPitch),s=vr(10,this._cellCm,this._gridPitch);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(fa(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=il(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,$_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:fa(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 Ha([...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?Ds(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,r=this._gridPitch,a=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)=>fa(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||pa:l||pa,this._cellCm,this._gridPitch)/2):[],d=c?La(c,fa(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` - ${this._gridLevels()?W``:G} + `}_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,D_);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` + ${this._gridLevels()?W``:G} ${n.map(t=>W``)} ${this._renderPhysicalEditorLayer()} - ${"column"===this._tool&&this._cursorPt&&this._drawWallCm?W``M ${Tl({shape:"square",center:this._cursorPt,cm:this._drawWallCm},this._cellCm,this._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`)()}>`:G} + ${"column"===this._tool&&this._cursorPt&&this._drawWallCm?W``M ${Pl({shape:"square",center:this._cursorPt,cm:this._drawWallCm},this._cellCm,this._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`)()}>`:G} ${d?W` `:G} ${u?W` @@ -6020,9 +6147,9 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${o.length>1?W``:G} ${o.length&&this._cursorPt&&"draw"===this._tool&&!this._contourClosed?W``:G} - ${o.map((t,e)=>W``)} + ${o.map((t,e)=>W``)} ${"split"===this._tool&&this._splitSel?.pts?.length?W`${this._splitSel.pts.length>1?W``:G} - ${this._splitSel.pts.map((t,e)=>W``)} + ${this._splitSel.pts.map((t,e)=>W``)} ${this._cursorPt?W``:G}`:G} `}_renderPartitionDeleteDialog(){const t=this._partitionDeleteDialog,e="mi"===this.hass?.config?.unit_system?.length;return j`

${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:li(t.length*$_/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*D_/this._gridPitch*this._cellCm,e)})}
  • `)}
@@ -6056,8 +6183,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `:G}
this._physicalDialog={...t,cm:e.target.value}} /> ${this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}
${e&&"square"===t.shape?j` @@ -6180,12 +6307,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_cardEntities(t){const e=this._planHass,i=[],s=new Set,n=t=>{if(!t||s.has(t)||!e.states[t])return;const n=e.entities[t];if("config"===n?.entity_category||"diagnostic"===n?.entity_category)return;s.add(t);const o=t.split(".")[0];["light","switch","fan","humidifier","siren","input_boolean"].includes(o)?i.push({eid:t,kind:"toggle"}):["cover","valve","lock","climate","media_player","vacuum","water_heater"].includes(o)?i.push({eid:t,kind:"open"}):["sensor","binary_sensor","number","select"].includes(o)&&i.push({eid:t,kind:"value"})};for(const i of lo(e,this._devices,null,this._virtualLights))if(i.device.id===t.id)for(const t of[...i.serviceEids,...i.stateEids])n(t);t.primary&&n(t.primary);for(const e of t.entities)n(e);return i.slice(0,12)}_cardToggle(t){const e=t.split(".")[0];"lock"!==e&&"alarm_control_panel"!==e&&this._planEntityAvailable(t)&&this.hass.callService("homeassistant","toggle",{entity_id:t}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))}_renderInfoCard(){const t=this._infoCard,e=t.primary?this.hass.states[t.primary]:void 0,i=e?Ji(this.hass,t.primary)?.text??e.state:null,s=(t.controls??t.marker?.controls??[]).filter(Ms).filter(t=>this._planEntityAvailable(t));return j``}_cardEntities(t){const e=this._planHass,i=[],s=new Set,n=t=>{if(!t||s.has(t)||!e.states[t])return;const n=e.entities[t];if("config"===n?.entity_category||"diagnostic"===n?.entity_category)return;s.add(t);const o=t.split(".")[0];["light","switch","fan","humidifier","siren","input_boolean"].includes(o)?i.push({eid:t,kind:"toggle"}):["cover","valve","lock","climate","media_player","vacuum","water_heater"].includes(o)?i.push({eid:t,kind:"open"}):["sensor","binary_sensor","number","select"].includes(o)&&i.push({eid:t,kind:"value"})};for(const i of ro(e,this._devices,null,this._virtualLights))if(i.device.id===t.id)for(const t of[...i.serviceEids,...i.stateEids])n(t);t.primary&&n(t.primary);for(const e of t.entities)n(e);return i.slice(0,12)}_cardToggle(t){const e=t.split(".")[0];"lock"!==e&&"alarm_control_panel"!==e&&this._planEntityAvailable(t)&&this.hass.callService("homeassistant","toggle",{entity_id:t}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))}_renderInfoCard(){const t=this._infoCard,e=t.primary?this.hass.states[t.primary]:void 0,i=e?Xi(this.hass,t.primary)?.text??e.state:null,s=(t.controls??t.marker?.controls??[]).filter(Ss).filter(t=>this._planEntityAvailable(t));return j`
${(()=>{const e=this._cardEntities(t);return e.length?j`
- ${e.map(({eid:t,kind:e})=>{const i=this.hass.states[t],s=this.hass.entities[t]?.name||i?.attributes?.friendly_name||t,n=i?Ji(this.hass,t)?.text??i.state:"",o="on"===i?.state||["open","unlocked","playing","cleaning"].includes(i?.state);return j`
- + ${e.map(({eid:t,kind:e})=>{const i=this.hass.states[t],s=this.hass.entities[t]?.name||i?.attributes?.friendly_name||t,n=i?Xi(this.hass,t)?.text??i.state:"",o="on"===i?.state||["open","unlocked","playing","cleaning"].includes(i?.state);return j`
+ ${s} ${"toggle"===e?j``:"open"===e?j`
`:G} ${i&&!this._cardEntities(t).length?j`
${this._t("info.state")}${i}
`:G} - ${Hi(t.link)?j`
${this._t("info.link")} - ${t.link}
`:G} + ${Ni(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")} @@ -6217,7 +6344,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `: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=qs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Xn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),r={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&&3!==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=d_(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)&&(r.space=e?.space||("virtual"===t.binding?this._space:null),r.area=e?.area||null,r.room_id=e?.roomId||null),r}_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 xo({...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 Jh({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(!Qh(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:Vh(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=Bo(this._planHass,s,n),r=qo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!r,valueBadgeSource:r,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return co(lo(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&&ro(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&&Zn(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 Zn(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} ${Zn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ms(e)&&!s.has(e)&&Yn(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=xs(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),r=this._effectiveMarkerTapAction(t,o),a=o?cs(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===r&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?cu(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:a?.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?Bo(this._planHass,o,l):[],p=o?qo(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=Ro(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 to(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?Zn(o):[],P=o&&Qn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?qh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),E="toggle"===r?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,F=E?[...E.targets,...E.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=Ei(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=g_(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 Zh({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(!td(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:Kh(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?pu(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?jh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),E="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,F=E?[...E.targets,...E.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}>
@@ -6240,7 +6367,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
@@ -6265,7 +6392,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @input=${e=>this._markerDialog={...t,bindingFilter:e.target.value}} />
${i.map(e=>j`
{const i={...t,binding:e.value,bindingOpen:!1,controls:Xn(e.value,t.controls,this._bindingEntities(e.value)),autoIcon:this._autoIconForBinding(e.value)};this._markerDialog=this._announceToggleDraft({...i,...this._valueBadgeForBinding(i,e.value)})}}> + @click=${()=>{const i={...t,binding:e.value,bindingOpen:!1,controls:Yn(e.value,t.controls,this._bindingEntities(e.value)),autoIcon:this._autoIconForBinding(e.value)};this._markerDialog=this._announceToggleDraft({...i,...this._valueBadgeForBinding(i,e.value)})}}> ${e.label}${e.sub}
`)} ${i.length?G:j`
${this._t("marker.nothing_found")}
`} @@ -6286,13 +6413,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - ${"toggle"===r&&(A.length>1||I)?j`
+ ${"toggle"===a&&(A.length>1||I)?j`
${this._help("marker.toggle_entity.help")} @@ -6312,11 +6439,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("marker.toggle_entity_missing",{entity:t.toggleEntity,fallback:F||this._t("marker.toggle_entity_none")})}

`:G}
`:G} - ${"toggle"===r?j`
+ ${"toggle"===a?j`
${h.map(t=>j`
${t}
`)}
${t.tapHintAnnouncement}
`:G} - ${"run"===r?(()=>{const e=t.runFilter.trim().toLowerCase(),i=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),s=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return j` + ${"run"===a?(()=>{const e=t.runFilter.trim().toLowerCase(),i=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),s=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return j` ${t.tapTarget&&!s?j`
${this._t("marker.run_target_gone",{id:t.tapTarget})}
`:G} ${this._t("marker.nothing_found")}
`}
`}`})():G} - ${"run"===r||"toggle"===r?j` ${"file"===t.source?j`
@@ -6635,25 +6762,25 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${t.pickSaved?this._renderServerPlans(t):G}`:G}
- {const i=d_(e.target.value);this._spaceDialog={...t,cellCm:null!=i&&i>0?Math.max(.1,Math.min(c_,i)):t.cellCm}}} /> + @input=${e=>{const i=g_(e.target.value);this._spaceDialog={...t,cellCm:null!=i&&i>0?Math.max(.1,Math.min(p_,i)):t.cellCm}}} /> ${this._t("space.scale_unit")}
-
`:G}`:G}`}_renderRoomDialog(){const t=!!this._roomEditId,e=t?null:this._wallFaceBatch,i=e&&e.candidates.length>1?this._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",s=!!this._areaSel||!!this._nameSel.trim(),n=cs(this._curSpaceCfg),o=this._roomFill||n.fill,r=this._roomCustomFill||n.customFill,a=[...this._freeAreas];if(t&&this._areaSel&&!a.some(t=>t.area_id===this._areaSel)){const t=this.hass.areas[this._areaSel];t&&a.unshift(t)}return j``:G}`:G}`}_renderRoomDialog(){const t=!!this._roomEditId,e=t?null:this._wallFaceBatch,i=e&&e.candidates.length>1?this._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",s=!!this._areaSel||!!this._nameSel.trim(),n=ls(this._curSpaceCfg),o=this._roomFill||n.fill,a=this._roomCustomFill||n.customFill,r=[...this._freeAreas];if(t&&this._areaSel&&!r.some(t=>t.area_id===this._areaSel)){const t=this.hass.areas[this._areaSel];t&&r.unshift(t)}return j`
@@ -6837,12 +6964,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - ${[["","fill.inherit"],...Wi.map(t=>[t,"fill."+t])].map(([t,e])=>j`
`:G} @@ -6872,7 +6999,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._rangeInput(50,300,5,Math.round(100*this._roomLabelScale),t=>{this._roomLabelScale=t/100,this.requestUpdate()})} ${Math.round(100*this._roomLabelScale)}%
- ${this._renderCardPreview(cs(this._curSpaceCfg).cardFontScale,this._roomNameScale,this._roomLabelScale)} + ${this._renderCardPreview(ls(this._curSpaceCfg).cardFontScale,this._roomNameScale,this._roomLabelScale)}
@@ -6886,4 +7013,4 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("btn.save")} `}
- `}}I_.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}},I_.ZOOM_MAX=8,I_.ZOOM_MIN=1/3,I_._touchSeen=!1,I_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,I_.styles=[Kt,Ou],customElements.get("houseplan-card")||customElements.define("houseplan-card",I_),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${o_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}O_.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}},O_.ZOOM_MAX=8,O_.ZOOM_MIN=1/3,O_._touchSeen=!1,O_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,O_.styles=[Kt,Bu],customElements.get("houseplan-card")||customElements.define("houseplan-card",O_),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${c_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/demo/golden/harness.mjs b/demo/golden/harness.mjs index e5bbc943..218e95da 100644 --- a/demo/golden/harness.mjs +++ b/demo/golden/harness.mjs @@ -315,7 +315,7 @@ export async function prepareGoldenScenario(page, scenario) { await stableEnvironment(page, scenario); const fixture = prepareGoldenFixture(scenario); - return page.evaluate(async ({ fixture, scenario }) => { + const result = await page.evaluate(async ({ fixture, scenario }) => { const wait = (ms) => new Promise((done) => setTimeout(done, ms)); const frame = () => new Promise((done) => requestAnimationFrame(() => requestAnimationFrame(done))); const until = async (predicate, timeout = 10000) => { @@ -759,6 +759,22 @@ export async function prepareGoldenScenario(page, scenario) { trigger.click(); await picker.updateComplete; } + if (scenario.deviceClassOverrides) { + for (const [id, classes] of Object.entries(scenario.deviceClassOverrides)) { + const marker = card.renderRoot.querySelector(`[data-hp="device"][data-id="${CSS.escape(id)}"]`); + if (!marker || !Array.isArray(classes) || !classes.length) { + throw new Error(`invalid golden device class override: ${scenario.id}/${id}`); + } + marker.classList.add(...classes); + } + } + if (scenario.focusDevice) { + const marker = card.renderRoot.querySelector( + `[data-hp="device"][data-id="${CSS.escape(scenario.focusDevice)}"]`, + ); + if (!marker) throw new Error(`golden focus device missing: ${scenario.focusDevice}`); + marker.focus({ focusVisible: true }); + } if (scenario.dayCycle) { const environment = card.renderRoot.querySelector('.hp-day-cycle-env'); const active = card.renderRoot.querySelector('.hp-day-cycle-bg.active'); @@ -792,6 +808,27 @@ export async function prepareGoldenScenario(page, scenario) { } } : {}), }; }, { fixture, scenario }); + if (scenario.hoverDevice) { + const point = await page.evaluate((id) => { + const marker = window.__goldenCard?.renderRoot?.querySelector( + `[data-hp="device"][data-id="${CSS.escape(id)}"]`, + ); + if (!marker) return null; + const rect = marker.getBoundingClientRect(); + return { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 }; + }, scenario.hoverDevice); + if (!point) throw new Error(`golden hover device missing: ${scenario.hoverDevice}`); + await page.mouse.move(point.x, point.y); + if (scenario.hideHoverTooltip) { + await page.evaluate(async () => { + const card = window.__goldenCard; + card._tip = null; + card.requestUpdate(); + await card.updateComplete; + }); + } + } + return result; } export async function goldenClip(page, capture) { diff --git a/demo/golden/matrix.mjs b/demo/golden/matrix.mjs index ad82e1a4..9d208378 100644 --- a/demo/golden/matrix.mjs +++ b/demo/golden/matrix.mjs @@ -1,7 +1,7 @@ import { fixtureWallKey } from '../fixtures/visual-matrix.mjs'; /** Data-only HP-QA-01 capture matrix. Bump when framing or scenarios change. */ -export const GOLDEN_MATRIX_VERSION = 31; +export const GOLDEN_MATRIX_VERSION = 32; const stage = { capture: 'stage', threshold: { maxChannelDelta: 10, maxDiffRatio: 0.0005 } }; const page = { capture: 'page', threshold: { maxChannelDelta: 10, maxDiffRatio: 0.0008 } }; @@ -197,6 +197,57 @@ export const GOLDEN_SCENARIOS = Object.freeze([ 'golden-climate': { s: 'golden-lighting', x: 0.80, y: 0.28 }, }, theme: 'dark', viewport: { width: 1000, height: 900 }, ...stage }, + ...['light', 'dark'].map((theme) => ({ + id: `device-icon-state-table-${theme}`, fixture: 'visual', space: 'golden-lighting', mode: 'view', + glowEnabled: false, sunRays: false, + markerOverrides: [ + { id: 'golden-light-one', binding: 'device:golden-light-one' }, + { id: 'golden-light-two', binding: 'device:golden-light-two' }, + { id: 'golden-light-three', binding: 'device:golden-light-three' }, + { id: 'golden-presence', binding: 'device:golden-presence' }, + { id: 'golden-climate', binding: 'device:golden-climate' }, + { id: 'golden-left-temperature', binding: 'device:golden-left-temperature', display: 'value' }, + { id: 'golden-right-temperature', binding: 'device:golden-right-temperature', display: 'static_icon' }, + { id: 'golden-left-linkquality', binding: 'device:golden-left-linkquality', value_badge: { + enabled: true, + source: { kind: 'entity_state', entity_id: 'sensor.golden_left_linkquality' }, + position: 'right', + } }, + { id: 'golden-right-linkquality', binding: 'device:golden-right-linkquality', value_badge: { + enabled: true, + source: { kind: 'entity_state', entity_id: 'sensor.golden_right_linkquality' }, + position: 'bottom', + } }, + ], + stateOverrides: { + 'light.golden_light_one': { attributes: { lqi: 40 } }, + 'light.golden_light_two': { attributes: { lqi: 41 } }, + 'light.golden_light_three': { attributes: { lqi: 180 } }, + 'sensor.golden_left_temperature': { state: 'Complete long localized state' }, + 'sensor.golden_right_temperature': { state: 'unavailable' }, + }, + layoutOverrides: { + 'golden-light-one': { s: 'golden-lighting', x: 0.16, y: 0.25 }, + 'golden-light-two': { s: 'golden-lighting', x: 0.34, y: 0.25 }, + 'golden-light-three': { s: 'golden-lighting', x: 0.66, y: 0.25 }, + 'golden-presence': { s: 'golden-lighting', x: 0.84, y: 0.25 }, + 'golden-climate': { s: 'golden-lighting', x: 0.16, y: 0.72 }, + 'golden-left-temperature': { s: 'golden-lighting', x: 0.34, y: 0.72 }, + 'golden-right-temperature': { s: 'golden-lighting', x: 0.66, y: 0.72 }, + 'golden-left-linkquality': { s: 'golden-lighting', x: 0.77, y: 0.55 }, + 'golden-right-linkquality': { s: 'golden-lighting', x: 0.84, y: 0.72 }, + }, + deviceClassOverrides: { + 'golden-light-two': ['lock-locked'], + 'golden-light-three': ['lock-unlocked'], + 'golden-presence': ['virtual'], + 'golden-climate': ['alarm', 'sel'], + }, + focusDevice: 'golden-climate', + hoverDevice: 'golden-presence', + hideHoverTooltip: true, + theme, viewport: { width: 1000, height: 900 }, ...stage, + })), { id: 'lighting-sun-window-state-only-dark', fixture: 'visual', space: 'golden-lighting', mode: 'view', // The golden screenshot is backed by a second, sun-layer-hidden capture. // A real painted ray must account for enough changed pixels; DOM-only diff --git a/demo/smoke_cover_tap.mjs b/demo/smoke_cover_tap.mjs index a6221d98..e1d4fec2 100644 --- a/demo/smoke_cover_tap.mjs +++ b/demo/smoke_cover_tap.mjs @@ -174,7 +174,7 @@ const out = await page.evaluate(async () => { o.onlyTheCoverOnThePlan = sr().querySelectorAll('.dev').length === 1; o.pulseWhileOpening = sr().querySelectorAll('.dev.activity-transition').length === 1; const a1 = afterAnim(); - o.pulseIsBreathingRing = a1?.name === 'hp-pulse-continuous' && a1?.dur === '2.4s'; + o.pulseUsesPackageContinuousRing = a1?.name === 'hp-pulse-continuous' && a1?.dur === '3.6s'; // the plate stays NEUTRAL while travelling: yellow is reserved for «включено» o.movingPlateNotYellow = getComputedStyle(devEl()).backgroundColor !== YELLOW; diff --git a/demo/smoke_device_icon_design.mjs b/demo/smoke_device_icon_design.mjs new file mode 100644 index 00000000..923dc8a4 --- /dev/null +++ b/demo/smoke_device_icon_design.mjs @@ -0,0 +1,175 @@ +// Issue #179: package shell/state/motion/a11y contract in the real shared renderer. +import { launch, checkAll, finish } from './serve.mjs'; + +const { page, browser } = await launch( + { width: 1120, height: 900 }, 1, [], { colorScheme: 'dark' }, +); + +await page.evaluate(async () => { + const c = window.__card; + const marker = (id, patch) => ({ + ...(c._serverCfg.markers || []).find((item) => item.id === id), + id, binding: `device:${id}`, ...patch, + }); + const replacements = new Map([ + ['d_light1', marker('d_light1', { display: 'badge' })], + ['d_motion', marker('d_motion', { display: 'icon_ripple' })], + ['d_tv', marker('d_tv', { display: 'value' })], + ['d_temp', marker('d_temp', { + display: 'badge', + value_badge: { + enabled: true, + source: { kind: 'entity_state', entity_id: 'sensor.living_temp' }, + position: 'right', + }, + })], + ['d_kettle', marker('d_kettle', { display: 'icon_ripple', tap_action: 'more-info' })], + ]); + c._serverCfg.markers = [ + ...(c._serverCfg.markers || []).filter((item) => !replacements.has(item.id)), + ...replacements.values(), + ]; + c.hass = { + ...c.hass, + themes: { ...(c.hass.themes || {}), darkMode: true }, + states: { + ...c.hass.states, + 'binary_sensor.hall_motion': { + ...c.hass.states['binary_sensor.hall_motion'], + state: 'on', + attributes: { + ...c.hass.states['binary_sensor.hall_motion'].attributes, + device_class: 'presence', linkquality: 64, + }, + }, + 'media_player.tv': { + ...c.hass.states['media_player.tv'], + state: 'A very long localized device value without clipping', + }, + 'sensor.living_temp': { + ...c.hass.states['sensor.living_temp'], + state: '12345678901234567890', + attributes: { + ...c.hass.states['sensor.living_temp'].attributes, + linkquality: 30, + }, + }, + 'switch.kettle': { + ...c.hass.states['switch.kettle'], + state: 'unavailable', + }, + }, + }; + c._regSignature = ''; + c._cfgEpoch++; + c._maybeRebuildDevices(); + c._setMode('view'); + c.requestUpdate(); + await c.updateComplete; + await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve))); +}); + +await page.waitForTimeout(220); + +const selector = (id) => `.dev[data-id="${id}"]`; +const beforeUnavailable = await page.$eval(selector('d_kettle'), (node) => ({ + core: getComputedStyle(node.querySelector('.device-core')).backgroundColor, + shell: getComputedStyle(node.querySelector('.device-shell')).borderColor, +})); +await page.hover(selector('d_kettle')); +const afterUnavailable = await page.$eval(selector('d_kettle'), (node) => ({ + core: getComputedStyle(node.querySelector('.device-core')).backgroundColor, + shell: getComputedStyle(node.querySelector('.device-shell')).borderColor, +})); + +const out = await page.evaluate(async ({ beforeUnavailable, afterUnavailable }) => { + const c = window.__card; + const sr = () => c.shadowRoot || c.renderRoot; + const node = (id) => sr().querySelector(`.dev[data-id="${id}"]`); + const rect = (element) => element?.getBoundingClientRect(); + const light = node('d_light1'); + const lightShell = light?.querySelector('.device-shell'); + const lightCore = light?.querySelector('.device-core'); + const shellRect = rect(lightShell); + const coreRect = rect(lightCore); + const presence = node('d_motion'); + const unavailable = node('d_kettle'); + const text = node('d_tv'); + const double = node('d_temp'); + const doubleShellRect = rect(double?.querySelector('.device-shell')); + const doubleCoreRect = rect(double?.querySelector('.device-core')); + const doubleValueRect = rect(double?.querySelector('.value-badge')); + const pseudo = getComputedStyle(light, '::before'); + + const lockNode = node('d_lock'); + lockNode.querySelector('.device-core').style.transition = 'none'; + const darkThemeClassProjected = lockNode.classList.contains('theme-dark'); + const darkThemeCore = getComputedStyle(lockNode.querySelector('.device-core')).backgroundColor; + lockNode.classList.remove('theme-dark'); + lockNode.classList.add('theme-light'); + const lightThemeCore = getComputedStyle(lockNode.querySelector('.device-core')).backgroundColor; + lockNode.classList.remove('theme-light'); + lockNode.classList.add('theme-dark'); + + 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 aria = unavailable.getAttribute('aria-label') || ''; + const viewKeyboard = unavailable.getAttribute('role') === 'button' + && unavailable.getAttribute('tabindex') === '0' + && enter.defaultPrevented && space.defaultPrevented && moreInfo === 2; + + await c._setMode('devices'); + await c.updateComplete; + const editorNode = node('d_light1'); + editorNode.dispatchEvent(new KeyboardEvent('keydown', { + key: 'Enter', bubbles: true, cancelable: true, + })); + await c.updateComplete; + const editorKeyboardOpensSettings = c._markerDialog?.devId === 'd_light1'; + c._markerDialog = null; + await c._setMode('plan'); + await c.updateComplete; + const planNode = node('d_light1'); + const planNotInTabOrder = !planNode?.hasAttribute('role') && !planNode?.hasAttribute('tabindex'); + + return { + sharedShellGeometry: !!shellRect && !!coreRect + && Math.abs(shellRect.width / coreRect.width - 1.26875) < 0.03, + packageShadowColor: getComputedStyle(lightShell).boxShadow.includes('37, 40, 45'), + noBackdropBlur: getComputedStyle(lightShell).backdropFilter === 'none', + activeUsesPackageAmber: getComputedStyle(lightCore).backgroundColor === 'rgb(240, 160, 12)', + lightThemeCoreIsWhite: lightThemeCore === 'rgb(255, 255, 255)', + darkThemeCoreIs252525: darkThemeClassProjected && darkThemeCore === 'rgb(37, 37, 37)', + hitAreaAtLeast44: parseFloat(pseudo.width) >= 44 && parseFloat(pseudo.height) >= 44, + presenceContinuousGreen: presence?.querySelector('.device-pulse.continuous.reason-presence') + && getComputedStyle(presence.querySelector('.device-pulse i')).borderColor === 'rgb(29, 194, 29)' + && getComputedStyle(presence.querySelector('.device-pulse i')).animationDuration === '3.6s', + lockedStateProjected: node('d_lock')?.classList.contains('lock-locked') + && node('d_lock')?.getAttribute('data-state') === 'locked', + lqiBandsProjected: node('d_temp')?.getAttribute('data-lqi-band') === 'low' + && node('d_window')?.getAttribute('data-lqi-band') === 'mid' + && node('d_lamp')?.getAttribute('data-lqi-band') === 'high', + unavailableHasNoHoverOrMotion: JSON.stringify(beforeUnavailable) === JSON.stringify(afterUnavailable) + && !unavailable.querySelector('.device-pulse'), + unavailableAriaIsReadable: /unavailable/i.test(aria) && /LQI|signal/i.test(aria), + textIsComplete: text?.querySelector('.valtext')?.textContent + === 'A very long localized device value without clipping' + && getComputedStyle(text.querySelector('.valtext')).textOverflow !== 'ellipsis' + && getComputedStyle(text.querySelector('.valtext')).overflow === 'visible' + && text.getAttribute('aria-label')?.includes('A very long localized device value without clipping'), + doubleUsesOneShell: !!doubleShellRect && !!doubleCoreRect && !!doubleValueRect + && doubleShellRect.left <= Math.min(doubleCoreRect.left, doubleValueRect.left) + && doubleShellRect.right >= Math.max(doubleCoreRect.right, doubleValueRect.right), + viewKeyboard, + editorKeyboardOpensSettings, + planNotInTabOrder, + }; +}, { beforeUnavailable, afterUnavailable }); + +checkAll(out); +await finish(browser, out); diff --git a/demo/smoke_device_preview_parity.mjs b/demo/smoke_device_preview_parity.mjs index fbca5591..7e3f2455 100644 --- a/demo/smoke_device_preview_parity.mjs +++ b/demo/smoke_device_preview_parity.mjs @@ -12,7 +12,7 @@ const res = await page.evaluate(async () => { const semantic = ['on', 'open', 'alarm', 'unavail', 'valonly', 'activity-running', 'activity-event', 'activity-presence', 'activity-transition']; return { classes: semantic.filter((name) => node.classList.contains(name)), - icon: node.querySelector(':scope > ha-icon')?.getAttribute('icon') || '', + icon: node.querySelector('.device-core > ha-icon')?.getAttribute('icon') || '', value: node.querySelector('.valtext')?.textContent?.trim() || '', badge: node.querySelector('.value-badge')?.textContent?.trim() || '', badgePosition: [...(node.querySelector('.value-badge')?.classList || [])] diff --git a/demo/smoke_static_icon.mjs b/demo/smoke_static_icon.mjs index 54dd6fc2..e51eb656 100644 --- a/demo/smoke_static_icon.mjs +++ b/demo/smoke_static_icon.mjs @@ -18,10 +18,10 @@ const out = await page.evaluate(async () => { 'static-icon', 'on', 'open', 'alarm', 'unavail', 'valonly', 'activity-running', 'activity-event', 'activity-presence', 'activity-transition', ].includes(name)), - icon: node.querySelector(':scope > ha-icon')?.getAttribute('icon') || '', + icon: node.querySelector('.device-core > ha-icon')?.getAttribute('icon') || '', satellites: node.querySelectorAll('.tval,.hval,.lqi,.valtext').length, scale: node.style.getPropertyValue('--dev-scale'), - angle: node.querySelector(':scope > ha-icon')?.style.transform || '', + angle: node.querySelector('.device-core > ha-icon')?.style.transform || '', }); const show = (device, states) => { const visibleSnapshot = card._visibleDeviceSnapshot; diff --git a/demo/srv/assets/houseplan-card.js b/demo/srv/assets/houseplan-card.js index faf42462..9f0d6fa7 100755 --- a/demo/srv/assets/houseplan-card.js +++ b/demo/srv/assets/houseplan-card.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17";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)},r=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:a,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)=>!a(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(r(t))}else void 0!==t&&e.push(r(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,E="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${E}(?:([^\\s"'>=/]+)(${E}*=${E}*(?:[^ \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?"":"",r=F;for(let e=0;e"===l[0]?(r=n??F,c=-1):void 0===l[1]?c=-2:(c=r.lastIndex-l[2].length,a=l[1],r=void 0===l[3]?N:'"'===l[3]?L:H):r===L||r===H?r=N:r===z||r===O?r=F:(r=N,n=void 0);const d=r===N&&t[e+1].startsWith("/>")?" ":"";o+=r===F?i+T:c>=0?(s.push(a),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 r=t.length-1,a=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())&&a.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 r,a;for(t=n[0],r=0;r{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}=rt,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,r=o!==t;if(r){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||r){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 r=0;for(const e of t)n[r]=s?s(e,r):r,o[r]=i(e,r),r++;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:r}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=r,o;const a=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(a[d]===r[p])l[p]=wt(n[d],o[p]),d++,p++;else if(a[u]===r[_])l[_]=wt(n[u],o[_]),u--,_--;else if(a[d]===r[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(a[u]===r[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(r,p,_),h=St(a,d,u)),c.has(a[d]))if(c.has(a[u])){const e=h.get(r[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=r,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__="4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba";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,E="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${E}(?:([^\\s"'>=/]+)(${E}*=${E}*(?:[^ \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=F;for(let e=0;e"===l[0]?(a=n??F,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=F:(a=N,n=void 0);const d=a===N&&t[e+1].startsWith("/>")?" ":"";o+=a===F?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`"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 Ft=(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=Ft(t.r,0,255)/255,i=Ft(t.g,0,255)/255,s=Ft(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let r=0;return o>0&&(r=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(r),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Ft(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=Ft(t.s,0,100)/100,s=Ft(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),r=s-n;let a;return a=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*(a[0]+r)),g:Math.round(255*(a[1]+r)),b:Math.round(255*(a[2]+r))}}(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,r=i.top+n,a=Math.max(o,i.left+i.width-n),l=Math.max(r,i.top+i.height-n),c=Math.max(0,a-o),h=Math.max(0,l-r),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>a&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,a-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=r?(m="top",f=Math.min(Math.max(r,g),Math.max(r,l-u))):f=Math.min(Math.max(r,_),Math.max(r,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 r=qt(n,o,s);return i.style.left=`${r.left}px`,i.style.top=`${r.top}px`,i.dataset.side=r.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),r=Math.round(this._saturation),a=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 Et(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 Ft=(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=Ft(t.r,0,255)/255,i=Ft(t.g,0,255)/255,s=Ft(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(Ft(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=Ft(t.s,0,100)/100,s=Ft(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` `:G} - `}}rr.properties={hass:{attribute:!1},presentation:{attribute:!1},registry:{attribute:!1},deviceName:{attribute:!1}},rr.styles=[Kt,o` + `}}ra.properties={hass:{attribute:!1},presentation:{attribute:!1},registry:{attribute:!1},deviceName:{attribute:!1}},ra.styles=[Kt,o` :host { display: block; min-width: 0; } .devicepreview { margin: 4px 0 14px; @@ -4091,22 +4211,22 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 .previewstage { min-height: 142px; } .previewfacts > div { grid-template-columns: minmax(0, 1fr); gap: 2px; } } - `],customElements.get("hp-device-preview")||customElements.define("hp-device-preview",rr);const ar=(t,e)=>[t[0]-e[0],t[1]-e[1]],lr=(t,e)=>[t[0]+e[0],t[1]+e[1]],cr=(t,e)=>t[0]*e[0]+t[1]*e[1],hr=t=>Math.hypot(t[0],t[1]);function dr(t){let e=0;for(let i=0;it[1]!=l>t[1]&&t[0]<(a-o)*(t[1]-r)/(l-r)+o&&(i=!i)}return i}([a[0]+r[0]*l,a[1]+r[1]*l],t)&&(r=[-r[0],-r[1]]),r}function _r(t,e,i,s){const n=s||pr(t,e),o=(e+1)%t.length;return t.map((t,s)=>s===e||s===o?[t[0]+n[0]*i,t[1]+n[1]*i]:[...t])}function gr(t,e,i,s){const n=[],o=ar(i,e),r=hr(o);if(rs||h>s)continue;const d=cr(ar(o,e),a),u=cr(ar(l,e),a),p=Math.max(0,Math.min(d,u)),_=Math.min(r,Math.max(d,u));_-p>s&&n.push([[e[0]+a[0]*p,e[1]+a[1]*p],[e[0]+a[0]*_,e[1]+a[1]*_]])}return n}function mr(t,e,i,s,n){const o=gr(t,e,i,n);if(!o.length)return null;const r=t=>o.some(([e,i])=>ur(t,e,i)<=n),a=t.length,l=[];for(let o=0;on||f>n)continue;const v=cr(ar(e,c),p),y=cr(ar(i,c),p),b=Math.max(0,Math.min(v,y)),w=Math.min(u,Math.max(v,y));if(!(w-b<=n)){if(b>n&&bn&&whr(ar(i,t[(s+1)%t.length]))>e);for(let t=0;t<2;t++)i=i.filter((t,s)=>{const n=i[(s-1+i.length)%i.length],o=i[(s+1)%i.length],r=(t[0]-n[0])*(o[1]-n[1])-(t[1]-n[1])*(o[0]-n[0]),a=hr(ar(o,n))||1;return Math.abs(r)/a>e});return i.length>=3?i:t}function vr(t){const e=t.length;if(e<3)return!1;for(let i=0;i(t[0]-n[0])*a[1]-(t[1]-n[1])*a[0],c=t=>(t[0]-n[0])*a[0]+(t[1]-n[1])*a[1],h=i,d=r-i;for(const e of t){const t=Math.abs(l(e));if(t<=i)continue;const n=c(e);n<=h||n>=d||tMath.abs(r+(t-u)/m*(a-r));s=Math.min(s,f(_),f(g))}}return s}function br(t,e,i){if(Di(t,e,i))return!0;if(Ci(t,e,i)||Ci(e,t,i))return!1;let s=0;try{const i=ni([[...t.map(t=>[t[0],t[1]]),[t[0][0],t[0][1]]]],[[...e.map(t=>[t[0],t[1]]),[e[0][0],e[0][1]]]]);for(const t of i)t?.[0]&&(s+=Pi(t[0]))}catch{return!1}return s>Math.max(1e-7,i*i)}function wr(t,e,i,s,n){const o=[i.n[0]*s,i.n[1]*s],r={polys:{},openings:{},movedSpans:{}};if(Math.abs(s)<1e-9)return r;for(const e of t){if(e.id===i.roomId){r.polys[e.id]=_r(e.poly,i.edge,s,i.n),r.movedSpans[e.id]=[[lr(i.a,o),lr(i.b,o)]];continue}const t=gr(e.poly,i.a,i.b,n);if(!t.length)continue;const a=mr(e.poly,i.a,i.b,o,n);a&&(r.polys[e.id]=a,r.movedSpans[e.id]=t.map(([t,e])=>[lr(t,o),lr(e,o)]))}for(const t of e)ur([t.x,t.y],i.a,i.b)<=n&&(r.openings[t.id]=[t.x+o[0],t.y+o[1]]);return r}function kr(t,e,i){for(const s of e)for(let e=0;ei)continue;const c=(t.x-n[0])*l[0]+(t.y-n[1])*l[1];if(c-t.length/2>=-i&&c+t.length/2<=a+i)return!0}return!1}function xr(t,e,i){return t.filter(t=>e.some(e=>{for(let s=0;sa.polys[t.id]||t.poly;for(const e of l){const s=t.find(t=>t.id===e),n=a.polys[e];if(!vr(n))return!1;const l=dr(s.poly),h=dr(n);if(Math.abs(h)t.find(t=>t.id===e).poly),d=t.map(c);for(const t of xr(e,h,2*r)){const e=a.openings[t.id];if(!kr(e?{...t,x:e[0],y:e[1]}:t,d,2*r))return!1}return!0}function Sr(t,e,i,s,n,o){const r=t=>[s[0]+(t[0]-s[0])*n,s[1]+(t[1]-s[1])*n],a={poly:t.poly.map(r),openings:{}};for(const s of e){let e=!1;for(let i=0;i{for(let e=0;et.id===i);if(!l)return!1;const c=t.filter(t=>t.id!==i).map(t=>t.poly),h=Sr(l,e,c,s,n,2*a),d=h.poly,u=function(t){const e=function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<3)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.pop(),n.pop(),s.concat(n)}(t);if(e.length<3)return 0;let i=1/0;for(let t=0;tt.id===i?d:t.poly);for(const t of xr(e,[l.poly],2*a)){const e=h.openings[t.id];if(!kr(e?{...t,x:e[0],y:e[1]}:t,p,2*a))return!1}return!0}function Cr(t,e,i){const s=i/e;return Pi(t)*s*s/1e4}function Dr(t,e){return e?`${Math.round(10.7639*t)} ft²`:`${(Math.round(10*t)/10).toFixed(1)} m²`}function Tr(t){const e=t%360;return e<0?e+360:e}function Pr(t,e){const i=function(t,e){return Tr(t+e)}(t,e)*Math.PI/180;return[Math.sin(i),-Math.cos(i)]}const Rr=Object.freeze({dawn:Object.freeze({top:"#aabdd1",bottom:"#e8c8b7",horizon:"rgba(255,201,156,.56)",sun:"rgba(255,188,125,.78)",vignette:"rgba(65,72,99,.21)",outlineNear:"rgba(74,57,61,.25)",outlineMid:"rgba(255,238,224,.40)",outlineFar:"rgba(255,224,202,.18)"}),day:Object.freeze({top:"#dce9ef",bottom:"#cbdce3",horizon:"rgba(255,245,220,.45)",sun:"rgba(255,239,190,.72)",vignette:"rgba(65,91,105,.16)",outlineNear:"rgba(45,62,71,.28)",outlineMid:"rgba(255,255,255,.42)",outlineFar:"rgba(255,255,255,.20)"}),dusk:Object.freeze({top:"#48536c",bottom:"#9a7380",horizon:"rgba(242,156,114,.34)",sun:"rgba(255,167,113,.55)",vignette:"rgba(20,26,44,.39)",outlineNear:"rgba(238,219,225,.40)",outlineMid:"rgba(229,207,218,.26)",outlineFar:"rgba(215,190,205,.12)"}),night:Object.freeze({top:"#111a27",bottom:"#1f2f3e",horizon:"rgba(79,120,151,.16)",sun:"rgba(169,208,231,0)",vignette:"rgba(3,8,14,.58)",outlineNear:"rgba(218,238,249,.56)",outlineMid:"rgba(174,215,238,.30)",outlineFar:"rgba(136,194,226,.14)"})}),Ar=t=>"number"==typeof t&&Number.isFinite(t),Ir=(t,e,i)=>Math.min(i,Math.max(e,t));function Er(t){return t.elevation<=-6?"night":t.elevation>=6?"day":t.rising?"dawn":"dusk"}function Fr(t){const e=(Math.floor(Number(t)||0)%1440+1440)%1440;return e>=300&&e<480?"dawn":e>=480&&e<1080?"day":e>=1080&&e<1260?"dusk":"night"}function zr(t){const e=Er(t),i=t.azimuth*Math.PI/180;return{sunX:50-42*Math.sin(i),sunY:78-Ir(t.elevation,0,90)/90*64,sunOpacity:"night"===e?0:Ir((t.elevation+6)/12,0,1)}}function Or(t){const e=(Math.floor(Number(t)||0)%1440+1440)%1440;if(e<300||e>=1260)return{sunX:50,sunY:78,sunOpacity:0};const i=(e-300)/960,s=(e-300)/120,n=(1260-e)/120;return{sunX:8+84*i,sunY:78-64*Math.sin(i*Math.PI),sunOpacity:Math.max(.18,Math.min(s,n,1))}}function Nr(t,e=new Date){const i=function(t){const e=t?.states?.["sun.sun"]?.attributes;return e&&Ar(e.azimuth)&&Ar(e.elevation)&&"boolean"==typeof e.rising?{azimuth:Tr(e.azimuth),elevation:e.elevation,rising:e.rising}:null}(t);if(i)return{phase:Er(i),source:"sun",...zr(i)};const s="number"==typeof e?e:function(t=new Date){return 60*t.getHours()+t.getMinutes()}(e);return{phase:Fr(s),source:"clock",...Or(s)}}function Hr(t){return`${t.source}|${t.phase}|${t.sunX.toFixed(2)}|${t.sunY.toFixed(2)}|`+t.sunOpacity.toFixed(3)}const Lr=[[-90,"#070c14"],[-12,"#070c14"],[-4,"#131a28"],[0,"#4a3527"],[10,"#e8ddcf"],[30,"#ffffff"],[90,"#ffffff"]],Br=t=>Math.min(1,Math.max(0,t));function qr(t,e,i=6){const s=t.angle*Math.PI/180,n=[Math.sin(s),-Math.cos(s)],o=s=>{const o=[t.x+n[0]*i*s,t.y+n[1]*i*s];return e.find(t=>t.poly.length>=3&&vi(o,t.poly))||null},r=o(1),a=o(-1);return r&&a?null:r||a?r?{normal:[-n[0],-n[1]],roomId:r.id}:{normal:n,roomId:a.id}:null}function jr(t,e,i){return i>0&&t[0]*e[0]+t[1]*e[1]>.05}function Wr(t,e,i,s){return[[t[0],t[1]],[e[0],e[1]],[e[0]+i[0]*s,e[1]+i[1]*s],[t[0]+i[0]*s,t[1]+i[1]*s]]}function Ur(t,e){try{const i=ni([[...t.map(t=>[t[0],t[1]]),[t[0][0],t[0][1]]]],[[...e.map(t=>[t[0],t[1]]),[e[0][0],e[0][1]]]]),s=[];for(const t of i){const e=t?.[0];!Array.isArray(e)||e.length<4||s.push(e.slice(0,e.length-1).map(t=>[t[0],t[1]]))}return s}catch{return[]}}function Gr(t,e,i,s,n,o,r){if(!(s>0))return[];const a=Pr(i,n),l=[-a[0],-a[1]],c=function(t){const e=Math.min(90,Math.max(0,t));return.7*(.8+1.7*Math.pow(1-e/90,1.6))}(s),h=[];for(const i of e){if(!(i.length>0))continue;const e=qr(i,t);if(!e||!jr(e.normal,a,s))continue;const n=t.find(t=>t.id===e.roomId);if(!n)continue;const d=o&&o[e.roomId]||n.poly,u=i.angle*Math.PI/180,p=i.length/2,_=[-e.normal[0],-e.normal[1]],g=Math.max(0,r?.[i.id]||0),m=i.x+_[0]*g/2,f=i.y+_[1]*g/2,v=Math.cos(u)*p,y=Math.sin(u)*p,b=[m-v,f-y],w=[m+v,f+y],k=c*i.length,x=Ur(Wr(b,w,l,k),d);if(!x.length)continue;const $=l[0]*_[0]+l[1]*_[1];h.push({openingId:i.id,roomId:e.roomId,polys:x,a:b,b:w,dir:l,len:k,normal:_,depth:k*$})}return h}const Vr=t=>"number"==typeof t&&Number.isInteger(t)&&t>=0&&t<=359?t:null;function Kr(t,e){const i=Vr(e?.north_deg);return null!==i?i:Vr(t?.north_deg)}function Yr(t,e){const i=t=>"static"===t||"daynight"===t?t:null;return i(e?.bg_mode)??i(t?.bg_mode)??"static"}function Xr(t,e){const i=e?.sun_rays;return"boolean"==typeof i?i:!0===t?.sun_rays}function Jr(t){const e=t?.states?.["sun.sun"]?.attributes,i=Number(e?.azimuth),s=Number(e?.elevation);return Number.isFinite(i)&&Number.isFinite(s)?{azimuth:i,elevation:s}:null}const Zr=["dawn","day","dusk","night"];function Qr(t){if(!t)return"";const e=Rr[t.phase];return[`--hp-day-cycle-outline-near:${e.outlineNear}`,`--hp-day-cycle-outline-mid:${e.outlineMid}`,`--hp-day-cycle-outline-far:${e.outlineFar}`].join(";")}function ta(t,e=1){if(!t)return G;const i=[`--hp-day-cycle-sun-x:${t.sunX.toFixed(2)}%`,`--hp-day-cycle-sun-y:${t.sunY.toFixed(2)}%`,`--hp-day-cycle-sun-opacity:${t.sunOpacity.toFixed(3)}`,`opacity:${Math.min(1,Math.max(0,e)).toFixed(4)}`].join(";");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(Nu(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=Nu(t,t=>t.classList.contains("editor-secondary")),s=Nu(t,t=>!!t.dataset.editorGroup),n=Nu(t,t=>!!t.dataset.editorPalette),o=Nu(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 Lu=t=>t.stopPropagation(),Bu=4.166666666666667e-9;function qu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Zl)*Zl;return Math.abs(e-t)<=Bu?t:e}const ju=(t,e,i,s)=>Math.hypot(i-t,s-e),Wu=(t,e,i,s,n,o,r,a)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+r-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+a-(e+s)))),Uu=(t,e,i,s,n,o,r)=>{const a=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*a,h=Math.sin(i*l)*a,d=Math.cos(r*l)*a,u=Math.sin(r*l)*a,p=Math.max(ju(t+c,e+h,n+d,o+u),ju(t-c,e-h,n-d,o-u)),_=Math.max(ju(t+c,e+h,n-d,o-u),ju(t-c,e-h,n+d,o+u));return Math.min(p,_)},Gu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Vu=t=>JSON.parse(JSON.stringify(t)),Ku=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yu=(t,e,i)=>Math.min(i,Math.max(e,t)),Xu=t=>Vl({spaces:[t]})[0],Ju=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),r=n(e);return o0?r:1,l=Math.max(s*a*.02,1e-9),c=[];for(const e of t||[])for(const t of hi(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 r of t||[]){if(!r?.id)continue;const c=Za(t,r.id,e,i,s,n,o,a);if(c)for(let t=0;t0&&u>0&&r===p&&u!==r))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=Ju(_,g,a),v=d.get(f);v?v.targets.add(r):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([r])})}}}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])*a,Number(t.a[1])*a],s=[Number(t.b[0])*a,Number(t.b[1])*a];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)=>Ju(t.a,t.b,a).localeCompare(Ju(e.a,e.b,a)))){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=Aa(u,t.a,t.b,e,s,a))}return u}const Qu=t=>{const e=[];for(const i of t||[]){const t=hi(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&&Ku(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(Ku(n,"segments")&&(delete n.segments,e++),Ku(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=jl&&t<=Wl&&(Ku(n,"plan_scale_x")||(n.plan_scale_x=t),Ku(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Ku(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?Yu(o,.1,1e3):5,e++);const r=Number(n.cell_cm),a=Number.isFinite(r)&&r>0?r:5;for(const t of n.wall_columns||[])if("circle"===t.shape)Ku(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Ku(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(Ku(t,"width")){const i=Number(t.width);(Ku(t,"width_cm")||Number.isFinite(i))&&(Ku(t,"width_cm")||(t.width_cm=Number(Yu(i/Jl*a,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Ku(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Ku(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(Yu(es*is(t)/Jl*a,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Ku(t,"scale")||Ku(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Yi(t[1]));if(!(Ku(t,"entity")||Ku(t,"attr")||Ku(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,r=s||n?"":Xi(t.entity,o);if(s||r){if(r){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+r+i.slice(e+2):`${i}${i?" ":""}${r}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let a=r.total;for(const t of i.spaces||[]){const e=Xu(t);if(!e)continue;if(!Fc(t.open_spans).length){const i=Lc(e.rooms,null,Bl,.02*Jl,!0);i.length&&(t.open_spans=Bc(i,Bl),a++)}}const l=Vu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,r=0,a=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Gu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Bu||s))return;n++,t>r&&(r=t);const o=t*Xl*e;o>a&&(a=o,l=i)};for(const t of i){const e=Gu(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=[qu(e[0]),qu(e[1])];return t=Math.max(t,ju(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,r=qu(e+n),a=qu(i+o),l=qu(e),c=qu(i),h=Math.max(Zl,r-l),d=Math.max(Zl,a-c);t=Wu(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=[qu(e[0]),qu(e[1])];return t=Math.max(t,ju(e[0],e[1],i[0],i[1])),i}),r=n.length?[n[0]]:[],a=[];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=[qu(s.a[0]),qu(s.a[1])],r=[qu(s.b[0]),qu(s.b[1])];let a=Math.max(ju(s.a[0],s.a[1],n[0],n[1]),ju(s.b[0],s.b[1],r[0],r[1]));const l=ju(n[0],n[1],r[0],r[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>=-Bu&&s+e/2<=l+Bu});l>Bu&&c?(s.a=n,s.b=r):a=0,p(a,e,i)}for(const s of t.wall_columns||[]){o++;const t=[qu(s.center[0]),qu(s.center[1])],n=ju(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=[qu(s.x1),qu(s.y1)],i=[qu(s.x2),qu(s.y2)];t=Math.max(ju(s.x1,s.y1,e[0],e[1]),ju(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=qu(s.x),i=qu(s.y);if(null!=s.w&&null!=s.h){const n=qu(s.x+s.w),o=qu(s.y+s.h),r=Math.max(Zl,n-e),a=Math.max(Zl,o-i);t=Wu(s.x,s.y,s.w,s.h,e,i,r,a),s.w=r,s.h=a}else t=ju(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 r=n.b[0]-n.a[0],a=n.b[1]-n.a[1];if(Math.hypot(r,a)<=Bu)continue;const l=n.a[0]+r*o,h=n.a[1]+a*o;let d=180*Math.atan2(a,r)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Uu(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=pi([s.x,s.y],t.rooms||[],.025,{step:Zl,length:Number(s.length)||0});if(!n)continue;const r=Number(s.angle),a=!(Number.isFinite(r)&&r===n.angle),l=Uu(s.x,s.y,Number.isFinite(r)?r:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,a&&c++,p(l,e,i,a)}}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=qu(i.x),r=qu(i.y),a=ju(i.x,i.y,n,r);s[t]={...i,x:n,y:r};const l="string"==typeof i.s?i.s:"";p(a,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:r,maxShiftCm:a,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=Xu(e),r=Xu(s);if(!o||!r)continue;const a=Qu(o.rooms),c=Qu(r.rooms),_=.02*Jl;let g=Yc(Fc(e.open_spans),a,c,Bl);const m=g.length;g=Kc(g,r.rooms,Bl,_),g=g.map(t=>{const e=Ic(t,Bl),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],r=e[2]-e[0],a=e[3]-e[1],l=Math.hypot(r,a)||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(r*s-a*e)/(l*c)<=1e-6&&zc(o,t).d<=4*_&&zc(i,t).d<=4*_&&zc(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,Jl,2*_),g=Nc(n,d,u,Jl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Jl)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*Jl){h.moved++;const t=m/Bl;t>h.maxShift&&(h.maxShift=t);const e=m/Jl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ac(p,g,Bl)}),g=Kc(g,r.rooms,Bl,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Ic(t,Bl));g.length?s.open_spans=g:delete s.open_spans,qc(s.rooms||[],r.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ra(e.walls,a,c,Zl,Bl);y=Zu(r.rooms,y,f,Zl,Number(s.cell_cm)>0?Number(s.cell_cm):5,Jl,Bl),y=el(r.rooms,y,f,Zl,Number(s.cell_cm)>0?Number(s.cell_cm):5,Jl,Bl),y=Ta(y,s.rooms||[],Zl,1,f.map(t=>[t[0]/Bl,t[1]/Bl,t[2]/Bl,t[3]/Bl])),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:a,glowSpacesMigrated:r.glowSpaces,glowRoomsMigrated:r.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class ep{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 ip=new WeakMap;const sp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function np(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 `,r=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=r}),a=t.createElement("canvas");a.width=4,a.height=1;const l=a.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 sp(c,i,0)&&sp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&sp(c,s,8)&&sp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(r)}}const op={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},rp=t=>Math.max(0,Math.min(1,t)),ap=(t,e,i)=>t+(e-t)*i,lp=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function cp(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 hp(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 dp(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 up(t,e,i){const s=dp(t),n=dp(e);if(!s||!n)return i<.5?t:e;const o=rp(i);return`rgba(${Math.round(ap(s[0],n[0],o))}, ${Math.round(ap(s[1],n[1],o))}, ${Math.round(ap(s[2],n[2],o))}, ${ap(s[3],n[3],o).toFixed(3)})`}function pp(t,e,i){const s=(t=>{const e=rp(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,lp(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=rp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:pp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(r):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(r),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 gp="houseplan_card_labs_v1",mp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function fp(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 vp(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 $p(t,e,i,s=mp){const n=function(t,e=mp){const i=fp(t),s=new Map;if(!i||!bp(e))return s;for(const t of e){const e=fp(t.since),n=fp(t.expires);vp(i,e)>=0&&vp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(bp(s)?s.map(t=>t.id):[]),r=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 a=!1;const l=t=>{if("off"===t)return r.clear(),void(a=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(a=!0,e||!n.has(i)?r.delete(i):r.add(i))};for(const e of xp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of xp(wp(t.hash)))l(e);const c=Object.freeze([...r].sort());return{active:c,space:kp(t.hash),persist:a?JSON.stringify(c):void 0,knownUrlOperation:a}}let Sp={active:Object.freeze([]),space:""},Mp="",Cp=!1,Dp="";const Tp=new Set;function Pp(){if("undefined"==typeof window)return Sp;const t=$p(window.location,function(){try{return window.localStorage.getItem(gp)}catch{return null}}(),Mp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(gp,t)}catch{}}(t.persist),Sp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Tp)t(Sp);return Sp}function Rp(){Pp()}function Ap(t){return Mp=t,"undefined"==typeof window?Sp:(Cp||(Cp=!0,window.addEventListener("hashchange",Rp),window.addEventListener("popstate",Rp)),Pp())}const Ip=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Ep=64;function Fp(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 zp(t,e,i=Ip){if(!(Fp(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],r=t[1]-i.origin[1],a=(o*Math.cos(s)-r*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+r*Math.cos(s))*i.xyScale;return[i.origin[0]+a,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function Op(t,e=Ip){if(!Fp(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 Np(t=Ip){return`matrix(${function(t=Ip){if(!Fp(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),r=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,r,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-r*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Hp(t,e=Ip){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 r=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],a=Math.max(s,n),l=r.flatMap(t=>[zp(t,-o,e),zp(t,a,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 Lp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Bp(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 Bp(i)>0===s?i:[...i].reverse()}function jp(t,e,i){return t.length?`M ${t.map(t=>Lp(zp(t,i,e))).join(" L ")} Z`:""}function Wp(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 Up(t,e,i=Ip){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=qp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Bp(t))>=1e-9)).filter(t=>t.length&&Bp(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(Bp(e[0]))-Math.abs(Bp(t[0]))});const n=[],o=[];let r=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:r}}function Gp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Vp=t=>t.every(Number.isFinite);function Kp(t,e,i,s){const n=t[0]*i,o=t[1]*s,r=e*Math.PI/180;return[n*Math.cos(r)-o*Math.sin(r),n*Math.sin(r)+o*Math.cos(r)]}function Yp(t,e,i,s,n,o,r){const a=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],Kp(i,t.angle,a,l));return{leaf:e,hinge:c,closedVector:Kp(s,t.angle,a,l),quarterVector:Kp([-s[1],s[0]],t.angle,a,l),turnDeg:n,bottom:o,top:r}}const Xp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Jp(t,e,i=Ip){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=zp(e.hinge,e.bottom,i),r=zp(n,e.bottom,i),a=zp(n,e.top,i),l=zp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${Xp(o)} L ${Xp(r)} L ${Xp(a)} L ${Xp(l)} Z`,shadowD:`M ${Xp(zp(e.hinge,0,i))} L ${Xp(zp(n,0,i))}`,depth:Math.max(o[1],r[1])}})}const Zp={window:120,door:90,passage:90,gate:300};function Qp(t){return Zp[t]}function t_(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 e_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=t_(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 i_(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 s_(t){const e=e_(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,r=s/n,a=(t[0]-e.a[0])*o+(t[1]-e.a[1])*r,l=Math.max(0,Math.min(n,a)),c=e.a[0]+l*o,h=e.a[1]+l*r;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])*r-(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],r=e.b[1]-e.a[1],a=Math.hypot(o,r);if(!(a>1e-9))return!1;const l=o/a,c=r/a;for(const o of i){if(!o.open&&o.kind)continue;const i=t_(o.a,o.b),r=i.b[0]-i.a[0],a=i.b[1]-i.a[1],h=Math.hypot(r,a);if(!(h>1e-9))continue;const d=r/h,u=a/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(i_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(i_);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),r=o.filter(t=>t.target.partitionHost);if(r.length){if(1!==new Set(r.map(t=>t.target.partitionHost.id)).size||r.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=r[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),a=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,r=s/n,c=Math.abs(a*r-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*a);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:a,length:l}=n,c=a.b[0]-a.a[0],h=a.b[1]-a.a[1],d=c/l,u=h/l,p=a.partitionHost?a.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=a.a[0]+d*g,y=a.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=[a.a[0]+d*(w-x/2),a.a[1]+u*(w-x/2)],M=[a.a[0]+d*(k+$/2),a.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:a,...a.partitionHost?{host:{...a.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 n_(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 o_="1.65.0-beta.5",r_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},a_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},l_=2e3,c_=1e3,h_=1500,d_=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},u_=(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}},p_=(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)}},__=new Map;let g_=0;const m_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let f_=1e4;const v_="houseplan_card_layout_v1",y_="houseplan_card_cfg_v1",b_="houseplan_card_zoom_v1",w_="houseplan_card_nav_v1",k_="houseplan_card_kiosk_v1",x_="houseplan_card_view_v1",$_=1e3,S_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],M_=(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}},C_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),D_=2e3,T_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},P_=t=>{history.pushState(null,"",t),T_(window,"location-changed",{replace:!1})},R_=(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},A_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class I_ 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=gn(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={...ea},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 _p({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Hu({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 ep(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=++g_,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+Tu)>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=()=>{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._space=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=In(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=Cn(t);e&&(Pn(t,e),Rn(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 oh(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=R_(()=>{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(v_,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=R_(()=>{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=d_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?xl:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?xl: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=d_(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&&Ll(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const r=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=$l(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=d_(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"),r),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=[],r=s.points.slice(0,n+1),a=s.points.slice(n+1);if(r.length>=2&&o.push({id:s.id,points:r,segments:s.segments.slice(0,n)}),a.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:a,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>D_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||pa];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=Hr(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:hs(this._settings,{bgColor:null})||null,northDeg:Kr(this._settings,{}),bgMode:Yr(this._settings,{}),sunRays:Xr(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=tp(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"),r=this.renderRoot.querySelector(".hp-backdrop"),a=this.renderRoot.querySelector(".zoomwrap"),l=a?getComputedStyle(a).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:cp(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:r&&Number(getComputedStyle(r).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=Oi(this._baseVb(),s/Math.max(1,n)),r=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,t)),a=o.w/r,l=o.h/r,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-a/2,y:h-l/2,w:a,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 r=this.renderRoot.querySelector(".editorchrome"),a=r?.querySelector(".editorchrome-inner"),l="view"===i?0:a?.scrollHeight||a?.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:cp(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)})}_slideTo(t,e){if(t===this._space)return;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._space=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())}_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()}}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new eh(()=>{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(x_,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?Op(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?zp([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 kp(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,ip.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=Qc(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=ip.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=np(t).catch(()=>!1).then(t=>(i.resolved=t,t)),ip.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,()=>As(this._serverCfg)),this._config?.kiosk&&Number(this._config?.cycle)>0&&(clearInterval(this._cycleTimer),this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle))),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Tp.add(e);const i=Ap(t);return"undefined"==typeof window&&e(i),()=>{Tp.delete(e)}}(o_,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},h_)),!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(),r=/^[a-z]$/.test(o),a="z"===o||!r&&"KeyZ"===t.code,l="y"===o||!r&&"KeyY"===t.code,c=n&&(a&&t.shiftKey||l),h=n&&a&&!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[1]/$_]),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 __.values())for(const e of t)clearTimeout(e.evict);__.clear(),f_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of __.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:__.size,slots:t,dlgs:e,drafts:i}}setConfig(t){this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t},this._config.kiosk&&(this._booting=!1,this._bootFading=!1),t.default_floor&&(this._space=t.default_floor);try{this._zoomBySpace=JSON.parse(localStorage.getItem(b_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(x_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Ap(o_);try{const t=JSON.parse(localStorage.getItem(k_)||"null");this._kioskScale={icon:zs(t?.icon),font:zs(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(y_)||"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||ih(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||ih(this._layout),this._virtualLights=gn(t.virtual_lights,this._cfgRev),this._serverStorage=!0,this._adoptInitialSpace(this._model))}catch{}"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=m_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=__.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>=Xc,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:r}=((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,r=0,a=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>r?(o=i,r=t,a=1):t===r&&a++)}return!o||a>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Xc,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},h_)),this._warmKey=t,r?(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=__.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},f_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);if(this._hashApplied||!this._model.find(t=>t.id===e.space))return void(this._warmVp=null);this._space=e.space,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 i=this._effectiveProjection(),s=i===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=s&&e.view?{...e.view}:null,this._viewModeSnap=s&&e.snap?{...e.snap}:null,!s&&e.logicalCenter){const t="iso"===i?zp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var n;this._tool="openwall"===(n=e.tool)||"closewall"===n?"boundary":"opening"===(n=function(t){return"partition"===t?"draw":t}(n))?"draw":"string"==typeof n&&C_.has(n)?n:"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=m_(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=__.get(i)||[];for(s.push(this._warmSlot),__.set(i,s),this._warmTrim(s);__.size>8;){const t=__.keys().next().value;if(void 0===t||t===i)break;for(const e of __.get(t)||[])clearTimeout(e.evict);__.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>f_)&&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=ih(this._serverCfg),this._layoutContentFingerprint=ih(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(yn).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(y_,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:fn(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){return 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){const e=this._initialSpaceSelection(t);return e.id?(this._space=e.id,"hash"===e.source&&(this._hashApplied=!0),"saved"===e.source&&(this._navApplied=!0),e):e}_candidateBackdrop(t,e=this._space){const i=Vl(t),s=this._initialSpaceSelection(i).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===s)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return sh([this._cfgRev,this._cfgContentFingerprint||ih(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||ih(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(qu(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=qu(t,t=>t.classList.contains("editor-secondary")),s=qu(t,t=>!!t.dataset.editorGroup),n=qu(t,t=>!!t.dataset.editorPalette),o=qu(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 Wu=t=>t.stopPropagation(),Uu=4.166666666666667e-9;function Gu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Uu?t:e}const Vu=(t,e,i,s)=>Math.hypot(i-t,s-e),Ku=(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)))),Yu=(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(Vu(t+c,e+h,n+d,o+u),Vu(t-c,e-h,n-d,o-u)),_=Math.max(Vu(t+c,e+h,n-d,o-u),Vu(t-c,e-h,n+d,o+u));return Math.min(p,_)},Xu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Ju=t=>JSON.parse(JSON.stringify(t)),Zu=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Qu=(t,e,i)=>Math.min(i,Math.max(e,t)),tp=t=>Kl({spaces:[t]})[0],ep=(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=ep(_,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)=>ep(t.a,t.b,r).localeCompare(ep(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 sp=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&&Zu(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(Zu(n,"segments")&&(delete n.segments,e++),Zu(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(Zu(n,"plan_scale_x")||(n.plan_scale_x=t),Zu(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Zu(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?Qu(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)Zu(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Zu(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(Zu(t,"width")){const i=Number(t.width);(Zu(t,"width_cm")||Number.isFinite(i))&&(Zu(t,"width_cm")||(t.width_cm=Number(Qu(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Zu(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Zu(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(Qu(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Zu(t,"scale")||Zu(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(!(Zu(t,"entity")||Zu(t,"attr")||Zu(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=tp(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=Ju(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=Xu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Uu||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=Xu(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=[Gu(e[0]),Gu(e[1])];return t=Math.max(t,Vu(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=Gu(e+n),r=Gu(i+o),l=Gu(e),c=Gu(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Ku(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=[Gu(e[0]),Gu(e[1])];return t=Math.max(t,Vu(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=[Gu(s.a[0]),Gu(s.a[1])],a=[Gu(s.b[0]),Gu(s.b[1])];let r=Math.max(Vu(s.a[0],s.a[1],n[0],n[1]),Vu(s.b[0],s.b[1],a[0],a[1]));const l=Vu(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>=-Uu&&s+e/2<=l+Uu});l>Uu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Gu(s.center[0]),Gu(s.center[1])],n=Vu(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=[Gu(s.x1),Gu(s.y1)],i=[Gu(s.x2),Gu(s.y2)];t=Math.max(Vu(s.x1,s.y1,e[0],e[1]),Vu(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=Gu(s.x),i=Gu(s.y);if(null!=s.w&&null!=s.h){const n=Gu(s.x+s.w),o=Gu(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Ku(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Vu(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)<=Uu)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=Yu(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=Yu(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=Gu(i.x),a=Gu(i.y),r=Vu(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=tp(e),a=tp(s);if(!o||!a)continue;const r=sp(o.rooms),c=sp(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=Ec(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=>Ec(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=ip(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 op{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 ap=new WeakMap;const rp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function lp(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 rp(c,i,0)&&rp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&rp(c,s,8)&&rp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const cp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},hp=t=>Math.max(0,Math.min(1,t)),dp=(t,e,i)=>t+(e-t)*i,up=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function pp(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 _p(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 gp(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 mp(t,e,i){const s=gp(t),n=gp(e);if(!s||!n)return i<.5?t:e;const o=hp(i);return`rgba(${Math.round(dp(s[0],n[0],o))}, ${Math.round(dp(s[1],n[1],o))}, ${Math.round(dp(s[2],n[2],o))}, ${dp(s[3],n[3],o).toFixed(3)})`}function fp(t,e,i){const s=(t=>{const e=hp(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,up(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=hp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:fp(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 yp="houseplan_card_labs_v1",bp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function wp(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 kp(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 Dp(t,e,i,s=bp){const n=function(t,e=bp){const i=wp(t),s=new Map;if(!i||!$p(e))return s;for(const t of e){const e=wp(t.since),n=wp(t.expires);kp(i,e)>=0&&kp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set($p(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 Cp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Cp(Sp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Mp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Tp={active:Object.freeze([]),space:""},Pp="",Rp=!1,Ap="";const Ip=new Set;function Ep(){if("undefined"==typeof window)return Tp;const t=Dp(window.location,function(){try{return window.localStorage.getItem(yp)}catch{return null}}(),Pp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(yp,t)}catch{}}(t.persist),Tp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Ip)t(Tp);return Tp}function Fp(){Ep()}function zp(t){return Pp=t,"undefined"==typeof window?Tp:(Rp||(Rp=!0,window.addEventListener("hashchange",Fp),window.addEventListener("popstate",Fp)),Ep())}const Op=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Np=64;function Hp(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 Lp(t,e,i=Op){if(!(Hp(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 Bp(t,e=Op){if(!Hp(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 qp(t=Op){return`matrix(${function(t=Op){if(!Hp(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 jp(t,e=Op){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=>[Lp(t,-o,e),Lp(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 Wp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Up(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 Up(i)>0===s?i:[...i].reverse()}function Vp(t,e,i){return t.length?`M ${t.map(t=>Wp(Lp(t,i,e))).join(" L ")} Z`:""}function Kp(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 Yp(t,e,i=Op){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=Gp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Up(t))>=1e-9)).filter(t=>t.length&&Up(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(Up(e[0]))-Math.abs(Up(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 Xp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Jp=t=>t.every(Number.isFinite);function Zp(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 Qp(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],Zp(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:Zp(s,t.angle,r,l),quarterVector:Zp([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const t_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function e_(t,e,i=Op){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=Lp(e.hinge,e.bottom,i),a=Lp(n,e.bottom,i),r=Lp(n,e.top,i),l=Lp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${t_(o)} L ${t_(a)} L ${t_(r)} L ${t_(l)} Z`,shadowD:`M ${t_(Lp(e.hinge,0,i))} L ${t_(Lp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const i_={window:120,door:90,passage:90,gate:300};function s_(t){return i_[t]}function n_(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 o_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=n_(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 a_(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 r_(t){const e=o_(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=n_(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(a_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(a_);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 l_(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 c_="1.65.0-beta.5",h_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},d_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},u_=2e3,p_=1e3,__=1500,g_=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},m_=(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}},f_=(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)}},v_=new Map;let y_=0;const b_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let w_=1e4;const k_="houseplan_card_layout_v1",x_="houseplan_card_cfg_v1",$_="houseplan_card_zoom_v1",S_="houseplan_card_nav_v1",M_="houseplan_card_kiosk_v1",C_="houseplan_card_view_v1",D_=1e3,T_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],P_=(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}},R_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),A_=2e3,I_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},E_=t=>{history.pushState(null,"",t),I_(window,"location-changed",{replace:!1})},F_=(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},z_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class O_ 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 vp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new ju({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 op(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=++y_,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+Iu)>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=()=>{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._space=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=F_(()=>{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(k_,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=F_(()=>{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=g_(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=g_(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=g_(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>A_)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=np(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:pp(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(O_.ZOOM_MAX,Math.max(O_.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:pp(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)})}_slideTo(t,e){if(t===this._space)return;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._space=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())}_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()}}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(C_,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?Bp(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?Lp([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 Mp(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,ap.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=ap.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=lp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),ap.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._config?.kiosk&&Number(this._config?.cycle)>0&&(clearInterval(this._cycleTimer),this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle))),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Ip.add(e);const i=zp(t);return"undefined"==typeof window&&e(i),()=>{Ip.delete(e)}}(c_,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},__)),!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]/D_,t[1]/D_]),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 v_.values())for(const e of t)clearTimeout(e.evict);v_.clear(),w_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of v_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:v_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t},this._config.kiosk&&(this._booting=!1,this._bootFading=!1),t.default_floor&&(this._space=t.default_floor);try{this._zoomBySpace=JSON.parse(localStorage.getItem($_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(C_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=zp(c_);try{const t=JSON.parse(localStorage.getItem(M_)||"null");this._kioskScale={icon:Fs(t?.icon),font:Fs(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(x_)||"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,this._adoptInitialSpace(this._model))}catch{}"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=b_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=v_.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},__)),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=v_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},w_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);if(this._hashApplied||!this._model.find(t=>t.id===e.space))return void(this._warmVp=null);this._space=e.space,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 i=this._effectiveProjection(),s=i===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=s&&e.view?{...e.view}:null,this._viewModeSnap=s&&e.snap?{...e.snap}:null,!s&&e.logicalCenter){const t="iso"===i?Lp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var n;this._tool="openwall"===(n=e.tool)||"closewall"===n?"boundary":"opening"===(n=function(t){return"partition"===t?"draw":t}(n))?"draw":"string"==typeof n&&R_.has(n)?n:"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=b_(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=v_.get(i)||[];for(s.push(this._warmSlot),v_.set(i,s),this._warmTrim(s);v_.size>8;){const t=v_.keys().next().value;if(void 0===t||t===i)break;for(const e of v_.get(t)||[])clearTimeout(e.evict);v_.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>w_)&&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(x_,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){return 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){const e=this._initialSpaceSelection(t);return e.id?(this._space=e.id,"hash"===e.source&&(this._hashApplied=!0),"saved"===e.source&&(this._navApplied=!0),e):e}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._initialSpaceSelection(i).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===s)?.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()} @@ -4549,26 +4671,26 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${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 Vl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return t=this._model,e=this._space,t.find(t=>t.id===e)??t[0];var t,e}_spaceModelById(t){return function(t,e){if(e)return t.find(t=>t.id===e)}(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._space=""}}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||In(e),s=On(e,i),{areaToSpace:n,markers:o,settings:r,excluded:a,iconRules:l}=t,c=!1!==r.group_lights,h=yo(o),d=fo(s,c).filter(t=>!bo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=qn(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"!==Bn(e,"device:"+t.id,i).kind)continue;const r=p[t.id]||[],h=jn(s,t,r);let d=a.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"===vo(s,e,t.model,r,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 us(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=ih(n),r=o!==(this._cfgContentFingerprint||ih(this._serverCfg));if(r&&(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=mn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);vn(e)!==vn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let a=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=ih(t);a=s!==(this._layoutContentFingerprint||ih(this._layout)),a&&(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),r&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),a&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:r,layoutChanged:a}}_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=ih(n)!==(this._cfgContentFingerprint||ih(this._serverCfg))||ih(s?.layout??{})!==(this._layoutContentFingerprint||ih(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),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(v_)||"{}")||{}}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,r)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(r,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=wn(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(ih(e)!==(this._cfgContentFingerprint||ih(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),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=An(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return In(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=On(this.hass,t),n=Nn(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+Tu)>t?1:0)).join("|"),i=vn(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,r=new Set(["sun.sun"]);this._vacFit?.source&&r.add(this._vacFit.source);const a=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void r.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?a.add(s):"entity"===i&&r.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 mi(e))r.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=Yi(t[1]);e?.entity&&r.add(e.entity)}e.entity&&r.add(e.entity),o.set(`decor:${t.id}:${e.id}`,ts(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!bo(s,t,yo(this._markers))))}const h=lo(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(pu(t.id,e),cu(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?vh(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=uu({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:r,deviceIds:a,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 Bn(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=In(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&&P_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else P_("/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,As(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=ih(i);s!==(this._layoutContentFingerprint||ih(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")+":"+sr(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=xo({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,Bn(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Ln(),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));Mn=s;try{localStorage.setItem(Sn,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const r=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())r.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 a=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));a&&("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)&&(T_(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=uo(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return zi(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*_c(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),r=.1*Math.min(o.w,o.h),a=o.w-2*r,l=o.h-2*r,c=Math.max(1,Math.round(Math.sqrt(n.length*a/Math.max(l,1)))),h=Math.ceil(n.length/c),d=a/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+r+d*(e%c+.5),y:o.y+r+u*(Math.floor(e/c)+.5)}));Ni(p,o,s,.5*r),n.forEach((e,i)=>t[e.id]=tc(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*$_,y:i.y*$_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?tc(pc(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,r=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:ic(n/$_),y:ic(o/$_),...r?{k:r}:{}}}}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 nu(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(pu(t.id,e));return s||cu(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,lu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=_o(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:po(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 Bs(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&go(this.hass,t.primary)?mo(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,T_(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=Vh(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||!Qh(t))return;const e=t=>{const e=Qh(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=wn(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&&td(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}}_t(t,e){return nr(sr(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=sr(this.hass,this._config?.language);return or(i,t)&&or(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=oc([[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=oc("line"===t.kind?[[t.x1*$_,t.y1*i],[t.x2*$_,t.y2*i]]:"text"===t.kind?[[t.x*$_,t.y*i]]:ca({x:t.x*$_,y:t.y*i,w:t.w*$_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=oc(i);t&&e.push(t)}}return ac(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:$_,h:$_};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=dc(this._contentItems(t));let n=s.all||uc(t),o=this._showFar?n:s.core||uc(t);return e&&e.id===t.id&&i&&e.grow&&(o=M_(e.rect,o),n=M_(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=Gp(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=Gp(e,-1)}else e=Gp(e,t?1:0);else for(const i of t)e=Gp(e,i.codePointAt(0)||0);else e=Gp(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:Ip,wallHeight:Ep,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Rl(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),r=e.length||n.length?dl(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,$_,n):null;if((e.length||n.length)&&!r)throw new Error("wall boolean geometry failed");const a=r?.paperGeom??function(t,e,i,s,n,o,r=1){try{const a=cl(t,e,i,s,n,o,r);return a?a.shell?.length?si(a.centre,a.shell):a.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_);if(!a)throw new Error("floor boolean geometry failed");const l=r?.openingIndex||gl(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?ld(i.partitionHost,s):e.length||"gate"===t.type?yl(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(!(Vp([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=[Yp(t,0,[-i,0],[i,0],o,0,.88*e),Yp(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[Yp(t,0,[-i,0],[i,0],-90,.27*e,.78*e),Yp(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[Yp(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:r?.geom||[],floor:a,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 Vp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Hp({rect:n?M_(i,n):i,wallHeight:Ep,openingHeight:Ep,floorDepth:10}),r=function(t,e=Ip,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let r=0;for(let a=0;a<(t||[]).length;a++){const l=t[a];for(let t=0;t<(l||[]).length;t++){const c=qp(l[t],t>0);if(!(c.length<3||Math.abs(Bp(c))<1e-9)){s.push(jp(c,e,i)),r+=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:r}}(s.walls),a={geometry:r,floor:Up(s.floor,10),openings:s.openings,frame:o};return p_(this._isoGeometryCache,t.key,a,8),{key:t.key,...a}}_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?zp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=Op([t.x,t.y]),i=Op([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=Hp({rect:this._frameOf().rect,wallHeight:Ep});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 t=this._model,e=this._space,t.find(t=>t.id===e)??t[0];var t,e}_spaceModelById(t){return function(t,e){if(e)return t.find(t=>t.id===e)}(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._space=""}}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),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(k_)||"{}")||{}}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),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=En(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+Iu)>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(fu(t.id,e),pu(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?yh(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=mu({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=En(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)&&(I_(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 Fi(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*D_,y:i.y*D_}}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/D_),y:sc(o/D_),...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 lu(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(fu(t.id,e));return s||pu(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,uu({...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,I_(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=Kh(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||!td(t))return;const e=t=>{const e=td(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&&ed(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*D_,t.y1*i],[t.x2*D_,t.y2*i]]:"text"===t.kind?[[t.x*D_,t.y*i]]:hr({x:t.x*D_,y:t.y*i,w:t.w*D_,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:D_,h:D_};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=P_(e.rect,o),n=P_(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=Xp(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=Xp(e,-1)}else e=Xp(e,t?1:0);else for(const i of t)e=Xp(e,i.codePointAt(0)||0);else e=Xp(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:Op,wallHeight:Np,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,D_,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,D_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,D_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?cd(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(!(Jp([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=[Qp(t,0,[-i,0],[i,0],o,0,.88*e),Qp(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[Qp(t,0,[-i,0],[i,0],-90,.27*e,.78*e),Qp(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[Qp(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 Jp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=jp({rect:n?P_(i,n):i,wallHeight:Np,openingHeight:Np,floorDepth:10}),a=function(t,e=Op,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=Gp(l[t],t>0);if(!(c.length<3||Math.abs(Up(c))<1e-9)){s.push(Vp(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:Yp(s.floor,10),openings:s.openings,frame:o};return f_(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?Lp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=Bp([t.x,t.y]),i=Bp([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=jp({rect:this._frameOf().rect,wallHeight:Np});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})} -
`}_renderHomeArrow(){if(this._booting)return G;const t=this._view;if(!t||!t.w||!t.h)return G;const e=this._baseVb(),i=e[0],s=e[1],n=e[2],o=e[3];if(!(i+n<=t.x||i>=t.x+t.w||s+o<=t.y||s>=t.y+t.h))return G;const r=Math.atan2(s+o/2-(t.y+t.h/2),i+n/2-(t.x+t.w/2)),a=50+38*Math.cos(r),l=50+38*Math.sin(r);return j``}_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:Oi(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,r=i+s-e+n;return Math.max(Math.min(o,r),Math.min(Math.max(o,r),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=Oi(s,this._stageAspect()),o=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,t)),r=n.w/o,a=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-r/2,y:h-a/2,w:r,h:a},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},h_)}_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>=Xc?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=Oi(this._baseVb(),this._stageAspect()),o=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const r=s.clientWidth,a=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/r*c,y:l[1]-e/a*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=Oi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(b_,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._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=Oi(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&&P_("/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},A_(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),r=(t.clientX-this._drag.sx)/n.width*o.w,a=(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=ec(this._drag.ox+r),c=ec(this._drag.oy+a);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 I_._noHoverMq||I_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(I_._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 Jl}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 li(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,$_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return ui(t?.rooms||[]).map(t=>[t[0]*$_,t[1]*e,t[2]*$_,t[3]*e])}_savedNav(){try{return JSON.parse(localStorage.getItem(w_)||"null")}catch{return null}}_saveNav(){try{localStorage.setItem(w_,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),r=this._modeTransitionBusy,a=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=r&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(r?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:r?this._modeTransitionTargetCenterX:a?.viewport.centerX,u=c?c.centerY:r?this._modeTransitionTargetCenterY:a?.viewport.centerY;if("view"===s&&"view"!==t&&!r){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||r||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:a?.viewport.centerX,centerY:a?.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?zp([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?a?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=a,this._prepareModeTransition(p,a,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(a,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=ma(pa,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?ma(pa,this._imperial):this._drawWallField}get _drawWallCm(){const t=d_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?xl:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?xl:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:ma(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=xd(this._path,this._draftSegmentCms,pa),i=e.length;if((t.partitions||[]).length+i>D_)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>=D_:(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[ec(ai(t[0],e)),ec(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 r=Math.PI/4;let a=Math.atan2(o,n);a<0&&(a+=2*Math.PI);const l=Math.floor(a/r+.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,Yl):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=vl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,r=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-r,e.x+o,e.y+r])}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=vd({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=vd({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(!(dd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const r=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>dd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of r){if(yd(t.point,n,s))continue;const r=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);r>i.tolerance||!bd(r,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:r})}if(o)return o;let a=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],r=Hs([e[0],e[1]],t);if(r>i.tolerance)continue;const l=wd(o,e,i.gridStep);!yd(l,n,s)&&bd(r,o.key,a)&&(a={kind:"line",point:l,key:o.key,distance:r,segment:o})}return a}(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 fi(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))<=Kl);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:$l(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Sl(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=Fc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Ta(t.walls,t.rooms||[],Zl,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){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._space=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=hi(e);return!!i&&wi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=hi(e);return!!i&&Di(t,i)})}_pointInRoom(t,e){return e.poly?vi(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(!vr(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>D_)||(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 r=this._draftEndAt(n,this._activeDraftId||void 0);if(r)return void this._mergeDraftEndpoint(r);if(!this._canAppendRoomDraftPoint())return;const a=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(a)}_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,r=n.find(e=>e.id===t.draft.id);if(!r)return;const a=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(r.segments||[]).map(t=>({...t})):[...r.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,a[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?a.slice(1):a],_=[...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)+(r.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)||Pi(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||r,id:b,points:m.map(t=>[t[0]/$_,t[1]/$_]),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[1]/$_]),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:kd,s=Wd(t,i),n=new Map,o=new Map,r=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Dd(t.a,i),s=Dd(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 a=new Map;for(const[t,e]of o){const i=n.get(t);a.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=[Dd(t.a,i),Dd(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(Td(u,p));const s=a.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=Md(g);if(!(m>i*i))continue;const f=Pd(Rd(e,n,i)),v=new Set;for(const t of d)for(const e of r.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 r;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);r=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(!r.length)return;for(const t of s.rooms){const e=hi(t);if(!t.id||!e)continue;const i=Ei(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Pi(s)>=Pi(n)?s:n,a=o===s?n:s,l=[...r].sort((t,e)=>Math.abs(t.area-Pi(a))-Math.abs(e.area-Pi(a))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:a.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:a},consumeAllActive:!0}])}const a=r.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));a.length&&this._beginWallFaceBatch(a)}_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(xl);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:$l(i),angle:0},o=(s.wall_columns||[]).find(t=>Ll(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 r=this._geometrySnapshot(),a=this._curSpaceCfg;a.wall_columns||=[],a.wall_columns.push({...n,center:[e[0]/$_,e[1]/$_]}),this._recordGeometry(this._t("history.column_add"),r),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:ma(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:ma(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Sl(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:ma(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(),A_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Nl(n,Tl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Dl(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 r=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),a=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===r&&a-l.at>380&&a-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:r,index:c,x:t.clientX,y:t.clientY,at:a},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(-Kl*$_-Math.min(...n),Math.min(Kl*$_-Math.max(...n),i[0])),Math.max(-Kl*$_-Math.min(...o),Math.min(Kl*$_-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]/$_,n.a[1]/$_],t.b=[n.b[0]/$_,n.b[1]/$_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=nd(t,[n],$_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,hd(t,i,$_))}}}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&&Ll(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/$_,(n.center[1]+e.delta[1])/$_])}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(),A_(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:Sl(e.angle),angle:Sl(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=Sl(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&&Ll(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?hi(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 r=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[1]/r]),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]/$_,e.y=i[1]/r)}const a=[],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[1]*r]);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:pr(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(),A_(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 r=Math.sign(s);let a=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&a>1e-9;s++,a-=l){const s=r*a;if($r(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 r=wr(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(r.polys),this._rszApplyPreview(r.polys,r.openings),this._rszLive=this._rszEdgeLabels(r,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(Mr(t,e,i,s,n,o))return n;let r=1,a=n;for(let n=0;n<28;n++){const n=(r+a)/2;Mr(t,e,i,s,n,o)?r=n:a=n}return r}(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),r=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),a=Sr(o,e.openings,r,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:a.poly},a.openings),this._rszLive=this._rszScaleLabels(a.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=fr(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Ta(n.walls,n.rooms||[],Zl,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,r=e.edge,a=(r+1)%o;for(const[t,e]of[[n[(r-1+o)%o],n[r]],[n[r],n[a]],[n[a],n[(a+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&&nl(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||n,r=$i(o),a=u.length?zl(Fl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Cr(o,this._gridPitch,this._cellCm);s.push({x:r[0],y:r[1],text:Dr(a,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),r=this._spaceWalls,a=r.length&&this._rszSel&&nl([{id:this._rszSel,poly:t}],this._rszSel,r,[],this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||t,l=$i(a),c=this._physicalBodiesR(),h=c.length?zl(Fl(a,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Cr(a,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:Dr(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=[],r=this._rszRooms();for(const t of r)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(O_.ZOOM_MAX,Math.max(O_.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},__)}_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(O_.ZOOM_MAX,Math.max(O_.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($_,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._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},z_(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 O_._noHoverMq||O_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(O_._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,D_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*D_,t[1]*e,t[2]*D_,t[3]*e])}_savedNav(){try{return JSON.parse(localStorage.getItem(S_)||"null")}catch{return null}}_saveNav(){try{localStorage.setItem(S_,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?Lp([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=g_(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=$d(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>A_)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>=A_:(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=yd({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=yd({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(!(ud(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=>ud(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(bd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!wd(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=kd(o,e,i.gridStep);!bd(l,n,s)&&wd(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){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._space=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>A_)||(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]/D_,t[1]/D_]),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]/D_,t[1]/D_]),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:xd,s=Ud(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Td(t.a,i),s=Td(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=[Td(t.a,i),Td(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(Pd(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=Cd(g);if(!(m>i*i))continue;const f=Rd(Ad(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]/D_,e[1]/D_]}),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(),z_(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*D_-Math.min(...n),Math.min(Yl*D_-Math.max(...n),i[0])),Math.max(-Yl*D_-Math.min(...o),Math.min(Yl*D_-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]/D_,n.a[1]/D_],t.b=[n.b[0]/D_,n.b[1]/D_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=od(t,[n],D_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,dd(t,i,D_))}}}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])/D_,(n.center[1]+e.delta[1])/D_])}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(),z_(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]/D_,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]/D_,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]*D_,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(),z_(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,D_)||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,D_)||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)} @pointercancel=${t=>this._rszPointerCancel(t)} - @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}const a=this._rszSel?r.find(t=>t.id===this._rszSel):null;if(a){const t=a.poly.map(t=>t[0]),i=a.poly.map(t=>t[1]),s=Math.min(...t),n=Math.max(...t),r=Math.min(...i),l=Math.max(...i);o.push(W``);for(const[t,i,c,h]of[[s,r,n,l],[n,r,s,l],[n,l,s,r],[s,l,n,r]])o.push(W`this._rszCornerDown(e,a.id,[t,i],[c,h])} + @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}const r=this._rszSel?a.find(t=>t.id===this._rszSel):null;if(r){const t=r.poly.map(t=>t[0]),i=r.poly.map(t=>t[1]),s=Math.min(...t),n=Math.max(...t),a=Math.min(...i),l=Math.max(...i);o.push(W``);for(const[t,i,c,h]of[[s,a,n,l],[n,a,s,l],[n,l,s,a],[s,l,n,a]])o.push(W`this._rszCornerDown(e,r.id,[t,i],[c,h])} @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*$_,ry:t.y*e,rlen:t.length*$_};if(!t.host)return[s];const n=nd(t,i.partitions,$_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,r]=n.resolved.center;const a=this._physicalDrag;return a?.moved&&"partition"===a.kind&&a.id===t.host.id&&(o+=a.delta[0],r+=a.delta[1]),[{...t,rx:o,ry:r,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=nd(n,t.partitions,$_,this._cellCm,this._gridPitch);i.resolved&&s.push(ad(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=Qa(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_);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&&cd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?ld(t.partitionHost,i):yl(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 $_}_decorResolvedStyle(t){return function(t,e,i,s=ea){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,r=Rt(o?.color,s.color);return{color:r,opacity:ia(o?.opacity,s.opacity),widthCm:aa(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?r:s.fillColor),fillOpacity:n&&o?.fill?ia(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ea)}_decorWidthUnits(t){return((t,e,i,s=ea.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return oa(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:oa(s,e,i)})(t,this._cellCm,this._gridPitch,ea.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:ra(es*is(t),this._cellCm,this._gridPitch)}return ra(es,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return es;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?oa(e,this._cellCm,this._gridPitch):es*is(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(l_,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(Kl*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*$_,y:t.y*this._decorH,w:t.w*$_,h:t.h*this._decorH,angle:sa(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*$_,e.y1*this._decorH],i=[e.x2*$_,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*$_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(ha(t))}for(const t of e.rooms){const e=hi(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,r=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),r=Math.hypot(e[0]-t[0],e[1]-t[1]);r<=i&&(!o||rthis._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},A_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:ic(e[0]/$_),y:ic(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:ra(es,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=-sa(e.angle)*Math.PI/180,r=i[0]-s,a=i[1]-n,l=[s+r*Math.cos(o)-a*Math.sin(o),n+r*Math.sin(o)+a*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=$_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),r="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),a=ic;let l;if("line"===t.kind)l={id:r,kind:"line",x1:a(t.a[0]/i),y1:a(t.a[1]/s),x2:a(t.b[0]/i),y2:a(t.b[1]/s),...la(n,!1)};else{const e=a(Math.min(t.a[0],t.b[0])/i),o=a(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:r,kind:t.kind,x:e,y:o,w:c,h:h,...la(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=r,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()},A_(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)*$_,o=("line"===s.kind?s.y1:s.y)*this._decorH,r=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let a=(r[0]-n)/$_,l=(r[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,_=Kl;a=Math.max(-_-h,Math.min(_-h-u,a)),l=Math.max(-_-d,Math.min(_-d-p,l)),(a||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+a,y1:i.y1+l,x2:i.x2+a,y2:i.y2+l}:{...t,x:i.x+a,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(sa(i?Os([i.x1*$_,i.y1*this._decorH],[i.x2*$_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:ra(Math.hypot((i.x2-i.x1)*$_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:ra(s.w,this._cellCm,this._gridPitch),sizeHCm:ra(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=>!!Yi(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Xi(t.entity,n),r=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!r){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:ia(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:r||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=Xi(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 r=s.slice(0,n)+i+s.slice(o),a=n+i.length;this._decorTextSelection={start:a,end:a},this._decorTextDialog={...e,text:r,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(a,a))})}_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:ia(t.opacity),size_cm:Number(Math.max(.1,Math.min(l_,t.sizeCm)).toFixed(4)),...sa(t.angle)?{angle:sa(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,...r}=i;return{...r,text:e,...n}}const{entity:s,attr:o,unit:r,...a}=i,{angle:l,size:c,scale:h,...d}=a;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:ia(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:ia(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=la(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*$_,s=(e.y1+e.y2)/2*this._decorH,o=oa(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),r=sa(t.angle)*Math.PI/180,a=Math.cos(r)*o/2,l=Math.sin(r)*o/2,c=this._snap([i-a,s-l]),h=this._snap([i+a,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:ic(c[0]/$_),y1:ic(c[1]/this._decorH),x2:ic(h[0]/$_),y2:ic(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*$_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(oa(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),r=Math.max(this._gridPitch,ai(oa(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),a=e.x*$_+i/2,l=e.y*this._decorH+s/2,c=sa(t.angle),h=na({x:a-o/2,y:l-r/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:ic(h[0]/$_),y:ic(h[1]/this._decorH),w:o/$_,h:r/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.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*$_,(t.y+t.h/2)*this._decorH]:[t.x*$_,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(l_,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,r]=this._dtPivot(n),a=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:r,r0:Math.hypot(a[0]-o,a[1]-r),a0:180*Math.atan2(a[1]-r,a[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},A_(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=ic(s[0]/$_),o=ic(s[1]/this._decorH),r=e.origShape,a=0===e.lineEnd?r.x1:r.x2,l=0===e.lineEnd?r.y1:r.y2;return(Math.abs(n-a)>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=da(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(l_,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*$_,s=t.y1*this._decorH,n=t.x2*$_,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*$_,y:t.y*this._decorH,w:t.w*$_,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=kc(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=$_,o=this._decorH,r=Cc($c(i.w,this._cellCm,this._gridPitch,n)),a=Cc($c(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:Rc(h,d,a*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:ic(h/n-r/2),y:ic(d/o-a/2),w:r,h:a,...la(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=$_,o=this._decorH,r=this._svgPoint(t),a=(i.x+i.w/2)*n+(r[0]-e.start[0]),l=(i.y+i.h/2)*o+(r[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Rc(a,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([a-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=ic(c),h=ic(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=$_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=na(e,i.angle,t=>this._snap(t));return{...i,x:ic(o[0]/s),y:ic(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Kl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Kl,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=$_,s=this._decorH,n=e.w*i,o=e.h*s,r=function(t,e,i,s,n){const o=t+i/2,r=e+s/2,a=(Number(n)||0)*Math.PI/180,l=Math.cos(a),c=Math.sin(a),h=(t,e)=>{const i=t-o,s=e-r;return[o+i*l-s*c,r+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),a=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=a(r[0],r[1]),c=a(r[0],r[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*D_,ry:t.y*e,rlen:t.length*D_};if(!t.host)return[s];const n=od(t,i.partitions,D_,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=od(n,t.partitions,D_,this._cellCm,this._gridPitch);i.resolved&&s.push(ld(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,D_);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&&hd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?cd(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 D_}_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(u_,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*D_,y:t.y*this._decorH,w:t.w*D_,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*D_,e.y1*this._decorH],i=[e.x2*D_,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*D_,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},z_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/D_),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=D_,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()},z_(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)*D_,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)/D_,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*D_,i.y1*this._decorH],[i.x2*D_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*D_,(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(u_,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*D_,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]/D_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/D_),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*D_,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*D_+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]/D_),y:sc(h[1]/this._decorH),w:o/D_,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*D_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*D_,(t.y+t.h/2)*this._decorH]:[t.x*D_,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(u_,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},z_(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]/D_),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(u_,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*D_,s=t.y1*this._decorH,n=t.x2*D_,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*D_,y:t.y*this._decorH,w:t.w*D_,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=D_,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=D_,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=D_,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=D_,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")} @@ -4578,16 +4700,16 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
- ${yc.map(e=>j` + ${bc.map(e=>j`
${this._t(`furn.group_${e}`)}
- ${xc(e).map(e=>j``)}
`)} @@ -4603,22 +4725,22 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @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?{...ql(t.plan_aspect,$_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Ul(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),r=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:r,sy:Number.isFinite(o)&&o>0?o:r,angle:sa(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:ra(e.w,this._cellCm,this._gridPitch),heightCm:ra(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=sa(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Wl,Math.max(e.w*jl,ai(oa(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),r=Math.min(e.h*Wl,Math.max(e.h*jl,ai(oa(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),a=na({x:i.x+i.w/2-o/2,y:i.y+i.h/2-r/2},s,t=>this._snap(t));this._bdApply((a[0]-e.x)/$_,(a[1]-e.y)/$_,o/e.w,r/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(ic(t).toFixed(6)),o.plan_y=Number(ic(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Wl,Math.max(jl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Wl,Math.max(jl,s)).toFixed(6));const r=sa(n);r?o.plan_angle=Number(r.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),r=e?e[0]:0,a=e?e[1]:0,l=r>0?n.x:n.x+n.w,c=a>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:r,sgy:a,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},A_(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)]),r=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply((o[0]-s.x)/$_,(o[1]-s.y)/$_,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 r=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(r=5*Math.round(r/5)),r=sa(r);const a=Math.abs(r-e.p0.angle)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,r)}const n=da(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*jl),o=n.w/Math.max(1e-9,s.w),r=n.h/Math.max(1e-9,s.h),a=Math.abs(o-e.p0.sx)>1e-9||Math.abs(r-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!a&&!e.moved)return;e.moved||=a;const l=na(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/$_,(l[1]-s.y)/$_,o,r,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,r=sa(e.angle),a=2.2*i;return W` +
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,D_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,D_):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)/D_,(r[1]-e.y)/D_,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},z_(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)/D_,(o[1]-s.y)/D_,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)/D_,(l[1]-s.y)/D_,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` - - + {t.stopPropagation(),t.preventDefault(),this._bdStart(t,void 0,!0)}}> - - ${[[-1,-1,"nwse"],[1,-1,"nesw"],[1,1,"nwse"],[-1,1,"nesw"]].map(([t,n,o])=>{const r=t<0?e.x:e.x+e.w,a=n<0?e.y:e.y+e.h;return W` + ${[[-1,-1,"nwse"],[1,-1,"nesw"],[1,1,"nwse"],[-1,1,"nesw"]].map(([t,n,o])=>{const a=t<0?e.x:e.x+e.w,r=n<0?e.y:e.y+e.h;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*$_,e.y1*this._decorH],i=[e.x2*$_,e.y2*this._decorH];return W` + cx="${a}" cy="${r}" r="${i.toFixed(1)}" + @pointerdown=${e=>{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*D_,e.y1*this._decorH],i=[e.x2*D_,e.y2*this._decorH];return W` ${[t,i].map((t,e)=>W`this._dtStart(t,"scale",void 0,e)}> `)} - `}const[o,r]=this._dtPivot(e),a=Number(e.angle)||0,l=2.2*s;return W` + `}const[o,a]=this._dtPivot(e),r=Number(e.angle)||0,l=2.2*s;return W` this._dtStart(i,"scale",[t,e])}>`)} - `}_renderDecorLayer(){const 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":""),r=this._decorResolvedStyle(n),a=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W``}_renderDecorLayer(){const t=D_,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` ${i&&"select"===this._decorTool?W``:G}`;if("rect"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=sa(n.angle);return W``:G}`;if("rect"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=nr(n.angle);return W` ${s?W``:G}`}if("ellipse"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=sa(n.angle);return W``:G}`}if("ellipse"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=nr(n.angle);return W` ${s?W``:G}`}if("furniture"===n.kind){const i=n.w*t,h=n.h*e,d=Tc(n.symbol,i,h);if(!d)return G;const u=Number(n.angle)||0,p=n.x*t+i/2,_=n.y*e+h/2,g=`${u?`rotate(${u} ${p} ${_}) `:""}translate(${n.x*t} ${n.y*e})`;return W``:G}`}if("furniture"===n.kind){const i=n.w*t,h=n.h*e,d=Pc(n.symbol,i,h);if(!d)return G;const u=Number(n.angle)||0,p=n.x*t+i/2,_=n.y*e+h/2,g=`${u?`rotate(${u} ${p} ${_}) `:""}translate(${n.x*t} ${n.y*e})`;return W` ${s?W``:G}`}if("text"===n.kind){const i=this._decorTextUnits(n),s=this._renderDeviceSnapshot?.facts.get(`decor:${this._space}:${n.id}`),a=function(t){return String(t??"").replace(/\r\n?/g,"\n").split("\n")}("string"==typeof s?s:ts(n.text,n,this._renderPlanHass,t=>this._renderEntityAvailable(t))),h=n.x*t,d=n.y*e,u=Number(n.angle)||0,p=d-(a.length-1)*i*1.2/2;return W``:G}`}if("text"===n.kind){const i=this._decorTextUnits(n),s=this._renderDeviceSnapshot?.facts.get(`decor:${this._space}:${n.id}`),r=function(t){return String(t??"").replace(/\r\n?/g,"\n").split("\n")}("string"==typeof s?s:Qi(n.text,n,this._renderPlanHass,t=>this._renderEntityAvailable(t))),h=n.x*t,d=n.y*e,u=Number(n.angle)||0,p=d-(r.length-1)*i*1.2/2;return W`${a.map((t,e)=>W`${t}`)}`}return G});let o=G;const r=this._decorDraft;if(r){const t=this._decorStyle,e=oa(t.widthCm,this._cellCm,this._gridPitch);if("line"===r.kind)o=W``;else{const i=Math.min(r.a[0],r.b[0]),s=Math.min(r.a[1],r.b[1]),n=Math.abs(r.b[0]-r.a[0]),a=Math.abs(r.b[1]-r.a[1]);o="rect"===r.kind?W``:W`${r.map((t,e)=>W`${t}`)}`}return G});let o=G;const a=this._decorDraft;if(a){const t=this._decorStyle,e=ar(t.widthCm,this._cellCm,this._gridPitch);if("line"===a.kind)o=W``;else{const i=Math.min(a.a[0],a.b[0]),s=Math.min(a.a[1],a.b[1]),n=Math.abs(a.b[0]-a.a[0]),r=Math.abs(a.b[1]-a.a[1]);o="rect"===a.kind?W``:W``}}return W`${n}${o}`}get _editorToolbarGroups(){return"plan"!==this._mode?[]:[{id:"opening",label:this._t("markup.opening"),icon:"mdi:door",activeItemId:"opening"===this._tool?this._openingPreset?.type:void 0,items:[{id:"window",label:this._t("opening.window"),icon:"mdi:window-closed-variant",role:"tool",invoke:()=>this._activateOpeningPlacement("window")},{id:"door",label:this._t("opening.door"),icon:"mdi:door-open",role:"tool",invoke:()=>this._activateOpeningPlacement("door")},{id:"passage",label:this._t("opening.passage"),icon:"mdi:arch",role:"tool",invoke:()=>this._activateOpeningPlacement("passage")},{id:"gate",label:this._t("opening.gate"),icon:"mdi:gate",role:"tool",invoke:()=>this._activateOpeningPlacement("gate")}]}]}_renderEditorGroupLauncher(t){return this._editorSecondary.renderGroupLauncher(t,this._editorToolbarGroups,this._editorSecondaryCopy)}get _editorSecondaryContextId(){const t=`editor:${this._mode}:${this._space}:${this._cfgEpoch}`,e=this._editorSecondary.activeGroup(this._editorToolbarGroups);if(e)return`${t}:group:${e.id}:${this._editorSecondary.groupGeneration}`;if("plan"===this._mode){const e=this._physicalSel;return e?`${t}:selection:${e.kind}:${e.id}:${e.segment??""}`:`${t}:tool:${this._tool}:${this._path.length}:${this._openWallAnchor?1:0}`}return"decor"===this._mode?"furniture"===this._decorTool?`${t}:palette:furniture:${this._furnPalette?.symbol||"none"}`:"select"===this._decorTool&&this._decorSel?`${t}:selection:decor:${this._decorSel}`:`${t}:tool:${this._decorTool}:${this._bdMoved?1:0}:${this._bdDrag?1:0}`:`${t}:none`}_runEditorContext(t,e){this._editorSecondary.runContext(t,this._editorSecondaryContextId,e)}_renderEditorGroupModel(t){return this._editorSecondary.renderGroupModel(t,this._editorSecondaryContextId,this._editorSecondaryCopy)}_renderDrawWallControl(){return j``}_renderPlanSecondary(){const t=this._editorSecondaryContextId,e=this._physicalSel;if(e){if(!("partition"===e.kind?!!this._curSpaceCfg.partitions?.some(t=>t.id===e.id):"column"===e.kind?!!this._curSpaceCfg.wall_columns?.some(t=>t.id===e.id):!!this._curSpaceCfg.room_drafts?.some(t=>t.id===e.id)))return null;const i="partition"===e.kind?this._t("markup.partition"):"column"===e.kind?this._t("markup.column"):this._t("markup.add");return{contextId:t,kind:"selection",ariaLabel:this._t("editor.context_actions",{object:i}),visibleLabel:i,content:j`
@@ -4808,8 +4930,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `}_rangeInput(t,e,i,s,n,o=!1,r){const a=t=>{const e=Number(t.target.value);Number.isFinite(e)&&n(e)};return customElements.get("ha-slider")?j``:j``}_renderColorRow(t,e){const i=this._settingsDialog.colors[t];return j`
+ `}_setFillColor(t,e){const i=this._settingsDialog;this._settingsDialog={...i,colors:{...i.colors,[t]:{...i.colors[t],...e}}}}async _saveSettingsDialog(){const t=this._settingsDialog;if(t&&!t.busy){this._settingsDialog={...t,busy:!0};try{const e=this._serverCfg,i=JSON.stringify(t.colors)===JSON.stringify(hs),s={...e.settings};i?delete s.fill_colors:s.fill_colors=t.colors;const n=this._imperial?30.48*t.glowRadius:100*t.glowRadius;Number.isFinite(n)&&n>0&&300!==Math.round(n)?s.glow_radius_cm=Math.round(n):delete s.glow_radius_cm,t.bgColor?s.bg_color=t.bgColor:delete s.bg_color,null!==t.northDeg&&Number.isInteger(t.northDeg)&&t.northDeg>=0&&t.northDeg<=359?s.north_deg=t.northDeg:delete s.north_deg,s.bg_mode=t.bgMode,t.sunRays?s.sun_rays=!0:delete s.sun_rays,delete s.weather_entity,this._serverCfg={...e,settings:s},await this._saveConfigNow(),this._settingsDialog=null,this.requestUpdate(),this._showToast(this._t("gs.saved"))}catch(t){this._settingsDialog&&(this._settingsDialog={...this._settingsDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}_boolInput(t,e,i=!1){const s=t=>e(!!t.target.checked);return customElements.get("ha-switch")?j``:j``}_rangeInput(t,e,i,s,n,o=!1,a){const r=t=>{const e=Number(t.target.value);Number.isFinite(e)&&n(e)};return customElements.get("ha-slider")?j``:j``}_renderColorRow(t,e){const i=this._settingsDialog.colors[t];return j`
{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)),r=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),r=Math.cos(i);return o([t.rx+s*n,t.ry+r*n])&&o([t.rx-s*n,t.ry-r*n])}),a=this._roomWallOpeningInputs(r,t);for(const t of a){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(r.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:Rl(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?dl(t.rooms,p,i,a,this._wallKeyPitch,this._cellCm,this._gridPitch,$_,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(...Vd(t));else for(const t of h)f.push(...Vd(t));for(const{poly:t}of e)for(const e of s.length?Ts(t,s,m):Vd(t))f.push(e);const y={occluders:Gd(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:hi(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:r,floor:a,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=lo(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=co(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=$s(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(Hl([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:Ss(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=u_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Xd([f.x,f.y],m,r,96);b={lit:t.length>=3?El([t],a):[]},p_(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&&nl(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||i,o=this._cleanFloor(e,s,t).path,r=Ti(s,n.filter(t=>t.r!==e).map(t=>t.poly)),a=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||a(s),...r.map(a)].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,D_,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(...Kd(t));else for(const t of h)f.push(...Kd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Kd(t))f.push(e);const y={occluders:Vd(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})=>Es(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=m_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Jd([f.x,f.y],m,a,96);b={lit:t.length>=3?Fl([t],r):[]},f_(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,D_)||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` ${""} - ${S_.map(([e,i])=>W` + ${T_.map(([e,i])=>W` `)} @@ -5230,7 +5352,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("gs.glow_radius")} {const e=d_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> + @input=${t=>{const e=g_(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")}
@@ -5253,7 +5375,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._settingsDialog.bgColor?j``:j`${this._t("gs.bg_theme")}`}
`:j`
${this._t("gs.bg_daynight_hint")}
`} - ${Jr(this.hass)?G:j`
${this._t("gs.sun_missing")}
`} + ${Za(this.hass)?G:j`
${this._t("gs.sun_missing")}
`}
${this._renderCompass()}
@@ -5305,14 +5427,14 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
`:G} -
${this._t("gs.about_version",{v:o_})}
+
${this._t("gs.about_version",{v:c_})}
${this._t("gs.about_github")} ${this._t("gs.about_telegram")}
- @@ -5362,7 +5484,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${t.busy?"…":this._t("btn.save")}
-
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(k_,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(M_,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])}% @@ -5400,7 +5522,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._spaceDialog?this._renderSpaceDialog():G} ${this._importDialog?this._renderImportDialog():G} ${this._toast?j``:G} - `;const i=this._spaceModel();if(!i)return G;const s=i.vb,n=this._effectiveProjection();this._renderProjection=n,this._labs.active.length&&function(t){Mp||Ap(t);const e=Sp,i=e.active.join(",");if(!i||i===Dp)return;Dp=i;const s=new Map(mp.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}`)}(o_);const o="iso"===n,r="devices"===this._mode&&this._showAll,a=this._renderDevices.filter(t=>t.space===i.id&&(!t.hidden||r)),l=this._renderDeviceSnapshot,c=this._spaceDisplayForRender(),h=o?this._isoDecorationLayers(c):null,d=h?this._isoOpeningPanels(h):[],u=this._resolvedRoomFills(i,c),p=this._resolvedGlowBase(i,c,u),_=c.showLqi??this._config.show_signal??!0,g=this._config.icon_size??2.5,m=g>8?2.5:g,f=this._viewOr(this._baseVb()),v=this._floorView(f),y=this._editing?"":this._stageBg(c),b=this._opMeasureView,w=this._decorMeasure,k=this._bdLive,x=this._furnLive,$="view"===this._mode?this._editorChromeMode:this._mode,S=this._roomHoverPaths(i),M=i.bg?this._display(i.bg.href):"",C=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,D=this._modeTransitionVisual,T=this._dayCycleState(),P=D?.viewWeight??("view"===this._mode?1:0),R=this._modeTransition.state?.from.presentedMode,A=!this._markup||!!D&&("view"===D.presentedMode||"devices"===D.presentedMode||"view"===R||"devices"===R),I=D?.stageColor||y,E=D?.sceneBrightness??1;return j` + `;const i=this._spaceModel();if(!i)return G;const s=i.vb,n=this._effectiveProjection();this._renderProjection=n,this._labs.active.length&&function(t){Pp||zp(t);const e=Tp,i=e.active.join(",");if(!i||i===Ap)return;Ap=i;const s=new Map(bp.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}`)}(c_);const o="iso"===n,a="devices"===this._mode&&this._showAll,r=this._renderDevices.filter(t=>t.space===i.id&&(!t.hidden||a)),l=this._renderDeviceSnapshot,c=this._spaceDisplayForRender(),h=o?this._isoDecorationLayers(c):null,d=h?this._isoOpeningPanels(h):[],u=this._resolvedRoomFills(i,c),p=this._resolvedGlowBase(i,c,u),_=c.showLqi??this._config.show_signal??!0,g=this._config.icon_size??2.5,m=g>8?2.5:g,f=this._viewOr(this._baseVb()),v=this._floorView(f),y=this._editing?"":this._stageBg(c),b=this._opMeasureView,w=this._decorMeasure,k=this._bdLive,x=this._furnLive,$="view"===this._mode?this._editorChromeMode:this._mode,S=this._roomHoverPaths(i),M=i.bg?this._display(i.bg.href):"",C=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,D=this._modeTransitionVisual,T=this._dayCycleState(),P=D?.viewWeight??("view"===this._mode?1:0),R=this._modeTransition.state?.from.presentedMode,A=!this._markup||!!D&&("view"===D.presentedMode||"devices"===D.presentedMode||"view"===R||"devices"===R),I=D?.stageColor||y,E=D?.sceneBrightness??1;return j` `:G} `)}
`:G} - ${this._t("count.devices",{n:a.filter(t=>!t.hidden).length})} + ${this._t("count.devices",{n:r.filter(t=>!t.hidden).length})} ${this._labsIso&&"view"===this._mode&&!this._kiosk?j``,y=n.candidates.some(t=>_.has(t.entityId)&&"known_xcme_incomplete"===t.category)||!!n.pinned&&!!o?.startsWith("camera.")&&!r?.hasPosition;return j` + `,y=n.candidates.some(t=>_.has(t.entityId)&&"known_xcme_incomplete"===t.category)||!!n.pinned&&!!o?.startsWith("camera.")&&!a?.hasPosition;return j`
${this._t("vac.diag_source")}${o||this._t("vac.source_none")}
- ${r?.platform?j`
${this._t("vac.diag_platform")}${r.platform}
`:G} + ${a?.platform?j`
${this._t("vac.diag_platform")}${a.platform}
`:G}
${this._t("vac.diag_status")}${this._t(`vac.source_status_${n.status}`)}
-
${this._t("vac.diag_position")}${a?.pos?this._t("common.yes"):this._t("common.no")}
-
${this._t("vac.diag_rooms")}${ss(this._t("vac.diag_rooms_value"),{total:String(a?.rooms.length||0),matched:String(h),readiness:this._t(h>=3?"vac.autocal_ready":"vac.autocal_not_ready")})}
-
${this._t("vac.diag_path")}${a?.path.length?this._t("common.yes"):this._t("common.no")}
-
${this._t("vac.diag_map")}${a?.mapId??"default"}
+
${this._t("vac.diag_position")}${r?.pos?this._t("common.yes"):this._t("common.no")}
+
${this._t("vac.diag_rooms")}${is(this._t("vac.diag_rooms_value"),{total:String(r?.rooms.length||0),matched:String(h),readiness:this._t(h>=3?"vac.autocal_ready":"vac.autocal_not_ready")})}
+
${this._t("vac.diag_path")}${r?.path.length?this._t("common.yes"):this._t("common.no")}
+
${this._t("vac.diag_map")}${r?.mapId??"default"}
${"missing"===n.status||"disabled"===n.status||"unverified"===n.status?j`
${this._t(`vac.source_banner_${n.status}`)} @@ -5739,7 +5861,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("vac.documentation")}
- ${a?j` + ${r?j`
`}_vacMapId(t,e,i=this._planHass){const s=this._vacEntity(t),n=s?i?.states?.[s]?.attributes?.selected_map:null;return o=e.mapId,r=n,"default"!==o?o:null!=r?String(r):"default";var o,r}_vacSaveMatrix(t,e,i,s){const n=this._devices.find(e=>e.id===t),o=n?this._vacEnsureMarker(n):this._serverCfg?.markers?.find(e=>e.id===t);if(!o)return!1;const r={...o.vacuum||{}};return r.source=e,r.calibration={...r.calibration||{},[i]:s.map(t=>Number(t.toFixed(6)))},o.vacuum=r,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:hi(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const i=ph(e);return i?{name:String(t.name),cx:i[0],cy:i[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this._vacSource(t),i=e?vh(this.hass?.states[e]?.attributes):null;if(!e||!i||i.rooms.length<3)return void this._showToast(this._t("vac.autocal_no_rooms"));const s=this._vacPlanRoomAnchors(t.space),n=wh(i.rooms,s);if(!n)return void this._showToast(this._t("vac.autocal_no_match"));const o=this._serverCfg?.spaces?.find(e=>e.id===t.space),r=Number(o?.cell_cm),a=Number.isFinite(r)&&r>0?r:5,l=function(t,e,i){return![t,e,i].every(Number.isFinite)||t<0||e<=0||i<=0?Number.POSITIVE_INFINITY:t/e*i}(n.residual,this._gridPitch,a),c=this._vacMapId(t,i);l>40?this._vacCalConfirm={markerId:t.id,source:e,mapId:c,matrix:n.matrix,rooms:n.matched.length,error:li(l,"mi"===this.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,c,n.matrix)&&this._showToast(ss(this._t("vac.autocal_done"),{rooms:String(n.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this._vacCalConfirm;if(e){if(this._vacCalConfirm=null,t){const t=this._devices.find(t=>t.id===e.markerId),i=Mh(e.matrix);if(!t||!i)return;return this._markerDialog=null,t.space!==this._space&&(this._space=t.space),void(this._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:i,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this._showToast(ss(this._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this._vacSource(t),i=e?vh(this.hass?.states[e]?.attributes):null;if(!e||!i)return void this._showToast(this._t("vac.cal_need_pos"));const s=this._vacMapId(t,i),n=t.marker?.vacuum?.calibration?.[s],o=this._spaceModelById(t.space);if(!o)return;const r=o.vb,a=n&&6===n.length&&Mh(n)||function(t,e){const i=[],s=[];for(const e of t)null!=e.x0?(i.push(e.x0,e.x1),s.push(e.y0,e.y1)):(i.push(e.cx),s.push(e.cy));if(!i.length)return{ox:e[0]+e[2]/2,oy:e[1]+e[3]/2,s:e[2]/1e4,rot:0,mir:!0};const n=Math.min(...i),o=Math.max(...i),r=Math.min(...s),a=Math.max(...s),l=Math.max(o-n,a-r)||1,c={ox:0,oy:0,s:.6*Math.min(e[2],e[3])/l,rot:0,mir:!0},h=Sh(c),[d,u]=ch(h,(n+o)/2,(r+a)/2);return c.ox=e[0]+e[2]/2-d,c.oy=e[1]+e[3]/2-u,c}(i.rooms,r);this._markerDialog=null,t.space!==this._space&&(this._space=t.space),this._vacFit={markerId:t.id,source:e,mapId:s,p:a,drag:null}}_vacFitSave(){const t=this._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Sh(t.p));this._vacFit=null,e&&this._showToast(this._t("vac.cal_done"))}_vacFitTurn(t){const e=this._vacFit;if(!e)return;const i=vh(this.hass?.states[e.source]?.attributes),s=this._vacGhostCentre(i?.rooms||[]),n={...e.p,...t};this._vacFit={...e,p:Ch(n,e.p,s[0],s[1])}}_vacGhostCentre(t){const e=[],i=[];for(const s of t)e.push(s.x0??s.cx,s.x1??s.cx),i.push(s.y0??s.cy,s.y1??s.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...i)+Math.max(...i))/2]:[0,0]}_vacDelta(t,e,i){const s=this._stageEl,n=s?.clientWidth||1,o=s?.clientHeight||1;return[e/n*t.w,i/o*t.h]}_vacFitPointer(t,e){const i=this._vacFit;if(!i)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,s=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this._vacFit={...i,drag:s?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:Number(s.split(",")[0]),fy:Number(s.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:0,fy:0}})}const s=i.drag;if(s){if("pointermove"===t.type){const[n,o]=this._vacDelta(e,t.clientX-s.sx,t.clientY-s.sy);if("move"===s.kind)this._vacFit={...i,p:{...s.p0,ox:s.p0.ox+n,oy:s.p0.oy+o}};else{const t=vh(this.hass?.states[i.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),r=Sh(s.p0),[a,l]=ch(r,e[0],e[1]),[c,h]=ch(r,s.fx,s.fy),d=Math.hypot(a-c,l-h)||1,[u,p]=[2*a-c,2*l-h],_=Math.hypot(u+2*n-c,p+2*o-h)/2,g=Math.max(.05,_/d),m={...s.p0,s:s.p0.s*g};this._vacFit={...i,p:Ch(m,s.p0,s.fx,s.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this._vacFit={...i,drag:null})}}_renderVacFit(t){const e=this._vacFit;if(!e)return G;const i=vh(this._renderPlanHass?.states?.[e.source]?.attributes);if(!i)return G;const s=Sh(e.p),n=[],o=[],r=[];for(const t of i.rooms){if(null==t.x0)continue;const e=[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]].map(([t,e])=>ch(s,t,e));e.forEach(([t,e])=>{o.push(t),r.push(e)});const[i,a]=ch(s,t.cx,t.cy);n.push(W` - ${t.name}`)}let a=G;if(i.pos){const[e,n]=ch(s,i.pos.x,i.pos.y);a=W``}const l=[];if(o.length){const e=(()=>{const t=s[0]*s[4]-s[1]*s[3];return(e,i)=>[(s[4]*(e-s[2])-s[1]*(i-s[5]))/t,(-s[3]*(e-s[2])+s[0]*(i-s[5]))/t]})(),i=Math.min(...o),n=Math.max(...o),a=Math.min(...r),c=Math.max(...r),h=.022*t.w,d=h/4;for(const[t,s,o,r]of[[i,a,n,c],[n,a,i,c],[n,c,i,a],[i,c,n,a]]){const i=e(o,r);l.push(W``}_vacMapId(t,e,i=this._planHass){const s=this._vacEntity(t),n=s?i?.states?.[s]?.attributes?.selected_map:null;return o=e.mapId,a=n,"default"!==o?o:null!=a?String(a):"default";var o,a}_vacSaveMatrix(t,e,i,s){const n=this._devices.find(e=>e.id===t),o=n?this._vacEnsureMarker(n):this._serverCfg?.markers?.find(e=>e.id===t);if(!o)return!1;const a={...o.vacuum||{}};return a.source=e,a.calibration={...a.calibration||{},[i]:s.map(t=>Number(t.toFixed(6)))},o.vacuum=a,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:ci(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const i=_h(e);return i?{name:String(t.name),cx:i[0],cy:i[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this._vacSource(t),i=e?yh(this.hass?.states[e]?.attributes):null;if(!e||!i||i.rooms.length<3)return void this._showToast(this._t("vac.autocal_no_rooms"));const s=this._vacPlanRoomAnchors(t.space),n=kh(i.rooms,s);if(!n)return void this._showToast(this._t("vac.autocal_no_match"));const o=this._serverCfg?.spaces?.find(e=>e.id===t.space),a=Number(o?.cell_cm),r=Number.isFinite(a)&&a>0?a:5,l=function(t,e,i){return![t,e,i].every(Number.isFinite)||t<0||e<=0||i<=0?Number.POSITIVE_INFINITY:t/e*i}(n.residual,this._gridPitch,r),c=this._vacMapId(t,i);l>40?this._vacCalConfirm={markerId:t.id,source:e,mapId:c,matrix:n.matrix,rooms:n.matched.length,error:ri(l,"mi"===this.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,c,n.matrix)&&this._showToast(is(this._t("vac.autocal_done"),{rooms:String(n.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this._vacCalConfirm;if(e){if(this._vacCalConfirm=null,t){const t=this._devices.find(t=>t.id===e.markerId),i=Ch(e.matrix);if(!t||!i)return;return this._markerDialog=null,t.space!==this._space&&(this._space=t.space),void(this._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:i,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this._showToast(is(this._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this._vacSource(t),i=e?yh(this.hass?.states[e]?.attributes):null;if(!e||!i)return void this._showToast(this._t("vac.cal_need_pos"));const s=this._vacMapId(t,i),n=t.marker?.vacuum?.calibration?.[s],o=this._spaceModelById(t.space);if(!o)return;const a=o.vb,r=n&&6===n.length&&Ch(n)||function(t,e){const i=[],s=[];for(const e of t)null!=e.x0?(i.push(e.x0,e.x1),s.push(e.y0,e.y1)):(i.push(e.cx),s.push(e.cy));if(!i.length)return{ox:e[0]+e[2]/2,oy:e[1]+e[3]/2,s:e[2]/1e4,rot:0,mir:!0};const n=Math.min(...i),o=Math.max(...i),a=Math.min(...s),r=Math.max(...s),l=Math.max(o-n,r-a)||1,c={ox:0,oy:0,s:.6*Math.min(e[2],e[3])/l,rot:0,mir:!0},h=Mh(c),[d,u]=hh(h,(n+o)/2,(a+r)/2);return c.ox=e[0]+e[2]/2-d,c.oy=e[1]+e[3]/2-u,c}(i.rooms,a);this._markerDialog=null,t.space!==this._space&&(this._space=t.space),this._vacFit={markerId:t.id,source:e,mapId:s,p:r,drag:null}}_vacFitSave(){const t=this._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Mh(t.p));this._vacFit=null,e&&this._showToast(this._t("vac.cal_done"))}_vacFitTurn(t){const e=this._vacFit;if(!e)return;const i=yh(this.hass?.states[e.source]?.attributes),s=this._vacGhostCentre(i?.rooms||[]),n={...e.p,...t};this._vacFit={...e,p:Dh(n,e.p,s[0],s[1])}}_vacGhostCentre(t){const e=[],i=[];for(const s of t)e.push(s.x0??s.cx,s.x1??s.cx),i.push(s.y0??s.cy,s.y1??s.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...i)+Math.max(...i))/2]:[0,0]}_vacDelta(t,e,i){const s=this._stageEl,n=s?.clientWidth||1,o=s?.clientHeight||1;return[e/n*t.w,i/o*t.h]}_vacFitPointer(t,e){const i=this._vacFit;if(!i)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,s=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this._vacFit={...i,drag:s?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:Number(s.split(",")[0]),fy:Number(s.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:0,fy:0}})}const s=i.drag;if(s){if("pointermove"===t.type){const[n,o]=this._vacDelta(e,t.clientX-s.sx,t.clientY-s.sy);if("move"===s.kind)this._vacFit={...i,p:{...s.p0,ox:s.p0.ox+n,oy:s.p0.oy+o}};else{const t=yh(this.hass?.states[i.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),a=Mh(s.p0),[r,l]=hh(a,e[0],e[1]),[c,h]=hh(a,s.fx,s.fy),d=Math.hypot(r-c,l-h)||1,[u,p]=[2*r-c,2*l-h],_=Math.hypot(u+2*n-c,p+2*o-h)/2,g=Math.max(.05,_/d),m={...s.p0,s:s.p0.s*g};this._vacFit={...i,p:Dh(m,s.p0,s.fx,s.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this._vacFit={...i,drag:null})}}_renderVacFit(t){const e=this._vacFit;if(!e)return G;const i=yh(this._renderPlanHass?.states?.[e.source]?.attributes);if(!i)return G;const s=Mh(e.p),n=[],o=[],a=[];for(const t of i.rooms){if(null==t.x0)continue;const e=[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]].map(([t,e])=>hh(s,t,e));e.forEach(([t,e])=>{o.push(t),a.push(e)});const[i,r]=hh(s,t.cx,t.cy);n.push(W` + ${t.name}`)}let r=G;if(i.pos){const[e,n]=hh(s,i.pos.x,i.pos.y);r=W``}const l=[];if(o.length){const e=(()=>{const t=s[0]*s[4]-s[1]*s[3];return(e,i)=>[(s[4]*(e-s[2])-s[1]*(i-s[5]))/t,(-s[3]*(e-s[2])+s[0]*(i-s[5]))/t]})(),i=Math.min(...o),n=Math.max(...o),r=Math.min(...a),c=Math.max(...a),h=.022*t.w,d=h/4;for(const[t,s,o,a]of[[i,r,n,c],[n,r,i,c],[n,c,i,r],[i,c,n,r]]){const i=e(o,a);l.push(W` `)}}return j`this._vacFitPointer(e,t)} @pointermove=${e=>this._vacFitPointer(e,t)} @pointerup=${e=>this._vacFitPointer(e,t)} - @pointercancel=${e=>this._vacFitPointer(e,t)}>${n}${a}${l}`}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const t=this.renderRoot,e=this._stageEl,i=this._vacLastView,s=t?.querySelectorAll?.(".vacpuck")||[];if(!e||!i||!s.length)return void(this._vacRaf=0);const n=e.getBoundingClientRect();for(const e of s){const s=e.getAttribute("data-mid"),o=e.getBoundingClientRect(),r=i.x+(o.left+o.width/2-n.left)/n.width*i.w,a=i.y+(o.top+o.height/2-n.top)/n.height*i.h;for(const e of t.querySelectorAll(`line.tip[data-mid="${s}"]`))e.setAttribute("x2",r.toFixed(1)),e.setAttribute("y2",a.toFixed(1))}this._vacRafLoop()})}_renderVacuums(t,e){if(this._markup||"decor"===this._mode)return G;const i=this._space+"|"+e.x+"|"+e.y+"|"+e.w+"|"+e.h,s=this._vacJumpOnce||i!==this._vacViewKey;this._vacViewKey=i,this._vacJumpOnce=!1;const n=[],o=[];for(const i of t){if(i.hidden||!this._isVacDev(i))continue;if("static_icon"===Bi(i.marker?.display))continue;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${i.id}`),r=t?.source??this._vacSource(i,this._renderPlanHass);if(!r)continue;const a=t?.telemetry??vh(this._renderPlanHass?.states[r]?.attributes);if(!a)continue;const l=String(t?.mapId??this._vacMapId(i,a,this._renderPlanHass)),c=i.marker?.vacuum?.calibration?.[l];if(!c||6!==c.length)continue;const h=t?.runtime??this._vacRt.get(i.id),d=h?.moving??!1,u=Dh(i.marker?.vacuum),p="always"===u||"cleaning"===u&&d,_=t?.server??this._vacSrvTrails[i.id],g=_?.current?.map_id===l&&Array.isArray(_.current.points)?_.current:null,m=_?.previous?.map_id===l&&Array.isArray(_.previous.points)?_.previous:null;if("always"===u&&m&&m.points.length>1){const t=m.points.map(([t,e])=>{const[i,s]=ch(c,t,e),n=this._scenePoint([i,s]);return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ");o.push(W``)}if(p){const t=mh(a,g,h?.trail||[]),e=!d||"integration"!==t.source&&"server"!==t.source?t.path:fh(t.path);if(e.length){const t=e.map(t=>t.map(([t,e],i)=>{const[s,n]=ch(c,t,e),o=this._scenePoint([s,n]);return`${i?"L":"M"} ${o[0].toFixed(1)} ${o[1].toFixed(1)}`}).join(" ")).join(" ");o.push(W``);const s=e[e.length-1];if(d&&s?.length>=2){const t=s[s.length-1],[e,n]=ch(c,t[0],t[1]),r=this._scenePoint([e,n]),a=r[0].toFixed(1),l=r[1].toFixed(1);o.push(W``)}}}if(!d||!a.pos)continue;const[f,v]=ch(c,a.pos.x,a.pos.y),y=this._scenePoint([f,v]),b=(y[0]-e.x)/e.w*100,w=(y[1]-e.y)/e.h*100,k=h&&h.lastTs>0&&Date.now()-h.lastTs>6e4,x=i.marker?.icon||i.icon||"mdi:robot-vacuum";n.push(j`
this._vacFitPointer(e,t)}>${n}${r}${l}`}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const t=this.renderRoot,e=this._stageEl,i=this._vacLastView,s=t?.querySelectorAll?.(".vacpuck")||[];if(!e||!i||!s.length)return void(this._vacRaf=0);const n=e.getBoundingClientRect();for(const e of s){const s=e.getAttribute("data-mid"),o=e.getBoundingClientRect(),a=i.x+(o.left+o.width/2-n.left)/n.width*i.w,r=i.y+(o.top+o.height/2-n.top)/n.height*i.h;for(const e of t.querySelectorAll(`line.tip[data-mid="${s}"]`))e.setAttribute("x2",a.toFixed(1)),e.setAttribute("y2",r.toFixed(1))}this._vacRafLoop()})}_renderVacuums(t,e){if(this._markup||"decor"===this._mode)return G;const i=this._space+"|"+e.x+"|"+e.y+"|"+e.w+"|"+e.h,s=this._vacJumpOnce||i!==this._vacViewKey;this._vacViewKey=i,this._vacJumpOnce=!1;const n=[],o=[];for(const i of t){if(i.hidden||!this._isVacDev(i))continue;if("static_icon"===Li(i.marker?.display))continue;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${i.id}`),a=t?.source??this._vacSource(i,this._renderPlanHass);if(!a)continue;const r=t?.telemetry??yh(this._renderPlanHass?.states[a]?.attributes);if(!r)continue;const l=String(t?.mapId??this._vacMapId(i,r,this._renderPlanHass)),c=i.marker?.vacuum?.calibration?.[l];if(!c||6!==c.length)continue;const h=t?.runtime??this._vacRt.get(i.id),d=h?.moving??!1,u=Th(i.marker?.vacuum),p="always"===u||"cleaning"===u&&d,_=t?.server??this._vacSrvTrails[i.id],g=_?.current?.map_id===l&&Array.isArray(_.current.points)?_.current:null,m=_?.previous?.map_id===l&&Array.isArray(_.previous.points)?_.previous:null;if("always"===u&&m&&m.points.length>1){const t=m.points.map(([t,e])=>{const[i,s]=hh(c,t,e),n=this._scenePoint([i,s]);return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ");o.push(W``)}if(p){const t=fh(r,g,h?.trail||[]),e=!d||"integration"!==t.source&&"server"!==t.source?t.path:vh(t.path);if(e.length){const t=e.map(t=>t.map(([t,e],i)=>{const[s,n]=hh(c,t,e),o=this._scenePoint([s,n]);return`${i?"L":"M"} ${o[0].toFixed(1)} ${o[1].toFixed(1)}`}).join(" ")).join(" ");o.push(W``);const s=e[e.length-1];if(d&&s?.length>=2){const t=s[s.length-1],[e,n]=hh(c,t[0],t[1]),a=this._scenePoint([e,n]),r=a[0].toFixed(1),l=a[1].toFixed(1);o.push(W``)}}}if(!d||!r.pos)continue;const[f,v]=hh(c,r.pos.x,r.pos.y),y=this._scenePoint([f,v]),b=(y[0]-e.x)/e.w*100,w=(y[1]-e.y)/e.h*100,k=h&&h.lastTs>0&&Date.now()-h.lastTs>6e4,x=i.marker?.icon||i.icon||"mdi:robot-vacuum";n.push(j`
${o}`:G} - ${n}`:G}_renderDevice(t,e,i=!0){const s=this._pos(t),n=this._scenePoint([s.x,s.y]),o=(n[0]-e.x)/e.w*100,r=(n[1]-e.y)/e.h*100,a=this._devicePresentation(t,i),l=[`left:${o}%`,`top:${r}%`,...jo(a)],c=a.disabledReason,h=a.haDisabled?this._t(`marker.ha_disabled_${c}`):t.userHidden?this._t("marker.hidden_ghost"):t.name,d=[h,"none"!==a.pulse.kind?this._t(`marker.pulse_a11y_${a.pulse.reason}`):"",To(a.valueBadge)].filter(Boolean).join(", "),u=[t.model,a.valueBadge?.fullText||"",null!=a.lqiText?"LQI "+a.lqiText:""].filter(Boolean).join(" · ");return j`
this._clickDevice(e,t)} + @keydown=${e=>this._keyDevice(e,t)} @contextmenu=${e=>this._ctxDevice(e,t)} - @mousemove=${e=>this._showTip(e,t.name,a.haDisabled?h:u)} + @mousemove=${e=>this._showTip(e,t.name,r.haDisabled?h:_)} @mouseleave=${()=>this._tip=null} @pointerdown=${e=>this._pointerDown(e,t)} @pointermove=${e=>this._pointerMove(e,t)} @pointerup=${e=>this._pointerUp(e,t)} @pointercancel=${e=>this._pointerUp(e,t)} > - ${Wo(a,{newDevice:this._newIds.has(t.id),newDeviceTitle:this._t("device.new"),disabledTitle:a.haDisabled?h:""})} -
`}_roomArea(t){const e=hi(t);if(!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._spaceWalls,n=s.length&&t.id&&nl(i.rooms,t.id,s,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||e,o=this._cleanFloor(t,n),r=this._cellCm/this._gridPitch;return Dr(o.area*r*r/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(t){const e=t.settings?.temp_source;return e?$o(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?$o(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=yo(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 r=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,a=i.area_id||s?.area_id||null;if(!a)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(So.test(e))continue}let l=r.get(a);l||(l=new Map,r.set(a,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 r){const r=[],a=[];for(const[i,s]of n){const n=vo(t,s.name,s.model,s.ents,e),l="mdi:thermometer"===n||"mdi:air-filter"===n;if(l){const e=po(t,s.ents);null!=e&&r.push(e)}if(o.size>0&&(o.has(i)||s.ents.some(t=>o.has(t)))){const e=_o(t,s.ents);null!=e&&r.push(e)}if(l||"mdi:water-percent"===n){const e=mo(t,s.ents);null!=e&&a.push(e)}}(r.length||a.length)&&s.set(i,{temp:r.length?Math.round(r.reduce((t,e)=>t+e,0)/r.length*10)/10:null,hum:a.length?Math.round(a.reduce((t,e)=>t+e,0)/a.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,cs(this._curSpaceCfg).customFill):null,this._roomTempSrc=t.settings?.temp_source||"",this._roomHumSrc=t.settings?.hum_source||"",this._roomNameScale=zs(t.settings?.name_scale),this._roomLabelScale=zs(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=yo(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(bo(t,n,e))continue;const r=o.name||t.states[n]?.attributes?.friendly_name||n;i&&!(r+" "+n).toLowerCase().includes(i)||s.push({value:"entity:"+n,label:r,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*$_,y:i.y*$_};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},A_(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 r=o.vb,a=n.getBoundingClientRect(),l=this._viewOr(r),c=(t.clientX-this._drag.sx)/a.width*l.w,h=(t.clientY-this._drag.sy)/a.height*l.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0);const d=ec(this._drag.ox+c),u=ec(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,r=n.top+n.height/2,a=Math.max(8,Math.hypot(t.clientX-o,t.clientY-r));this._rlResize={id:"rl_"+(e.id||""),space:i,k0:this._labelScale(e),cx:o,cy:r,d0:a},A_(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/$_,y:o.y/$_,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=$i(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``}_renderRoomLabel(t,e,i,s){if(!t.name&&!this._markup)return G;const n=this._labelPos(t,e.id),o=this._scenePoint([n.x,n.y]),r=(o[0]-i.x)/i.w*100,a=(o[1]-i.y)/i.h*100,l=Math.min(1,s.opacity+.25),c=this._labelScale(t),h=[];if(t.area||t.settings?.temp_source||t.settings?.hum_source||s.labelLight){if(s.labelTemp){const e=this._roomTemp(t);null!=e&&h.push(j`${e}°`)}if(s.labelHum){const e=this._roomHum(t);null!=e&&h.push(j`${e}%`)}if(s.labelLqi&&t.area){const e=this._roomLqi(t.area);null!=e&&h.push(j`${e}`)}if(s.labelLight){const e=(d=lo(this._renderPlanHass,this._renderDevices,t,this._virtualLights)).length?{on:d.filter(t=>t.on).length,total:d.length}:null;if(e){const t=0===e.on?this._t("roomcard.light_off"):e.on===e.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:e.on,total:e.total});h.push(j`${t}`)}}}var d;const u=!!t.area,p=!this._markup;return j`
`}_renderRoomLabel(t,e,i,s){if(!t.name&&!this._markup)return G;const n=this._labelPos(t,e.id),o=this._scenePoint([n.x,n.y]),a=(o[0]-i.x)/i.w*100,r=(o[1]-i.y)/i.h*100,l=Math.min(1,s.opacity+.25),c=this._labelScale(t),h=[];if(t.area||t.settings?.temp_source||t.settings?.hum_source||s.labelLight){if(s.labelTemp){const e=this._roomTemp(t);null!=e&&h.push(j`${e}°`)}if(s.labelHum){const e=this._roomHum(t);null!=e&&h.push(j`${e}%`)}if(s.labelLqi&&t.area){const e=this._roomLqi(t.area);null!=e&&h.push(j`${e}`)}if(s.labelLight){const e=(d=ro(this._renderPlanHass,this._renderDevices,t,this._virtualLights)).length?{on:d.filter(t=>t.on).length,total:d.length}:null;if(e){const t=0===e.on?this._t("roomcard.light_off"):e.on===e.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:e.on,total:e.total});h.push(j`${t}`)}}}var d;const u=!!t.area,p=!this._markup;return j`
this._labelDown(i,t,e.id)} @pointermove=${i=>this._labelMove(i,t,e.id)} @pointerup=${()=>this._labelUp(t)} @@ -5813,13 +5940,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @pointermove=${t=>this._rlResizeMove(t)} @pointerup=${()=>this._rlResizeUp()} @pointercancel=${()=>this._rlResizeUp()}>`):G} -
`}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=Os(e,i),r=Math.round(10*o)/10,a=Ns(o);return j`
- ${this._fmtLen(e,i)} · ${r}°
`}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,r=(i+n)/2;if("line"===t.kind){const e=Os(t.a,t.b);return{x:o,y:r,on45:Ns(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const a=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]),a=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:r,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${a}`}}return{x:o,y:r,on45:!1,text:`${a} × ${l} · ${Dr(ra(Math.abs(s-e),this._cellCm,this._gridPitch)*ra(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=$_,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=hi(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,r,a]="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` +
`}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=D_,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``}_roomCenter(t){if(t.poly){const e=t.poly.length;return[t.poly.reduce((t,e)=>t+e[0],0)/e,t.poly.reduce((t,e)=>t+e[1],0)/e]}return[t.x+t.w/2,t.y+.1*Math.min(t.w,t.h)]}_openingAmt(t){const e=t.contact&&this._renderOpeningEntityAvailable(t.contact)?this._renderPlanHass.states[t.contact]?.state:null;return gi(t.type,e,!!t.invert)}_planEntityAvailable(t){return!!t&&(!bo(this._fullRegistryHass,t,yo(this._markers))&&"active"===this._bindingStatus("entity:"+t).kind)}_renderEntityAvailable(t){return!!t&&(!bo(this._renderPlanHass,t,yo(this._markers))&&(!!this._renderPlanHass.entities?.[t]&&!!this._renderPlanHass.states?.[t]))}_openingEntityAvailable(t){return function(t,e,i=In(t)){return!!e&&"active"===Bn(t,`entity:${e}`,i).kind}(this.hass,t,this._haRegistry)}_renderOpeningEntityAvailable(t){return e=this._renderPlanHass,!!(i=t)&&!!e?.states?.[i];var e,i}_renderOpeningPlacementPreview(){const t=this._openingPreview;if(!t)return W``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:gi(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this._cellCm,gridPitch:this._gridPitch,face:t.face},i="passage"===t.type?function(t,e){const i=Math.max(0,t.renderedLength)/2,s=Math.max(0,t.target.physicalHalfWidth),n=s+.18*Math.max(0,e),o=t=>({x1:t,y1:-n,x2:t,y2:n});return{rect:{x:-i,y:s?-s:0,width:2*i,height:2*s},boundaries:[o(-i),o(i)]}}(t,this._gridPitch):null;return W``}_roomCenter(t){if(t.poly){const e=t.poly.length;return[t.poly.reduce((t,e)=>t+e[0],0)/e,t.poly.reduce((t,e)=>t+e[1],0)/e]}return[t.x+t.w/2,t.y+.1*Math.min(t.w,t.h)]}_openingAmt(t){const e=t.contact&&this._renderOpeningEntityAvailable(t.contact)?this._renderPlanHass.states[t.contact]?.state:null;return _i(t.type,e,!!t.invert)}_planEntityAvailable(t){return!!t&&(!yo(this._fullRegistryHass,t,vo(this._markers))&&"active"===this._bindingStatus("entity:"+t).kind)}_renderEntityAvailable(t){return!!t&&(!yo(this._renderPlanHass,t,vo(this._markers))&&(!!this._renderPlanHass.entities?.[t]&&!!this._renderPlanHass.states?.[t]))}_openingEntityAvailable(t){return function(t,e,i=An(t)){return!!e&&"active"===Ln(t,`entity:${e}`,i).kind}(this.hass,t,this._haRegistry)}_renderOpeningEntityAvailable(t){return e=this._renderPlanHass,!!(i=t)&&!!e?.states?.[i];var e,i}_renderOpeningPlacementPreview(){const t=this._openingPreview;if(!t)return W``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:_i(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this._cellCm,gridPitch:this._gridPitch,face:t.face},i="passage"===t.type?function(t,e){const i=Math.max(0,t.renderedLength)/2,s=Math.max(0,t.target.physicalHalfWidth),n=s+.18*Math.max(0,e),o=t=>({x1:t,y1:-n,x2:t,y2:n});return{rect:{x:-i,y:s?-s:0,width:2*i,height:2*s},boundaries:[o(-i),o(i)]}}(t,this._gridPitch):null;return W` `}_renderOpenings(t){const e=this._openingsR;if(!e.length)return W``;const i=this._spaceModel();if(!i)return W``;const s=t.color,n=this._spaceWalls,o=this._openPairs().flatMap(t=>t.segs),r=this._openingWallIndexFor(i,o).value;return W`${e.map(t=>{if(t.orphanReason)return W``}_renderOpenings(t){const e=this._openingsR;if(!e.length)return W``;const i=this._spaceModel();if(!i)return W``;const s=t.color,n=this._spaceWalls,o=this._openPairs().flatMap(t=>t.segs),a=this._openingWallIndexFor(i,o).value;return W`${e.map(t=>{if(t.orphanReason)return W`{e.stopPropagation(),this._editOpening(t)}}> ! - `;const e=this._openingAmt(t),i=e>0&&!!t.contact&&this._renderOpeningEntityAvailable(t.contact)?"var(--hp-open)":s,o="gate"===t.type?!t.flip_v:t.flip_v,a=t.partitionHost||n.length||"gate"===t.type?this._openingFace(t,r,!!o):{ox:0,oy:0,cm:0,side:-1},l={type:t.type,length:t.rlen,angle:t.angle,amount:e,flipH:!!t.flip_h,flipV:!!t.flip_v,base:s,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:a},{half:c,outlineHalf:h,hitHalf:d}=Zd(l);return W``;const e=this._openingAmt(t),i=e>0&&!!t.contact&&this._renderOpeningEntityAvailable(t.contact)?"var(--hp-open)":s,o="gate"===t.type?!t.flip_v:t.flip_v,r=t.partitionHost||n.length||"gate"===t.type?this._openingFace(t,a,!!o):{ox:0,oy:0,cm:0,side:-1},l={type:t.type,length:t.rlen,angle:t.angle,amount:e,flipH:!!t.flip_h,flipV:!!t.flip_v,base:s,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:r},{half:c,outlineHalf:h,hitHalf:d}=Qd(l);return W` - ${Qd(l)} + ${tu(l)} this._opClick(e,t)} @@ -5850,12 +5977,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @pointermove=${e=>this._opPointerMove(e,t)} @pointerup=${e=>this._opPointerUp(e,t)} @pointercancel=${e=>this._opPointerUp(e,t)}> - `})}`}_renderOpeningLocks(t){const e=this._openingsR.filter(t=>!t.orphanReason&&("door"===t.type||"gate"===t.type)&&t.lock&&this._renderOpeningEntityAvailable(t.lock));if(!e.length)return j``;const i=this._spaceModel();if(!i)return j``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return j`${e.map(e=>{const i=this._renderPlanHass.states[e.lock]?.state,s="locked"===i,o=s||["unlocked","open","opening","unlocking","locking"].includes(String(i)),r=(e.angle+90)*Math.PI/180,a="gate"===e.type?this._openingFace(e,n,!e.flip_v):null,l=a?-16*a.side:16*(e.flip_v?-1:1),c=e.rx+Math.cos(r)*l,h=e.ry+Math.sin(r)*l,d=this._scenePoint([c,h]),u=(d[0]-t.x)/t.w*100,p=(d[1]-t.y)/t.h*100;return j`
`})}`}_renderOpeningLocks(t){const e=this._openingsR.filter(t=>!t.orphanReason&&("door"===t.type||"gate"===t.type)&&t.lock&&this._renderOpeningEntityAvailable(t.lock));if(!e.length)return j``;const i=this._spaceModel();if(!i)return j``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return j`${e.map(e=>{const i=this._renderPlanHass.states[e.lock]?.state,s="locked"===i,o=s||["unlocked","open","opening","unlocking","locking"].includes(String(i)),a=(e.angle+90)*Math.PI/180,r="gate"===e.type?this._openingFace(e,n,!e.flip_v):null,l=r?-16*r.side:16*(e.flip_v?-1:1),c=e.rx+Math.cos(a)*l,h=e.ry+Math.sin(a)*l,d=this._scenePoint([c,h]),u=(d[0]-t.x)/t.w*100,p=(d[1]-t.y)/t.h*100;return j`
{t.stopPropagation(),"view"===this._mode&&(this._openingInfo=e)}}> -
`})}`}_lockAction(t,e){if(this._openingEntityAvailable(t)){if("unlock"===e){const e=this.hass?.states?.[t]?.attributes?.friendly_name||t;if(!confirm(this._t("confirm.unlock",{name:e})))return}this.hass?.callService?.("lock",e,{entity_id:t})}}_renderOpeningInfoCard(){const t=this._openingInfo,e="passage"!==t.type&&t.contact&&this._openingEntityAvailable(t.contact)?t.contact:null,i=("door"===t.type||"gate"===t.type)&&t.lock&&this._openingEntityAvailable(t.lock)?t.lock:null,s=e?this.hass.states[e]?.state:null,n=this._openingAmt(t),o=i?this.hass.states[i]?.state:null,r="door"===t.type?"opening.door":"gate"===t.type?"opening.gate":"passage"===t.type?"opening.passage":"opening.window",a="door"===t.type?"mdi:door":"gate"===t.type?"mdi:gate":"passage"===t.type?"mdi:arch":"mdi:window-closed-variant",l="gate"===t.type?n>0?"mdi:gate-open":"mdi:gate":n>0?"mdi:door-open":"mdi:door-closed",c=(t,e,i,s="")=>j`
${e}${i}
`;return j``})}`}_lockAction(t,e){if(this._openingEntityAvailable(t)){if("unlock"===e){const e=this.hass?.states?.[t]?.attributes?.friendly_name||t;if(!confirm(this._t("confirm.unlock",{name:e})))return}this.hass?.callService?.("lock",e,{entity_id:t})}}_renderOpeningInfoCard(){const t=this._openingInfo,e="passage"!==t.type&&t.contact&&this._openingEntityAvailable(t.contact)?t.contact:null,i=("door"===t.type||"gate"===t.type)&&t.lock&&this._openingEntityAvailable(t.lock)?t.lock:null,s=e?this.hass.states[e]?.state:null,n=this._openingAmt(t),o=i?this.hass.states[i]?.state:null,a="door"===t.type?"opening.door":"gate"===t.type?"opening.gate":"passage"===t.type?"opening.passage":"opening.window",r="door"===t.type?"mdi:door":"gate"===t.type?"mdi:gate":"passage"===t.type?"mdi:arch":"mdi:window-closed-variant",l="gate"===t.type?n>0?"mdi:gate-open":"mdi:gate":n>0?"mdi:door-open":"mdi:door-closed",c=(t,e,i,s="")=>j`
${e}${i}
`;return j`this._openingInfo=null}>
${e?c(l,this._t("opening.contact_label"),"unavailable"===s||null==s?this._t("opening.state_unknown"):this._t(n>0?"opening.open":"opening.closed"),n>0?"warn":"ok"):G} @@ -5874,7 +6001,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_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/$_,y:t.y/this._spaceH,angle:t.angle,length:i&&!t.lengthTouched?i.length:this._cmToUnits(Math.max(20,t.lengthCm))/$_,...t.host?{host:t.host}:{}},n=rd(i,s),o=t.host?n?od(s,e,$_,this._cellCm,this._gridPitch):nd(s,e,$_,this._cellCm,this._gridPitch):null,r="does-not-fit-jamb"===o?.reason,a=t.host?e.find(e=>e.id===t.host.id):null,l=a?li(a.cm/2,this._imperial):"",c=!!t.host&&!o?.resolved&&!r,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` ${t.host?j` -
- ${c||r?j``:G} - ${c?this._t("opening.partition_orphan"):r?this._t("opening.partition_jamb_margin",{distance:l}):this._t("opening.host_partition")} +
+ ${c||a?j``:G} + ${c?this._t("opening.partition_orphan"):a?this._t("opening.partition_jamb_margin",{distance:l}):this._t("opening.host_partition")}
`:G} {const i=d_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> + @input=${e=>{const i=g_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> ${"passage"===t.type&&(t.contact||t.lock)?j`
@@ -5939,7 +6066,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_gridLevels(){const t=this._stageEl,e=this._viewOr(this._baseVb()),i=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return function(t,e,i=7){if(!(t>0&&e>0&&Number.isFinite(e)))return null;const s=mc.find(s=>t*s*e>=i);if(void 0===s)return null;const n=mc.find(t=>t>=5*s)??5*s;return{fine:s,coarse:n}}(this._gridPitch,i)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return W``;const i=this._gridPitch*e.fine,s=this._gridPitch*e.coarse,n=this._gridPitch*e.fine*.14;return W` +
`}_gridLevels(){const t=this._stageEl,e=this._viewOr(this._baseVb()),i=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return function(t,e,i=7){if(!(t>0&&e>0&&Number.isFinite(e)))return null;const s=fc.find(s=>t*s*e>=i);if(void 0===s)return null;const n=fc.find(t=>t>=5*s)??5*s;return{fine:s,coarse:n}}(this._gridPitch,i)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return W``;const i=this._gridPitch*e.fine,s=this._gridPitch*e.coarse,n=this._gridPitch*e.fine*.14;return W` @@ -5953,42 +6080,42 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - `}_renderPhysicalEditorLayer(){const t=this._spaceModel();if(!t)return W``;const e=this._gridPitch,i=this._viewOr(this._baseVb()),s=this._stageEl,n=s?.clientWidth?i.w/s.clientWidth:e/8,o=Math.max(.22*e,8*n),r=Math.max(o,12*n),a=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this._physicalSel?.kind===t&&this._physicalSel.id===e||"column"===t&&this._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,i)=>{const s=t.points[i+1],o=fa(t.segments[i]?.cm||15,this._cellCm,this._gridPitch);return W``}_renderPhysicalEditorLayer(){const t=this._spaceModel();if(!t)return W``;const e=this._gridPitch,i=this._viewOr(this._baseVb()),s=this._stageEl,n=s?.clientWidth?i.w/s.clientWidth:e/8,o=Math.max(.22*e,8*n),a=Math.max(o,12*n),r=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this._physicalSel?.kind===t&&this._physicalSel.id===e||"column"===t&&this._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,i)=>{const s=t.points[i+1],o=vr(t.segments[i]?.cm||15,this._cellCm,this._gridPitch);return W`{this._physicalSel={kind:"draft",id:t.id,segment:i},this._registerPhysicalTap("draft",t.id,i)}}>`})),h=(t.partitions||[]).map(t=>{const e=Dl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);return e?W`{this._physicalSel={kind:"draft",id:t.id,segment:i},this._registerPhysicalTap("draft",t.id,i)}}>`})),h=(t.partitions||[]).map(t=>{const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);return e?W`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`:G}),d=(t.wall_columns||[]).map(t=>{const e=Tl(this._physicalRotate?.id===t.id?{...t,angle:this._physicalRotate.angle}:t,this._cellCm,this._gridPitch);return W`this._physicalUp(t)}>`:G}),d=(t.wall_columns||[]).map(t=>{const e=Pl(this._physicalRotate?.id===t.id?{...t,angle:this._physicalRotate.angle}:t,this._cellCm,this._gridPitch);return W`this._physicalDown(e,"column",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),u=this._physicalDrag,p=(()=>{if(!u?.moved)return G;const t="partition"===u.kind?Dl(u.base.a,u.base.b,u.base.cm,this._cellCm,this._gridPitch):Tl(u.base,this._cellCm,this._gridPitch);return t?W`this._physicalUp(t)}>`}),u=this._physicalDrag,p=(()=>{if(!u?.moved)return G;const t="partition"===u.kind?Tl(u.base.a,u.base.b,u.base.cm,this._cellCm,this._gridPitch):Pl(u.base,this._cellCm,this._gridPitch);return t?W``:G})(),_=(()=>{const i=this._physicalSel;if(!i)return G;if("draft"===i.kind){const e=t.room_drafts.find(t=>t.id===i.id);return e?W` t.join(",")).join(" ")}> ${e.points.map(t=>W``)} - `:G}if("partition"===i.kind){const e=t.partitions.find(t=>t.id===i.id);if(!e)return G;const s=Dl(e.a,e.b,e.cm,this._cellCm,this._gridPitch);if(!s)return G;const n=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return W` - + `:G}if("partition"===i.kind){const e=t.partitions.find(t=>t.id===i.id);if(!e)return G;const s=Tl(e.a,e.b,e.cm,this._cellCm,this._gridPitch);if(!s)return G;const n=(e.a[0]+e.b[0])/2,a=(e.a[1]+e.b[1])/2;return W` + - - `}const s=t.wall_columns.find(t=>t.id===i.id);if(!s)return G;const l=this._physicalRotate?.id===s.id?{...s,angle:this._physicalRotate.angle}:s,c=Tl(l,this._cellCm,this._gridPitch);if("square"!==l.shape)return W` - + + `}const s=t.wall_columns.find(t=>t.id===i.id);if(!s)return G;const l=this._physicalRotate?.id===s.id?{...s,angle:this._physicalRotate.angle}:s,c=Pl(l,this._cellCm,this._gridPitch);if("square"!==l.shape)return W` + - `;const h=fa(l.cm,this._cellCm,this._gridPitch),d=Sl(l.angle)*Math.PI/180,u=Math.sin(d),p=-Math.cos(d),_=[l.center[0]+u*h/2,l.center[1]+p*h/2],g=[_[0]+u*Math.max(e,24*n),_[1]+p*Math.max(e,24*n)];return W` - + `;const h=vr(l.cm,this._cellCm,this._gridPitch),d=Ml(l.angle)*Math.PI/180,u=Math.sin(d),p=-Math.cos(d),_=[l.center[0]+u*h/2,l.center[1]+p*h/2],g=[_[0]+u*Math.max(e,24*n),_[1]+p*Math.max(e,24*n)];return W` + - this._physicalRotateDown(t,s)} @pointermove=${t=>this._physicalRotateMove(t)} @pointerup=${t=>this._physicalRotateUp(t)}> - `})();return W`${c}${h}${d}${p}${_}`}_renderPlanSnapOverlay(){if(!this._markup||"draw"!==this._tool)return W``;const t=this._planSnapGeometrySnapshot().value,e=this._activePlanSnapCandidate,i=fa(5,this._cellCm,this._gridPitch),s=fa(10,this._cellCm,this._gridPitch);return W``})();return W`${c}${h}${d}${p}${_}`}_renderPlanSnapOverlay(){if(!this._markup||"draw"!==this._tool)return W``;const t=this._planSnapGeometrySnapshot().value,e=this._activePlanSnapCandidate,i=vr(5,this._cellCm,this._gridPitch),s=vr(10,this._cellCm,this._gridPitch);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(fa(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=il(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,$_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:fa(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 Ha([...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?Ds(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,r=this._gridPitch,a=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)=>fa(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||pa:l||pa,this._cellCm,this._gridPitch)/2):[],d=c?La(c,fa(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` - ${this._gridLevels()?W``:G} + `}_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,D_);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` + ${this._gridLevels()?W``:G} ${n.map(t=>W``)} ${this._renderPhysicalEditorLayer()} - ${"column"===this._tool&&this._cursorPt&&this._drawWallCm?W``M ${Tl({shape:"square",center:this._cursorPt,cm:this._drawWallCm},this._cellCm,this._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`)()}>`:G} + ${"column"===this._tool&&this._cursorPt&&this._drawWallCm?W``M ${Pl({shape:"square",center:this._cursorPt,cm:this._drawWallCm},this._cellCm,this._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`)()}>`:G} ${d?W` `:G} ${u?W` @@ -6020,9 +6147,9 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${o.length>1?W``:G} ${o.length&&this._cursorPt&&"draw"===this._tool&&!this._contourClosed?W``:G} - ${o.map((t,e)=>W``)} + ${o.map((t,e)=>W``)} ${"split"===this._tool&&this._splitSel?.pts?.length?W`${this._splitSel.pts.length>1?W``:G} - ${this._splitSel.pts.map((t,e)=>W``)} + ${this._splitSel.pts.map((t,e)=>W``)} ${this._cursorPt?W``:G}`:G} `}_renderPartitionDeleteDialog(){const t=this._partitionDeleteDialog,e="mi"===this.hass?.config?.unit_system?.length;return j`

${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:li(t.length*$_/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*D_/this._gridPitch*this._cellCm,e)})}
  • `)}
@@ -6056,8 +6183,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `:G}
this._physicalDialog={...t,cm:e.target.value}} /> ${this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}
${e&&"square"===t.shape?j` @@ -6180,12 +6307,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_cardEntities(t){const e=this._planHass,i=[],s=new Set,n=t=>{if(!t||s.has(t)||!e.states[t])return;const n=e.entities[t];if("config"===n?.entity_category||"diagnostic"===n?.entity_category)return;s.add(t);const o=t.split(".")[0];["light","switch","fan","humidifier","siren","input_boolean"].includes(o)?i.push({eid:t,kind:"toggle"}):["cover","valve","lock","climate","media_player","vacuum","water_heater"].includes(o)?i.push({eid:t,kind:"open"}):["sensor","binary_sensor","number","select"].includes(o)&&i.push({eid:t,kind:"value"})};for(const i of lo(e,this._devices,null,this._virtualLights))if(i.device.id===t.id)for(const t of[...i.serviceEids,...i.stateEids])n(t);t.primary&&n(t.primary);for(const e of t.entities)n(e);return i.slice(0,12)}_cardToggle(t){const e=t.split(".")[0];"lock"!==e&&"alarm_control_panel"!==e&&this._planEntityAvailable(t)&&this.hass.callService("homeassistant","toggle",{entity_id:t}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))}_renderInfoCard(){const t=this._infoCard,e=t.primary?this.hass.states[t.primary]:void 0,i=e?Ji(this.hass,t.primary)?.text??e.state:null,s=(t.controls??t.marker?.controls??[]).filter(Ms).filter(t=>this._planEntityAvailable(t));return j``}_cardEntities(t){const e=this._planHass,i=[],s=new Set,n=t=>{if(!t||s.has(t)||!e.states[t])return;const n=e.entities[t];if("config"===n?.entity_category||"diagnostic"===n?.entity_category)return;s.add(t);const o=t.split(".")[0];["light","switch","fan","humidifier","siren","input_boolean"].includes(o)?i.push({eid:t,kind:"toggle"}):["cover","valve","lock","climate","media_player","vacuum","water_heater"].includes(o)?i.push({eid:t,kind:"open"}):["sensor","binary_sensor","number","select"].includes(o)&&i.push({eid:t,kind:"value"})};for(const i of ro(e,this._devices,null,this._virtualLights))if(i.device.id===t.id)for(const t of[...i.serviceEids,...i.stateEids])n(t);t.primary&&n(t.primary);for(const e of t.entities)n(e);return i.slice(0,12)}_cardToggle(t){const e=t.split(".")[0];"lock"!==e&&"alarm_control_panel"!==e&&this._planEntityAvailable(t)&&this.hass.callService("homeassistant","toggle",{entity_id:t}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))}_renderInfoCard(){const t=this._infoCard,e=t.primary?this.hass.states[t.primary]:void 0,i=e?Xi(this.hass,t.primary)?.text??e.state:null,s=(t.controls??t.marker?.controls??[]).filter(Ss).filter(t=>this._planEntityAvailable(t));return j`
${(()=>{const e=this._cardEntities(t);return e.length?j`
- ${e.map(({eid:t,kind:e})=>{const i=this.hass.states[t],s=this.hass.entities[t]?.name||i?.attributes?.friendly_name||t,n=i?Ji(this.hass,t)?.text??i.state:"",o="on"===i?.state||["open","unlocked","playing","cleaning"].includes(i?.state);return j`
- + ${e.map(({eid:t,kind:e})=>{const i=this.hass.states[t],s=this.hass.entities[t]?.name||i?.attributes?.friendly_name||t,n=i?Xi(this.hass,t)?.text??i.state:"",o="on"===i?.state||["open","unlocked","playing","cleaning"].includes(i?.state);return j`
+ ${s} ${"toggle"===e?j``:"open"===e?j`
`:G} ${i&&!this._cardEntities(t).length?j`
${this._t("info.state")}${i}
`:G} - ${Hi(t.link)?j`
${this._t("info.link")} - ${t.link}
`:G} + ${Ni(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")} @@ -6217,7 +6344,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `: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=qs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Xn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),r={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&&3!==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=d_(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)&&(r.space=e?.space||("virtual"===t.binding?this._space:null),r.area=e?.area||null,r.room_id=e?.roomId||null),r}_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 xo({...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 Jh({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(!Qh(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:Vh(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=Bo(this._planHass,s,n),r=qo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!r,valueBadgeSource:r,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return co(lo(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&&ro(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&&Zn(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 Zn(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} ${Zn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ms(e)&&!s.has(e)&&Yn(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=xs(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),r=this._effectiveMarkerTapAction(t,o),a=o?cs(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===r&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?cu(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:a?.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?Bo(this._planHass,o,l):[],p=o?qo(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=Ro(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 to(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?Zn(o):[],P=o&&Qn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?qh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),E="toggle"===r?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,F=E?[...E.targets,...E.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=Ei(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=g_(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 Zh({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(!td(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:Kh(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?pu(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?jh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),E="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,F=E?[...E.targets,...E.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}>
@@ -6240,7 +6367,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
@@ -6265,7 +6392,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @input=${e=>this._markerDialog={...t,bindingFilter:e.target.value}} />
${i.map(e=>j`
{const i={...t,binding:e.value,bindingOpen:!1,controls:Xn(e.value,t.controls,this._bindingEntities(e.value)),autoIcon:this._autoIconForBinding(e.value)};this._markerDialog=this._announceToggleDraft({...i,...this._valueBadgeForBinding(i,e.value)})}}> + @click=${()=>{const i={...t,binding:e.value,bindingOpen:!1,controls:Yn(e.value,t.controls,this._bindingEntities(e.value)),autoIcon:this._autoIconForBinding(e.value)};this._markerDialog=this._announceToggleDraft({...i,...this._valueBadgeForBinding(i,e.value)})}}> ${e.label}${e.sub}
`)} ${i.length?G:j`
${this._t("marker.nothing_found")}
`} @@ -6286,13 +6413,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - ${"toggle"===r&&(A.length>1||I)?j`
+ ${"toggle"===a&&(A.length>1||I)?j`
${this._help("marker.toggle_entity.help")} @@ -6312,11 +6439,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("marker.toggle_entity_missing",{entity:t.toggleEntity,fallback:F||this._t("marker.toggle_entity_none")})}

`:G}
`:G} - ${"toggle"===r?j`
+ ${"toggle"===a?j`
${h.map(t=>j`
${t}
`)}
${t.tapHintAnnouncement}
`:G} - ${"run"===r?(()=>{const e=t.runFilter.trim().toLowerCase(),i=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),s=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return j` + ${"run"===a?(()=>{const e=t.runFilter.trim().toLowerCase(),i=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),s=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return j` ${t.tapTarget&&!s?j`
${this._t("marker.run_target_gone",{id:t.tapTarget})}
`:G} ${this._t("marker.nothing_found")}
`}
`}`})():G} - ${"run"===r||"toggle"===r?j` ${"file"===t.source?j`
@@ -6635,25 +6762,25 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${t.pickSaved?this._renderServerPlans(t):G}`:G}
- {const i=d_(e.target.value);this._spaceDialog={...t,cellCm:null!=i&&i>0?Math.max(.1,Math.min(c_,i)):t.cellCm}}} /> + @input=${e=>{const i=g_(e.target.value);this._spaceDialog={...t,cellCm:null!=i&&i>0?Math.max(.1,Math.min(p_,i)):t.cellCm}}} /> ${this._t("space.scale_unit")}
-
`:G}`:G}`}_renderRoomDialog(){const t=!!this._roomEditId,e=t?null:this._wallFaceBatch,i=e&&e.candidates.length>1?this._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",s=!!this._areaSel||!!this._nameSel.trim(),n=cs(this._curSpaceCfg),o=this._roomFill||n.fill,r=this._roomCustomFill||n.customFill,a=[...this._freeAreas];if(t&&this._areaSel&&!a.some(t=>t.area_id===this._areaSel)){const t=this.hass.areas[this._areaSel];t&&a.unshift(t)}return j``:G}`:G}`}_renderRoomDialog(){const t=!!this._roomEditId,e=t?null:this._wallFaceBatch,i=e&&e.candidates.length>1?this._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",s=!!this._areaSel||!!this._nameSel.trim(),n=ls(this._curSpaceCfg),o=this._roomFill||n.fill,a=this._roomCustomFill||n.customFill,r=[...this._freeAreas];if(t&&this._areaSel&&!r.some(t=>t.area_id===this._areaSel)){const t=this.hass.areas[this._areaSel];t&&r.unshift(t)}return j`
@@ -6837,12 +6964,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - ${[["","fill.inherit"],...Wi.map(t=>[t,"fill."+t])].map(([t,e])=>j`
`:G} @@ -6872,7 +6999,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._rangeInput(50,300,5,Math.round(100*this._roomLabelScale),t=>{this._roomLabelScale=t/100,this.requestUpdate()})} ${Math.round(100*this._roomLabelScale)}%
- ${this._renderCardPreview(cs(this._curSpaceCfg).cardFontScale,this._roomNameScale,this._roomLabelScale)} + ${this._renderCardPreview(ls(this._curSpaceCfg).cardFontScale,this._roomNameScale,this._roomLabelScale)}
@@ -6886,4 +7013,4 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("btn.save")} `}
- `}}I_.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}},I_.ZOOM_MAX=8,I_.ZOOM_MIN=1/3,I_._touchSeen=!1,I_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,I_.styles=[Kt,Ou],customElements.get("houseplan-card")||customElements.define("houseplan-card",I_),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${o_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}O_.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}},O_.ZOOM_MAX=8,O_.ZOOM_MIN=1/3,O_._touchSeen=!1,O_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,O_.styles=[Kt,Bu],customElements.get("houseplan-card")||customElements.define("houseplan-card",O_),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${c_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/dist/houseplan-card.js b/dist/houseplan-card.js index faf42462..9f0d6fa7 100755 --- a/dist/houseplan-card.js +++ b/dist/houseplan-card.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17";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)},r=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:a,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)=>!a(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(r(t))}else void 0!==t&&e.push(r(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,E="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${E}(?:([^\\s"'>=/]+)(${E}*=${E}*(?:[^ \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?"":"",r=F;for(let e=0;e"===l[0]?(r=n??F,c=-1):void 0===l[1]?c=-2:(c=r.lastIndex-l[2].length,a=l[1],r=void 0===l[3]?N:'"'===l[3]?L:H):r===L||r===H?r=N:r===z||r===O?r=F:(r=N,n=void 0);const d=r===N&&t[e+1].startsWith("/>")?" ":"";o+=r===F?i+T:c>=0?(s.push(a),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 r=t.length-1,a=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())&&a.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 r,a;for(t=n[0],r=0;r{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}=rt,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,r=o!==t;if(r){let e;i._$AQ?.(t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==o._$AU&&i._$AP(e)}if(e!==n||r){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 r=0;for(const e of t)n[r]=s?s(e,r):r,o[r]=i(e,r),r++;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:r}=this.dt(e,i,s);if(!Array.isArray(n))return this.ut=r,o;const a=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(a[d]===r[p])l[p]=wt(n[d],o[p]),d++,p++;else if(a[u]===r[_])l[_]=wt(n[u],o[_]),u--,_--;else if(a[d]===r[_])l[_]=wt(n[d],o[_]),bt(t,l[_+1],n[d]),d++,_--;else if(a[u]===r[p])l[p]=wt(n[u],o[p]),bt(t,n[d],n[u]),u--,p++;else if(void 0===c&&(c=St(r,p,_),h=St(a,d,u)),c.has(a[d]))if(c.has(a[u])){const e=h.get(r[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=r,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__="4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba";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,E="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,z=/-->/g,O=/>/g,N=RegExp(`>|${E}(?:([^\\s"'>=/]+)(${E}*=${E}*(?:[^ \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=F;for(let e=0;e"===l[0]?(a=n??F,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=F:(a=N,n=void 0);const d=a===N&&t[e+1].startsWith("/>")?" ":"";o+=a===F?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`"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 Ft=(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=Ft(t.r,0,255)/255,i=Ft(t.g,0,255)/255,s=Ft(t.b,0,255)/255,n=Math.max(e,i,s),o=n-Math.min(e,i,s);let r=0;return o>0&&(r=n===e?(i-s)/o%6*60:n===i?60*((s-e)/o+2):60*((e-i)/o+4)),{h:zt(r),s:0===n?0:o/n*100,v:100*n}}function Lt(t){return function(t){const e=t=>Math.round(Ft(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=Ft(t.s,0,100)/100,s=Ft(t.v,0,100)/100,n=s*i,o=n*(1-Math.abs(e/60%2-1)),r=s-n;let a;return a=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*(a[0]+r)),g:Math.round(255*(a[1]+r)),b:Math.round(255*(a[2]+r))}}(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,r=i.top+n,a=Math.max(o,i.left+i.width-n),l=Math.max(r,i.top+i.height-n),c=Math.max(0,a-o),h=Math.max(0,l-r),d=Math.min(Math.max(0,e.width),c),u=Math.min(Math.max(0,e.height),h);let p=t.left;p+d>a&&(p=t.right-d),p=Math.min(Math.max(o,p),Math.max(o,a-d));const _=t.bottom+s,g=t.top-s-u;let m="bottom",f=_;return _+u>l&&g>=r?(m="top",f=Math.min(Math.max(r,g),Math.max(r,l-u))):f=Math.min(Math.max(r,_),Math.max(r,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 r=qt(n,o,s);return i.style.left=`${r.left}px`,i.style.top=`${r.top}px`,i.dataset.side=r.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),r=Math.round(this._saturation),a=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 Et(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 Ft=(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=Ft(t.r,0,255)/255,i=Ft(t.g,0,255)/255,s=Ft(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(Ft(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=Ft(t.s,0,100)/100,s=Ft(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` `:G} - `}}rr.properties={hass:{attribute:!1},presentation:{attribute:!1},registry:{attribute:!1},deviceName:{attribute:!1}},rr.styles=[Kt,o` + `}}ra.properties={hass:{attribute:!1},presentation:{attribute:!1},registry:{attribute:!1},deviceName:{attribute:!1}},ra.styles=[Kt,o` :host { display: block; min-width: 0; } .devicepreview { margin: 4px 0 14px; @@ -4091,22 +4211,22 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 .previewstage { min-height: 142px; } .previewfacts > div { grid-template-columns: minmax(0, 1fr); gap: 2px; } } - `],customElements.get("hp-device-preview")||customElements.define("hp-device-preview",rr);const ar=(t,e)=>[t[0]-e[0],t[1]-e[1]],lr=(t,e)=>[t[0]+e[0],t[1]+e[1]],cr=(t,e)=>t[0]*e[0]+t[1]*e[1],hr=t=>Math.hypot(t[0],t[1]);function dr(t){let e=0;for(let i=0;it[1]!=l>t[1]&&t[0]<(a-o)*(t[1]-r)/(l-r)+o&&(i=!i)}return i}([a[0]+r[0]*l,a[1]+r[1]*l],t)&&(r=[-r[0],-r[1]]),r}function _r(t,e,i,s){const n=s||pr(t,e),o=(e+1)%t.length;return t.map((t,s)=>s===e||s===o?[t[0]+n[0]*i,t[1]+n[1]*i]:[...t])}function gr(t,e,i,s){const n=[],o=ar(i,e),r=hr(o);if(rs||h>s)continue;const d=cr(ar(o,e),a),u=cr(ar(l,e),a),p=Math.max(0,Math.min(d,u)),_=Math.min(r,Math.max(d,u));_-p>s&&n.push([[e[0]+a[0]*p,e[1]+a[1]*p],[e[0]+a[0]*_,e[1]+a[1]*_]])}return n}function mr(t,e,i,s,n){const o=gr(t,e,i,n);if(!o.length)return null;const r=t=>o.some(([e,i])=>ur(t,e,i)<=n),a=t.length,l=[];for(let o=0;on||f>n)continue;const v=cr(ar(e,c),p),y=cr(ar(i,c),p),b=Math.max(0,Math.min(v,y)),w=Math.min(u,Math.max(v,y));if(!(w-b<=n)){if(b>n&&bn&&whr(ar(i,t[(s+1)%t.length]))>e);for(let t=0;t<2;t++)i=i.filter((t,s)=>{const n=i[(s-1+i.length)%i.length],o=i[(s+1)%i.length],r=(t[0]-n[0])*(o[1]-n[1])-(t[1]-n[1])*(o[0]-n[0]),a=hr(ar(o,n))||1;return Math.abs(r)/a>e});return i.length>=3?i:t}function vr(t){const e=t.length;if(e<3)return!1;for(let i=0;i(t[0]-n[0])*a[1]-(t[1]-n[1])*a[0],c=t=>(t[0]-n[0])*a[0]+(t[1]-n[1])*a[1],h=i,d=r-i;for(const e of t){const t=Math.abs(l(e));if(t<=i)continue;const n=c(e);n<=h||n>=d||tMath.abs(r+(t-u)/m*(a-r));s=Math.min(s,f(_),f(g))}}return s}function br(t,e,i){if(Di(t,e,i))return!0;if(Ci(t,e,i)||Ci(e,t,i))return!1;let s=0;try{const i=ni([[...t.map(t=>[t[0],t[1]]),[t[0][0],t[0][1]]]],[[...e.map(t=>[t[0],t[1]]),[e[0][0],e[0][1]]]]);for(const t of i)t?.[0]&&(s+=Pi(t[0]))}catch{return!1}return s>Math.max(1e-7,i*i)}function wr(t,e,i,s,n){const o=[i.n[0]*s,i.n[1]*s],r={polys:{},openings:{},movedSpans:{}};if(Math.abs(s)<1e-9)return r;for(const e of t){if(e.id===i.roomId){r.polys[e.id]=_r(e.poly,i.edge,s,i.n),r.movedSpans[e.id]=[[lr(i.a,o),lr(i.b,o)]];continue}const t=gr(e.poly,i.a,i.b,n);if(!t.length)continue;const a=mr(e.poly,i.a,i.b,o,n);a&&(r.polys[e.id]=a,r.movedSpans[e.id]=t.map(([t,e])=>[lr(t,o),lr(e,o)]))}for(const t of e)ur([t.x,t.y],i.a,i.b)<=n&&(r.openings[t.id]=[t.x+o[0],t.y+o[1]]);return r}function kr(t,e,i){for(const s of e)for(let e=0;ei)continue;const c=(t.x-n[0])*l[0]+(t.y-n[1])*l[1];if(c-t.length/2>=-i&&c+t.length/2<=a+i)return!0}return!1}function xr(t,e,i){return t.filter(t=>e.some(e=>{for(let s=0;sa.polys[t.id]||t.poly;for(const e of l){const s=t.find(t=>t.id===e),n=a.polys[e];if(!vr(n))return!1;const l=dr(s.poly),h=dr(n);if(Math.abs(h)t.find(t=>t.id===e).poly),d=t.map(c);for(const t of xr(e,h,2*r)){const e=a.openings[t.id];if(!kr(e?{...t,x:e[0],y:e[1]}:t,d,2*r))return!1}return!0}function Sr(t,e,i,s,n,o){const r=t=>[s[0]+(t[0]-s[0])*n,s[1]+(t[1]-s[1])*n],a={poly:t.poly.map(r),openings:{}};for(const s of e){let e=!1;for(let i=0;i{for(let e=0;et.id===i);if(!l)return!1;const c=t.filter(t=>t.id!==i).map(t=>t.poly),h=Sr(l,e,c,s,n,2*a),d=h.poly,u=function(t){const e=function(t){const e=[...t].sort((t,e)=>t[0]-e[0]||t[1]-e[1]);if(e.length<3)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.pop(),n.pop(),s.concat(n)}(t);if(e.length<3)return 0;let i=1/0;for(let t=0;tt.id===i?d:t.poly);for(const t of xr(e,[l.poly],2*a)){const e=h.openings[t.id];if(!kr(e?{...t,x:e[0],y:e[1]}:t,p,2*a))return!1}return!0}function Cr(t,e,i){const s=i/e;return Pi(t)*s*s/1e4}function Dr(t,e){return e?`${Math.round(10.7639*t)} ft²`:`${(Math.round(10*t)/10).toFixed(1)} m²`}function Tr(t){const e=t%360;return e<0?e+360:e}function Pr(t,e){const i=function(t,e){return Tr(t+e)}(t,e)*Math.PI/180;return[Math.sin(i),-Math.cos(i)]}const Rr=Object.freeze({dawn:Object.freeze({top:"#aabdd1",bottom:"#e8c8b7",horizon:"rgba(255,201,156,.56)",sun:"rgba(255,188,125,.78)",vignette:"rgba(65,72,99,.21)",outlineNear:"rgba(74,57,61,.25)",outlineMid:"rgba(255,238,224,.40)",outlineFar:"rgba(255,224,202,.18)"}),day:Object.freeze({top:"#dce9ef",bottom:"#cbdce3",horizon:"rgba(255,245,220,.45)",sun:"rgba(255,239,190,.72)",vignette:"rgba(65,91,105,.16)",outlineNear:"rgba(45,62,71,.28)",outlineMid:"rgba(255,255,255,.42)",outlineFar:"rgba(255,255,255,.20)"}),dusk:Object.freeze({top:"#48536c",bottom:"#9a7380",horizon:"rgba(242,156,114,.34)",sun:"rgba(255,167,113,.55)",vignette:"rgba(20,26,44,.39)",outlineNear:"rgba(238,219,225,.40)",outlineMid:"rgba(229,207,218,.26)",outlineFar:"rgba(215,190,205,.12)"}),night:Object.freeze({top:"#111a27",bottom:"#1f2f3e",horizon:"rgba(79,120,151,.16)",sun:"rgba(169,208,231,0)",vignette:"rgba(3,8,14,.58)",outlineNear:"rgba(218,238,249,.56)",outlineMid:"rgba(174,215,238,.30)",outlineFar:"rgba(136,194,226,.14)"})}),Ar=t=>"number"==typeof t&&Number.isFinite(t),Ir=(t,e,i)=>Math.min(i,Math.max(e,t));function Er(t){return t.elevation<=-6?"night":t.elevation>=6?"day":t.rising?"dawn":"dusk"}function Fr(t){const e=(Math.floor(Number(t)||0)%1440+1440)%1440;return e>=300&&e<480?"dawn":e>=480&&e<1080?"day":e>=1080&&e<1260?"dusk":"night"}function zr(t){const e=Er(t),i=t.azimuth*Math.PI/180;return{sunX:50-42*Math.sin(i),sunY:78-Ir(t.elevation,0,90)/90*64,sunOpacity:"night"===e?0:Ir((t.elevation+6)/12,0,1)}}function Or(t){const e=(Math.floor(Number(t)||0)%1440+1440)%1440;if(e<300||e>=1260)return{sunX:50,sunY:78,sunOpacity:0};const i=(e-300)/960,s=(e-300)/120,n=(1260-e)/120;return{sunX:8+84*i,sunY:78-64*Math.sin(i*Math.PI),sunOpacity:Math.max(.18,Math.min(s,n,1))}}function Nr(t,e=new Date){const i=function(t){const e=t?.states?.["sun.sun"]?.attributes;return e&&Ar(e.azimuth)&&Ar(e.elevation)&&"boolean"==typeof e.rising?{azimuth:Tr(e.azimuth),elevation:e.elevation,rising:e.rising}:null}(t);if(i)return{phase:Er(i),source:"sun",...zr(i)};const s="number"==typeof e?e:function(t=new Date){return 60*t.getHours()+t.getMinutes()}(e);return{phase:Fr(s),source:"clock",...Or(s)}}function Hr(t){return`${t.source}|${t.phase}|${t.sunX.toFixed(2)}|${t.sunY.toFixed(2)}|`+t.sunOpacity.toFixed(3)}const Lr=[[-90,"#070c14"],[-12,"#070c14"],[-4,"#131a28"],[0,"#4a3527"],[10,"#e8ddcf"],[30,"#ffffff"],[90,"#ffffff"]],Br=t=>Math.min(1,Math.max(0,t));function qr(t,e,i=6){const s=t.angle*Math.PI/180,n=[Math.sin(s),-Math.cos(s)],o=s=>{const o=[t.x+n[0]*i*s,t.y+n[1]*i*s];return e.find(t=>t.poly.length>=3&&vi(o,t.poly))||null},r=o(1),a=o(-1);return r&&a?null:r||a?r?{normal:[-n[0],-n[1]],roomId:r.id}:{normal:n,roomId:a.id}:null}function jr(t,e,i){return i>0&&t[0]*e[0]+t[1]*e[1]>.05}function Wr(t,e,i,s){return[[t[0],t[1]],[e[0],e[1]],[e[0]+i[0]*s,e[1]+i[1]*s],[t[0]+i[0]*s,t[1]+i[1]*s]]}function Ur(t,e){try{const i=ni([[...t.map(t=>[t[0],t[1]]),[t[0][0],t[0][1]]]],[[...e.map(t=>[t[0],t[1]]),[e[0][0],e[0][1]]]]),s=[];for(const t of i){const e=t?.[0];!Array.isArray(e)||e.length<4||s.push(e.slice(0,e.length-1).map(t=>[t[0],t[1]]))}return s}catch{return[]}}function Gr(t,e,i,s,n,o,r){if(!(s>0))return[];const a=Pr(i,n),l=[-a[0],-a[1]],c=function(t){const e=Math.min(90,Math.max(0,t));return.7*(.8+1.7*Math.pow(1-e/90,1.6))}(s),h=[];for(const i of e){if(!(i.length>0))continue;const e=qr(i,t);if(!e||!jr(e.normal,a,s))continue;const n=t.find(t=>t.id===e.roomId);if(!n)continue;const d=o&&o[e.roomId]||n.poly,u=i.angle*Math.PI/180,p=i.length/2,_=[-e.normal[0],-e.normal[1]],g=Math.max(0,r?.[i.id]||0),m=i.x+_[0]*g/2,f=i.y+_[1]*g/2,v=Math.cos(u)*p,y=Math.sin(u)*p,b=[m-v,f-y],w=[m+v,f+y],k=c*i.length,x=Ur(Wr(b,w,l,k),d);if(!x.length)continue;const $=l[0]*_[0]+l[1]*_[1];h.push({openingId:i.id,roomId:e.roomId,polys:x,a:b,b:w,dir:l,len:k,normal:_,depth:k*$})}return h}const Vr=t=>"number"==typeof t&&Number.isInteger(t)&&t>=0&&t<=359?t:null;function Kr(t,e){const i=Vr(e?.north_deg);return null!==i?i:Vr(t?.north_deg)}function Yr(t,e){const i=t=>"static"===t||"daynight"===t?t:null;return i(e?.bg_mode)??i(t?.bg_mode)??"static"}function Xr(t,e){const i=e?.sun_rays;return"boolean"==typeof i?i:!0===t?.sun_rays}function Jr(t){const e=t?.states?.["sun.sun"]?.attributes,i=Number(e?.azimuth),s=Number(e?.elevation);return Number.isFinite(i)&&Number.isFinite(s)?{azimuth:i,elevation:s}:null}const Zr=["dawn","day","dusk","night"];function Qr(t){if(!t)return"";const e=Rr[t.phase];return[`--hp-day-cycle-outline-near:${e.outlineNear}`,`--hp-day-cycle-outline-mid:${e.outlineMid}`,`--hp-day-cycle-outline-far:${e.outlineFar}`].join(";")}function ta(t,e=1){if(!t)return G;const i=[`--hp-day-cycle-sun-x:${t.sunX.toFixed(2)}%`,`--hp-day-cycle-sun-y:${t.sunY.toFixed(2)}%`,`--hp-day-cycle-sun-opacity:${t.sunOpacity.toFixed(3)}`,`opacity:${Math.min(1,Math.max(0,e)).toFixed(4)}`].join(";");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(Nu(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=Nu(t,t=>t.classList.contains("editor-secondary")),s=Nu(t,t=>!!t.dataset.editorGroup),n=Nu(t,t=>!!t.dataset.editorPalette),o=Nu(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 Lu=t=>t.stopPropagation(),Bu=4.166666666666667e-9;function qu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Zl)*Zl;return Math.abs(e-t)<=Bu?t:e}const ju=(t,e,i,s)=>Math.hypot(i-t,s-e),Wu=(t,e,i,s,n,o,r,a)=>Math.hypot(Math.max(Math.abs(n-t),Math.abs(n+r-(t+i))),Math.max(Math.abs(o-e),Math.abs(o+a-(e+s)))),Uu=(t,e,i,s,n,o,r)=>{const a=Math.max(Number(s)||0,0)/2,l=Math.PI/180,c=Math.cos(i*l)*a,h=Math.sin(i*l)*a,d=Math.cos(r*l)*a,u=Math.sin(r*l)*a,p=Math.max(ju(t+c,e+h,n+d,o+u),ju(t-c,e-h,n-d,o-u)),_=Math.max(ju(t+c,e+h,n-d,o-u),ju(t-c,e-h,n+d,o+u));return Math.min(p,_)},Gu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Vu=t=>JSON.parse(JSON.stringify(t)),Ku=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Yu=(t,e,i)=>Math.min(i,Math.max(e,t)),Xu=t=>Vl({spaces:[t]})[0],Ju=(t,e,i)=>{const s=i>0?i:1,n=t=>`${(t[0]/s).toFixed(12)},${(t[1]/s).toFixed(12)}`,o=n(t),r=n(e);return o0?r:1,l=Math.max(s*a*.02,1e-9),c=[];for(const e of t||[])for(const t of hi(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 r of t||[]){if(!r?.id)continue;const c=Za(t,r.id,e,i,s,n,o,a);if(c)for(let t=0;t0&&u>0&&r===p&&u!==r))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=Ju(_,g,a),v=d.get(f);v?v.targets.add(r):d.set(f,{a:[_[0],_[1]],b:[g[0],g[1]],targets:new Set([r])})}}}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])*a,Number(t.a[1])*a],s=[Number(t.b[0])*a,Number(t.b[1])*a];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)=>Ju(t.a,t.b,a).localeCompare(Ju(e.a,e.b,a)))){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=Aa(u,t.a,t.b,e,s,a))}return u}const Qu=t=>{const e=[];for(const i of t||[]){const t=hi(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&&Ku(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(Ku(n,"segments")&&(delete n.segments,e++),Ku(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=jl&&t<=Wl&&(Ku(n,"plan_scale_x")||(n.plan_scale_x=t),Ku(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Ku(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?Yu(o,.1,1e3):5,e++);const r=Number(n.cell_cm),a=Number.isFinite(r)&&r>0?r:5;for(const t of n.wall_columns||[])if("circle"===t.shape)Ku(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Ku(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(Ku(t,"width")){const i=Number(t.width);(Ku(t,"width_cm")||Number.isFinite(i))&&(Ku(t,"width_cm")||(t.width_cm=Number(Yu(i/Jl*a,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Ku(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Ku(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(Yu(es*is(t)/Jl*a,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Ku(t,"scale")||Ku(t,"size"))&&(delete t.scale,delete t.size,e++);let i=String(t.text??"");const s=[...i.matchAll(/\{([^{}\r\n]+)\}/g)].some(t=>!!Yi(t[1]));if(!(Ku(t,"entity")||Ku(t,"attr")||Ku(t,"unit")))continue;const n=String(t.unit??"").trim(),o="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,r=s||n?"":Xi(t.entity,o);if(s||r){if(r){const e=i.indexOf("{}");i=e>=0?i.slice(0,e)+r+i.slice(e+2):`${i}${i?" ":""}${r}`,t.text=i}delete t.entity,delete t.attr,delete t.unit,e++}}}return{total:e,glowSpaces:i,glowRooms:s}})(i);let a=r.total;for(const t of i.spaces||[]){const e=Xu(t);if(!e)continue;if(!Fc(t.open_spans).length){const i=Lc(e.rooms,null,Bl,.02*Jl,!0);i.length&&(t.open_spans=Bc(i,Bl),a++)}}const l=Vu(i.spaces||[]),c=function(t,e){const i=JSON.parse(JSON.stringify(t||[])),s=JSON.parse(JSON.stringify(e||{}));let n=0,o=0,r=0,a=0,l="",c=0,h=0;const d={};let u=5;for(const t of i){const e=Gu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Bu||s))return;n++,t>r&&(r=t);const o=t*Xl*e;o>a&&(a=o,l=i)};for(const t of i){const e=Gu(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=[qu(e[0]),qu(e[1])];return t=Math.max(t,ju(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,r=qu(e+n),a=qu(i+o),l=qu(e),c=qu(i),h=Math.max(Zl,r-l),d=Math.max(Zl,a-c);t=Wu(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=[qu(e[0]),qu(e[1])];return t=Math.max(t,ju(e[0],e[1],i[0],i[1])),i}),r=n.length?[n[0]]:[],a=[];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=[qu(s.a[0]),qu(s.a[1])],r=[qu(s.b[0]),qu(s.b[1])];let a=Math.max(ju(s.a[0],s.a[1],n[0],n[1]),ju(s.b[0],s.b[1],r[0],r[1]));const l=ju(n[0],n[1],r[0],r[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>=-Bu&&s+e/2<=l+Bu});l>Bu&&c?(s.a=n,s.b=r):a=0,p(a,e,i)}for(const s of t.wall_columns||[]){o++;const t=[qu(s.center[0]),qu(s.center[1])],n=ju(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=[qu(s.x1),qu(s.y1)],i=[qu(s.x2),qu(s.y2)];t=Math.max(ju(s.x1,s.y1,e[0],e[1]),ju(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=qu(s.x),i=qu(s.y);if(null!=s.w&&null!=s.h){const n=qu(s.x+s.w),o=qu(s.y+s.h),r=Math.max(Zl,n-e),a=Math.max(Zl,o-i);t=Wu(s.x,s.y,s.w,s.h,e,i,r,a),s.w=r,s.h=a}else t=ju(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 r=n.b[0]-n.a[0],a=n.b[1]-n.a[1];if(Math.hypot(r,a)<=Bu)continue;const l=n.a[0]+r*o,h=n.a[1]+a*o;let d=180*Math.atan2(a,r)/Math.PI;d>=90?d-=180:d<-90&&(d+=180);const u=Number(s.angle),_=!(Number.isFinite(u)&&u===d),g=Uu(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=pi([s.x,s.y],t.rooms||[],.025,{step:Zl,length:Number(s.length)||0});if(!n)continue;const r=Number(s.angle),a=!(Number.isFinite(r)&&r===n.angle),l=Uu(s.x,s.y,Number.isFinite(r)?r:n.angle,Number(s.length)||0,n.x,n.y,n.angle);s.x=n.x,s.y=n.y,s.angle=n.angle,a&&c++,p(l,e,i,a)}}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=qu(i.x),r=qu(i.y),a=ju(i.x,i.y,n,r);s[t]={...i,x:n,y:r};const l="string"==typeof i.s?i.s:"";p(a,d[l]??u,l)}return{spaces:i,layout:s,report:{moved:n,total:o,maxShift:r,maxShiftCm:a,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=Xu(e),r=Xu(s);if(!o||!r)continue;const a=Qu(o.rooms),c=Qu(r.rooms),_=.02*Jl;let g=Yc(Fc(e.open_spans),a,c,Bl);const m=g.length;g=Kc(g,r.rooms,Bl,_),g=g.map(t=>{const e=Ic(t,Bl),i=[e[0],e[1]],n=[e[2],e[3]],o=[(e[0]+e[2])/2,(e[1]+e[3])/2],r=e[2]-e[0],a=e[3]-e[1],l=Math.hypot(r,a)||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(r*s-a*e)/(l*c)<=1e-6&&zc(o,t).d<=4*_&&zc(i,t).d<=4*_&&zc(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,Jl,2*_),g=Nc(n,d,u,Jl,2*_);if(Math.hypot(g[0]-p[0],g[1]-p[1])<.5*Jl)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*Jl){h.moved++;const t=m/Bl;t>h.maxShift&&(h.maxShift=t);const e=m/Jl*(Number(s.cell_cm)>0?Number(s.cell_cm):5);e>h.maxShiftCm&&(h.maxShiftCm=e,h.maxSpace=String(s.id||""))}return Ac(p,g,Bl)}),g=Kc(g,r.rooms,Bl,_),u+=Math.max(0,m-g.length);const f=g.map(t=>Ic(t,Bl));g.length?s.open_spans=g:delete s.open_spans,qc(s.rooms||[],r.rooms,f,_);const v=Array.isArray(e.walls)?e.walls.length:0;let y=Ra(e.walls,a,c,Zl,Bl);y=Zu(r.rooms,y,f,Zl,Number(s.cell_cm)>0?Number(s.cell_cm):5,Jl,Bl),y=el(r.rooms,y,f,Zl,Number(s.cell_cm)>0?Number(s.cell_cm):5,Jl,Bl),y=Ta(y,s.rooms||[],Zl,1,f.map(t=>[t[0]/Bl,t[1]/Bl,t[2]/Bl,t[3]/Bl])),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:a,glowSpacesMigrated:r.glowSpaces,glowRoomsMigrated:r.glowRooms,canonicalized:p,wallsMerged:d,spansMerged:u},changed:g}}class ep{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 ip=new WeakMap;const sp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function np(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 `,r=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=r}),a=t.createElement("canvas");a.width=4,a.height=1;const l=a.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 sp(c,i,0)&&sp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&sp(c,s,8)&&sp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(r)}}const op={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},rp=t=>Math.max(0,Math.min(1,t)),ap=(t,e,i)=>t+(e-t)*i,lp=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function cp(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 hp(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 dp(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 up(t,e,i){const s=dp(t),n=dp(e);if(!s||!n)return i<.5?t:e;const o=rp(i);return`rgba(${Math.round(ap(s[0],n[0],o))}, ${Math.round(ap(s[1],n[1],o))}, ${Math.round(ap(s[2],n[2],o))}, ${ap(s[3],n[3],o).toFixed(3)})`}function pp(t,e,i){const s=(t=>{const e=rp(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,lp(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=rp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:pp(e.from,e.to,i),e.phase=i>=1?"settling":"running",this._hooks.frame(e),i<1?this._raf=this._clock.requestFrame(r):(this._raf=0,this._hooks.settled(e),this._state?.token===n&&(this._state=null))};return this._raf=this._clock.requestFrame(r),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 gp="houseplan_card_labs_v1",mp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function fp(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 vp(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 $p(t,e,i,s=mp){const n=function(t,e=mp){const i=fp(t),s=new Map;if(!i||!bp(e))return s;for(const t of e){const e=fp(t.since),n=fp(t.expires);vp(i,e)>=0&&vp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set(bp(s)?s.map(t=>t.id):[]),r=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 a=!1;const l=t=>{if("off"===t)return r.clear(),void(a=!0);const e=t.startsWith("-"),i=e?t.slice(1):t;o.has(i)&&(a=!0,e||!n.has(i)?r.delete(i):r.add(i))};for(const e of xp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of xp(wp(t.hash)))l(e);const c=Object.freeze([...r].sort());return{active:c,space:kp(t.hash),persist:a?JSON.stringify(c):void 0,knownUrlOperation:a}}let Sp={active:Object.freeze([]),space:""},Mp="",Cp=!1,Dp="";const Tp=new Set;function Pp(){if("undefined"==typeof window)return Sp;const t=$p(window.location,function(){try{return window.localStorage.getItem(gp)}catch{return null}}(),Mp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(gp,t)}catch{}}(t.persist),Sp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Tp)t(Sp);return Sp}function Rp(){Pp()}function Ap(t){return Mp=t,"undefined"==typeof window?Sp:(Cp||(Cp=!0,window.addEventListener("hashchange",Rp),window.addEventListener("popstate",Rp)),Pp())}const Ip=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Ep=64;function Fp(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 zp(t,e,i=Ip){if(!(Fp(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],r=t[1]-i.origin[1],a=(o*Math.cos(s)-r*Math.sin(s))*i.xyScale,l=(o*Math.sin(s)+r*Math.cos(s))*i.xyScale;return[i.origin[0]+a,i.origin[1]+l*Math.cos(n)-e*i.zScale*Math.sin(n)]}function Op(t,e=Ip){if(!Fp(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 Np(t=Ip){return`matrix(${function(t=Ip){if(!Fp(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),r=t.xyScale*Math.cos(e)*Math.cos(i);return[s,o,n,r,t.origin[0]-s*t.origin[0]-n*t.origin[1],t.origin[1]-o*t.origin[0]-r*t.origin[1]]}(t).map(t=>Number(t.toFixed(12))).join(" ")})`}function Hp(t,e=Ip){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 r=[[i.x,i.y],[i.x+i.w,i.y],[i.x+i.w,i.y+i.h],[i.x,i.y+i.h]],a=Math.max(s,n),l=r.flatMap(t=>[zp(t,-o,e),zp(t,a,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 Lp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Bp(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 Bp(i)>0===s?i:[...i].reverse()}function jp(t,e,i){return t.length?`M ${t.map(t=>Lp(zp(t,i,e))).join(" L ")} Z`:""}function Wp(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 Up(t,e,i=Ip){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=qp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Bp(t))>=1e-9)).filter(t=>t.length&&Bp(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(Bp(e[0]))-Math.abs(Bp(t[0]))});const n=[],o=[];let r=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:r}}function Gp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Vp=t=>t.every(Number.isFinite);function Kp(t,e,i,s){const n=t[0]*i,o=t[1]*s,r=e*Math.PI/180;return[n*Math.cos(r)-o*Math.sin(r),n*Math.sin(r)+o*Math.cos(r)]}function Yp(t,e,i,s,n,o,r){const a=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],Kp(i,t.angle,a,l));return{leaf:e,hinge:c,closedVector:Kp(s,t.angle,a,l),quarterVector:Kp([-s[1],s[0]],t.angle,a,l),turnDeg:n,bottom:o,top:r}}const Xp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Jp(t,e,i=Ip){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=zp(e.hinge,e.bottom,i),r=zp(n,e.bottom,i),a=zp(n,e.top,i),l=zp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${Xp(o)} L ${Xp(r)} L ${Xp(a)} L ${Xp(l)} Z`,shadowD:`M ${Xp(zp(e.hinge,0,i))} L ${Xp(zp(n,0,i))}`,depth:Math.max(o[1],r[1])}})}const Zp={window:120,door:90,passage:90,gate:300};function Qp(t){return Zp[t]}function t_(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 e_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=t_(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 i_(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 s_(t){const e=e_(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,r=s/n,a=(t[0]-e.a[0])*o+(t[1]-e.a[1])*r,l=Math.max(0,Math.min(n,a)),c=e.a[0]+l*o,h=e.a[1]+l*r;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])*r-(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],r=e.b[1]-e.a[1],a=Math.hypot(o,r);if(!(a>1e-9))return!1;const l=o/a,c=r/a;for(const o of i){if(!o.open&&o.kind)continue;const i=t_(o.a,o.b),r=i.b[0]-i.a[0],a=i.b[1]-i.a[1],h=Math.hypot(r,a);if(!(h>1e-9))continue;const d=r/h,u=a/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(i_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(i_);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),r=o.filter(t=>t.target.partitionHost);if(r.length){if(1!==new Set(r.map(t=>t.target.partitionHost.id)).size||r.some(t=>t.target.ambiguousPartitionHost))return{candidate:null,jambBlockedTarget:null};const t=r[0],e=t.target.b[0]-t.target.a[0],i=t.target.b[1]-t.target.a[1],s=Math.hypot(e,i),a=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,r=s/n,c=Math.abs(a*r-l*o)<=1e-6,h=Math.abs((e.target.a[0]-t.target.a[0])*l-(e.target.a[1]-t.target.a[1])*a);return c&&h<=1e-9}))return{candidate:null,jambBlockedTarget:null};n=t}if(n.target.ambiguousPartitionHost)return{candidate:null,jambBlockedTarget:null};const{target:a,length:l}=n,c=a.b[0]-a.a[0],h=a.b[1]-a.a[1],d=c/l,u=h/l,p=a.partitionHost?a.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=a.a[0]+d*g,y=a.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=[a.a[0]+d*(w-x/2),a.a[1]+u*(w-x/2)],M=[a.a[0]+d*(k+$/2),a.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:a,...a.partitionHost?{host:{...a.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 n_(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 o_="1.65.0-beta.5",r_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},a_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},l_=2e3,c_=1e3,h_=1500,d_=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},u_=(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}},p_=(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)}},__=new Map;let g_=0;const m_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let f_=1e4;const v_="houseplan_card_layout_v1",y_="houseplan_card_cfg_v1",b_="houseplan_card_zoom_v1",w_="houseplan_card_nav_v1",k_="houseplan_card_kiosk_v1",x_="houseplan_card_view_v1",$_=1e3,S_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],M_=(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}},C_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),D_=2e3,T_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},P_=t=>{history.pushState(null,"",t),T_(window,"location-changed",{replace:!1})},R_=(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},A_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class I_ 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=gn(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={...ea},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 _p({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new Hu({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 ep(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=++g_,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+Tu)>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=()=>{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._space=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=In(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=Cn(t);e&&(Pn(t,e),Rn(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 oh(()=>this.requestUpdate()),this._dirtyPos=new Set,this._sentPos=new Map,this._persistLayout=R_(()=>{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(v_,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=R_(()=>{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=d_(t.cm);if(null==s)return void this._showPhysicalRange("column"===t.kind?xl:100);const n=this._imperial?2.54*s:s,o="column"===t.kind?xl: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=d_(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&&Ll(e,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"))}const r=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=$l(n),i.shape="circle"===t.shape?"circle":"square","square"===i.shape?i.angle=d_(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"),r),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=[],r=s.points.slice(0,n+1),a=s.points.slice(n+1);if(r.length>=2&&o.push({id:s.id,points:r,segments:s.segments.slice(0,n)}),a.length>=2&&o.push({id:o.length?`${s.id}-${Date.now().toString(36)}`:s.id,points:a,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>D_)return void this._showToast(this._t("toast.physical_limit"));const i=this._geometrySnapshot(),s=[...this._draftSegmentCms,this._closingWallCm||this._drawWallCm||pa];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=Hr(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:hs(this._settings,{bgColor:null})||null,northDeg:Kr(this._settings,{}),bgMode:Yr(this._settings,{}),sunRays:Xr(this._settings,{}),busy:!1}},this._openAlignDialog=()=>{if(!this._norm||!this._serverCfg)return;const t=this._serverCfg.spaces||[],e=tp(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"),r=this.renderRoot.querySelector(".hp-backdrop"),a=this.renderRoot.querySelector(".zoomwrap"),l=a?getComputedStyle(a).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:cp(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:r&&Number(getComputedStyle(r).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=Oi(this._baseVb(),s/Math.max(1,n)),r=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,t)),a=o.w/r,l=o.h/r,c=e??o.x+o.w/2,h=i??o.y+o.h/2;return this._clampView({x:c-a/2,y:h-l/2,w:a,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 r=this.renderRoot.querySelector(".editorchrome"),a=r?.querySelector(".editorchrome-inner"),l="view"===i?0:a?.scrollHeight||a?.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:cp(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)})}_slideTo(t,e){if(t===this._space)return;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._space=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())}_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()}}get _editing(){return"plan"===this._mode||"devices"===this._mode||"decor"===this._mode}get _markup(){return"plan"===this._mode}_newContinuityController(){return new eh(()=>{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(x_,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?Op(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?zp([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 kp(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,ip.get(e)?.resolved);var e;void 0!==t&&(this._glowScreenBlend=t),this._continuityUnsub?.(),this._continuityUnsub=Qc(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=ip.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=np(t).catch(()=>!1).then(t=>(i.resolved=t,t)),ip.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,()=>As(this._serverCfg)),this._config?.kiosk&&Number(this._config?.cycle)>0&&(clearInterval(this._cycleTimer),this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle))),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Tp.add(e);const i=Ap(t);return"undefined"==typeof window&&e(i),()=>{Tp.delete(e)}}(o_,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},h_)),!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(),r=/^[a-z]$/.test(o),a="z"===o||!r&&"KeyZ"===t.code,l="y"===o||!r&&"KeyY"===t.code,c=n&&(a&&t.shiftKey||l),h=n&&a&&!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[1]/$_]),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 __.values())for(const e of t)clearTimeout(e.evict);__.clear(),f_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of __.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:__.size,slots:t,dlgs:e,drafts:i}}setConfig(t){this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t},this._config.kiosk&&(this._booting=!1,this._bootFading=!1),t.default_floor&&(this._space=t.default_floor);try{this._zoomBySpace=JSON.parse(localStorage.getItem(b_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(x_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=Ap(o_);try{const t=JSON.parse(localStorage.getItem(k_)||"null");this._kioskScale={icon:zs(t?.icon),font:zs(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(y_)||"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||ih(t.config),this._layout=t.layout||{},this._layoutRev=t.layout_rev||0,this._layoutContentFingerprint=t.layout_fingerprint||ih(this._layout),this._virtualLights=gn(t.virtual_lights,this._cfgRev),this._serverStorage=!0,this._adoptInitialSpace(this._model))}catch{}"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=m_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=__.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>=Xc,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:r}=((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,r=0,a=0,l=null;for(const i of t){if(i.owner===e)continue;l=i;const t=n(i);t<=0||(t>r?(o=i,r=t,a=1):t===r&&a++)}return!o||a>1?{slot:o||l,sure:!1}:{slot:o,sure:!0}})(s,this._warmGen,e,i);o&&(this._warmLongReturn=!!o.freed&&Date.now()-o.freed>=Xc,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},h_)),this._warmKey=t,r?(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=__.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},f_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);if(this._hashApplied||!this._model.find(t=>t.id===e.space))return void(this._warmVp=null);this._space=e.space,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 i=this._effectiveProjection(),s=i===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=s&&e.view?{...e.view}:null,this._viewModeSnap=s&&e.snap?{...e.snap}:null,!s&&e.logicalCenter){const t="iso"===i?zp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var n;this._tool="openwall"===(n=e.tool)||"closewall"===n?"boundary":"opening"===(n=function(t){return"partition"===t?"draw":t}(n))?"draw":"string"==typeof n&&C_.has(n)?n:"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=m_(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=__.get(i)||[];for(s.push(this._warmSlot),__.set(i,s),this._warmTrim(s);__.size>8;){const t=__.keys().next().value;if(void 0===t||t===i)break;for(const e of __.get(t)||[])clearTimeout(e.evict);__.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>f_)&&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=ih(this._serverCfg),this._layoutContentFingerprint=ih(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(yn).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(y_,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:fn(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){return 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){const e=this._initialSpaceSelection(t);return e.id?(this._space=e.id,"hash"===e.source&&(this._hashApplied=!0),"saved"===e.source&&(this._navApplied=!0),e):e}_candidateBackdrop(t,e=this._space){const i=Vl(t),s=this._initialSpaceSelection(i).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===s)?.bg?.href||""}_visualFrameFingerprint(){const t=this._stageEl,e=t?[t.clientWidth,t.clientHeight]:[0,0];return sh([this._cfgRev,this._cfgContentFingerprint||ih(this._serverCfg),this._layoutRev,this._layoutContentFingerprint||ih(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(qu(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=qu(t,t=>t.classList.contains("editor-secondary")),s=qu(t,t=>!!t.dataset.editorGroup),n=qu(t,t=>!!t.dataset.editorPalette),o=qu(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 Wu=t=>t.stopPropagation(),Uu=4.166666666666667e-9;function Gu(t){if(!Number.isFinite(t))return t;const e=Math.round(t/Ql)*Ql;return Math.abs(e-t)<=Uu?t:e}const Vu=(t,e,i,s)=>Math.hypot(i-t,s-e),Ku=(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)))),Yu=(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(Vu(t+c,e+h,n+d,o+u),Vu(t-c,e-h,n-d,o-u)),_=Math.max(Vu(t+c,e+h,n-d,o-u),Vu(t-c,e-h,n+d,o+u));return Math.min(p,_)},Xu=t=>{const e=Number(t?.cell_cm);return e>0?e:5};const Ju=t=>JSON.parse(JSON.stringify(t)),Zu=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Qu=(t,e,i)=>Math.min(i,Math.max(e,t)),tp=t=>Kl({spaces:[t]})[0],ep=(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=ep(_,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)=>ep(t.a,t.b,r).localeCompare(ep(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 sp=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&&Zu(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(Zu(n,"segments")&&(delete n.segments,e++),Zu(n,"plan_scale")){const t=Number(n.plan_scale);Number.isFinite(t)&&t>=Wl&&t<=Ul&&(Zu(n,"plan_scale_x")||(n.plan_scale_x=t),Zu(n,"plan_scale_y")||(n.plan_scale_y=t),delete n.plan_scale,e++)}const o=Number(n.cell_cm);Zu(n,"cell_cm")&&(!Number.isFinite(o)||o<.1||o>1e3)&&(n.cell_cm=Number.isFinite(o)&&o>0?Qu(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)Zu(t,"angle")&&(delete t.angle,e++);else if("square"===t.shape&&Zu(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(Zu(t,"width")){const i=Number(t.width);(Zu(t,"width_cm")||Number.isFinite(i))&&(Zu(t,"width_cm")||(t.width_cm=Number(Qu(i/Zl*r,.1,100).toFixed(6))),delete t.width,e++)}if("rect"!==t?.kind&&"ellipse"!==t?.kind||!0!==t.fill||(Zu(t,"fill_color")||(t.fill_color=t.color||"#607d8b",e++),Zu(t,"fill_opacity")||(t.fill_opacity=.25,e++)),"text"!==t?.kind)continue;void 0===t.size_cm?(t.size_cm=Number(Qu(ts*es(t)/Zl*r,.1,2e3).toFixed(6)),delete t.scale,delete t.size,e++):(Zu(t,"scale")||Zu(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(!(Zu(t,"entity")||Zu(t,"attr")||Zu(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=tp(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=Ju(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=Xu(t);null!=t?.id&&(d[String(t.id)]=e),e>u&&(u=e)}const p=(t,e,i,s=!1)=>{if(!(t>Uu||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=Xu(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=[Gu(e[0]),Gu(e[1])];return t=Math.max(t,Vu(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=Gu(e+n),r=Gu(i+o),l=Gu(e),c=Gu(i),h=Math.max(Ql,a-l),d=Math.max(Ql,r-c);t=Ku(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=[Gu(e[0]),Gu(e[1])];return t=Math.max(t,Vu(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=[Gu(s.a[0]),Gu(s.a[1])],a=[Gu(s.b[0]),Gu(s.b[1])];let r=Math.max(Vu(s.a[0],s.a[1],n[0],n[1]),Vu(s.b[0],s.b[1],a[0],a[1]));const l=Vu(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>=-Uu&&s+e/2<=l+Uu});l>Uu&&c?(s.a=n,s.b=a):r=0,p(r,e,i)}for(const s of t.wall_columns||[]){o++;const t=[Gu(s.center[0]),Gu(s.center[1])],n=Vu(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=[Gu(s.x1),Gu(s.y1)],i=[Gu(s.x2),Gu(s.y2)];t=Math.max(Vu(s.x1,s.y1,e[0],e[1]),Vu(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=Gu(s.x),i=Gu(s.y);if(null!=s.w&&null!=s.h){const n=Gu(s.x+s.w),o=Gu(s.y+s.h),a=Math.max(Ql,n-e),r=Math.max(Ql,o-i);t=Ku(s.x,s.y,s.w,s.h,e,i,a,r),s.w=a,s.h=r}else t=Vu(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)<=Uu)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=Yu(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=Yu(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=Gu(i.x),a=Gu(i.y),r=Vu(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=tp(e),a=tp(s);if(!o||!a)continue;const r=sp(o.rooms),c=sp(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=Ec(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=>Ec(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=ip(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 op{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 ap=new WeakMap;const rp=(t,e,i)=>255===t[i+3]&&e.every((e,s)=>Math.abs(t[i+s]-e)<=2);async function lp(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 rp(c,i,0)&&rp(c,function(t,e){return[0,1,2].map(i=>Math.round(255-(255-t[i])*(255-e[i])/255))}(i,s),4)&&rp(c,s,8)&&rp(c,n,12)}catch{return!1}finally{e.URL.revokeObjectURL(a)}}const cp={now:()=>performance.now(),requestFrame:t=>requestAnimationFrame(t),cancelFrame:t=>cancelAnimationFrame(t)},hp=t=>Math.max(0,Math.min(1,t)),dp=(t,e,i)=>t+(e-t)*i,up=(t,e,i)=>{const s=1-t;return 3*s*s*t*e+3*s*t*t*i+t*t*t};function pp(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 _p(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 gp(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 mp(t,e,i){const s=gp(t),n=gp(e);if(!s||!n)return i<.5?t:e;const o=hp(i);return`rgba(${Math.round(dp(s[0],n[0],o))}, ${Math.round(dp(s[1],n[1],o))}, ${Math.round(dp(s[2],n[2],o))}, ${dp(s[3],n[3],o).toFixed(3)})`}function fp(t,e,i){const s=(t=>{const e=hp(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,up(n,.2,.2){const e=this._state;if(!e||e.token!==n)return;const i=hp((t-e.startedAt)/e.duration);e.presented=i>=1?e.to:fp(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 yp="houseplan_card_labs_v1",bp=Object.freeze([Object.freeze({id:"iso",issue:89,since:"1.62.0",expires:"1.65.0",summary:"Volumetric plan renderer"})]);function wp(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 kp(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 Dp(t,e,i,s=bp){const n=function(t,e=bp){const i=wp(t),s=new Map;if(!i||!$p(e))return s;for(const t of e){const e=wp(t.since),n=wp(t.expires);kp(i,e)>=0&&kp(i,n)<0&&s.set(t.id,t)}return s}(i,s),o=new Set($p(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 Cp(new URLSearchParams(String(t.search||"").replace(/^\?/,""))))l(e);for(const e of Cp(Sp(t.hash)))l(e);const c=Object.freeze([...a].sort());return{active:c,space:Mp(t.hash),persist:r?JSON.stringify(c):void 0,knownUrlOperation:r}}let Tp={active:Object.freeze([]),space:""},Pp="",Rp=!1,Ap="";const Ip=new Set;function Ep(){if("undefined"==typeof window)return Tp;const t=Dp(window.location,function(){try{return window.localStorage.getItem(yp)}catch{return null}}(),Pp);void 0!==t.persist&&function(t){try{window.localStorage.setItem(yp,t)}catch{}}(t.persist),Tp={active:t.active,space:t.space},window.__hpLabs=t.active;for(const t of Ip)t(Tp);return Tp}function Fp(){Ep()}function zp(t){return Pp=t,"undefined"==typeof window?Tp:(Rp||(Rp=!0,window.addEventListener("hashchange",Fp),window.addEventListener("popstate",Fp)),Ep())}const Op=Object.freeze({rotDeg:0,tiltDeg:20,xyScale:1,zScale:1,origin:Object.freeze([500,500])}),Np=64;function Hp(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 Lp(t,e,i=Op){if(!(Hp(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 Bp(t,e=Op){if(!Hp(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 qp(t=Op){return`matrix(${function(t=Op){if(!Hp(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 jp(t,e=Op){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=>[Lp(t,-o,e),Lp(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 Wp=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function Up(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 Up(i)>0===s?i:[...i].reverse()}function Vp(t,e,i){return t.length?`M ${t.map(t=>Wp(Lp(t,i,e))).join(" L ")} Z`:""}function Kp(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 Yp(t,e,i=Op){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=Gp(t,e);if(!i.length)return i;let s=0;for(let t=1;t0)).filter(t=>t.length>=3&&Math.abs(Up(t))>=1e-9)).filter(t=>t.length&&Up(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(Up(e[0]))-Math.abs(Up(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 Xp(t,e){return t^=Math.round(64*(Number.isFinite(e)?e:0)),Math.imul(t,16777619)>>>0}const Jp=t=>t.every(Number.isFinite);function Zp(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 Qp(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],Zp(i,t.angle,r,l));return{leaf:e,hinge:c,closedVector:Zp(s,t.angle,r,l),quarterVector:Zp([-s[1],s[0]],t.angle,r,l),turnDeg:n,bottom:o,top:a}}const t_=t=>`${Number(t[0].toFixed(4))} ${Number(t[1].toFixed(4))}`;function e_(t,e,i=Op){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=Lp(e.hinge,e.bottom,i),a=Lp(n,e.bottom,i),r=Lp(n,e.top,i),l=Lp(e.hinge,e.top,i);return{id:t.id,sourceIndex:t.sourceIndex,type:t.type,leaf:e.leaf,d:`M ${t_(o)} L ${t_(a)} L ${t_(r)} L ${t_(l)} Z`,shadowD:`M ${t_(Lp(e.hinge,0,i))} L ${t_(Lp(n,0,i))}`,depth:Math.max(o[1],a[1])}})}const i_={window:120,door:90,passage:90,gate:300};function s_(t){return i_[t]}function n_(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 o_(t){const e=new Map;return t.forEach((t,i)=>{if(!t.kind||t.open)return;const s=n_(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 a_(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 r_(t){const e=o_(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=n_(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(a_),s=e.filter(e=>!e.target.partitionHost||t.renderedLength+2*e.target.physicalHalfWidth<=e.length+1e-9).sort(a_);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 l_(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 c_="1.65.0-beta.5",h_={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},d_={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},u_=2e3,p_=1e3,__=1500,g_=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},m_=(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}},f_=(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)}},v_=new Map;let y_=0;const b_=t=>`${window.innerWidth}x${window.innerHeight}|${location.pathname}|${JSON.stringify(t??{})}`;let w_=1e4;const k_="houseplan_card_layout_v1",x_="houseplan_card_cfg_v1",$_="houseplan_card_zoom_v1",S_="houseplan_card_nav_v1",M_="houseplan_card_kiosk_v1",C_="houseplan_card_view_v1",D_=1e3,T_=[[0,1],[45,.88],[70,.62],[86,.32],[100,0]],P_=(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}},R_=new Set(["select","draw","column","merge","split","resize","opening","boundary","wallthick","delroom"]),A_=2e3,I_=(t,e,i)=>{const s=new Event(e,{bubbles:!0,composed:!0});s.detail=i??{},t.dispatchEvent(s)},E_=t=>{history.pushState(null,"",t),I_(window,"location-changed",{replace:!1})},F_=(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},z_=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}};class O_ 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 vp({frame:t=>this._applyModeTransitionFrame(t),settled:t=>this._settleModeTransition(t)}),this._editorSecondary=new ju({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 op(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=++y_,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+Iu)>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=()=>{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._space=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=F_(()=>{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(k_,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=F_(()=>{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=g_(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=g_(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=g_(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>A_)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=np(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:pp(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(O_.ZOOM_MAX,Math.max(O_.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:pp(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)})}_slideTo(t,e){if(t===this._space)return;if(this._wallFaceBatch&&this._roomDialogCancel(),"plan"===this._mode&&"draw"===this._tool&&!this._finishWallChain())return;this._cancelModeTransition(!0);const i=window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches;this._activeDraftId&&(this._resumeDraftBySpace[this._space]=this._activeDraftId),this._space=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())}_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()}}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(C_,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?Bp(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?Lp([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 Mp(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,ap.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=ap.get(t);if(e)return e.promise;const i={promise:Promise.resolve(!1)};return i.promise=lp(t).catch(()=>!1).then(t=>(i.resolved=t,t)),ap.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._config?.kiosk&&Number(this._config?.cycle)>0&&(clearInterval(this._cycleTimer),this._cycleTimer=window.setInterval(()=>this._cycleTick(),1e3*Number(this._config.cycle))),window.addEventListener("hashchange",this._onHashChange),this._labsUnsub?.(),this._labsUnsub=function(t,e){Ip.add(e);const i=zp(t);return"undefined"==typeof window&&e(i),()=>{Ip.delete(e)}}(c_,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},__)),!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]/D_,t[1]/D_]),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 v_.values())for(const e of t)clearTimeout(e.evict);v_.clear(),w_=t&&t>0?t:1e4}static _warmBootStats(){let t=0,e=0;const i=[];for(const s of v_.values())for(const n of s)t++,n.dlg&&(e++,i.push(n.dlg.kind));return{keys:v_.size,slots:t,dlgs:e,drafts:i}}setConfig(t){this._config={icon_size:2.5,show_temperature:!0,live_states:!0,show_signal:!0,...t},this._config.kiosk&&(this._booting=!1,this._bootFading=!1),t.default_floor&&(this._space=t.default_floor);try{this._zoomBySpace=JSON.parse(localStorage.getItem($_)||"{}")||{}}catch{this._zoomBySpace={}}try{const t=JSON.parse(localStorage.getItem(C_)||"{}")||{};this._viewPreference=Object.fromEntries(Object.entries(t).filter(t=>"flat"===t[1]||"iso"===t[1]))}catch{this._viewPreference={}}this._labs=zp(c_);try{const t=JSON.parse(localStorage.getItem(M_)||"null");this._kioskScale={icon:Fs(t?.icon),font:Fs(t?.font)}}catch{}try{const t=JSON.parse(localStorage.getItem(x_)||"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,this._adoptInitialSpace(this._model))}catch{}"view"!==this._mode||this._view||(this._zoom=this._zoomBySpace[this._space]||1),this.isConnected&&(this._warmAdopt(),this._warmLongReturn&&this._beginResumeSettle(),this._warmLongReturn=!1)}_warmAdopt(){if(this._config?.kiosk)return;const t=b_(this._config);if(this._warmKey===t&&this._warmSlot)return;this._warmSlot&&this._warmRelease();const e=this.parentNode,i=this._warmIdx(e),s=v_.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},__)),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=v_.get(e);if(!t.live&&o&&o.length>1){const e=o.indexOf(t);e>=0&&o.splice(e,1)}},w_+250)}_warmAdoptViewport(t){const e=this._warmVp;if(!e||this._warmSlot?.path!==location.pathname)return void(this._warmVp=null);if(this._hashApplied||!this._model.find(t=>t.id===e.space))return void(this._warmVp=null);this._space=e.space,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 i=this._effectiveProjection(),s=i===e.projection&&this._labsIso===e.activeLabsIso;if(this._view=s&&e.view?{...e.view}:null,this._viewModeSnap=s&&e.snap?{...e.snap}:null,!s&&e.logicalCenter){const t="iso"===i?Lp([e.logicalCenter.x,e.logicalCenter.y],0):[e.logicalCenter.x,e.logicalCenter.y];this._applyView(e.zoom,t[0],t[1])}var n;this._tool="openwall"===(n=e.tool)||"closewall"===n?"boundary":"opening"===(n=function(t){return"partition"===t?"draw":t}(n))?"draw":"string"==typeof n&&R_.has(n)?n:"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=b_(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=v_.get(i)||[];for(s.push(this._warmSlot),v_.set(i,s),this._warmTrim(s);v_.size>8;){const t=v_.keys().next().value;if(void 0===t||t===i)break;for(const e of v_.get(t)||[])clearTimeout(e.evict);v_.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>w_)&&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(x_,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){return 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){const e=this._initialSpaceSelection(t);return e.id?(this._space=e.id,"hash"===e.source&&(this._hashApplied=!0),"saved"===e.source&&(this._navApplied=!0),e):e}_candidateBackdrop(t,e=this._space){const i=Kl(t),s=this._initialSpaceSelection(i).id||(i.some(t=>t.id===e)?e:i[0]?.id);return i.find(t=>t.id===s)?.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()} @@ -4549,26 +4671,26 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${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 Vl(t).map((e,i)=>{const s=t.spaces[i]?.plan_url;return e.bg&&s?{...e,bg:{...e.bg,href:s}}:e})}_spaceModel(){return t=this._model,e=this._space,t.find(t=>t.id===e)??t[0];var t,e}_spaceModelById(t){return function(t,e){if(e)return t.find(t=>t.id===e)}(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._space=""}}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||In(e),s=On(e,i),{areaToSpace:n,markers:o,settings:r,excluded:a,iconRules:l}=t,c=!1!==r.group_lights,h=yo(o),d=fo(s,c).filter(t=>!bo(s,t.eid,h)),u=new Set(d.map(t=>t.area)),p=qn(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"!==Bn(e,"device:"+t.id,i).kind)continue;const r=p[t.id]||[],h=jn(s,t,r);let d=a.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"===vo(s,e,t.model,r,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 us(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=ih(n),r=o!==(this._cfgContentFingerprint||ih(this._serverCfg));if(r&&(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=mn(this._virtualLights,t.virtual_lights,this._cfgRev,"virtual_lights"in t);vn(e)!==vn(this._virtualLights)&&(this._virtualLights=e,this._capturedSnapshotVirtual="")}let a=!1;if(void 0!==e||void 0!==i){const t=i??e?.layout??{},s=ih(t);a=s!==(this._layoutContentFingerprint||ih(this._layout)),a&&(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),r&&this._continuity.note("config-candidate",{configRev:this._cfgRev}),a&&this._continuity.note("layout-candidate",{layoutRev:this._layoutRev}),{configChanged:r,layoutChanged:a}}_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=ih(n)!==(this._cfgContentFingerprint||ih(this._serverCfg))||ih(s?.layout??{})!==(this._layoutContentFingerprint||ih(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),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(v_)||"{}")||{}}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,r)=>{s()||i.push(async()=>{const i=await t.subscribeEvents(r,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=wn(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(ih(e)!==(this._cfgContentFingerprint||ih(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),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=An(this.hass,this._onHaRegistryUpdate),this._onHaRegistryUpdate())}get _haRegistry(){return In(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=On(this.hass,t),n=Nn(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+Tu)>t?1:0)).join("|"),i=vn(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,r=new Set(["sun.sun"]);this._vacFit?.source&&r.add(this._vacFit.source);const a=new Set,l=new Set,c=t=>{if(!t)return;const e=t.indexOf(":");if(e<0)return void r.add(t);const i=t.slice(0,e),s=t.slice(e+1);"device"===i?a.add(s):"entity"===i&&r.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 mi(e))r.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=Yi(t[1]);e?.entity&&r.add(e.entity)}e.entity&&r.add(e.entity),o.set(`decor:${t.id}:${e.id}`,ts(e.text,e,s,t=>!!s.entities?.[t]&&!!s.states?.[t]&&!bo(s,t,yo(this._markers))))}const h=lo(s,this._devices,null,this._virtualLights);for(const t of this._devices){for(const e of[!1,!0])n.set(pu(t.id,e),cu(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?vh(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=uu({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:r,deviceIds:a,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 Bn(this.hass,t,this._haRegistry)}houseplanDiagnostics(){const t=function(t){const e=In(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&&P_("/config/devices/device/"+encodeURIComponent(t.device_id))}}else P_("/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,As(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=ih(i);s!==(this._layoutContentFingerprint||ih(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")+":"+sr(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=xo({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,Bn(t,s,e));!function(t){if("undefined"==typeof localStorage||!t.size)return;const e=Ln(),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));Mn=s;try{localStorage.setItem(Sn,JSON.stringify(s))}catch{}}(i),this._haBindingCacheKey=o}this._defPos=this._defaultPositions(),this._syncNewDevices(),this._seedHiddenDevices(),this._syncActivityRuntime();const r=new Set(this._devices.filter(t=>!t.hidden).map(t=>t.id));for(const t of this._vacRt.keys())r.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 a=this._devices.some(t=>"ha_disabled"===t.bindingStatus?.kind&&"ha_disabled"!==s.get(t.id));a&&("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)&&(T_(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=uo(this._renderPlanHass,i.entities);null!=s&&e.push(s)}return zi(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*_c(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),r=.1*Math.min(o.w,o.h),a=o.w-2*r,l=o.h-2*r,c=Math.max(1,Math.round(Math.sqrt(n.length*a/Math.max(l,1)))),h=Math.ceil(n.length/c),d=a/c,u=l/Math.max(h,1),p=n.map((t,e)=>({x:o.x+r+d*(e%c+.5),y:o.y+r+u*(Math.floor(e/c)+.5)}));Ni(p,o,s,.5*r),n.forEach((e,i)=>t[e.id]=tc(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*$_,y:i.y*$_}}else if(void 0===i.s)return{x:i.x,y:i.y};return this._defPos[t.id]?this._defPos[t.id]:e?tc(pc(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,r=this._layout[t.id]?.k;this._layout={...this._layout,[t.id]:{s:t.space,x:ic(n/$_),y:ic(o/$_),...r?{k:r}:{}}}}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 nu(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(pu(t.id,e));return s||cu(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,lu({...i,visual:e}).join(" "))}_liveTemp(t){if(!this._config?.show_temperature)return null;if(!0===t.marker?.use_climate_temp){const e=_o(this._renderPlanHass,t.entities);if(null!=e)return e}return"mdi:thermometer"!==t.icon&&"mdi:air-filter"!==t.icon?null:po(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 Bs(t.split(".")[0],e?.attributes?.device_class||i?.device_class||i?.original_device_class)})}_liveHum(t){return this._config?.show_temperature&&t.primary&&go(this.hass,t.primary)?mo(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,T_(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=Vh(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||!Qh(t))return;const e=t=>{const e=Qh(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=wn(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&&td(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}}_t(t,e){return nr(sr(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=sr(this.hass,this._config?.language);return or(i,t)&&or(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=oc([[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=oc("line"===t.kind?[[t.x1*$_,t.y1*i],[t.x2*$_,t.y2*i]]:"text"===t.kind?[[t.x*$_,t.y*i]]:ca({x:t.x*$_,y:t.y*i,w:t.w*$_,h:t.h*i,angle:t.angle}));s&&e.push(s)}for(const i of this._physicalBodiesR(t)){const t=oc(i);t&&e.push(t)}}return ac(t,e)}_frameOf(){const t=this._spaceModel();if(!t){this._frame=null;const t={x:0,y:0,w:$_,h:$_};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=dc(this._contentItems(t));let n=s.all||uc(t),o=this._showFar?n:s.core||uc(t);return e&&e.id===t.id&&i&&e.grow&&(o=M_(e.rect,o),n=M_(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=Gp(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=Gp(e,-1)}else e=Gp(e,t?1:0);else for(const i of t)e=Gp(e,i.codePointAt(0)||0);else e=Gp(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:Ip,wallHeight:Ep,floorEdgeHeight:10,algorithm:3})}`,build:()=>{const n=Rl(t,this._cellCm,this._gridPitch,2e-4*this._gridPitch,this._partitionOpeningCuts(t)).all,o=this._roomWallOpeningInputs(this._openingsR,t),r=e.length||n.length?dl(t.rooms,e,i,o,this._wallKeyPitch,this._cellCm,this._gridPitch,$_,n):null;if((e.length||n.length)&&!r)throw new Error("wall boolean geometry failed");const a=r?.paperGeom??function(t,e,i,s,n,o,r=1){try{const a=cl(t,e,i,s,n,o,r);return a?a.shell?.length?si(a.centre,a.shell):a.centre:[]}catch{return null}}(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_);if(!a)throw new Error("floor boolean geometry failed");const l=r?.openingIndex||gl(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?ld(i.partitionHost,s):e.length||"gate"===t.type?yl(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(!(Vp([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=[Yp(t,0,[-i,0],[i,0],o,0,.88*e),Yp(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[Yp(t,0,[-i,0],[i,0],-90,.27*e,.78*e),Yp(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[Yp(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:r?.geom||[],floor:a,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 Vp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=Hp({rect:n?M_(i,n):i,wallHeight:Ep,openingHeight:Ep,floorDepth:10}),r=function(t,e=Ip,i=64){if(!Number.isFinite(i)||i<0)throw new Error("invalid wall height");const s=[],n=[],o=[];let r=0;for(let a=0;a<(t||[]).length;a++){const l=t[a];for(let t=0;t<(l||[]).length;t++){const c=qp(l[t],t>0);if(!(c.length<3||Math.abs(Bp(c))<1e-9)){s.push(jp(c,e,i)),r+=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:r}}(s.walls),a={geometry:r,floor:Up(s.floor,10),openings:s.openings,frame:o};return p_(this._isoGeometryCache,t.key,a,8),{key:t.key,...a}}_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?zp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=Op([t.x,t.y]),i=Op([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=Hp({rect:this._frameOf().rect,wallHeight:Ep});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 t=this._model,e=this._space,t.find(t=>t.id===e)??t[0];var t,e}_spaceModelById(t){return function(t,e){if(e)return t.find(t=>t.id===e)}(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._space=""}}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),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(k_)||"{}")||{}}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),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=En(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+Iu)>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(fu(t.id,e),pu(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?yh(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=mu({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=En(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)&&(I_(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 Fi(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*D_,y:i.y*D_}}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/D_),y:sc(o/D_),...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 lu(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(fu(t.id,e));return s||pu(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,uu({...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,I_(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=Kh(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||!td(t))return;const e=t=>{const e=td(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&&ed(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*D_,t.y1*i],[t.x2*D_,t.y2*i]]:"text"===t.kind?[[t.x*D_,t.y*i]]:hr({x:t.x*D_,y:t.y*i,w:t.w*D_,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:D_,h:D_};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=P_(e.rect,o),n=P_(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=Xp(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=Xp(e,-1)}else e=Xp(e,t?1:0);else for(const i of t)e=Xp(e,i.codePointAt(0)||0);else e=Xp(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:Op,wallHeight:Np,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,D_,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,D_);if(!r)throw new Error("floor boolean geometry failed");const l=a?.openingIndex||ml(t.rooms,e,i,this._wallKeyPitch,this._cellCm,this._gridPitch,D_),c=s.map(t=>{const i=this._openingsR[t.sourceIndex],s="gate"===t.type?!t.flipV:t.flipV,n=i?.partitionHost?cd(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(!(Jp([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=[Qp(t,0,[-i,0],[i,0],o,0,.88*e),Qp(t,1,[i,0],[-i,0],-o,0,.88*e)]}else s="window"===t.type?[Qp(t,0,[-i,0],[i,0],-90,.27*e,.78*e),Qp(t,1,[i,0],[-i,0],90,.27*e,.78*e)]:[Qp(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 Jp([e,i,s,n])?{x:e,y:i,w:s-e,h:n-i}:null}(s.openings),o=jp({rect:n?P_(i,n):i,wallHeight:Np,openingHeight:Np,floorDepth:10}),a=function(t,e=Op,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=Gp(l[t],t>0);if(!(c.length<3||Math.abs(Up(c))<1e-9)){s.push(Vp(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:Yp(s.floor,10),openings:s.openings,frame:o};return f_(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?Lp(t,0):t}_floorView(t){if("iso"!==this._renderProjection)return t;const e=Bp([t.x,t.y]),i=Bp([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=jp({rect:this._frameOf().rect,wallHeight:Np});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})} -
`}_renderHomeArrow(){if(this._booting)return G;const t=this._view;if(!t||!t.w||!t.h)return G;const e=this._baseVb(),i=e[0],s=e[1],n=e[2],o=e[3];if(!(i+n<=t.x||i>=t.x+t.w||s+o<=t.y||s>=t.y+t.h))return G;const r=Math.atan2(s+o/2-(t.y+t.h/2),i+n/2-(t.x+t.w/2)),a=50+38*Math.cos(r),l=50+38*Math.sin(r);return j``}_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:Oi(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,r=i+s-e+n;return Math.max(Math.min(o,r),Math.min(Math.max(o,r),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=Oi(s,this._stageAspect()),o=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,t)),r=n.w/o,a=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-r/2,y:h-a/2,w:r,h:a},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},h_)}_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>=Xc?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=Oi(this._baseVb(),this._stageAspect()),o=Math.min(I_.ZOOM_MAX,Math.max(I_.ZOOM_MIN,i));"opening"===this._tool&&(this._cursorPt=null,this._clearOpeningPlacement(!1));const r=s.clientWidth,a=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/r*c,y:l[1]-e/a*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=Oi(t,this._stageAspect()),this._saveZoom()}_saveZoom(){if("view"===this._mode){this._zoomBySpace={...this._zoomBySpace,[this._space]:this._zoom};try{localStorage.setItem(b_,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._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=Oi(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&&P_("/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},A_(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),r=(t.clientX-this._drag.sx)/n.width*o.w,a=(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=ec(this._drag.ox+r),c=ec(this._drag.oy+a);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 I_._noHoverMq||I_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(I_._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 Jl}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 li(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,$_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return ui(t?.rooms||[]).map(t=>[t[0]*$_,t[1]*e,t[2]*$_,t[3]*e])}_savedNav(){try{return JSON.parse(localStorage.getItem(w_)||"null")}catch{return null}}_saveNav(){try{localStorage.setItem(w_,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),r=this._modeTransitionBusy,a=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=r&&"view"===s&&"view"!==t?this._modeTransitionEditorCamera:null;let h=c?.zoom??(r?this._modeTransitionTargetZoom:this._zoom),d=c?c.centerX:r?this._modeTransitionTargetCenterX:a?.viewport.centerX,u=c?c.centerY:r?this._modeTransitionTargetCenterY:a?.viewport.centerY;if("view"===s&&"view"!==t&&!r){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||r||(this._modeTransitionEditorCamera={zoom:this._zoom,centerX:a?.viewport.centerX,centerY:a?.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?zp([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?a?(this._modeTransitionPreparing=!0,this._modeTransitionVisual=a,this._prepareModeTransition(p,a,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(a,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=ma(pa,this._imperial))}get _drawWallFieldValue(){return null===this._drawWallField?ma(pa,this._imperial):this._drawWallField}get _drawWallCm(){const t=d_(this._drawWallFieldValue);if(null==t||t<=0)return null;const e=this._imperial?2.54*t:t,i="column"===this._tool?xl:100;return e>=1&&e<=i?e:null}get _drawWallMaxCm(){return"column"===this._tool?xl:100}_showPhysicalRange(t=this._drawWallMaxCm){this._showToast(this._t("toast.physical_range",{max:ma(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=xd(this._path,this._draftSegmentCms,pa),i=e.length;if((t.partitions||[]).length+i>D_)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>=D_:(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[ec(ai(t[0],e)),ec(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 r=Math.PI/4;let a=Math.atan2(o,n);a<0&&(a+=2*Math.PI);const l=Math.floor(a/r+.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,Yl):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=vl(i,e);if(!t.negative&&!t.positive)continue;const n=e.angle*Math.PI/180,o=Math.cos(n)*e.length/2,r=Math.sin(n)*e.length/2;s.push([e.x-o,e.y-r,e.x+o,e.y+r])}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=vd({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=vd({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(!(dd(e)&&i.tolerance>=0))return null;const s=i.epsilon??.001,n=i.excludePoints||[];let o=null;const r=[...t.endpoints,...(i.extraEndpoints||[]).filter(t=>dd(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of r){if(yd(t.point,n,s))continue;const r=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);r>i.tolerance||!bd(r,t.key,o)||(o={kind:"endpoint",point:[...t.point],key:t.key,distance:r})}if(o)return o;let a=null;for(const o of t.segments){const t=[o.a[0],o.a[1],o.b[0],o.b[1]],r=Hs([e[0],e[1]],t);if(r>i.tolerance)continue;const l=wd(o,e,i.gridStep);!yd(l,n,s)&&bd(r,o.key,a)&&(a={kind:"line",point:l,key:o.key,distance:r,segment:o})}return a}(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 fi(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))<=Kl);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:$l(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:Sl(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=Fc(t.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);t.walls=Ta(t.walls,t.rooms||[],Zl,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){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._space=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=hi(e);return!!i&&wi(t,i)})}_overlapRoom(t){return this._spaceModel()?.rooms.find(e=>{const i=hi(e);return!!i&&Di(t,i)})}_pointInRoom(t,e){return e.poly?vi(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(!vr(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>D_)||(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 r=this._draftEndAt(n,this._activeDraftId||void 0);if(r)return void this._mergeDraftEndpoint(r);if(!this._canAppendRoomDraftPoint())return;const a=this._path.map(t=>[...t]);this._path=[...this._path,n],this._persistActiveDraftSegment(),this._offerWallFaces(a)}_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,r=n.find(e=>e.id===t.draft.id);if(!r)return;const a=t.reverse?t.draft.points.map(t=>[...t]):[...t.draft.points].reverse().map(t=>[...t]),l=t.reverse?(r.segments||[]).map(t=>({...t})):[...r.segments||[]].reverse().map(t=>({...t})),c=this._path[this._path.length-1],h=this._samePt(c,a[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?a.slice(1):a],_=[...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)+(r.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)||Pi(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||r,id:b,points:m.map(t=>[t[0]/$_,t[1]/$_]),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[1]/$_]),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:kd,s=Wd(t,i),n=new Map,o=new Map,r=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Dd(t.a,i),s=Dd(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 a=new Map;for(const[t,e]of o){const i=n.get(t);a.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=[Dd(t.a,i),Dd(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(Td(u,p));const s=a.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=Md(g);if(!(m>i*i))continue;const f=Pd(Rd(e,n,i)),v=new Set;for(const t of d)for(const e of r.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 r;try{const e=i||this._wallGraphSources(t),s=this._wallGraphSources(this._path);r=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(!r.length)return;for(const t of s.rooms){const e=hi(t);if(!t.id||!e)continue;const i=Ei(e,this._path,.02*this._gridPitch);if(!i)continue;const[s,n]=i,o=Pi(s)>=Pi(n)?s:n,a=o===s?n:s,l=[...r].sort((t,e)=>Math.abs(t.area-Pi(a))-Math.abs(e.area-Pi(a))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:a.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:o,newPoly:a},consumeAllActive:!0}])}const a=r.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));a.length&&this._beginWallFaceBatch(a)}_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(xl);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:$l(i),angle:0},o=(s.wall_columns||[]).find(t=>Ll(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 r=this._geometrySnapshot(),a=this._curSpaceCfg;a.wall_columns||=[],a.wall_columns.push({...n,center:[e[0]/$_,e[1]/$_]}),this._recordGeometry(this._t("history.column_add"),r),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:ma(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:ma(i.cm,this._imperial),shape:i.shape,angle:this._angleField("square"===i.shape?Sl(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:ma(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(),A_(t);const n=this._svgPoint(t),o=[];for(const t of[...s.wall_columns].reverse())Nl(n,Tl(t,this._cellCm,this._gridPitch))&&o.push({kind:"column",id:t.id});for(const t of[...s.partitions].reverse()){const e=Dl(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 r=o.map(t=>`${t.kind}:${t.id}`).sort().join("|"),a=performance.now(),l=this._physicalPickCycle,c=o.length>1&&l?.signature===r&&a-l.at>380&&a-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:r,index:c,x:t.clientX,y:t.clientY,at:a},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(-Kl*$_-Math.min(...n),Math.min(Kl*$_-Math.max(...n),i[0])),Math.max(-Kl*$_-Math.min(...o),Math.min(Kl*$_-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]/$_,n.a[1]/$_],t.b=[n.b[0]/$_,n.b[1]/$_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=nd(t,[n],$_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,hd(t,i,$_))}}}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&&Ll(t,o,.02*this._gridPitch)))return void this._showToast(this._t("toast.column_duplicate"));t&&(t.center=[(n.center[0]+e.delta[0])/$_,(n.center[1]+e.delta[1])/$_])}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(),A_(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:Sl(e.angle),angle:Sl(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=Sl(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&&Ll(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?hi(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 r=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[1]/r]),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]/$_,e.y=i[1]/r)}const a=[],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[1]*r]);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:pr(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(),A_(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 r=Math.sign(s);let a=Math.abs(s);const l=Math.max(n,1e-6);for(let s=0;s<4096&&a>1e-9;s++,a-=l){const s=r*a;if($r(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 r=wr(e.rooms,e.openings,t,o,this._rszOpts().eps);e.changed=Object.keys(r.polys),this._rszApplyPreview(r.polys,r.openings),this._rszLive=this._rszEdgeLabels(r,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(Mr(t,e,i,s,n,o))return n;let r=1,a=n;for(let n=0;n<28;n++){const n=(r+a)/2;Mr(t,e,i,s,n,o)?r=n:a=n}return r}(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),r=e.rooms.filter(t=>t.id!==e.roomId).map(t=>t.poly),a=Sr(o,e.openings,r,t,n,2*this._rszOpts().eps);e.changed=[e.roomId],this._rszApplyPreview({[e.roomId]:a.poly},a.openings),this._rszLive=this._rszScaleLabels(a.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=fr(e.poly,1e-9))}this._commitOpenSpans(),Array.isArray(n.walls)&&n.walls.length&&(n.walls=Ta(n.walls,n.rooms||[],Zl,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,r=e.edge,a=(r+1)%o;for(const[t,e]of[[n[(r-1+o)%o],n[r]],[n[r],n[a]],[n[a],n[(a+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&&nl(Object.entries(t.polys).map(([t,e])=>({id:t,poly:e})),e,h,d,this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||n,r=$i(o),a=u.length?zl(Fl(o,u))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Cr(o,this._gridPitch,this._cellCm);s.push({x:r[0],y:r[1],text:Dr(a,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),r=this._spaceWalls,a=r.length&&this._rszSel&&nl([{id:this._rszSel,poly:t}],this._rszSel,r,[],this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||t,l=$i(a),c=this._physicalBodiesR(),h=c.length?zl(Fl(a,c))*Math.pow(this._cellCm/this._gridPitch,2)/1e4:Cr(a,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:Dr(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=[],r=this._rszRooms();for(const t of r)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(O_.ZOOM_MAX,Math.max(O_.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},__)}_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(O_.ZOOM_MAX,Math.max(O_.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($_,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._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},z_(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 O_._noHoverMq||O_._touchSeen}_notePointer(t){this._boundaryPointerType=t.pointerType||"mouse","touch"!==t.pointerType&&"pen"!==t.pointerType||(O_._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,D_}get _segments(){const t=this._curSpaceCfg,e=this._spaceH;return di(t?.rooms||[]).map(t=>[t[0]*D_,t[1]*e,t[2]*D_,t[3]*e])}_savedNav(){try{return JSON.parse(localStorage.getItem(S_)||"null")}catch{return null}}_saveNav(){try{localStorage.setItem(S_,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?Lp([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=g_(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=$d(this._path,this._draftSegmentCms,_r),i=e.length;if((t.partitions||[]).length+i>A_)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>=A_:(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=yd({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=yd({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(!(ud(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=>ud(t.point)).map(t=>({point:[t.point[0],t.point[1]],key:t.key}))];for(const t of a){if(bd(t.point,n,s))continue;const a=Math.hypot(e[0]-t.point[0],e[1]-t.point[1]);a>i.tolerance||!wd(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=kd(o,e,i.gridStep);!bd(l,n,s)&&wd(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){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._space=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>A_)||(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]/D_,t[1]/D_]),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]/D_,t[1]/D_]),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:xd,s=Ud(t,i),n=new Map,o=new Map,a=new Map(s.map(t=>[t.key,t]));for(const t of s){const e=Td(t.a,i),s=Td(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=[Td(t.a,i),Td(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(Pd(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=Cd(g);if(!(m>i*i))continue;const f=Rd(Ad(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]/D_,e[1]/D_]}),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(),z_(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*D_-Math.min(...n),Math.min(Yl*D_-Math.max(...n),i[0])),Math.max(-Yl*D_-Math.min(...o),Math.min(Yl*D_-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]/D_,n.a[1]/D_],t.b=[n.b[0]/D_,n.b[1]/D_];for(const t of s.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const i=od(t,[n],D_,this._cellCm,this._gridPitch).resolved;i&&Object.assign(t,dd(t,i,D_))}}}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])/D_,(n.center[1]+e.delta[1])/D_])}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(),z_(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]/D_,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]/D_,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]*D_,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(),z_(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,D_)||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,D_)||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)} @pointercancel=${t=>this._rszPointerCancel(t)} - @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}const a=this._rszSel?r.find(t=>t.id===this._rszSel):null;if(a){const t=a.poly.map(t=>t[0]),i=a.poly.map(t=>t[1]),s=Math.min(...t),n=Math.max(...t),r=Math.min(...i),l=Math.max(...i);o.push(W``);for(const[t,i,c,h]of[[s,r,n,l],[n,r,s,l],[n,l,s,r],[s,l,n,r]])o.push(W`this._rszCornerDown(e,a.id,[t,i],[c,h])} + @lostpointercapture=${t=>this._rszPointerCancel(t)}>`),o.push(W``)}const r=this._rszSel?a.find(t=>t.id===this._rszSel):null;if(r){const t=r.poly.map(t=>t[0]),i=r.poly.map(t=>t[1]),s=Math.min(...t),n=Math.max(...t),a=Math.min(...i),l=Math.max(...i);o.push(W``);for(const[t,i,c,h]of[[s,a,n,l],[n,a,s,l],[n,l,s,a],[s,l,n,a]])o.push(W`this._rszCornerDown(e,r.id,[t,i],[c,h])} @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*$_,ry:t.y*e,rlen:t.length*$_};if(!t.host)return[s];const n=nd(t,i.partitions,$_,this._cellCm,this._gridPitch);if(!n.resolved)return"plan"===this._mode?[{...s,orphanReason:n.reason||"invalid-host"}]:[];let[o,r]=n.resolved.center;const a=this._physicalDrag;return a?.moved&&"partition"===a.kind&&a.id===t.host.id&&(o+=a.delta[0],r+=a.delta[1]),[{...t,rx:o,ry:r,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=nd(n,t.partitions,$_,this._cellCm,this._gridPitch);i.resolved&&s.push(ad(i.resolved))}return s}_roomWallOpeningInputs(t=this._openingsR,e=this._spaceModel()){if(!e)return[];const i=this._openPairs().flatMap(t=>t.segs),s=Qa(e.rooms,this._spaceWalls,i,this._wallKeyPitch,this._cellCm,this._gridPitch,$_);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&&cd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?ld(t.partitionHost,i):yl(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 $_}_decorResolvedStyle(t){return function(t,e,i,s=ea){const n="rect"===t?.kind||"ellipse"===t?.kind,o=t,r=Rt(o?.color,s.color);return{color:r,opacity:ia(o?.opacity,s.opacity),widthCm:aa(t,e,i,s.widthCm),fill:!!n&&!0===o?.fill,fillColor:Rt(o?.fill_color,o?.fill?r:s.fillColor),fillOpacity:n&&o?.fill?ia(o?.fill_opacity,.25):s.fillOpacity}}(t,this._cellCm,this._gridPitch,ea)}_decorWidthUnits(t){return((t,e,i,s=ea.widthCm)=>{const n=Number(t?.width_cm);if(Number.isFinite(n)&&n>0)return oa(n,e,i);const o=Number(t?.width);return Number.isFinite(o)&&o>0?o:oa(s,e,i)})(t,this._cellCm,this._gridPitch,ea.widthCm)}_decorTextSizeCm(t){if("text"===t?.kind){const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?e:ra(es*is(t),this._cellCm,this._gridPitch)}return ra(es,this._cellCm,this._gridPitch)}_decorTextUnits(t){if("text"!==t.kind)return es;const e=Number(t.size_cm);return Number.isFinite(e)&&e>0?oa(e,this._cellCm,this._gridPitch):es*is(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(l_,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(Kl*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*$_,y:t.y*this._decorH,w:t.w*$_,h:t.h*this._decorH,angle:sa(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*$_,e.y1*this._decorH],i=[e.x2*$_,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*$_,e.y*this._decorH]],segments:[]});else{const t=this._decorBoxOf(e);t&&n.push(ha(t))}for(const t of e.rooms){const e=hi(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,r=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),r=Math.hypot(e[0]-t[0],e[1]-t[1]);r<=i&&(!o||rthis._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},A_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:ic(e[0]/$_),y:ic(e[1]/this._decorH),text:"",color:this._decorStyle.color,opacity:this._decorStyle.opacity,angle:"0",sizeCm:ra(es,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=-sa(e.angle)*Math.PI/180,r=i[0]-s,a=i[1]-n,l=[s+r*Math.cos(o)-a*Math.sin(o),n+r*Math.sin(o)+a*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=$_,s=this._decorH,n=this._decorStyle,o=this._geometrySnapshot(),r="dc"+Date.now().toString(36)+Math.random().toString(36).slice(2,5),a=ic;let l;if("line"===t.kind)l={id:r,kind:"line",x1:a(t.a[0]/i),y1:a(t.a[1]/s),x2:a(t.b[0]/i),y2:a(t.b[1]/s),...la(n,!1)};else{const e=a(Math.min(t.a[0],t.b[0])/i),o=a(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:r,kind:t.kind,x:e,y:o,w:c,h:h,...la(n,!0)}}this._curSpaceCfg.decor=[...this._decorList,l],this._decorSel=r,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()},A_(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)*$_,o=("line"===s.kind?s.y1:s.y)*this._decorH,r=this._decorSnap([n+(i[0]-e.start[0]),o+(i[1]-e.start[1])],t.pointerType,e.id);let a=(r[0]-n)/$_,l=(r[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,_=Kl;a=Math.max(-_-h,Math.min(_-h-u,a)),l=Math.max(-_-d,Math.min(_-d-p,l)),(a||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+a,y1:i.y1+l,x2:i.x2+a,y2:i.y2+l}:{...t,x:i.x+a,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(sa(i?Os([i.x1*$_,i.y1*this._decorH],[i.x2*$_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:ra(Math.hypot((i.x2-i.x1)*$_,(i.y2-i.y1)*this._decorH),this._cellCm,this._gridPitch),lineStyle:"dashed"===i.line_style?"dashed":"solid"}:{},...s?{sizeWCm:ra(s.w,this._cellCm,this._gridPitch),sizeHCm:ra(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=>!!Yi(t[1])),s=String(t.unit??"").trim(),n="state"===String(t.attr??"").trim().toLowerCase()?null:t.attr,o=i||s?"":Xi(t.entity,n),r=!(!String(t.entity??"").trim()||i||o&&!s);if(o&&!r){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:ia(t.opacity,this._decorStyle.opacity),angle:this._angleField(t.angle),sizeCm:this._decorTextSizeCm(t),pickerEntity:t.entity||"",preserveLegacy:r||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=Xi(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 r=s.slice(0,n)+i+s.slice(o),a=n+i.length;this._decorTextSelection={start:a,end:a},this._decorTextDialog={...e,text:r,preserveLegacy:void 0},this.updateComplete.then(()=>{const t=this.renderRoot.querySelector("textarea.dtarea");t&&(t.focus(),t.setSelectionRange(a,a))})}_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:ia(t.opacity),size_cm:Number(Math.max(.1,Math.min(l_,t.sizeCm)).toFixed(4)),...sa(t.angle)?{angle:sa(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,...r}=i;return{...r,text:e,...n}}const{entity:s,attr:o,unit:r,...a}=i,{angle:l,size:c,scale:h,...d}=a;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:ia(t.opacity),widthCm:Math.max(.1,Math.min(100,Number(t.widthCm)||.1)),fill:!!t.fill,fillColor:t.fillColor||t.color,fillOpacity:ia(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=la(i,s);if("line"===e.kind){const i=(e.x1+e.x2)/2*$_,s=(e.y1+e.y2)/2*this._decorH,o=oa(Math.max(.1,Number(t.lengthCm)||.1),this._cellCm,this._gridPitch),r=sa(t.angle)*Math.PI/180,a=Math.cos(r)*o/2,l=Math.sin(r)*o/2,c=this._snap([i-a,s-l]),h=this._snap([i+a,s+l]),{width:d,line_style:u,...p}=e;return{...p,...n,x1:ic(c[0]/$_),y1:ic(c[1]/this._decorH),x2:ic(h[0]/$_),y2:ic(h[1]/this._decorH),..."dashed"===t.lineStyle?{line_style:"dashed"}:{}}}if("rect"===e.kind||"ellipse"===e.kind||"furniture"===e.kind){const i=e.w*$_,s=e.h*this._decorH,o=Math.max(this._gridPitch,ai(oa(Number(t.sizeWCm),this._cellCm,this._gridPitch),this._gridPitch)),r=Math.max(this._gridPitch,ai(oa(Number(t.sizeHCm),this._cellCm,this._gridPitch),this._gridPitch)),a=e.x*$_+i/2,l=e.y*this._decorH+s/2,c=sa(t.angle),h=na({x:a-o/2,y:l-r/2},c,t=>this._snap(t)),{width:d,angle:u,...p}=e;return{...p,...n,x:ic(h[0]/$_),y:ic(h[1]/this._decorH),w:o/$_,h:r/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.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*$_,(t.y+t.h/2)*this._decorH]:[t.x*$_,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(l_,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,r]=this._dtPivot(n),a=this._svgPoint(t),l=this._decorBoxOf(n);this._dtDrag={id:n.id,kind:e,pid:t.pointerId,ax:o,ay:r,r0:Math.hypot(a[0]-o,a[1]-r),a0:180*Math.atan2(a[1]-r,a[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},A_(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=ic(s[0]/$_),o=ic(s[1]/this._decorH),r=e.origShape,a=0===e.lineEnd?r.x1:r.x2,l=0===e.lineEnd?r.y1:r.y2;return(Math.abs(n-a)>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=da(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(l_,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*$_,s=t.y1*this._decorH,n=t.x2*$_,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*$_,y:t.y*this._decorH,w:t.w*$_,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=kc(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=$_,o=this._decorH,r=Cc($c(i.w,this._cellCm,this._gridPitch,n)),a=Cc($c(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:Rc(h,d,a*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:ic(h/n-r/2),y:ic(d/o-a/2),w:r,h:a,...la(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=$_,o=this._decorH,r=this._svgPoint(t),a=(i.x+i.w/2)*n+(r[0]-e.start[0]),l=(i.y+i.h/2)*o+(r[1]-e.start[1]);let c,h,d=Number(i.angle)||0;const u=t.shiftKey?null:Rc(a,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([a-i.w/2*n,l-i.h/2*o],t.pointerType,e.id);c=s[0]/n,h=s[1]/o}c=ic(c),h=ic(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=$_,n=this._decorH;i.decor=this._decorList.map(i=>{if(i.id!==t)return i;const o=na(e,i.angle,t=>this._snap(t));return{...i,x:ic(o[0]/s),y:ic(o[1]/n),w:Math.max(this._gridPitch/s,Math.min(2*Kl,e.w/s)),h:Math.max(this._gridPitch/n,Math.min(2*Kl,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=$_,s=this._decorH,n=e.w*i,o=e.h*s,r=function(t,e,i,s,n){const o=t+i/2,r=e+s/2,a=(Number(n)||0)*Math.PI/180,l=Math.cos(a),c=Math.sin(a),h=(t,e)=>{const i=t-o,s=e-r;return[o+i*l-s*c,r+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),a=(t,e)=>[(t[0]+e[0])/2,(t[1]+e[1])/2],l=a(r[0],r[1]),c=a(r[0],r[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*D_,ry:t.y*e,rlen:t.length*D_};if(!t.host)return[s];const n=od(t,i.partitions,D_,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=od(n,t.partitions,D_,this._cellCm,this._gridPitch);i.resolved&&s.push(ld(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,D_);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&&hd(t.partitionHost,s,2e-4*this._gridPitch)?[e]:[]:[e]})}_openingFace(t,e,i){return t.partitionHost?cd(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 D_}_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(u_,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*D_,y:t.y*this._decorH,w:t.w*D_,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*D_,e.y1*this._decorH],i=[e.x2*D_,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*D_,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},z_(t),!0}if("text"===e){const e=this._decorSnap(this._svgPoint(t),t.pointerType);return this._decorTextDialog={x:sc(e[0]/D_),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=D_,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()},z_(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)*D_,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)/D_,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*D_,i.y1*this._decorH],[i.x2*D_,i.y2*this._decorH]):t.angle)),...i?{lengthCm:rr(Math.hypot((i.x2-i.x1)*D_,(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(u_,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*D_,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]/D_),y1:sc(c[1]/this._decorH),x2:sc(h[0]/D_),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*D_,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*D_+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]/D_),y:sc(h[1]/this._decorH),w:o/D_,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*D_,(t.y1+t.y2)/2*this._decorH]:"furniture"===t.kind||"rect"===t.kind||"ellipse"===t.kind?[(t.x+t.w/2)*D_,(t.y+t.h/2)*this._decorH]:[t.x*D_,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(u_,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},z_(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]/D_),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(u_,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*D_,s=t.y1*this._decorH,n=t.x2*D_,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*D_,y:t.y*this._decorH,w:t.w*D_,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=D_,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=D_,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=D_,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=D_,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")} @@ -4578,16 +4700,16 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
- ${yc.map(e=>j` + ${bc.map(e=>j`
${this._t(`furn.group_${e}`)}
- ${xc(e).map(e=>j``)}
`)} @@ -4603,22 +4725,22 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @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?{...ql(t.plan_aspect,$_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Ul(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),r=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:r,sy:Number.isFinite(o)&&o>0?o:r,angle:sa(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:ra(e.w,this._cellCm,this._gridPitch),heightCm:ra(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=sa(t.angle),n=this._geometrySnapshot(),o=Math.min(e.w*Wl,Math.max(e.w*jl,ai(oa(t.widthCm,this._cellCm,this._gridPitch),this._gridPitch))),r=Math.min(e.h*Wl,Math.max(e.h*jl,ai(oa(t.heightCm,this._cellCm,this._gridPitch),this._gridPitch))),a=na({x:i.x+i.w/2-o/2,y:i.y+i.h/2-r/2},s,t=>this._snap(t));this._bdApply((a[0]-e.x)/$_,(a[1]-e.y)/$_,o/e.w,r/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(ic(t).toFixed(6)),o.plan_y=Number(ic(e).toFixed(6)),delete o.plan_scale,o.plan_scale_x=Number(Math.min(Wl,Math.max(jl,i)).toFixed(6)),o.plan_scale_y=Number(Math.min(Wl,Math.max(jl,s)).toFixed(6));const r=sa(n);r?o.plan_angle=Number(r.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),r=e?e[0]:0,a=e?e[1]:0,l=r>0?n.x:n.x+n.w,c=a>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:r,sgy:a,rect0:{x:n.x,y:n.y,w:n.w,h:n.h,angle:n.angle},before:this._geometrySnapshot(),moved:!1},A_(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)]),r=Math.abs(o[0]-t)>1e-9||Math.abs(o[1]-n)>1e-9;if(!r&&!e.moved)return;return e.moved||=r,void this._bdApply((o[0]-s.x)/$_,(o[1]-s.y)/$_,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 r=e.p0.angle+(180*Math.atan2(i[1]-n,i[0]-s)/Math.PI-o);t.shiftKey||(r=5*Math.round(r/5)),r=sa(r);const a=Math.abs(r-e.p0.angle)>1e-9;if(!a&&!e.moved)return;return e.moved||=a,void this._bdApply(e.p0.dx,e.p0.dy,e.p0.sx,e.p0.sy,r)}const n=da(e.rect0,e.sgx,e.sgy,i[0],i[1],!t.shiftKey,this._gridPitch,Math.min(s.w,s.h)*jl),o=n.w/Math.max(1e-9,s.w),r=n.h/Math.max(1e-9,s.h),a=Math.abs(o-e.p0.sx)>1e-9||Math.abs(r-e.p0.sy)>1e-9||Math.abs(n.x-e.rect0.x)>1e-9||Math.abs(n.y-e.rect0.y)>1e-9;if(!a&&!e.moved)return;e.moved||=a;const l=na(n,e.p0.angle,t=>this._snap(t));this._bdApply((l[0]-s.x)/$_,(l[1]-s.y)/$_,o,r,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,r=sa(e.angle),a=2.2*i;return W` +
`}get _bdBase(){const t=this._curSpaceCfg;return t?.plan_url?{...jl(t.plan_aspect,D_)}:null}get _bdRect(){const t=this._curSpaceCfg;return t?.plan_url?Gl(t,D_):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)/D_,(r[1]-e.y)/D_,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},z_(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)/D_,(o[1]-s.y)/D_,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)/D_,(l[1]-s.y)/D_,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` - - + {t.stopPropagation(),t.preventDefault(),this._bdStart(t,void 0,!0)}}> - - ${[[-1,-1,"nwse"],[1,-1,"nesw"],[1,1,"nwse"],[-1,1,"nesw"]].map(([t,n,o])=>{const r=t<0?e.x:e.x+e.w,a=n<0?e.y:e.y+e.h;return W` + ${[[-1,-1,"nwse"],[1,-1,"nesw"],[1,1,"nwse"],[-1,1,"nesw"]].map(([t,n,o])=>{const a=t<0?e.x:e.x+e.w,r=n<0?e.y:e.y+e.h;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*$_,e.y1*this._decorH],i=[e.x2*$_,e.y2*this._decorH];return W` + cx="${a}" cy="${r}" r="${i.toFixed(1)}" + @pointerdown=${e=>{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*D_,e.y1*this._decorH],i=[e.x2*D_,e.y2*this._decorH];return W` ${[t,i].map((t,e)=>W`this._dtStart(t,"scale",void 0,e)}> `)} - `}const[o,r]=this._dtPivot(e),a=Number(e.angle)||0,l=2.2*s;return W` + `}const[o,a]=this._dtPivot(e),r=Number(e.angle)||0,l=2.2*s;return W` this._dtStart(i,"scale",[t,e])}>`)} - `}_renderDecorLayer(){const 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":""),r=this._decorResolvedStyle(n),a=this._decorWidthUnits(n),l=t=>this._decorShapeDown(t,n),c=t=>this._decorShapeDbl(t,n);if("line"===n.kind)return W``}_renderDecorLayer(){const t=D_,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` ${i&&"select"===this._decorTool?W``:G}`;if("rect"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=sa(n.angle);return W``:G}`;if("rect"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=nr(n.angle);return W` ${s?W``:G}`}if("ellipse"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=sa(n.angle);return W``:G}`}if("ellipse"===n.kind){const i=(n.x+n.w/2)*t,h=(n.y+n.h/2)*e,d=nr(n.angle);return W` ${s?W``:G}`}if("furniture"===n.kind){const i=n.w*t,h=n.h*e,d=Tc(n.symbol,i,h);if(!d)return G;const u=Number(n.angle)||0,p=n.x*t+i/2,_=n.y*e+h/2,g=`${u?`rotate(${u} ${p} ${_}) `:""}translate(${n.x*t} ${n.y*e})`;return W``:G}`}if("furniture"===n.kind){const i=n.w*t,h=n.h*e,d=Pc(n.symbol,i,h);if(!d)return G;const u=Number(n.angle)||0,p=n.x*t+i/2,_=n.y*e+h/2,g=`${u?`rotate(${u} ${p} ${_}) `:""}translate(${n.x*t} ${n.y*e})`;return W` ${s?W``:G}`}if("text"===n.kind){const i=this._decorTextUnits(n),s=this._renderDeviceSnapshot?.facts.get(`decor:${this._space}:${n.id}`),a=function(t){return String(t??"").replace(/\r\n?/g,"\n").split("\n")}("string"==typeof s?s:ts(n.text,n,this._renderPlanHass,t=>this._renderEntityAvailable(t))),h=n.x*t,d=n.y*e,u=Number(n.angle)||0,p=d-(a.length-1)*i*1.2/2;return W``:G}`}if("text"===n.kind){const i=this._decorTextUnits(n),s=this._renderDeviceSnapshot?.facts.get(`decor:${this._space}:${n.id}`),r=function(t){return String(t??"").replace(/\r\n?/g,"\n").split("\n")}("string"==typeof s?s:Qi(n.text,n,this._renderPlanHass,t=>this._renderEntityAvailable(t))),h=n.x*t,d=n.y*e,u=Number(n.angle)||0,p=d-(r.length-1)*i*1.2/2;return W`${a.map((t,e)=>W`${t}`)}`}return G});let o=G;const r=this._decorDraft;if(r){const t=this._decorStyle,e=oa(t.widthCm,this._cellCm,this._gridPitch);if("line"===r.kind)o=W``;else{const i=Math.min(r.a[0],r.b[0]),s=Math.min(r.a[1],r.b[1]),n=Math.abs(r.b[0]-r.a[0]),a=Math.abs(r.b[1]-r.a[1]);o="rect"===r.kind?W``:W`${r.map((t,e)=>W`${t}`)}`}return G});let o=G;const a=this._decorDraft;if(a){const t=this._decorStyle,e=ar(t.widthCm,this._cellCm,this._gridPitch);if("line"===a.kind)o=W``;else{const i=Math.min(a.a[0],a.b[0]),s=Math.min(a.a[1],a.b[1]),n=Math.abs(a.b[0]-a.a[0]),r=Math.abs(a.b[1]-a.a[1]);o="rect"===a.kind?W``:W``}}return W`${n}${o}`}get _editorToolbarGroups(){return"plan"!==this._mode?[]:[{id:"opening",label:this._t("markup.opening"),icon:"mdi:door",activeItemId:"opening"===this._tool?this._openingPreset?.type:void 0,items:[{id:"window",label:this._t("opening.window"),icon:"mdi:window-closed-variant",role:"tool",invoke:()=>this._activateOpeningPlacement("window")},{id:"door",label:this._t("opening.door"),icon:"mdi:door-open",role:"tool",invoke:()=>this._activateOpeningPlacement("door")},{id:"passage",label:this._t("opening.passage"),icon:"mdi:arch",role:"tool",invoke:()=>this._activateOpeningPlacement("passage")},{id:"gate",label:this._t("opening.gate"),icon:"mdi:gate",role:"tool",invoke:()=>this._activateOpeningPlacement("gate")}]}]}_renderEditorGroupLauncher(t){return this._editorSecondary.renderGroupLauncher(t,this._editorToolbarGroups,this._editorSecondaryCopy)}get _editorSecondaryContextId(){const t=`editor:${this._mode}:${this._space}:${this._cfgEpoch}`,e=this._editorSecondary.activeGroup(this._editorToolbarGroups);if(e)return`${t}:group:${e.id}:${this._editorSecondary.groupGeneration}`;if("plan"===this._mode){const e=this._physicalSel;return e?`${t}:selection:${e.kind}:${e.id}:${e.segment??""}`:`${t}:tool:${this._tool}:${this._path.length}:${this._openWallAnchor?1:0}`}return"decor"===this._mode?"furniture"===this._decorTool?`${t}:palette:furniture:${this._furnPalette?.symbol||"none"}`:"select"===this._decorTool&&this._decorSel?`${t}:selection:decor:${this._decorSel}`:`${t}:tool:${this._decorTool}:${this._bdMoved?1:0}:${this._bdDrag?1:0}`:`${t}:none`}_runEditorContext(t,e){this._editorSecondary.runContext(t,this._editorSecondaryContextId,e)}_renderEditorGroupModel(t){return this._editorSecondary.renderGroupModel(t,this._editorSecondaryContextId,this._editorSecondaryCopy)}_renderDrawWallControl(){return j``}_renderPlanSecondary(){const t=this._editorSecondaryContextId,e=this._physicalSel;if(e){if(!("partition"===e.kind?!!this._curSpaceCfg.partitions?.some(t=>t.id===e.id):"column"===e.kind?!!this._curSpaceCfg.wall_columns?.some(t=>t.id===e.id):!!this._curSpaceCfg.room_drafts?.some(t=>t.id===e.id)))return null;const i="partition"===e.kind?this._t("markup.partition"):"column"===e.kind?this._t("markup.column"):this._t("markup.add");return{contextId:t,kind:"selection",ariaLabel:this._t("editor.context_actions",{object:i}),visibleLabel:i,content:j`
@@ -4808,8 +4930,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `}_rangeInput(t,e,i,s,n,o=!1,r){const a=t=>{const e=Number(t.target.value);Number.isFinite(e)&&n(e)};return customElements.get("ha-slider")?j``:j``}_renderColorRow(t,e){const i=this._settingsDialog.colors[t];return j`
+ `}_setFillColor(t,e){const i=this._settingsDialog;this._settingsDialog={...i,colors:{...i.colors,[t]:{...i.colors[t],...e}}}}async _saveSettingsDialog(){const t=this._settingsDialog;if(t&&!t.busy){this._settingsDialog={...t,busy:!0};try{const e=this._serverCfg,i=JSON.stringify(t.colors)===JSON.stringify(hs),s={...e.settings};i?delete s.fill_colors:s.fill_colors=t.colors;const n=this._imperial?30.48*t.glowRadius:100*t.glowRadius;Number.isFinite(n)&&n>0&&300!==Math.round(n)?s.glow_radius_cm=Math.round(n):delete s.glow_radius_cm,t.bgColor?s.bg_color=t.bgColor:delete s.bg_color,null!==t.northDeg&&Number.isInteger(t.northDeg)&&t.northDeg>=0&&t.northDeg<=359?s.north_deg=t.northDeg:delete s.north_deg,s.bg_mode=t.bgMode,t.sunRays?s.sun_rays=!0:delete s.sun_rays,delete s.weather_entity,this._serverCfg={...e,settings:s},await this._saveConfigNow(),this._settingsDialog=null,this.requestUpdate(),this._showToast(this._t("gs.saved"))}catch(t){this._settingsDialog&&(this._settingsDialog={...this._settingsDialog,busy:!1}),this._showToast(this._t("toast.error",{err:this._errText(t)}))}}}_boolInput(t,e,i=!1){const s=t=>e(!!t.target.checked);return customElements.get("ha-switch")?j``:j``}_rangeInput(t,e,i,s,n,o=!1,a){const r=t=>{const e=Number(t.target.value);Number.isFinite(e)&&n(e)};return customElements.get("ha-slider")?j``:j``}_renderColorRow(t,e){const i=this._settingsDialog.colors[t];return j`
{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)),r=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),r=Math.cos(i);return o([t.rx+s*n,t.ry+r*n])&&o([t.rx-s*n,t.ry-r*n])}),a=this._roomWallOpeningInputs(r,t);for(const t of a){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(r.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:Rl(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?dl(t.rooms,p,i,a,this._wallKeyPitch,this._cellCm,this._gridPitch,$_,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(...Vd(t));else for(const t of h)f.push(...Vd(t));for(const{poly:t}of e)for(const e of s.length?Ts(t,s,m):Vd(t))f.push(e);const y={occluders:Gd(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:hi(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:r,floor:a,fingerprint:l,masonryGeometry:c,opaqueBodies:h}=this._lightBarriers(t,n),d=lo(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=co(u.get(e.id)||[]);if(!n)continue;const o=`${t.id}|${e.id}`;_.add(o);const d=$s(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(Hl([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:Ss(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=u_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Xd([f.x,f.y],m,r,96);b={lit:t.length>=3?El([t],a):[]},p_(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&&nl(t.rooms,e.id,m,f,this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||i,o=this._cleanFloor(e,s,t).path,r=Ti(s,n.filter(t=>t.r!==e).map(t=>t.poly)),a=t=>"M "+t.map(t=>t[0]+" "+t[1]).join(" L ")+" Z";return[o||a(s),...r.map(a)].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,D_,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(...Kd(t));else for(const t of h)f.push(...Kd(t));for(const{poly:t}of e)for(const e of s.length?Ds(t,s,m):Kd(t))f.push(e);const y={occluders:Vd(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})=>Es(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=m_(this._glowClipCache,w);if(k.hit)b=k.value;else{const t=Jd([f.x,f.y],m,a,96);b={lit:t.length>=3?Fl([t],r):[]},f_(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,D_)||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` ${""} - ${S_.map(([e,i])=>W` + ${T_.map(([e,i])=>W` `)} @@ -5230,7 +5352,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("gs.glow_radius")} {const e=d_(t.target.value);null!=e&&e>0&&(this._settingsDialog={...this._settingsDialog,glowRadius:e})}} /> + @input=${t=>{const e=g_(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")}
@@ -5253,7 +5375,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._settingsDialog.bgColor?j``:j`${this._t("gs.bg_theme")}`}
`:j`
${this._t("gs.bg_daynight_hint")}
`} - ${Jr(this.hass)?G:j`
${this._t("gs.sun_missing")}
`} + ${Za(this.hass)?G:j`
${this._t("gs.sun_missing")}
`}
${this._renderCompass()}
@@ -5305,14 +5427,14 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
`:G} -
${this._t("gs.about_version",{v:o_})}
+
${this._t("gs.about_version",{v:c_})}
${this._t("gs.about_github")} ${this._t("gs.about_telegram")}
- @@ -5362,7 +5484,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${t.busy?"…":this._t("btn.save")}
-
`}_saveKioskScale(t){this._kioskScale={...this._kioskScale,...t};try{localStorage.setItem(k_,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(M_,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])}% @@ -5400,7 +5522,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._spaceDialog?this._renderSpaceDialog():G} ${this._importDialog?this._renderImportDialog():G} ${this._toast?j``:G} - `;const i=this._spaceModel();if(!i)return G;const s=i.vb,n=this._effectiveProjection();this._renderProjection=n,this._labs.active.length&&function(t){Mp||Ap(t);const e=Sp,i=e.active.join(",");if(!i||i===Dp)return;Dp=i;const s=new Map(mp.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}`)}(o_);const o="iso"===n,r="devices"===this._mode&&this._showAll,a=this._renderDevices.filter(t=>t.space===i.id&&(!t.hidden||r)),l=this._renderDeviceSnapshot,c=this._spaceDisplayForRender(),h=o?this._isoDecorationLayers(c):null,d=h?this._isoOpeningPanels(h):[],u=this._resolvedRoomFills(i,c),p=this._resolvedGlowBase(i,c,u),_=c.showLqi??this._config.show_signal??!0,g=this._config.icon_size??2.5,m=g>8?2.5:g,f=this._viewOr(this._baseVb()),v=this._floorView(f),y=this._editing?"":this._stageBg(c),b=this._opMeasureView,w=this._decorMeasure,k=this._bdLive,x=this._furnLive,$="view"===this._mode?this._editorChromeMode:this._mode,S=this._roomHoverPaths(i),M=i.bg?this._display(i.bg.href):"",C=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,D=this._modeTransitionVisual,T=this._dayCycleState(),P=D?.viewWeight??("view"===this._mode?1:0),R=this._modeTransition.state?.from.presentedMode,A=!this._markup||!!D&&("view"===D.presentedMode||"devices"===D.presentedMode||"view"===R||"devices"===R),I=D?.stageColor||y,E=D?.sceneBrightness??1;return j` + `;const i=this._spaceModel();if(!i)return G;const s=i.vb,n=this._effectiveProjection();this._renderProjection=n,this._labs.active.length&&function(t){Pp||zp(t);const e=Tp,i=e.active.join(",");if(!i||i===Ap)return;Ap=i;const s=new Map(bp.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}`)}(c_);const o="iso"===n,a="devices"===this._mode&&this._showAll,r=this._renderDevices.filter(t=>t.space===i.id&&(!t.hidden||a)),l=this._renderDeviceSnapshot,c=this._spaceDisplayForRender(),h=o?this._isoDecorationLayers(c):null,d=h?this._isoOpeningPanels(h):[],u=this._resolvedRoomFills(i,c),p=this._resolvedGlowBase(i,c,u),_=c.showLqi??this._config.show_signal??!0,g=this._config.icon_size??2.5,m=g>8?2.5:g,f=this._viewOr(this._baseVb()),v=this._floorView(f),y=this._editing?"":this._stageBg(c),b=this._opMeasureView,w=this._decorMeasure,k=this._bdLive,x=this._furnLive,$="view"===this._mode?this._editorChromeMode:this._mode,S=this._roomHoverPaths(i),M=i.bg?this._display(i.bg.href):"",C=this._continuity.overlayVisible||"recovery-error"===this._continuity.state?this._continuity.recoveryReason:null,D=this._modeTransitionVisual,T=this._dayCycleState(),P=D?.viewWeight??("view"===this._mode?1:0),R=this._modeTransition.state?.from.presentedMode,A=!this._markup||!!D&&("view"===D.presentedMode||"devices"===D.presentedMode||"view"===R||"devices"===R),I=D?.stageColor||y,E=D?.sceneBrightness??1;return j` `:G} `)}
`:G} - ${this._t("count.devices",{n:a.filter(t=>!t.hidden).length})} + ${this._t("count.devices",{n:r.filter(t=>!t.hidden).length})} ${this._labsIso&&"view"===this._mode&&!this._kiosk?j``,y=n.candidates.some(t=>_.has(t.entityId)&&"known_xcme_incomplete"===t.category)||!!n.pinned&&!!o?.startsWith("camera.")&&!r?.hasPosition;return j` + `,y=n.candidates.some(t=>_.has(t.entityId)&&"known_xcme_incomplete"===t.category)||!!n.pinned&&!!o?.startsWith("camera.")&&!a?.hasPosition;return j`
${this._t("vac.diag_source")}${o||this._t("vac.source_none")}
- ${r?.platform?j`
${this._t("vac.diag_platform")}${r.platform}
`:G} + ${a?.platform?j`
${this._t("vac.diag_platform")}${a.platform}
`:G}
${this._t("vac.diag_status")}${this._t(`vac.source_status_${n.status}`)}
-
${this._t("vac.diag_position")}${a?.pos?this._t("common.yes"):this._t("common.no")}
-
${this._t("vac.diag_rooms")}${ss(this._t("vac.diag_rooms_value"),{total:String(a?.rooms.length||0),matched:String(h),readiness:this._t(h>=3?"vac.autocal_ready":"vac.autocal_not_ready")})}
-
${this._t("vac.diag_path")}${a?.path.length?this._t("common.yes"):this._t("common.no")}
-
${this._t("vac.diag_map")}${a?.mapId??"default"}
+
${this._t("vac.diag_position")}${r?.pos?this._t("common.yes"):this._t("common.no")}
+
${this._t("vac.diag_rooms")}${is(this._t("vac.diag_rooms_value"),{total:String(r?.rooms.length||0),matched:String(h),readiness:this._t(h>=3?"vac.autocal_ready":"vac.autocal_not_ready")})}
+
${this._t("vac.diag_path")}${r?.path.length?this._t("common.yes"):this._t("common.no")}
+
${this._t("vac.diag_map")}${r?.mapId??"default"}
${"missing"===n.status||"disabled"===n.status||"unverified"===n.status?j`
${this._t(`vac.source_banner_${n.status}`)} @@ -5739,7 +5861,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("vac.documentation")}
- ${a?j` + ${r?j`
`}_vacMapId(t,e,i=this._planHass){const s=this._vacEntity(t),n=s?i?.states?.[s]?.attributes?.selected_map:null;return o=e.mapId,r=n,"default"!==o?o:null!=r?String(r):"default";var o,r}_vacSaveMatrix(t,e,i,s){const n=this._devices.find(e=>e.id===t),o=n?this._vacEnsureMarker(n):this._serverCfg?.markers?.find(e=>e.id===t);if(!o)return!1;const r={...o.vacuum||{}};return r.source=e,r.calibration={...r.calibration||{},[i]:s.map(t=>Number(t.toFixed(6)))},o.vacuum=r,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:hi(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const i=ph(e);return i?{name:String(t.name),cx:i[0],cy:i[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this._vacSource(t),i=e?vh(this.hass?.states[e]?.attributes):null;if(!e||!i||i.rooms.length<3)return void this._showToast(this._t("vac.autocal_no_rooms"));const s=this._vacPlanRoomAnchors(t.space),n=wh(i.rooms,s);if(!n)return void this._showToast(this._t("vac.autocal_no_match"));const o=this._serverCfg?.spaces?.find(e=>e.id===t.space),r=Number(o?.cell_cm),a=Number.isFinite(r)&&r>0?r:5,l=function(t,e,i){return![t,e,i].every(Number.isFinite)||t<0||e<=0||i<=0?Number.POSITIVE_INFINITY:t/e*i}(n.residual,this._gridPitch,a),c=this._vacMapId(t,i);l>40?this._vacCalConfirm={markerId:t.id,source:e,mapId:c,matrix:n.matrix,rooms:n.matched.length,error:li(l,"mi"===this.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,c,n.matrix)&&this._showToast(ss(this._t("vac.autocal_done"),{rooms:String(n.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this._vacCalConfirm;if(e){if(this._vacCalConfirm=null,t){const t=this._devices.find(t=>t.id===e.markerId),i=Mh(e.matrix);if(!t||!i)return;return this._markerDialog=null,t.space!==this._space&&(this._space=t.space),void(this._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:i,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this._showToast(ss(this._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this._vacSource(t),i=e?vh(this.hass?.states[e]?.attributes):null;if(!e||!i)return void this._showToast(this._t("vac.cal_need_pos"));const s=this._vacMapId(t,i),n=t.marker?.vacuum?.calibration?.[s],o=this._spaceModelById(t.space);if(!o)return;const r=o.vb,a=n&&6===n.length&&Mh(n)||function(t,e){const i=[],s=[];for(const e of t)null!=e.x0?(i.push(e.x0,e.x1),s.push(e.y0,e.y1)):(i.push(e.cx),s.push(e.cy));if(!i.length)return{ox:e[0]+e[2]/2,oy:e[1]+e[3]/2,s:e[2]/1e4,rot:0,mir:!0};const n=Math.min(...i),o=Math.max(...i),r=Math.min(...s),a=Math.max(...s),l=Math.max(o-n,a-r)||1,c={ox:0,oy:0,s:.6*Math.min(e[2],e[3])/l,rot:0,mir:!0},h=Sh(c),[d,u]=ch(h,(n+o)/2,(r+a)/2);return c.ox=e[0]+e[2]/2-d,c.oy=e[1]+e[3]/2-u,c}(i.rooms,r);this._markerDialog=null,t.space!==this._space&&(this._space=t.space),this._vacFit={markerId:t.id,source:e,mapId:s,p:a,drag:null}}_vacFitSave(){const t=this._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Sh(t.p));this._vacFit=null,e&&this._showToast(this._t("vac.cal_done"))}_vacFitTurn(t){const e=this._vacFit;if(!e)return;const i=vh(this.hass?.states[e.source]?.attributes),s=this._vacGhostCentre(i?.rooms||[]),n={...e.p,...t};this._vacFit={...e,p:Ch(n,e.p,s[0],s[1])}}_vacGhostCentre(t){const e=[],i=[];for(const s of t)e.push(s.x0??s.cx,s.x1??s.cx),i.push(s.y0??s.cy,s.y1??s.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...i)+Math.max(...i))/2]:[0,0]}_vacDelta(t,e,i){const s=this._stageEl,n=s?.clientWidth||1,o=s?.clientHeight||1;return[e/n*t.w,i/o*t.h]}_vacFitPointer(t,e){const i=this._vacFit;if(!i)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,s=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this._vacFit={...i,drag:s?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:Number(s.split(",")[0]),fy:Number(s.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:0,fy:0}})}const s=i.drag;if(s){if("pointermove"===t.type){const[n,o]=this._vacDelta(e,t.clientX-s.sx,t.clientY-s.sy);if("move"===s.kind)this._vacFit={...i,p:{...s.p0,ox:s.p0.ox+n,oy:s.p0.oy+o}};else{const t=vh(this.hass?.states[i.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),r=Sh(s.p0),[a,l]=ch(r,e[0],e[1]),[c,h]=ch(r,s.fx,s.fy),d=Math.hypot(a-c,l-h)||1,[u,p]=[2*a-c,2*l-h],_=Math.hypot(u+2*n-c,p+2*o-h)/2,g=Math.max(.05,_/d),m={...s.p0,s:s.p0.s*g};this._vacFit={...i,p:Ch(m,s.p0,s.fx,s.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this._vacFit={...i,drag:null})}}_renderVacFit(t){const e=this._vacFit;if(!e)return G;const i=vh(this._renderPlanHass?.states?.[e.source]?.attributes);if(!i)return G;const s=Sh(e.p),n=[],o=[],r=[];for(const t of i.rooms){if(null==t.x0)continue;const e=[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]].map(([t,e])=>ch(s,t,e));e.forEach(([t,e])=>{o.push(t),r.push(e)});const[i,a]=ch(s,t.cx,t.cy);n.push(W` - ${t.name}`)}let a=G;if(i.pos){const[e,n]=ch(s,i.pos.x,i.pos.y);a=W``}const l=[];if(o.length){const e=(()=>{const t=s[0]*s[4]-s[1]*s[3];return(e,i)=>[(s[4]*(e-s[2])-s[1]*(i-s[5]))/t,(-s[3]*(e-s[2])+s[0]*(i-s[5]))/t]})(),i=Math.min(...o),n=Math.max(...o),a=Math.min(...r),c=Math.max(...r),h=.022*t.w,d=h/4;for(const[t,s,o,r]of[[i,a,n,c],[n,a,i,c],[n,c,i,a],[i,c,n,a]]){const i=e(o,r);l.push(W``}_vacMapId(t,e,i=this._planHass){const s=this._vacEntity(t),n=s?i?.states?.[s]?.attributes?.selected_map:null;return o=e.mapId,a=n,"default"!==o?o:null!=a?String(a):"default";var o,a}_vacSaveMatrix(t,e,i,s){const n=this._devices.find(e=>e.id===t),o=n?this._vacEnsureMarker(n):this._serverCfg?.markers?.find(e=>e.id===t);if(!o)return!1;const a={...o.vacuum||{}};return a.source=e,a.calibration={...a.calibration||{},[i]:s.map(t=>Number(t.toFixed(6)))},o.vacuum=a,this._regSignature="",this._maybeRebuildDevices(),this._saveConfig(),this.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:ci(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const i=_h(e);return i?{name:String(t.name),cx:i[0],cy:i[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this._vacSource(t),i=e?yh(this.hass?.states[e]?.attributes):null;if(!e||!i||i.rooms.length<3)return void this._showToast(this._t("vac.autocal_no_rooms"));const s=this._vacPlanRoomAnchors(t.space),n=kh(i.rooms,s);if(!n)return void this._showToast(this._t("vac.autocal_no_match"));const o=this._serverCfg?.spaces?.find(e=>e.id===t.space),a=Number(o?.cell_cm),r=Number.isFinite(a)&&a>0?a:5,l=function(t,e,i){return![t,e,i].every(Number.isFinite)||t<0||e<=0||i<=0?Number.POSITIVE_INFINITY:t/e*i}(n.residual,this._gridPitch,r),c=this._vacMapId(t,i);l>40?this._vacCalConfirm={markerId:t.id,source:e,mapId:c,matrix:n.matrix,rooms:n.matched.length,error:ri(l,"mi"===this.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,c,n.matrix)&&this._showToast(is(this._t("vac.autocal_done"),{rooms:String(n.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this._vacCalConfirm;if(e){if(this._vacCalConfirm=null,t){const t=this._devices.find(t=>t.id===e.markerId),i=Ch(e.matrix);if(!t||!i)return;return this._markerDialog=null,t.space!==this._space&&(this._space=t.space),void(this._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:i,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this._showToast(is(this._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this._vacSource(t),i=e?yh(this.hass?.states[e]?.attributes):null;if(!e||!i)return void this._showToast(this._t("vac.cal_need_pos"));const s=this._vacMapId(t,i),n=t.marker?.vacuum?.calibration?.[s],o=this._spaceModelById(t.space);if(!o)return;const a=o.vb,r=n&&6===n.length&&Ch(n)||function(t,e){const i=[],s=[];for(const e of t)null!=e.x0?(i.push(e.x0,e.x1),s.push(e.y0,e.y1)):(i.push(e.cx),s.push(e.cy));if(!i.length)return{ox:e[0]+e[2]/2,oy:e[1]+e[3]/2,s:e[2]/1e4,rot:0,mir:!0};const n=Math.min(...i),o=Math.max(...i),a=Math.min(...s),r=Math.max(...s),l=Math.max(o-n,r-a)||1,c={ox:0,oy:0,s:.6*Math.min(e[2],e[3])/l,rot:0,mir:!0},h=Mh(c),[d,u]=hh(h,(n+o)/2,(a+r)/2);return c.ox=e[0]+e[2]/2-d,c.oy=e[1]+e[3]/2-u,c}(i.rooms,a);this._markerDialog=null,t.space!==this._space&&(this._space=t.space),this._vacFit={markerId:t.id,source:e,mapId:s,p:r,drag:null}}_vacFitSave(){const t=this._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Mh(t.p));this._vacFit=null,e&&this._showToast(this._t("vac.cal_done"))}_vacFitTurn(t){const e=this._vacFit;if(!e)return;const i=yh(this.hass?.states[e.source]?.attributes),s=this._vacGhostCentre(i?.rooms||[]),n={...e.p,...t};this._vacFit={...e,p:Dh(n,e.p,s[0],s[1])}}_vacGhostCentre(t){const e=[],i=[];for(const s of t)e.push(s.x0??s.cx,s.x1??s.cx),i.push(s.y0??s.cy,s.y1??s.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...i)+Math.max(...i))/2]:[0,0]}_vacDelta(t,e,i){const s=this._stageEl,n=s?.clientWidth||1,o=s?.clientHeight||1;return[e/n*t.w,i/o*t.h]}_vacFitPointer(t,e){const i=this._vacFit;if(!i)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,s=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this._vacFit={...i,drag:s?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:Number(s.split(",")[0]),fy:Number(s.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...i.p},fx:0,fy:0}})}const s=i.drag;if(s){if("pointermove"===t.type){const[n,o]=this._vacDelta(e,t.clientX-s.sx,t.clientY-s.sy);if("move"===s.kind)this._vacFit={...i,p:{...s.p0,ox:s.p0.ox+n,oy:s.p0.oy+o}};else{const t=yh(this.hass?.states[i.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),a=Mh(s.p0),[r,l]=hh(a,e[0],e[1]),[c,h]=hh(a,s.fx,s.fy),d=Math.hypot(r-c,l-h)||1,[u,p]=[2*r-c,2*l-h],_=Math.hypot(u+2*n-c,p+2*o-h)/2,g=Math.max(.05,_/d),m={...s.p0,s:s.p0.s*g};this._vacFit={...i,p:Dh(m,s.p0,s.fx,s.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this._vacFit={...i,drag:null})}}_renderVacFit(t){const e=this._vacFit;if(!e)return G;const i=yh(this._renderPlanHass?.states?.[e.source]?.attributes);if(!i)return G;const s=Mh(e.p),n=[],o=[],a=[];for(const t of i.rooms){if(null==t.x0)continue;const e=[[t.x0,t.y0],[t.x1,t.y0],[t.x1,t.y1],[t.x0,t.y1]].map(([t,e])=>hh(s,t,e));e.forEach(([t,e])=>{o.push(t),a.push(e)});const[i,r]=hh(s,t.cx,t.cy);n.push(W` + ${t.name}`)}let r=G;if(i.pos){const[e,n]=hh(s,i.pos.x,i.pos.y);r=W``}const l=[];if(o.length){const e=(()=>{const t=s[0]*s[4]-s[1]*s[3];return(e,i)=>[(s[4]*(e-s[2])-s[1]*(i-s[5]))/t,(-s[3]*(e-s[2])+s[0]*(i-s[5]))/t]})(),i=Math.min(...o),n=Math.max(...o),r=Math.min(...a),c=Math.max(...a),h=.022*t.w,d=h/4;for(const[t,s,o,a]of[[i,r,n,c],[n,r,i,c],[n,c,i,r],[i,c,n,r]]){const i=e(o,a);l.push(W` `)}}return j`this._vacFitPointer(e,t)} @pointermove=${e=>this._vacFitPointer(e,t)} @pointerup=${e=>this._vacFitPointer(e,t)} - @pointercancel=${e=>this._vacFitPointer(e,t)}>${n}${a}${l}`}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const t=this.renderRoot,e=this._stageEl,i=this._vacLastView,s=t?.querySelectorAll?.(".vacpuck")||[];if(!e||!i||!s.length)return void(this._vacRaf=0);const n=e.getBoundingClientRect();for(const e of s){const s=e.getAttribute("data-mid"),o=e.getBoundingClientRect(),r=i.x+(o.left+o.width/2-n.left)/n.width*i.w,a=i.y+(o.top+o.height/2-n.top)/n.height*i.h;for(const e of t.querySelectorAll(`line.tip[data-mid="${s}"]`))e.setAttribute("x2",r.toFixed(1)),e.setAttribute("y2",a.toFixed(1))}this._vacRafLoop()})}_renderVacuums(t,e){if(this._markup||"decor"===this._mode)return G;const i=this._space+"|"+e.x+"|"+e.y+"|"+e.w+"|"+e.h,s=this._vacJumpOnce||i!==this._vacViewKey;this._vacViewKey=i,this._vacJumpOnce=!1;const n=[],o=[];for(const i of t){if(i.hidden||!this._isVacDev(i))continue;if("static_icon"===Bi(i.marker?.display))continue;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${i.id}`),r=t?.source??this._vacSource(i,this._renderPlanHass);if(!r)continue;const a=t?.telemetry??vh(this._renderPlanHass?.states[r]?.attributes);if(!a)continue;const l=String(t?.mapId??this._vacMapId(i,a,this._renderPlanHass)),c=i.marker?.vacuum?.calibration?.[l];if(!c||6!==c.length)continue;const h=t?.runtime??this._vacRt.get(i.id),d=h?.moving??!1,u=Dh(i.marker?.vacuum),p="always"===u||"cleaning"===u&&d,_=t?.server??this._vacSrvTrails[i.id],g=_?.current?.map_id===l&&Array.isArray(_.current.points)?_.current:null,m=_?.previous?.map_id===l&&Array.isArray(_.previous.points)?_.previous:null;if("always"===u&&m&&m.points.length>1){const t=m.points.map(([t,e])=>{const[i,s]=ch(c,t,e),n=this._scenePoint([i,s]);return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ");o.push(W``)}if(p){const t=mh(a,g,h?.trail||[]),e=!d||"integration"!==t.source&&"server"!==t.source?t.path:fh(t.path);if(e.length){const t=e.map(t=>t.map(([t,e],i)=>{const[s,n]=ch(c,t,e),o=this._scenePoint([s,n]);return`${i?"L":"M"} ${o[0].toFixed(1)} ${o[1].toFixed(1)}`}).join(" ")).join(" ");o.push(W``);const s=e[e.length-1];if(d&&s?.length>=2){const t=s[s.length-1],[e,n]=ch(c,t[0],t[1]),r=this._scenePoint([e,n]),a=r[0].toFixed(1),l=r[1].toFixed(1);o.push(W``)}}}if(!d||!a.pos)continue;const[f,v]=ch(c,a.pos.x,a.pos.y),y=this._scenePoint([f,v]),b=(y[0]-e.x)/e.w*100,w=(y[1]-e.y)/e.h*100,k=h&&h.lastTs>0&&Date.now()-h.lastTs>6e4,x=i.marker?.icon||i.icon||"mdi:robot-vacuum";n.push(j`
this._vacFitPointer(e,t)}>${n}${r}${l}`}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const t=this.renderRoot,e=this._stageEl,i=this._vacLastView,s=t?.querySelectorAll?.(".vacpuck")||[];if(!e||!i||!s.length)return void(this._vacRaf=0);const n=e.getBoundingClientRect();for(const e of s){const s=e.getAttribute("data-mid"),o=e.getBoundingClientRect(),a=i.x+(o.left+o.width/2-n.left)/n.width*i.w,r=i.y+(o.top+o.height/2-n.top)/n.height*i.h;for(const e of t.querySelectorAll(`line.tip[data-mid="${s}"]`))e.setAttribute("x2",a.toFixed(1)),e.setAttribute("y2",r.toFixed(1))}this._vacRafLoop()})}_renderVacuums(t,e){if(this._markup||"decor"===this._mode)return G;const i=this._space+"|"+e.x+"|"+e.y+"|"+e.w+"|"+e.h,s=this._vacJumpOnce||i!==this._vacViewKey;this._vacViewKey=i,this._vacJumpOnce=!1;const n=[],o=[];for(const i of t){if(i.hidden||!this._isVacDev(i))continue;if("static_icon"===Li(i.marker?.display))continue;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${i.id}`),a=t?.source??this._vacSource(i,this._renderPlanHass);if(!a)continue;const r=t?.telemetry??yh(this._renderPlanHass?.states[a]?.attributes);if(!r)continue;const l=String(t?.mapId??this._vacMapId(i,r,this._renderPlanHass)),c=i.marker?.vacuum?.calibration?.[l];if(!c||6!==c.length)continue;const h=t?.runtime??this._vacRt.get(i.id),d=h?.moving??!1,u=Th(i.marker?.vacuum),p="always"===u||"cleaning"===u&&d,_=t?.server??this._vacSrvTrails[i.id],g=_?.current?.map_id===l&&Array.isArray(_.current.points)?_.current:null,m=_?.previous?.map_id===l&&Array.isArray(_.previous.points)?_.previous:null;if("always"===u&&m&&m.points.length>1){const t=m.points.map(([t,e])=>{const[i,s]=hh(c,t,e),n=this._scenePoint([i,s]);return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ");o.push(W``)}if(p){const t=fh(r,g,h?.trail||[]),e=!d||"integration"!==t.source&&"server"!==t.source?t.path:vh(t.path);if(e.length){const t=e.map(t=>t.map(([t,e],i)=>{const[s,n]=hh(c,t,e),o=this._scenePoint([s,n]);return`${i?"L":"M"} ${o[0].toFixed(1)} ${o[1].toFixed(1)}`}).join(" ")).join(" ");o.push(W``);const s=e[e.length-1];if(d&&s?.length>=2){const t=s[s.length-1],[e,n]=hh(c,t[0],t[1]),a=this._scenePoint([e,n]),r=a[0].toFixed(1),l=a[1].toFixed(1);o.push(W``)}}}if(!d||!r.pos)continue;const[f,v]=hh(c,r.pos.x,r.pos.y),y=this._scenePoint([f,v]),b=(y[0]-e.x)/e.w*100,w=(y[1]-e.y)/e.h*100,k=h&&h.lastTs>0&&Date.now()-h.lastTs>6e4,x=i.marker?.icon||i.icon||"mdi:robot-vacuum";n.push(j`
${o}`:G} - ${n}`:G}_renderDevice(t,e,i=!0){const s=this._pos(t),n=this._scenePoint([s.x,s.y]),o=(n[0]-e.x)/e.w*100,r=(n[1]-e.y)/e.h*100,a=this._devicePresentation(t,i),l=[`left:${o}%`,`top:${r}%`,...jo(a)],c=a.disabledReason,h=a.haDisabled?this._t(`marker.ha_disabled_${c}`):t.userHidden?this._t("marker.hidden_ghost"):t.name,d=[h,"none"!==a.pulse.kind?this._t(`marker.pulse_a11y_${a.pulse.reason}`):"",To(a.valueBadge)].filter(Boolean).join(", "),u=[t.model,a.valueBadge?.fullText||"",null!=a.lqiText?"LQI "+a.lqiText:""].filter(Boolean).join(" · ");return j`
this._clickDevice(e,t)} + @keydown=${e=>this._keyDevice(e,t)} @contextmenu=${e=>this._ctxDevice(e,t)} - @mousemove=${e=>this._showTip(e,t.name,a.haDisabled?h:u)} + @mousemove=${e=>this._showTip(e,t.name,r.haDisabled?h:_)} @mouseleave=${()=>this._tip=null} @pointerdown=${e=>this._pointerDown(e,t)} @pointermove=${e=>this._pointerMove(e,t)} @pointerup=${e=>this._pointerUp(e,t)} @pointercancel=${e=>this._pointerUp(e,t)} > - ${Wo(a,{newDevice:this._newIds.has(t.id),newDeviceTitle:this._t("device.new"),disabledTitle:a.haDisabled?h:""})} -
`}_roomArea(t){const e=hi(t);if(!e)return null;const i=this._spaceModel();if(!i)return null;const s=this._spaceWalls,n=s.length&&t.id&&nl(i.rooms,t.id,s,this._openPairs().flatMap(t=>t.segs),this._wallKeyPitch,this._cellCm,this._gridPitch,$_)||e,o=this._cleanFloor(t,n),r=this._cellCm/this._gridPitch;return Dr(o.area*r*r/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(t){const e=t.settings?.temp_source;return e?$o(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?$o(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=yo(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 r=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,a=i.area_id||s?.area_id||null;if(!a)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(So.test(e))continue}let l=r.get(a);l||(l=new Map,r.set(a,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 r){const r=[],a=[];for(const[i,s]of n){const n=vo(t,s.name,s.model,s.ents,e),l="mdi:thermometer"===n||"mdi:air-filter"===n;if(l){const e=po(t,s.ents);null!=e&&r.push(e)}if(o.size>0&&(o.has(i)||s.ents.some(t=>o.has(t)))){const e=_o(t,s.ents);null!=e&&r.push(e)}if(l||"mdi:water-percent"===n){const e=mo(t,s.ents);null!=e&&a.push(e)}}(r.length||a.length)&&s.set(i,{temp:r.length?Math.round(r.reduce((t,e)=>t+e,0)/r.length*10)/10:null,hum:a.length?Math.round(a.reduce((t,e)=>t+e,0)/a.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,cs(this._curSpaceCfg).customFill):null,this._roomTempSrc=t.settings?.temp_source||"",this._roomHumSrc=t.settings?.hum_source||"",this._roomNameScale=zs(t.settings?.name_scale),this._roomLabelScale=zs(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=yo(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(bo(t,n,e))continue;const r=o.name||t.states[n]?.attributes?.friendly_name||n;i&&!(r+" "+n).toLowerCase().includes(i)||s.push({value:"entity:"+n,label:r,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*$_,y:i.y*$_};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},A_(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 r=o.vb,a=n.getBoundingClientRect(),l=this._viewOr(r),c=(t.clientX-this._drag.sx)/a.width*l.w,h=(t.clientY-this._drag.sy)/a.height*l.h;Math.abs(t.clientX-this._drag.sx)+Math.abs(t.clientY-this._drag.sy)>3&&(this._drag.moved=!0);const d=ec(this._drag.ox+c),u=ec(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,r=n.top+n.height/2,a=Math.max(8,Math.hypot(t.clientX-o,t.clientY-r));this._rlResize={id:"rl_"+(e.id||""),space:i,k0:this._labelScale(e),cx:o,cy:r,d0:a},A_(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/$_,y:o.y/$_,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=$i(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``}_renderRoomLabel(t,e,i,s){if(!t.name&&!this._markup)return G;const n=this._labelPos(t,e.id),o=this._scenePoint([n.x,n.y]),r=(o[0]-i.x)/i.w*100,a=(o[1]-i.y)/i.h*100,l=Math.min(1,s.opacity+.25),c=this._labelScale(t),h=[];if(t.area||t.settings?.temp_source||t.settings?.hum_source||s.labelLight){if(s.labelTemp){const e=this._roomTemp(t);null!=e&&h.push(j`${e}°`)}if(s.labelHum){const e=this._roomHum(t);null!=e&&h.push(j`${e}%`)}if(s.labelLqi&&t.area){const e=this._roomLqi(t.area);null!=e&&h.push(j`${e}`)}if(s.labelLight){const e=(d=lo(this._renderPlanHass,this._renderDevices,t,this._virtualLights)).length?{on:d.filter(t=>t.on).length,total:d.length}:null;if(e){const t=0===e.on?this._t("roomcard.light_off"):e.on===e.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:e.on,total:e.total});h.push(j`${t}`)}}}var d;const u=!!t.area,p=!this._markup;return j`
`}_renderRoomLabel(t,e,i,s){if(!t.name&&!this._markup)return G;const n=this._labelPos(t,e.id),o=this._scenePoint([n.x,n.y]),a=(o[0]-i.x)/i.w*100,r=(o[1]-i.y)/i.h*100,l=Math.min(1,s.opacity+.25),c=this._labelScale(t),h=[];if(t.area||t.settings?.temp_source||t.settings?.hum_source||s.labelLight){if(s.labelTemp){const e=this._roomTemp(t);null!=e&&h.push(j`${e}°`)}if(s.labelHum){const e=this._roomHum(t);null!=e&&h.push(j`${e}%`)}if(s.labelLqi&&t.area){const e=this._roomLqi(t.area);null!=e&&h.push(j`${e}`)}if(s.labelLight){const e=(d=ro(this._renderPlanHass,this._renderDevices,t,this._virtualLights)).length?{on:d.filter(t=>t.on).length,total:d.length}:null;if(e){const t=0===e.on?this._t("roomcard.light_off"):e.on===e.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:e.on,total:e.total});h.push(j`${t}`)}}}var d;const u=!!t.area,p=!this._markup;return j`
this._labelDown(i,t,e.id)} @pointermove=${i=>this._labelMove(i,t,e.id)} @pointerup=${()=>this._labelUp(t)} @@ -5813,13 +5940,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @pointermove=${t=>this._rlResizeMove(t)} @pointerup=${()=>this._rlResizeUp()} @pointercancel=${()=>this._rlResizeUp()}>`):G} -
`}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=Os(e,i),r=Math.round(10*o)/10,a=Ns(o);return j`
- ${this._fmtLen(e,i)} · ${r}°
`}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,r=(i+n)/2;if("line"===t.kind){const e=Os(t.a,t.b);return{x:o,y:r,on45:Ns(e),text:`${this._fmtLen(t.a,t.b)} · ${Math.round(10*e)/10}°`}}const a=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]),a=this._fmtLen([0,0],[0,Math.abs(n-i)/2]);return{x:o,y:r,on45:!1,text:Math.abs(Math.abs(s-e)-Math.abs(n-i))<1e-6?`R ${t}`:`Rx ${t} × Ry ${a}`}}return{x:o,y:r,on45:!1,text:`${a} × ${l} · ${Dr(ra(Math.abs(s-e),this._cellCm,this._gridPitch)*ra(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=$_,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=hi(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,r,a]="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` +
`}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=D_,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``}_roomCenter(t){if(t.poly){const e=t.poly.length;return[t.poly.reduce((t,e)=>t+e[0],0)/e,t.poly.reduce((t,e)=>t+e[1],0)/e]}return[t.x+t.w/2,t.y+.1*Math.min(t.w,t.h)]}_openingAmt(t){const e=t.contact&&this._renderOpeningEntityAvailable(t.contact)?this._renderPlanHass.states[t.contact]?.state:null;return gi(t.type,e,!!t.invert)}_planEntityAvailable(t){return!!t&&(!bo(this._fullRegistryHass,t,yo(this._markers))&&"active"===this._bindingStatus("entity:"+t).kind)}_renderEntityAvailable(t){return!!t&&(!bo(this._renderPlanHass,t,yo(this._markers))&&(!!this._renderPlanHass.entities?.[t]&&!!this._renderPlanHass.states?.[t]))}_openingEntityAvailable(t){return function(t,e,i=In(t)){return!!e&&"active"===Bn(t,`entity:${e}`,i).kind}(this.hass,t,this._haRegistry)}_renderOpeningEntityAvailable(t){return e=this._renderPlanHass,!!(i=t)&&!!e?.states?.[i];var e,i}_renderOpeningPlacementPreview(){const t=this._openingPreview;if(!t)return W``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:gi(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this._cellCm,gridPitch:this._gridPitch,face:t.face},i="passage"===t.type?function(t,e){const i=Math.max(0,t.renderedLength)/2,s=Math.max(0,t.target.physicalHalfWidth),n=s+.18*Math.max(0,e),o=t=>({x1:t,y1:-n,x2:t,y2:n});return{rect:{x:-i,y:s?-s:0,width:2*i,height:2*s},boundaries:[o(-i),o(i)]}}(t,this._gridPitch):null;return W``}_roomCenter(t){if(t.poly){const e=t.poly.length;return[t.poly.reduce((t,e)=>t+e[0],0)/e,t.poly.reduce((t,e)=>t+e[1],0)/e]}return[t.x+t.w/2,t.y+.1*Math.min(t.w,t.h)]}_openingAmt(t){const e=t.contact&&this._renderOpeningEntityAvailable(t.contact)?this._renderPlanHass.states[t.contact]?.state:null;return _i(t.type,e,!!t.invert)}_planEntityAvailable(t){return!!t&&(!yo(this._fullRegistryHass,t,vo(this._markers))&&"active"===this._bindingStatus("entity:"+t).kind)}_renderEntityAvailable(t){return!!t&&(!yo(this._renderPlanHass,t,vo(this._markers))&&(!!this._renderPlanHass.entities?.[t]&&!!this._renderPlanHass.states?.[t]))}_openingEntityAvailable(t){return function(t,e,i=An(t)){return!!e&&"active"===Ln(t,`entity:${e}`,i).kind}(this.hass,t,this._haRegistry)}_renderOpeningEntityAvailable(t){return e=this._renderPlanHass,!!(i=t)&&!!e?.states?.[i];var e,i}_renderOpeningPlacementPreview(){const t=this._openingPreview;if(!t)return W``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:_i(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this._cellCm,gridPitch:this._gridPitch,face:t.face},i="passage"===t.type?function(t,e){const i=Math.max(0,t.renderedLength)/2,s=Math.max(0,t.target.physicalHalfWidth),n=s+.18*Math.max(0,e),o=t=>({x1:t,y1:-n,x2:t,y2:n});return{rect:{x:-i,y:s?-s:0,width:2*i,height:2*s},boundaries:[o(-i),o(i)]}}(t,this._gridPitch):null;return W` `}_renderOpenings(t){const e=this._openingsR;if(!e.length)return W``;const i=this._spaceModel();if(!i)return W``;const s=t.color,n=this._spaceWalls,o=this._openPairs().flatMap(t=>t.segs),r=this._openingWallIndexFor(i,o).value;return W`${e.map(t=>{if(t.orphanReason)return W``}_renderOpenings(t){const e=this._openingsR;if(!e.length)return W``;const i=this._spaceModel();if(!i)return W``;const s=t.color,n=this._spaceWalls,o=this._openPairs().flatMap(t=>t.segs),a=this._openingWallIndexFor(i,o).value;return W`${e.map(t=>{if(t.orphanReason)return W`{e.stopPropagation(),this._editOpening(t)}}> ! - `;const e=this._openingAmt(t),i=e>0&&!!t.contact&&this._renderOpeningEntityAvailable(t.contact)?"var(--hp-open)":s,o="gate"===t.type?!t.flip_v:t.flip_v,a=t.partitionHost||n.length||"gate"===t.type?this._openingFace(t,r,!!o):{ox:0,oy:0,cm:0,side:-1},l={type:t.type,length:t.rlen,angle:t.angle,amount:e,flipH:!!t.flip_h,flipV:!!t.flip_v,base:s,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:a},{half:c,outlineHalf:h,hitHalf:d}=Zd(l);return W``;const e=this._openingAmt(t),i=e>0&&!!t.contact&&this._renderOpeningEntityAvailable(t.contact)?"var(--hp-open)":s,o="gate"===t.type?!t.flip_v:t.flip_v,r=t.partitionHost||n.length||"gate"===t.type?this._openingFace(t,a,!!o):{ox:0,oy:0,cm:0,side:-1},l={type:t.type,length:t.rlen,angle:t.angle,amount:e,flipH:!!t.flip_h,flipV:!!t.flip_v,base:s,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:r},{half:c,outlineHalf:h,hitHalf:d}=Qd(l);return W` - ${Qd(l)} + ${tu(l)} this._opClick(e,t)} @@ -5850,12 +5977,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @pointermove=${e=>this._opPointerMove(e,t)} @pointerup=${e=>this._opPointerUp(e,t)} @pointercancel=${e=>this._opPointerUp(e,t)}> - `})}`}_renderOpeningLocks(t){const e=this._openingsR.filter(t=>!t.orphanReason&&("door"===t.type||"gate"===t.type)&&t.lock&&this._renderOpeningEntityAvailable(t.lock));if(!e.length)return j``;const i=this._spaceModel();if(!i)return j``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return j`${e.map(e=>{const i=this._renderPlanHass.states[e.lock]?.state,s="locked"===i,o=s||["unlocked","open","opening","unlocking","locking"].includes(String(i)),r=(e.angle+90)*Math.PI/180,a="gate"===e.type?this._openingFace(e,n,!e.flip_v):null,l=a?-16*a.side:16*(e.flip_v?-1:1),c=e.rx+Math.cos(r)*l,h=e.ry+Math.sin(r)*l,d=this._scenePoint([c,h]),u=(d[0]-t.x)/t.w*100,p=(d[1]-t.y)/t.h*100;return j`
`})}`}_renderOpeningLocks(t){const e=this._openingsR.filter(t=>!t.orphanReason&&("door"===t.type||"gate"===t.type)&&t.lock&&this._renderOpeningEntityAvailable(t.lock));if(!e.length)return j``;const i=this._spaceModel();if(!i)return j``;const s=this._openPairs().flatMap(t=>t.segs),n=this._openingWallIndexFor(i,s).value;return j`${e.map(e=>{const i=this._renderPlanHass.states[e.lock]?.state,s="locked"===i,o=s||["unlocked","open","opening","unlocking","locking"].includes(String(i)),a=(e.angle+90)*Math.PI/180,r="gate"===e.type?this._openingFace(e,n,!e.flip_v):null,l=r?-16*r.side:16*(e.flip_v?-1:1),c=e.rx+Math.cos(a)*l,h=e.ry+Math.sin(a)*l,d=this._scenePoint([c,h]),u=(d[0]-t.x)/t.w*100,p=(d[1]-t.y)/t.h*100;return j`
{t.stopPropagation(),"view"===this._mode&&(this._openingInfo=e)}}> -
`})}`}_lockAction(t,e){if(this._openingEntityAvailable(t)){if("unlock"===e){const e=this.hass?.states?.[t]?.attributes?.friendly_name||t;if(!confirm(this._t("confirm.unlock",{name:e})))return}this.hass?.callService?.("lock",e,{entity_id:t})}}_renderOpeningInfoCard(){const t=this._openingInfo,e="passage"!==t.type&&t.contact&&this._openingEntityAvailable(t.contact)?t.contact:null,i=("door"===t.type||"gate"===t.type)&&t.lock&&this._openingEntityAvailable(t.lock)?t.lock:null,s=e?this.hass.states[e]?.state:null,n=this._openingAmt(t),o=i?this.hass.states[i]?.state:null,r="door"===t.type?"opening.door":"gate"===t.type?"opening.gate":"passage"===t.type?"opening.passage":"opening.window",a="door"===t.type?"mdi:door":"gate"===t.type?"mdi:gate":"passage"===t.type?"mdi:arch":"mdi:window-closed-variant",l="gate"===t.type?n>0?"mdi:gate-open":"mdi:gate":n>0?"mdi:door-open":"mdi:door-closed",c=(t,e,i,s="")=>j`
${e}${i}
`;return j``})}`}_lockAction(t,e){if(this._openingEntityAvailable(t)){if("unlock"===e){const e=this.hass?.states?.[t]?.attributes?.friendly_name||t;if(!confirm(this._t("confirm.unlock",{name:e})))return}this.hass?.callService?.("lock",e,{entity_id:t})}}_renderOpeningInfoCard(){const t=this._openingInfo,e="passage"!==t.type&&t.contact&&this._openingEntityAvailable(t.contact)?t.contact:null,i=("door"===t.type||"gate"===t.type)&&t.lock&&this._openingEntityAvailable(t.lock)?t.lock:null,s=e?this.hass.states[e]?.state:null,n=this._openingAmt(t),o=i?this.hass.states[i]?.state:null,a="door"===t.type?"opening.door":"gate"===t.type?"opening.gate":"passage"===t.type?"opening.passage":"opening.window",r="door"===t.type?"mdi:door":"gate"===t.type?"mdi:gate":"passage"===t.type?"mdi:arch":"mdi:window-closed-variant",l="gate"===t.type?n>0?"mdi:gate-open":"mdi:gate":n>0?"mdi:door-open":"mdi:door-closed",c=(t,e,i,s="")=>j`
${e}${i}
`;return j`this._openingInfo=null}>
${e?c(l,this._t("opening.contact_label"),"unavailable"===s||null==s?this._t("opening.state_unknown"):this._t(n>0?"opening.open":"opening.closed"),n>0?"warn":"ok"):G} @@ -5874,7 +6001,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_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/$_,y:t.y/this._spaceH,angle:t.angle,length:i&&!t.lengthTouched?i.length:this._cmToUnits(Math.max(20,t.lengthCm))/$_,...t.host?{host:t.host}:{}},n=rd(i,s),o=t.host?n?od(s,e,$_,this._cellCm,this._gridPitch):nd(s,e,$_,this._cellCm,this._gridPitch):null,r="does-not-fit-jamb"===o?.reason,a=t.host?e.find(e=>e.id===t.host.id):null,l=a?li(a.cm/2,this._imperial):"",c=!!t.host&&!o?.resolved&&!r,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` ${t.host?j` -
- ${c||r?j``:G} - ${c?this._t("opening.partition_orphan"):r?this._t("opening.partition_jamb_margin",{distance:l}):this._t("opening.host_partition")} +
+ ${c||a?j``:G} + ${c?this._t("opening.partition_orphan"):a?this._t("opening.partition_jamb_margin",{distance:l}):this._t("opening.host_partition")}
`:G} {const i=d_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> + @input=${e=>{const i=g_(e.target.value);null!=i&&(this._openingDialog={...t,lengthCm:i,lengthTouched:!0})}} /> ${"passage"===t.type&&(t.contact||t.lock)?j`
@@ -5939,7 +6066,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_gridLevels(){const t=this._stageEl,e=this._viewOr(this._baseVb()),i=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return function(t,e,i=7){if(!(t>0&&e>0&&Number.isFinite(e)))return null;const s=mc.find(s=>t*s*e>=i);if(void 0===s)return null;const n=mc.find(t=>t>=5*s)??5*s;return{fine:s,coarse:n}}(this._gridPitch,i)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return W``;const i=this._gridPitch*e.fine,s=this._gridPitch*e.coarse,n=this._gridPitch*e.fine*.14;return W` +
`}_gridLevels(){const t=this._stageEl,e=this._viewOr(this._baseVb()),i=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return function(t,e,i=7){if(!(t>0&&e>0&&Number.isFinite(e)))return null;const s=fc.find(s=>t*s*e>=i);if(void 0===s)return null;const n=fc.find(t=>t>=5*s)??5*s;return{fine:s,coarse:n}}(this._gridPitch,i)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return W``;const i=this._gridPitch*e.fine,s=this._gridPitch*e.coarse,n=this._gridPitch*e.fine*.14;return W` @@ -5953,42 +6080,42 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - `}_renderPhysicalEditorLayer(){const t=this._spaceModel();if(!t)return W``;const e=this._gridPitch,i=this._viewOr(this._baseVb()),s=this._stageEl,n=s?.clientWidth?i.w/s.clientWidth:e/8,o=Math.max(.22*e,8*n),r=Math.max(o,12*n),a=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this._physicalSel?.kind===t&&this._physicalSel.id===e||"column"===t&&this._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,i)=>{const s=t.points[i+1],o=fa(t.segments[i]?.cm||15,this._cellCm,this._gridPitch);return W``}_renderPhysicalEditorLayer(){const t=this._spaceModel();if(!t)return W``;const e=this._gridPitch,i=this._viewOr(this._baseVb()),s=this._stageEl,n=s?.clientWidth?i.w/s.clientWidth:e/8,o=Math.max(.22*e,8*n),a=Math.max(o,12*n),r=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this._physicalSel?.kind===t&&this._physicalSel.id===e||"column"===t&&this._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,i)=>{const s=t.points[i+1],o=vr(t.segments[i]?.cm||15,this._cellCm,this._gridPitch);return W`{this._physicalSel={kind:"draft",id:t.id,segment:i},this._registerPhysicalTap("draft",t.id,i)}}>`})),h=(t.partitions||[]).map(t=>{const e=Dl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);return e?W`{this._physicalSel={kind:"draft",id:t.id,segment:i},this._registerPhysicalTap("draft",t.id,i)}}>`})),h=(t.partitions||[]).map(t=>{const e=Tl(t.a,t.b,t.cm,this._cellCm,this._gridPitch);return e?W`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`:G}),d=(t.wall_columns||[]).map(t=>{const e=Tl(this._physicalRotate?.id===t.id?{...t,angle:this._physicalRotate.angle}:t,this._cellCm,this._gridPitch);return W`this._physicalUp(t)}>`:G}),d=(t.wall_columns||[]).map(t=>{const e=Pl(this._physicalRotate?.id===t.id?{...t,angle:this._physicalRotate.angle}:t,this._cellCm,this._gridPitch);return W`this._physicalDown(e,"column",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),u=this._physicalDrag,p=(()=>{if(!u?.moved)return G;const t="partition"===u.kind?Dl(u.base.a,u.base.b,u.base.cm,this._cellCm,this._gridPitch):Tl(u.base,this._cellCm,this._gridPitch);return t?W`this._physicalUp(t)}>`}),u=this._physicalDrag,p=(()=>{if(!u?.moved)return G;const t="partition"===u.kind?Tl(u.base.a,u.base.b,u.base.cm,this._cellCm,this._gridPitch):Pl(u.base,this._cellCm,this._gridPitch);return t?W``:G})(),_=(()=>{const i=this._physicalSel;if(!i)return G;if("draft"===i.kind){const e=t.room_drafts.find(t=>t.id===i.id);return e?W` t.join(",")).join(" ")}> ${e.points.map(t=>W``)} - `:G}if("partition"===i.kind){const e=t.partitions.find(t=>t.id===i.id);if(!e)return G;const s=Dl(e.a,e.b,e.cm,this._cellCm,this._gridPitch);if(!s)return G;const n=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return W` - + `:G}if("partition"===i.kind){const e=t.partitions.find(t=>t.id===i.id);if(!e)return G;const s=Tl(e.a,e.b,e.cm,this._cellCm,this._gridPitch);if(!s)return G;const n=(e.a[0]+e.b[0])/2,a=(e.a[1]+e.b[1])/2;return W` + - - `}const s=t.wall_columns.find(t=>t.id===i.id);if(!s)return G;const l=this._physicalRotate?.id===s.id?{...s,angle:this._physicalRotate.angle}:s,c=Tl(l,this._cellCm,this._gridPitch);if("square"!==l.shape)return W` - + + `}const s=t.wall_columns.find(t=>t.id===i.id);if(!s)return G;const l=this._physicalRotate?.id===s.id?{...s,angle:this._physicalRotate.angle}:s,c=Pl(l,this._cellCm,this._gridPitch);if("square"!==l.shape)return W` + - `;const h=fa(l.cm,this._cellCm,this._gridPitch),d=Sl(l.angle)*Math.PI/180,u=Math.sin(d),p=-Math.cos(d),_=[l.center[0]+u*h/2,l.center[1]+p*h/2],g=[_[0]+u*Math.max(e,24*n),_[1]+p*Math.max(e,24*n)];return W` - + `;const h=vr(l.cm,this._cellCm,this._gridPitch),d=Ml(l.angle)*Math.PI/180,u=Math.sin(d),p=-Math.cos(d),_=[l.center[0]+u*h/2,l.center[1]+p*h/2],g=[_[0]+u*Math.max(e,24*n),_[1]+p*Math.max(e,24*n)];return W` + - this._physicalRotateDown(t,s)} @pointermove=${t=>this._physicalRotateMove(t)} @pointerup=${t=>this._physicalRotateUp(t)}> - `})();return W`${c}${h}${d}${p}${_}`}_renderPlanSnapOverlay(){if(!this._markup||"draw"!==this._tool)return W``;const t=this._planSnapGeometrySnapshot().value,e=this._activePlanSnapCandidate,i=fa(5,this._cellCm,this._gridPitch),s=fa(10,this._cellCm,this._gridPitch);return W``})();return W`${c}${h}${d}${p}${_}`}_renderPlanSnapOverlay(){if(!this._markup||"draw"!==this._tool)return W``;const t=this._planSnapGeometrySnapshot().value,e=this._activePlanSnapCandidate,i=vr(5,this._cellCm,this._gridPitch),s=vr(10,this._cellCm,this._gridPitch);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(fa(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=il(i.rooms,this._spaceWalls,this._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this._wallKeyPitch,this._cellCm,this._gridPitch,$_);return e>0?{a:[...t.a],b:[...t.b],halfDepth:fa(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 Ha([...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?Ds(this._segments,s,.02*this._gridPitch):this._segments,o=this._path,r=this._gridPitch,a=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)=>fa(Number(this._draftSegmentCms[e])>0?Number(this._draftSegmentCms[e]):this._contourClosed&&e===c.length-2?this._closingWallCm||l||pa:l||pa,this._cellCm,this._gridPitch)/2):[],d=c?La(c,fa(l,this._cellCm,this._gridPitch)/2,this._contourClosed,h):"",u=c?this._drawPreviewJoinPatchD(c,h):"";return W` - ${this._gridLevels()?W``:G} + `}_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,D_);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` + ${this._gridLevels()?W``:G} ${n.map(t=>W``)} ${this._renderPhysicalEditorLayer()} - ${"column"===this._tool&&this._cursorPt&&this._drawWallCm?W``M ${Tl({shape:"square",center:this._cursorPt,cm:this._drawWallCm},this._cellCm,this._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`)()}>`:G} + ${"column"===this._tool&&this._cursorPt&&this._drawWallCm?W``M ${Pl({shape:"square",center:this._cursorPt,cm:this._drawWallCm},this._cellCm,this._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`)()}>`:G} ${d?W` `:G} ${u?W` @@ -6020,9 +6147,9 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${o.length>1?W``:G} ${o.length&&this._cursorPt&&"draw"===this._tool&&!this._contourClosed?W``:G} - ${o.map((t,e)=>W``)} + ${o.map((t,e)=>W``)} ${"split"===this._tool&&this._splitSel?.pts?.length?W`${this._splitSel.pts.length>1?W``:G} - ${this._splitSel.pts.map((t,e)=>W``)} + ${this._splitSel.pts.map((t,e)=>W``)} ${this._cursorPt?W``:G}`:G} `}_renderPartitionDeleteDialog(){const t=this._partitionDeleteDialog,e="mi"===this.hass?.config?.unit_system?.length;return j`

${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:li(t.length*$_/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*D_/this._gridPitch*this._cellCm,e)})}
  • `)}
@@ -6056,8 +6183,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `:G}
this._physicalDialog={...t,cm:e.target.value}} /> ${this._t(this._imperial?"wallthick.unit_in":"wallthick.unit_cm")}
${e&&"square"===t.shape?j` @@ -6180,12 +6307,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
-
`}_cardEntities(t){const e=this._planHass,i=[],s=new Set,n=t=>{if(!t||s.has(t)||!e.states[t])return;const n=e.entities[t];if("config"===n?.entity_category||"diagnostic"===n?.entity_category)return;s.add(t);const o=t.split(".")[0];["light","switch","fan","humidifier","siren","input_boolean"].includes(o)?i.push({eid:t,kind:"toggle"}):["cover","valve","lock","climate","media_player","vacuum","water_heater"].includes(o)?i.push({eid:t,kind:"open"}):["sensor","binary_sensor","number","select"].includes(o)&&i.push({eid:t,kind:"value"})};for(const i of lo(e,this._devices,null,this._virtualLights))if(i.device.id===t.id)for(const t of[...i.serviceEids,...i.stateEids])n(t);t.primary&&n(t.primary);for(const e of t.entities)n(e);return i.slice(0,12)}_cardToggle(t){const e=t.split(".")[0];"lock"!==e&&"alarm_control_panel"!==e&&this._planEntityAvailable(t)&&this.hass.callService("homeassistant","toggle",{entity_id:t}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))}_renderInfoCard(){const t=this._infoCard,e=t.primary?this.hass.states[t.primary]:void 0,i=e?Ji(this.hass,t.primary)?.text??e.state:null,s=(t.controls??t.marker?.controls??[]).filter(Ms).filter(t=>this._planEntityAvailable(t));return j``}_cardEntities(t){const e=this._planHass,i=[],s=new Set,n=t=>{if(!t||s.has(t)||!e.states[t])return;const n=e.entities[t];if("config"===n?.entity_category||"diagnostic"===n?.entity_category)return;s.add(t);const o=t.split(".")[0];["light","switch","fan","humidifier","siren","input_boolean"].includes(o)?i.push({eid:t,kind:"toggle"}):["cover","valve","lock","climate","media_player","vacuum","water_heater"].includes(o)?i.push({eid:t,kind:"open"}):["sensor","binary_sensor","number","select"].includes(o)&&i.push({eid:t,kind:"value"})};for(const i of ro(e,this._devices,null,this._virtualLights))if(i.device.id===t.id)for(const t of[...i.serviceEids,...i.stateEids])n(t);t.primary&&n(t.primary);for(const e of t.entities)n(e);return i.slice(0,12)}_cardToggle(t){const e=t.split(".")[0];"lock"!==e&&"alarm_control_panel"!==e&&this._planEntityAvailable(t)&&this.hass.callService("homeassistant","toggle",{entity_id:t}).catch(t=>this._showToast(this._t("toast.error",{err:this._errText(t)})))}_renderInfoCard(){const t=this._infoCard,e=t.primary?this.hass.states[t.primary]:void 0,i=e?Xi(this.hass,t.primary)?.text??e.state:null,s=(t.controls??t.marker?.controls??[]).filter(Ss).filter(t=>this._planEntityAvailable(t));return j`
${(()=>{const e=this._cardEntities(t);return e.length?j`
- ${e.map(({eid:t,kind:e})=>{const i=this.hass.states[t],s=this.hass.entities[t]?.name||i?.attributes?.friendly_name||t,n=i?Ji(this.hass,t)?.text??i.state:"",o="on"===i?.state||["open","unlocked","playing","cleaning"].includes(i?.state);return j`
- + ${e.map(({eid:t,kind:e})=>{const i=this.hass.states[t],s=this.hass.entities[t]?.name||i?.attributes?.friendly_name||t,n=i?Xi(this.hass,t)?.text??i.state:"",o="on"===i?.state||["open","unlocked","playing","cleaning"].includes(i?.state);return j`
+ ${s} ${"toggle"===e?j``:"open"===e?j`
`:G} ${i&&!this._cardEntities(t).length?j`
${this._t("info.state")}${i}
`:G} - ${Hi(t.link)?j`
${this._t("info.link")} - ${t.link}
`:G} + ${Ni(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")} @@ -6217,7 +6344,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 `: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=qs(t.room),i=Fi(t.binding,t.devId,()=>"__hp_device_preview__"),s=this._markers.find(e=>e.id===i||e.id===t.devId),n=Xn(t.binding,t.controls,this._bindingEntities(t.binding)),o=this._effectiveStoredTapAction(t),r={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&&3!==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=d_(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)&&(r.space=e?.space||("virtual"===t.binding?this._space:null),r.area=e?.area||null,r.room_id=e?.roomId||null),r}_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 xo({...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 Jh({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(!Qh(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:Vh(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=Bo(this._planHass,s,n),r=qo(this._planHass,s,o);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!r,valueBadgeSource:r,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const i={...e,hidden:!1};return co(lo(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&&ro(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&&Zn(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 Zn(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} ${Zn(n).join(" ")}`.toLowerCase()})}const n=Object.keys(this.hass.states||{}).filter(e=>Ms(e)&&!s.has(e)&&Yn(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=xs(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),r=this._effectiveMarkerTapAction(t,o),a=o?cs(this._serverCfg?.spaces.find(t=>t.id===o.space)):null,l=o?this._markerPreviewDevices(o):this._devices,c="toggle"===r&&o?this._toggleIntent(o,l):null,h=this._toggleHintLines(c),d=o?cu(this._planHass,o,{liveStates:!1!==this._config?.live_states,showTemperature:!1!==this._config?.show_temperature,showSignal:a?.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?Bo(this._planHass,o,l):[],p=o?qo(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=Ro(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 to(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?Zn(o):[],P=o&&Qn(o)||"",R=!!t.lightEntity&&!T.includes(t.lightEntity),A=o?qh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),E="toggle"===r?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,F=E?[...E.targets,...E.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=Ei(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=g_(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 Zh({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(!td(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:Kh(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?pu(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?jh(o):[],I=!!t.toggleEntity&&!A.includes(t.toggleEntity),E="toggle"===a?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,F=E?[...E.targets,...E.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}>
@@ -6240,7 +6367,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14
@@ -6265,7 +6392,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 @input=${e=>this._markerDialog={...t,bindingFilter:e.target.value}} />
${i.map(e=>j`
{const i={...t,binding:e.value,bindingOpen:!1,controls:Xn(e.value,t.controls,this._bindingEntities(e.value)),autoIcon:this._autoIconForBinding(e.value)};this._markerDialog=this._announceToggleDraft({...i,...this._valueBadgeForBinding(i,e.value)})}}> + @click=${()=>{const i={...t,binding:e.value,bindingOpen:!1,controls:Yn(e.value,t.controls,this._bindingEntities(e.value)),autoIcon:this._autoIconForBinding(e.value)};this._markerDialog=this._announceToggleDraft({...i,...this._valueBadgeForBinding(i,e.value)})}}> ${e.label}${e.sub}
`)} ${i.length?G:j`
${this._t("marker.nothing_found")}
`} @@ -6286,13 +6413,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - ${"toggle"===r&&(A.length>1||I)?j`
+ ${"toggle"===a&&(A.length>1||I)?j`
${this._help("marker.toggle_entity.help")} @@ -6312,11 +6439,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("marker.toggle_entity_missing",{entity:t.toggleEntity,fallback:F||this._t("marker.toggle_entity_none")})}

`:G}
`:G} - ${"toggle"===r?j`
+ ${"toggle"===a?j`
${h.map(t=>j`
${t}
`)}
${t.tapHintAnnouncement}
`:G} - ${"run"===r?(()=>{const e=t.runFilter.trim().toLowerCase(),i=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),s=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return j` + ${"run"===a?(()=>{const e=t.runFilter.trim().toLowerCase(),i=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),s=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return j` ${t.tapTarget&&!s?j`
${this._t("marker.run_target_gone",{id:t.tapTarget})}
`:G} ${this._t("marker.nothing_found")}
`}
`}`})():G} - ${"run"===r||"toggle"===r?j` ${"file"===t.source?j`
@@ -6635,25 +6762,25 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${t.pickSaved?this._renderServerPlans(t):G}`:G}
- {const i=d_(e.target.value);this._spaceDialog={...t,cellCm:null!=i&&i>0?Math.max(.1,Math.min(c_,i)):t.cellCm}}} /> + @input=${e=>{const i=g_(e.target.value);this._spaceDialog={...t,cellCm:null!=i&&i>0?Math.max(.1,Math.min(p_,i)):t.cellCm}}} /> ${this._t("space.scale_unit")}
-
`:G}`:G}`}_renderRoomDialog(){const t=!!this._roomEditId,e=t?null:this._wallFaceBatch,i=e&&e.candidates.length>1?this._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",s=!!this._areaSel||!!this._nameSel.trim(),n=cs(this._curSpaceCfg),o=this._roomFill||n.fill,r=this._roomCustomFill||n.customFill,a=[...this._freeAreas];if(t&&this._areaSel&&!a.some(t=>t.area_id===this._areaSel)){const t=this.hass.areas[this._areaSel];t&&a.unshift(t)}return j``:G}`:G}`}_renderRoomDialog(){const t=!!this._roomEditId,e=t?null:this._wallFaceBatch,i=e&&e.candidates.length>1?this._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",s=!!this._areaSel||!!this._nameSel.trim(),n=ls(this._curSpaceCfg),o=this._roomFill||n.fill,a=this._roomCustomFill||n.customFill,r=[...this._freeAreas];if(t&&this._areaSel&&!r.some(t=>t.area_id===this._areaSel)){const t=this.hass.areas[this._areaSel];t&&r.unshift(t)}return j`
@@ -6837,12 +6964,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 - ${[["","fill.inherit"],...Wi.map(t=>[t,"fill."+t])].map(([t,e])=>j`
`:G} @@ -6872,7 +6999,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._rangeInput(50,300,5,Math.round(100*this._roomLabelScale),t=>{this._roomLabelScale=t/100,this.requestUpdate()})} ${Math.round(100*this._roomLabelScale)}%
- ${this._renderCardPreview(cs(this._curSpaceCfg).cardFontScale,this._roomNameScale,this._roomLabelScale)} + ${this._renderCardPreview(ls(this._curSpaceCfg).cardFontScale,this._roomNameScale,this._roomLabelScale)}
@@ -6886,4 +7013,4 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="19144400828da11db7664f41050e83728b14 ${this._t("btn.save")} `}
- `}}I_.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}},I_.ZOOM_MAX=8,I_.ZOOM_MIN=1/3,I_._touchSeen=!1,I_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,I_.styles=[Kt,Ou],customElements.get("houseplan-card")||customElements.define("houseplan-card",I_),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${o_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}O_.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}},O_.ZOOM_MAX=8,O_.ZOOM_MIN=1/3,O_._touchSeen=!1,O_._noHoverMq="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(hover: none)").matches,O_.styles=[Kt,Bu],customElements.get("houseplan-card")||customElements.define("houseplan-card",O_),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${c_} `,"background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 835f1f4f..6a39cf04 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -235,31 +235,42 @@ Per-marker appearance: `display: badge|icon_ripple|value|static_icon`. Entity se projection (sources, value, icon, classes, metrics and explanation), `src/device-pulse.ts` is the single pure projection from semantic activity to `none|alarm|short|continuous`, and -`src/device-face.ts` renders that projection on the full plan, device preview and static -space card. `badge` -shows the icon/morph and status plate; `icon_ripple` additionally shows three finite +`src/device-face.ts` renders one package-derived shell/core DOM on the full plan, +device preview and static space card. The saved coordinate remains the icon-core +centre; Text is shell-centred, while a Double shell extends around the anchored +core. The 101.5/80 shell/core ratio, Light/Dark context, full-text fitting and +44×44 interactive hit area are renderer facts rather than surface-specific DOM. +`badge` shows the icon/morph and semantic core; `icon_ripple` additionally shows three finite event waves or one continuous wave for presence, mechanical transition and actual work; `value` replaces the icon with the HA-formatted numeric or text value. Ambiguous/missing/unavailable sources fall back to the icon instead of selecting an arbitrary registry row. A critical alarm is red in every dynamic presentation. `static_icon` deliberately keeps the configured/automatic -base icon on one neutral dark plate: state morphing, work/open/alarm/unavailable paint, +base icon on one neutral theme-aware core: state morphing, work/open/alarm/unavailable paint, activity, RGB, value, temperature/humidity/LQI badges and live vacuum overlays are all suppressed. Hover/focus, taps, controls and light aggregation keep their normal behaviour. -An optional `marker.value_badge` adds one independent boxed state/attribute, -derived LQI or canonical `marker:` light state at right/bottom/left/top. +An optional `marker.value_badge` adds a state/attribute, derived LQI or canonical +`marker:` light-state section at right/bottom/left/top inside that shell. Explicit settings override the global legacy temperature gate; explicit off suppresses legacy output. Bottom badges stack above system LQI, and a derived LQI badge de-duplicates that system row. `hp-device-preview` fits and centres the complete face bounding box rather than allowing satellites to clip. `normalizeDeviceDisplay()` is the mandatory compatibility gate for every consumer and maps -legacy `ripple` to `icon_ripple`. The marker dialog builds its unsaved draft through `buildDevices`, +legacy `ripple` to `icon_ripple`. `markerLqiBand()` / `markerLqiColor()` are +deliberately marker-only (`<=40` red, `41…179` amber, `>=180` green); room fill +keeps the continuous `logic.ts::lqiColor()` gradient. The marker dialog builds +its unsaved draft through `buildDevices`, then `hp-device-preview` shows the actual projection, integration provenance from registry/config-entry metadata and isolated short/continuous activity demonstrations. Runtime baselines are seeded as soon as a rebuilt registry becomes authoritative, before the next HA snapshot is classified; source-key changes reset any finite effect immediately. The backend accepts legacy `display: ripple` only for compatibility. `ripple_color` and `ripple_size` remain the stored names used by every unified pulse kind (alarm keeps its safety-red colour). +Absent pulse size resolves to 1.5; explicit persisted color/size wins, followed +by live RGB and the presence-green/work-amber/transition-blue fallback. +Continuous/short/alarm durations are 3.6/3.3/2.4 seconds. Enter/Space on an +interactive marker calls the same `_clickDevice()` path as pointer activation, +so secure confirmation and Device-editor routing cannot drift. `size` (icon multiplier via the `--dev-size` CSS var — value badges scale along) and `angle` rotate/scale a single icon. Room drawing shows a live **ruler** (`segmentCm` + diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 57a51afb..c20a2b5b 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,15 @@ ## v1.65.0-beta.5 — 2026-08-19 +- Device markers now use the designer-supplied shared shell/core system in + light and dark themes, with distinct focus, selected, locked, unlocked, + active, alarm, virtual and unavailable states. Text and adjacent values live + in one shell and are no longer ellipsized; marker LQI uses red at 0–40, + amber at 41–179 and green at 180+. Activity motion follows the new package + timings and colors, while saved custom pulse settings remain authoritative. + Interactive markers also have a 44×44 px target and reuse their existing + click/confirmation path from Enter or Space + ([#179](https://github.com/Matysh/houseplan-card/issues/179)). - The new-space dialog now shows the defaults it will actually save: image spaces start with borders and names off, while switching to a hand-drawn plan visibly turns both on. After either switch is edited, changing the plan diff --git a/docs/CHANGELOG.ru.md b/docs/CHANGELOG.ru.md index 21e1e833..2cd83fa9 100755 --- a/docs/CHANGELOG.ru.md +++ b/docs/CHANGELOG.ru.md @@ -8,6 +8,16 @@ ## v1.65.0-beta.5 — 2026-08-19 +- Маркеры устройств теперь используют единый дизайн shell/core из пакета + дизайнера в светлой и тёмной теме, с отдельными состояниями фокуса, выбора, + блокировки, разблокировки, работы, тревоги, виртуального и недоступного + устройства. Текст и соседние значения находятся в одной подложке и больше + не сокращаются многоточием; LQI маркера окрашивается красным при 0–40, + жёлтым при 41–179 и зелёным при 180+. Пульсации получили новые тайминги и + цвета, а явно сохранённые пользовательские настройки сохранили приоритет. + Интерактивный маркер также имеет область нажатия не меньше 44×44 px и по + Enter/Space использует прежний click/confirmation path + ([#179](https://github.com/Matysh/houseplan-card/issues/179)). - Диалог нового пространства теперь показывает именно те значения, которые сохранит: для плана с изображением границы и названия изначально выключены, а при переходе к ручному плану оба переключателя видимо включаются. После diff --git a/docs/TESTING.md b/docs/TESTING.md index 828ce50d..32eeed85 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -32,6 +32,35 @@ полный прогон — workflow `mutation-gate.yml`, перед стабильным релизом и по понедельникам. Дешёвая половина идёт с юнитами: `test/mutation-gate.test.mjs`. +## Device icon design package (#179) + +- [ ] Pure presentation tests cover lock/unlock, exact marker-only LQI bands + `0/40/41/179/180`, unchanged room gradient, package pulse defaults, + semantic colors and reduced motion + [unit: `device-presentation.test.mjs`, `device-pulse.test.mjs`]. +- [ ] Shared face tests cover shell/core DOM, four Double positions, a third + legacy section, deterministic font fitting, full text and safe CSS color + variables [unit: `device-face.test.mjs`]. +- [ ] The browser renders the exact shell ratio and shadow color, Light/Dark + cores without backdrop blur, state/LQI colors, 3.6 s presence pulse, + unavailable no-hover, full Text/Double values, 44×44 target, View and + Device-editor keyboard paths, and no Plan tab stop + [auto: `smoke_device_icon_design.mjs`]. +- [ ] Full plan, preview and static card preserve the same face after the DOM + redesign; static mode, state/value and disabled-device contracts stay + green [auto: `smoke_device_preview_parity.mjs`, `smoke_static_icon.mjs`, + `smoke_state_value.mjs`, `smoke_disabled_device.mjs`]. +- [ ] Restoring unavailable hover, shifting the LQI boundary, restoring value + ellipsis or bypassing `_clickDevice()` makes its guard red + [mutation: `device-unavailable-hover-restored`, + `device-marker-lqi-low-boundary-shifted`, + `device-long-value-ellipsis-restored`, + `device-keyboard-bypasses-click-path`]. +- [ ] Pre-beta golden reviews desktop/mobile Light/Dark states, combo states, + Text, four Double positions, long and legacy values, LQI, reduced motion, + sizes 32/56/96 and colored backgrounds. Full smoke/golden/performance + remains a Linux release gate. + ## Empty-space lifecycle (#113) - [ ] Active selection keeps active-or-first compatibility, while an empty diff --git a/docs/USER-GUIDE.md b/docs/USER-GUIDE.md index 6a5e0c42..c1075b47 100644 --- a/docs/USER-GUIDE.md +++ b/docs/USER-GUIDE.md @@ -399,15 +399,16 @@ group; without a selection existing groups remain external-only. ## 12. Device visual states -Presentation has three independent layers: stable marker background, icon or -value, and optional activity pulse. Priority is **alarm → working → open → -neutral**. +Presentation uses one shared outer shell around three independent layers: +stable core, icon or value, and optional activity pulse. Visual priority is +**alarm → keyboard focus → selected → hover → semantic state → neutral**. | State | Meaning | Examples | |---|---|---| | Red alarm | Critical condition, even with live states disabled | Smoke, gas, CO, leak, tamper/problem/safety, triggered alarm | -| Yellow | Device is doing its main job | Light/switch/fan on, active climate, vacuum cleaning, known appliance work | -| Orange | Physically open or unlocked | Door/window contact, unlocked lock, opening valve | +| Yellow | Device is doing its main job or a lock is unlocked | Light/switch/fan on, active climate, vacuum cleaning, known appliance work, unlocked lock | +| Black lock glyph | Lock is secured | Locked lock | +| Orange | Physically open | Door/window contact, opening valve | | Faded | Data unavailable | All relevant entities unknown, unavailable or absent | | Neutral | No alarm, work or open condition | Off, closed, idle, standby, docked | @@ -421,17 +422,30 @@ are not treated as independent proof of work, and an ordinary lone relay keeps its existing yellow-on behaviour. Activity may be a finite three-wave event, persistent presence, a travelling -transition, or persistent work. `prefers-reduced-motion` replaces ordinary -motion with a compact indicator while the alarm remains clear. +transition, or persistent work. Continuous motion uses a 3.6 s cycle (green +presence, amber work, blue neutral transition), a short event lasts 3.3 s, and +the two-wave red alarm cycles in 2.4 s. Explicit saved pulse color/size remains +authoritative; the package size default is 1.5 diameters. `prefers-reduced-motion` +replaces ordinary motion with a compact colored indicator while the static red +alarm remains clear. The four display choices are icon + state; icon + state + activity; value + state; and always-static icon. A separate value badge can show an entity state, useful attribute, average LQI or linked light state on any side of the marker. +Text and adjacent values are sections of the same shell. They shrink to a +readable floor and then expand the shell; they are never ellipsized. Virtual devices use the ordinary neutral/hover background with a dashed outer -circle. They cannot have active state or pulse. Unavailable keeps the ordinary -presentation with the standard icon opacity reduction. Zigbee LQI remains a -separate badge. +circle. An HA-less virtual device does not invent unavailable or activity; +a linked virtual light may still follow its real controller. Unavailable keeps the ordinary +presentation with the standard icon opacity reduction, no visual hover and no +motion; its existing click/tap still opens information or settings. Marker LQI +is red at 0–40, amber at 41–179 and green at 180+, without changing the room +fill gradient. + +Interactive View/kiosk and Device-editor markers have at least a 44×44 CSS px +target. Enter and Space reuse the exact current click and confirmation path; +Plan, Background, preview and the read-only static card add no tab stop. ## 13. Room fills and light diff --git a/docs/USER-GUIDE.ru.md b/docs/USER-GUIDE.ru.md index d505b0d4..cd0fcfea 100644 --- a/docs/USER-GUIDE.ru.md +++ b/docs/USER-GUIDE.ru.md @@ -738,21 +738,28 @@ House Plan заново определяет состояние и направ ## 12. Визуальные состояния устройств -В динамических режимах система состоит из трёх независимых слоёв: +В динамических режимах система состоит из общего внешнего shell и трёх +независимых слоёв: 1. **подложка маркера** сообщает устойчивый статус; 2. **иконка/число** сообщает тип или значение; 3. **пульсация активности** в режиме «Значок + состояние и активность» сообщает событие, присутствие, движение или работу. -Приоритет статусов: **авария → работа → открыто → нейтрально**. Если все сущности, реально описывающие маркер, недоступны, маркер бледнеет. У медиаплеера `off` использует то же приглушённое отображение, что `unknown` и `unavailable`, без отдельного визуального состояния. +Приоритет оформления: **авария → клавиатурный фокус → выбранный маркер → +hover → состояние → нейтрально**. Если все сущности, реально описывающие +маркер, недоступны, маркер бледнеет и не получает визуальный hover или +пульсацию, но его обычный клик/тап по-прежнему открывает информацию либо +настройки. У медиаплеера `off` используется то же приглушённое отображение, что +`unknown` и `unavailable`, без отдельного визуального состояния. ### Подложка и постоянный статус | Вид | Что означает | Примеры | |---|---|---| | Красная авария | Критическое событие; показывается даже при выключенных живых состояниях | Дым, газ, CO, протечка, tamper/problem/safety, сирена `on`, охранная панель `triggered` | -| Жёлтая подложка | Устройство сейчас выполняет работу | Свет/реле/вентилятор/увлажнитель `on`; climate с распознанным action `heating`, `cooling`, `preheating` или `defrosting`; при отсутствии распознанного action — включённый HVAC-режим как лучшее доступное приближение; vacuum cleaning/returning; script on; техника washing/drying/etc. | -| Оранжевая подложка | Физически открыто/разблокировано | Датчик двери/окна/гаража `on`, замок unlocked/open, клапан open/opening/closing | +| Жёлтая подложка | Устройство сейчас выполняет работу либо замок разблокирован | Свет/реле/вентилятор/увлажнитель `on`; climate с распознанным action `heating`, `cooling`, `preheating` или `defrosting`; при отсутствии распознанного action — включённый HVAC-режим как лучшее доступное приближение; vacuum cleaning/returning; script on; техника washing/drying/etc.; lock unlocked/open | +| Чёрный значок замка | Замок заблокирован | lock locked | +| Оранжевая подложка | Физически открыто | Датчик двери/окна/гаража `on`, клапан open/opening/closing | | Бледный маркер | Данные недоступны либо медиаплеер выключен | Все рабочие сущности маркера `unknown`, `unavailable` или отсутствуют; `media_player.* = off` | | Нейтральный | Нет аварии, работы и открытого состояния | Выключено, закрыто, idle/standby/docked и т. п. | @@ -769,7 +776,14 @@ House Plan заново определяет состояние и направ | Постоянная: переход | Пока идёт движение | Cover opening/closing, lock locking/unlocking, valve opening/closing, moving sensor, vacuum returning | | Постоянная: работа | Пока устройство работает | Свет, switch, fan, humidifier, climate action (либо включённый HVAC-режим при отсутствии action), vacuum cleaning, script и известные рабочие состояния техники | -Цвет и размер пульсации можно изменить для конкретного маркера. Если цвет не задан, RGB-свет может передать ей свой текущий цвет. Статичных колец нет; при системном уменьшении движения обычная активность обозначается компактной точкой, а тревога остаётся понятной по красной подложке. +Постоянная пульсация длится 3,6 секунды на цикл: присутствие зелёное, работа +жёлтая, нейтральный переход синий. Короткое событие — три волны за 3,3 секунды; +красная тревога использует две волны с циклом 2,4 секунды. Цвет и максимальный +размер пульсации можно изменить для конкретного маркера; явно сохранённые +значения имеют приоритет, а новый размер по умолчанию равен 1,5 диаметра. Если +цвет не задан, RGB-свет может передать ей свой текущий цвет. Статичных колец +нет; при системном уменьшении движения обычная активность обозначается +компактной цветной точкой, а тревога остаётся понятной по красной подложке. ### Четыре варианта «Отображение» @@ -778,13 +792,13 @@ House Plan заново определяет состояние и направ | Значок + состояние | Да | Да | Только тревога | Отдельные компактные °/% и LQI возможны | | Значок + состояние и активность | Да | Да | Да | Отдельные компактные °/% и LQI возможны | | Значение + состояние | Если значение получить нельзя или источник неоднозначен | Да | Только тревога | Температура/влажность либо числовое или текстовое состояние, отформатированное HA | -| Всегда статичный значок | Да | Всегда нейтральная тёмная | Нет | Нет | +| Всегда статичный значок | Да | Нейтральная в цветах текущей темы | Нет | Нет | В режиме «Значение вместо иконки» поддерживаются и числа, и локализованные HA текстовые состояния. Если источник отсутствует, недоступен или неоднозначен, карточка возвращается к иконке; предпросмотр объясняет причину. Длинный текст -сокращается многоточием, полный остаётся в подсказке и accessibility-описании. -LQI остаётся отдельным бейджем. +уменьшается до читаемого минимума, затем общий shell расширяется: многоточие и +скрытие хвоста не используются. LQI остаётся отдельной строкой под shell. ### Бейдж со значением рядом с устройством @@ -794,14 +808,15 @@ LQI остаётся отдельным бейджем. текущая температура, яркость, заряд, положение или громкость), средний LQI и состояния связанных источников света. Изменения сразу видны в предпросмотре. -Это независимый элемент: он может показываться и рядом с обычной иконкой, и -рядом с режимом «Значение вместо иконки». Если бейдж расположен снизу, системный -LQI автоматически становится второй строкой; если сам бейдж показывает LQI, +Это независимая секция общего shell: она может показываться и рядом с обычной +иконкой, и рядом с режимом «Значение вместо иконки». Если секция расположена +снизу, системный LQI автоматически становится второй строкой; если сама секция показывает LQI, дублирующая строка скрывается. Недоступный сохранённый источник не заменяется другим молча — отображается `—`, а редактор позволяет сохранить связь или выбрать новую. -Для старых маркеров без этой настройки прежние автоматические °/% сохраняются. +Для старых маркеров без этой настройки прежние автоматические °/% сохраняются +как дополнительная секция того же shell. Явно выключенный бейдж подавляет эту legacy-эвристику. Явный бейдж не зависит от общей настройки показа температуры; «Всегда статичный значок» временно скрывает его, не удаляя выбор. Настройка «Учитывать температуру устройства в @@ -817,6 +832,16 @@ Glow и заливка «Свет» продолжают работать по настройкам устройства. Для привязок, способных сообщать о тревоге, редактор показывает неблокирующее предупреждение перед сохранением этого режима. +Число Zigbee LQI под маркером имеет три фиксированных диапазона: **0–40 — +красный, 41–179 — жёлтый, 180 и выше — зелёный**. Это не меняет плавный +градиент LQI-заливки комнаты. + +В Просмотре/киоске и редакторе устройств интерактивный маркер получает +клавиатурный фокус и область действия не меньше 44×44 CSS px. Enter и Space +выполняют ровно тот же путь, что клик: в Просмотре сохраняются выбранное +действие и все подтверждения, в редакторе открываются настройки. План, +Background, read-only static card и предпросмотр не добавляют ложных tab-stop. + Живой блок предпросмотра в настройках marker использует несохранённые поля формы и текущее состояние HA. Он отдельно показывает интеграцию привязки и фактическую сущность отображения. Для «Значок + состояние и активность» можно diff --git a/docs/images/01-view-desktop.png b/docs/images/01-view-desktop.png index d0ca9b173e350108c406d8d4fb424157e874358b..d141567a26cee9517e795546e4a45b23306262dd 100644 GIT binary patch delta 153896 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 KfpqCQ0xl`fY#0RnG9=0l6D>|5?}T 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

$YQo=pk3?wFlxYZ)04=>$PAbXk!BD3rRuci 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 diff --git a/docs/images/02-view-touch.png b/docs/images/02-view-touch.png index 9e8eb69a1a792591b355e7bd4e9a86c35991ebca..040ef135d4c1aa29f9f3b72061bda99e0086ee9c 100644 GIT binary patch literal 65446 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

yDu1>)NJ#Pt@W&Or$Q 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�Q)45e+i%R`wSd$9 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 h00006Nkl1 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�Z0a2w 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%0A$b0afV+F7WdY_ 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 Nt7V|spzaX+{{Sl)5i0-y delta 246631 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

WyqkO@8V3od~Ef;>bYi8i4pLK_*r#puHeTU@i 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%0ACL)cE2xSFLZFf^#Xg;Hot> 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

SFviPVa>1X)OB4Mo~P(boVxaE)Trg~S1d^~ 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

;e&w(XhEEmXbyFp&-uCjZVPb?~B=`34+z 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®_YA|YB<)&)MzN7+!!Ca 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

kTVyc(o8nU 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

<8+fp5KHWdic2N2o4Uk^BO+ToAW&5A6{R*7p z`ijq4@cvwAAR5A-53@BHQ!I8f5Z`K;NkWd7Y@$_QFbds+z@su%AA F{tHsz&$$2q diff --git a/docs/images/screenshots.json b/docs/images/screenshots.json index 2a4e5f8b..19553812 100644 --- a/docs/images/screenshots.json +++ b/docs/images/screenshots.json @@ -1,7 +1,7 @@ { "version": 1, "fixture": "synthetic-only", - "sourceFingerprint": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", + "sourceFingerprint": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", "captureScriptSha256": "34f2219790d46efd8250e7a1bd829cb8fc0b0547e1260635fefa52407551b41b", "command": "npm run build && node demo/docs/capture.mjs", "scenarios": { @@ -13,8 +13,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", - "imageSha256": "d36b6f9f8139f31ef73a780c6511a640a26055efd9d7a24c24fd48b1d8379bf0" + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", + "imageSha256": "e2d31553c2541fd7f0725db348e3d0210867d4e2489532372270820bc0050794" }, "view-touch": { "file": "02-view-touch.png", @@ -24,8 +24,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", - "imageSha256": "358e25ff9984d0fb0c03cfbb848df40c425fdfe64cd5f4f613b1e754ca9d4249" + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", + "imageSha256": "c4d5bd72e177b45737dbf1c3b09f52a31bb0c63829d8d652655cfb54f154c2ff" }, "space-create": { "file": "03-space-create.png", @@ -35,7 +35,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", "imageSha256": "c53db2e5c642a5549c13f3c93a5b359fed69bdb2621bf71a243a877ffcb95e6b" }, "room-contour-close": { @@ -46,7 +46,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", "imageSha256": "2f13ea645af306eee9cc7c52699c928377b72f412b08c1a3db6beb848ace1b51" }, "plan-context-tray": { @@ -57,7 +57,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", "imageSha256": "a6c526fede11bc3503fd2384bd4a3f6afa008f481c5c47578f06cae6c81c6f9b" }, "device-editor": { @@ -68,8 +68,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", - "imageSha256": "7a22a81e2abedf5a520bd36b7509d953cbfa9962b48c0ffbc233666a6215c04b" + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", + "imageSha256": "189287256dae5721cc8fac76b82180f1eba36281434032824aa616426fcad6d7" }, "device-display-preview": { "file": "06-device-display-preview.png", @@ -79,8 +79,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", - "imageSha256": "df3a54395c83bffd7a161f1fb3de0143e12e76567535aedf9883873ead74df91" + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", + "imageSha256": "112afb49df2f4398e5b3de29c21fd26af02fba007649e810786c97b3da42a0fd" }, "background-editor": { "file": "07-background-editor.png", @@ -90,7 +90,7 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", "imageSha256": "d7cfe70551d9260169df8efd832e32ed7df99c7f60b55d1fd4a8322bd4c47175" }, "room-card": { @@ -101,8 +101,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", - "imageSha256": "176abba71d41cfb045a33f82a794d9fbb2a5d3c48e6df66e6ec3a8e448311b11" + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", + "imageSha256": "e7e3f0609a5dfa117e366b0388bd2d5286865110fd5798c02ffa752b2c285f95" }, "device-info": { "file": "09-device-info.png", @@ -112,8 +112,8 @@ }, "theme": "dark", "language": "en", - "sourceSha256": "19144400828da11db7664f41050e83728b14d7dafaea55c65766f4f43bf8bd17", - "imageSha256": "2199ed88b215bf2bff63bf665028f78b2aa6a92c3032b803931790f2ef071893" + "sourceSha256": "4789f3351376f16116faa2c6102238a0ca1bbd6dabb9c5d1d5e07c71ccab3aba", + "imageSha256": "b61541f0f53db632c99bf082d875ec1f84f77b534147b769e382ca54d8fe5c3e" } } } diff --git a/scripts/mutation-gate.mjs b/scripts/mutation-gate.mjs index a255b2ad..59038182 100644 --- a/scripts/mutation-gate.mjs +++ b/scripts/mutation-gate.mjs @@ -515,6 +515,52 @@ export const MUTANTS = [ replace: ' resumed = False', }], }, + { + id: 'device-unavailable-hover-restored', + guard: 'node demo/smoke_device_icon_design.mjs', + because: 'unavailable keeps click/keyboard access but must never regain the blue visual hover ' + + 'which makes an offline device look live', + patches: [{ + file: 'src/styles.ts', + find: '.dev:not(.unavail):hover .device-core {', + replace: '.dev:hover .device-core {', + }], + }, + { + id: 'device-marker-lqi-low-boundary-shifted', + guard: 'npx tsc -p tsconfig.test.json && node scripts/fix-test-build.mjs ' + + '&& node --test --test-name-pattern="marker LQI is categorical" ' + + 'test/device-presentation.test.mjs', + because: 'marker LQI must keep the owner-approved inclusive <=40 red boundary without ' + + 'changing the separate room-fill gradient', + patches: [{ + file: 'src/device-presentation.ts', + find: ' if (lqi <= 40) return \'low\';', + replace: ' if (lqi < 40) return \'low\';', + }], + }, + { + id: 'device-long-value-ellipsis-restored', + guard: 'node demo/smoke_device_icon_design.mjs', + because: 'Text and Double must expose the complete dynamic value; the new shared shell ' + + 'must not regress to the old clipped satellite', + patches: [{ + file: 'src/styles.ts', + find: ' .dev .valtext {\n overflow: visible;', + replace: ' .dev .valtext {\n overflow: hidden;\n text-overflow: ellipsis;', + }], + }, + { + id: 'device-keyboard-bypasses-click-path', + guard: 'node demo/smoke_device_icon_design.mjs', + because: 'Enter and Space must reuse the current surface click path so Device editor opens ' + + 'settings and secure View actions keep their existing confirmation policy', + patches: [{ + file: 'src/houseplan-card.ts', + find: ' this._clickDevice(ev, d);', + replace: ' if (d.primary) this._openMoreInfo(d.primary);', + }], + }, ]; // --- механика --------------------------------------------------------------- diff --git a/src/device-face.ts b/src/device-face.ts index 647b69d3..ec815434 100644 --- a/src/device-face.ts +++ b/src/device-face.ts @@ -18,6 +18,13 @@ export interface LegacySupplementalMetric { suffix: string; } +/** HA theme state is authoritative when available; CSS color-scheme remains the fallback. */ +export function deviceThemeClass(hass: any): string { + return typeof hass?.themes?.darkMode === 'boolean' + ? hass.themes.darkMode ? 'theme-dark' : 'theme-light' + : ''; +} + /** * Issue #90 replaced the automatic temperature/humidity satellites with one * configurable value badge. Untouched legacy markers, however, could show @@ -62,6 +69,16 @@ export function lqiClassName(badge: ResolvedValueBadge | null | undefined): stri return `lqi${badge?.position === 'bottom' ? ' below-value-badge' : ''}`; } +/** Deterministic fit without DOM measurement or a per-marker ResizeObserver. */ +export function deviceTextScale(text: string): number { + const units = [...String(text)].reduce((sum, char) => { + if (/\s/.test(char)) return sum + 0.35; + return sum + (char.codePointAt(0)! > 0xff ? 1 : 0.62); + }, 0); + if (units <= 8) return 0.45; + return Math.max(0.25, Math.round((0.45 * 8 / units) * 1000) / 1000); +} + /** * Render only the face contents. The owning surface keeps coordinates, * pointer handlers, tooltip and selection semantics; this fragment is shared. @@ -73,6 +90,15 @@ export function renderDeviceFace( const pulse = presentation.pulse; const gen2 = pulse.generation % 2 === 0; const legacyMetrics = legacySupplementalMetrics(presentation); + const badge = presentation.valueBadge; + const shellPosition = badge?.position || 'right'; + const hasSections = !!badge || legacyMetrics.length > 0; + const shellClasses = [ + 'device-shell', + presentation.valueText != null ? 'text-shell' : '', + hasSections ? `with-values pos-${shellPosition}` : '', + legacyMetrics.length ? 'with-legacy' : '', + ].filter(Boolean).join(' '); return html` ${pulse.kind !== 'none' && pulse.reducedMotionIndicator !== 'dot' ? html`` : nothing} - ${presentation.valueText != null - ? html`${presentation.valueText}` - : html``} - ${presentation.valueBadge - ? html`` - : nothing} - ${legacyMetrics.map((metric) => html``)} + ${presentation.lqiText != null - ? html`${presentation.lqiText}` : nothing} `; diff --git a/src/device-presentation.ts b/src/device-presentation.ts index e809dc30..aae293b6 100644 --- a/src/device-presentation.ts +++ b/src/device-presentation.ts @@ -16,14 +16,16 @@ import { type DeviceActivity, type DeviceVisualState, type EntityVisualSample, } from './device-visual'; import { - hassValue, lightColorOf, lqiColor, normalizeDeviceDisplay, stateIcon, valueWithUnit, + hassValue, lightColorOf, normalizeDeviceDisplay, stateIcon, valueWithUnit, type DeviceDisplayMode, } from './logic'; import { resolveToggleIntent, toggleCoverEntity } from './device-toggle'; import type { DevItem } from './types'; import { safeStoredColor } from './color'; import { resolveDeviceValueBadge, type ResolvedValueBadge } from './device-value-badge'; -import { resolveDevicePulse, type ResolvedDevicePulse } from './device-pulse'; +import { + DEVICE_PULSE_DEFAULT_SCALE, resolveDevicePulse, type ResolvedDevicePulse, +} from './device-pulse'; import { isManualVirtualLightMarker } from './virtual-light-state'; export type PresentationSourceKind = @@ -36,6 +38,35 @@ export type PresentationSourceRole = export type ValueFallbackReason = | 'value_no_state' | 'value_ambiguous_sources' | 'value_non_scalar' | 'value_virtual'; +export type DeviceLockState = 'locked' | 'unlocked' | null; +export type DeviceLqiBand = 'low' | 'mid' | 'high'; +export type DeviceA11yState = + | 'neutral' | 'working' | 'open' | 'locked' | 'unlocked' | 'alarm' | 'unavailable'; + +export function markerLqiBand(lqi: number): DeviceLqiBand { + if (lqi <= 40) return 'low'; + if (lqi < 180) return 'mid'; + return 'high'; +} + +/** Marker numbers are categorical. Room fill deliberately keeps logic.ts's gradient. */ +export function markerLqiColor(lqi: number): string { + const band = markerLqiBand(lqi); + return band === 'low' ? '#F0410C' : band === 'mid' ? '#F0A00C' : '#1DC21D'; +} + +export function deviceA11yState(presentation: Pick< + ResolvedDevicePresentation, 'visual' | 'lockState' | 'display' +>): DeviceA11yState { + if (presentation.display === 'static_icon') return 'neutral'; + if (presentation.visual.status === 'alarm') return 'alarm'; + if (presentation.visual.availability === 'unavailable') return 'unavailable'; + if (presentation.lockState) return presentation.lockState; + if (presentation.visual.status === 'working') return 'working'; + if (presentation.visual.status === 'open') return 'open'; + return 'neutral'; +} + export type PresentationReason = | 'neutral' | 'working' @@ -123,6 +154,7 @@ export interface ResolvedDevicePresentation { sourceSignature: string; visual: DeviceVisualState; + lockState: DeviceLockState; display: DeviceDisplayMode; icon: string; valueText: string | null; @@ -138,6 +170,7 @@ export interface ResolvedDevicePresentation { valueBadge: ResolvedValueBadge | null; lqiText: string | null; lqiColor: string | null; + lqiBand: DeviceLqiBand | null; lightColor: string | null; scale: number; angle: number; @@ -522,7 +555,7 @@ function explanationReason( export function presentationClasses(presentation: Pick< ResolvedDevicePresentation, - 'visual' | 'activity' | 'display' | 'effectiveHidden' | 'activityGeneration' | 'pulse' + 'visual' | 'lockState' | 'activity' | 'display' | 'effectiveHidden' | 'activityGeneration' | 'pulse' >): string[] { if (presentation.effectiveHidden) return []; if (presentation.display === 'static_icon') return ['static-icon']; @@ -532,6 +565,7 @@ export function presentationClasses(presentation: Pick< else if (visual.availability === 'unavailable') classes.push('unavail'); else if (visual.status === 'working') classes.push('on'); else if (visual.status === 'open') classes.push('open'); + if (presentation.lockState) classes.push(`lock-${presentation.lockState}`); // Keep the semantic class names as styling/debug hooks during the beta; // they no longer select a separate renderer or animation implementation. if (presentation.pulse.reason !== 'none' && presentation.pulse.reason !== 'alarm') { @@ -563,6 +597,12 @@ export function resolveDevicePresentation( const userHidden = d.userHidden === true || d.marker?.hidden === true; const effectiveHidden = haDisabled || (userHidden && !options.designPreview); const combined = combineVisualSamples(sources.samples); + const lockSource = sources.visualSources.find((source) => source.eid.startsWith('lock.')); + const lockState: DeviceLockState = lockSource + ? ['unlocked', 'open'].includes(lockSource.state.toLowerCase()) + ? 'unlocked' + : lockSource.state.toLowerCase() === 'locked' ? 'locked' : null + : null; let visual = combined; if (effectiveHidden) visual = { availability: 'available', status: 'neutral', activity: 'none' }; else if (staticIcon) visual = { availability: 'available', status: 'neutral', activity: 'none' }; @@ -626,7 +666,8 @@ export function resolveDevicePresentation( : null; const scale = Number(d.marker?.size) > 0 ? Number(d.marker!.size) : 1; const angle = Number(d.marker?.angle) || 0; - const rippleScale = Number(d.marker?.ripple_size) > 0 ? Number(d.marker!.ripple_size) : 3; + const rippleScale = Number(d.marker?.ripple_size) > 0 + ? Number(d.marker!.ripple_size) : DEVICE_PULSE_DEFAULT_SCALE; const configuredRippleColor = safeStoredColor(d.marker?.ripple_color, null); const rippleColor = staticIcon ? null : configuredRippleColor || lightColor || null; const pulse = resolveDevicePulse({ @@ -673,6 +714,7 @@ export function resolveDevicePresentation( valueSource: value.source, sourceSignature, visual, + lockState, display, icon, valueText, @@ -686,7 +728,8 @@ export function resolveDevicePresentation( humText: hum == null ? null : String(hum), valueBadge, lqiText: lqi == null || valueBadge?.isLqi ? null : String(lqi), - lqiColor: lqi == null ? null : lqiColor(lqi), + lqiColor: lqi == null ? null : markerLqiColor(lqi), + lqiBand: lqi == null ? null : markerLqiBand(lqi), lightColor, scale, angle, diff --git a/src/device-pulse.ts b/src/device-pulse.ts index 295a3ea8..f576313c 100644 --- a/src/device-pulse.ts +++ b/src/device-pulse.ts @@ -31,8 +31,24 @@ export interface ResolveDevicePulseOptions { diameterScale?: number; } -const ALARM_COLOR = '#f25a4a'; -const ALARM_DIAMETER_SCALE = 3; +export const DEVICE_ACTIVITY_BLUE = '#0C82F0'; +export const DEVICE_ACTIVITY_AMBER = '#F0A00C'; +export const DEVICE_ACTIVITY_GREEN = '#1DC21D'; +export const DEVICE_ALERT_RED = '#F0410C'; +export const DEVICE_PULSE_DEFAULT_SCALE = 1.5; + +const ALARM_DIAMETER_SCALE = DEVICE_PULSE_DEFAULT_SCALE; + +function semanticPulseColor( + visual: DeviceVisualState, + semanticActivity: DeviceActivity, +): string { + if (semanticActivity === 'presence') return DEVICE_ACTIVITY_GREEN; + if (semanticActivity === 'running' || visual.status === 'working' || visual.status === 'open') { + return DEVICE_ACTIVITY_AMBER; + } + return DEVICE_ACTIVITY_BLUE; +} function noPulse( generation: number, @@ -60,8 +76,8 @@ export function resolveDevicePulse(options: ResolveDevicePulseOptions): Resolved } = options; const generation = Math.max(1, Math.trunc(options.shortGeneration || 1)); const diameterScale = Number.isFinite(options.diameterScale) - ? Math.max(1, Number(options.diameterScale)) : 3; - const color = options.color || null; + ? Math.max(1, Number(options.diameterScale)) : DEVICE_PULSE_DEFAULT_SCALE; + const color = options.color || semanticPulseColor(visual, semanticActivity); if (effectiveHidden || bindingUnavailable || visual.availability === 'unavailable' || display === 'static_icon') { return noPulse(generation, color, diameterScale); @@ -72,7 +88,7 @@ export function resolveDevicePulse(options: ResolveDevicePulseOptions): Resolved if (visual.status === 'alarm') { return { kind: 'alarm', reason: 'alarm', generation, expiresAt: null, - color: ALARM_COLOR, diameterScale: ALARM_DIAMETER_SCALE, animated: !reducedMotion, + color: DEVICE_ALERT_RED, diameterScale: ALARM_DIAMETER_SCALE, animated: !reducedMotion, reducedMotionIndicator: 'none', }; } @@ -83,7 +99,7 @@ export function resolveDevicePulse(options: ResolveDevicePulseOptions): Resolved if (options.shortReason && expiresAt != null && expiresAt > now) { return { kind: 'short', reason: options.shortReason, generation, expiresAt, - color: reducedMotion ? null : color, + color, diameterScale: reducedMotion ? 1 : diameterScale, animated: !reducedMotion, reducedMotionIndicator: reducedMotion ? 'dot' : 'none', @@ -95,7 +111,7 @@ export function resolveDevicePulse(options: ResolveDevicePulseOptions): Resolved || semanticActivity === 'running') { return { kind: 'continuous', reason: semanticActivity, generation, expiresAt: null, - color: reducedMotion ? null : color, + color, diameterScale: reducedMotion ? 1 : diameterScale, animated: !reducedMotion, reducedMotionIndicator: reducedMotion ? 'dot' : 'none', @@ -117,7 +133,7 @@ export function withDemoPulse( reason: kind === 'short' ? 'event' : 'running', generation: Math.max(1, Math.trunc(generation)), expiresAt: kind === 'short' ? expiresAt : null, - color: reducedMotion ? null : source.color, + color: source.color, diameterScale: reducedMotion ? 1 : source.diameterScale, animated: !reducedMotion, reducedMotionIndicator: reducedMotion ? 'dot' : 'none', diff --git a/src/houseplan-card.ts b/src/houseplan-card.ts index 1094b155..6a77de20 100755 --- a/src/houseplan-card.ts +++ b/src/houseplan-card.ts @@ -196,7 +196,7 @@ import { type DeviceActivity, type DeviceVisualState, type EntityVisualSample, } from './device-visual'; import { - activitySourceSignature, presentationClasses, resolveDevicePresentation, + activitySourceSignature, deviceA11yState, presentationClasses, resolveDevicePresentation, resolvePresentationSources, type ResolvedDevicePresentation, } from './device-presentation'; import { @@ -211,7 +211,7 @@ import { createRenderDeviceSnapshot, presentationSnapshotKey, renderDeviceSnapshotPositions, type RenderDeviceSnapshot, } from './render-device-snapshot'; -import { deviceFaceStyle, renderDeviceFace } from './device-face'; +import { deviceFaceStyle, deviceThemeClass, renderDeviceFace } from './device-face'; import { ModeTransitionController, viewportFromViewBox, type HouseplanMode, type ModeTransitionState, type ModeVisualState, type ModeViewBox, @@ -1527,7 +1527,7 @@ class HouseplanCard extends LitElement { autoIcon: string; // the icon the rules would give — picker placeholder display: DeviceDisplayMode; rippleColor: string; // '' = accent - rippleSize: number; // in icon diameters + rippleSize: number; // in icon diameters; package default 1.5 size: number; // icon size multiplier angle: number; // icon rotation, degrees /** UI projection. A legacy persisted `cover` is shown as `toggle`. */ @@ -4528,7 +4528,7 @@ class HouseplanCard extends LitElement { else this._infoCard = d; } - private _clickDevice(ev: MouseEvent, d: DevItem): void { + private _clickDevice(ev: Event, d: DevItem): void { ev.stopPropagation(); if (this._drag?.moved || this._suppressClick || this._holdFired) return; if (this._mode === 'plan') return; @@ -4644,6 +4644,13 @@ class HouseplanCard extends LitElement { this._infoCard = actionDevice; } + private _keyDevice(ev: KeyboardEvent, d: DevItem): void { + if (ev.key !== 'Enter' && ev.key !== ' ') return; + if (this._mode !== 'view' && this._mode !== 'devices') return; + ev.preventDefault(); + this._clickDevice(ev, d); + } + /** 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); @@ -12446,7 +12453,7 @@ class HouseplanCard extends LitElement { autoIcon: d.icon || '', display: normalizeDeviceDisplay(d.marker?.display), rippleColor: safeStoredColor(d.marker?.ripple_color, ''), - rippleSize: Number(d.marker?.ripple_size) > 0 ? Number(d.marker!.ripple_size) : 3, + rippleSize: Number(d.marker?.ripple_size) > 0 ? Number(d.marker!.ripple_size) : 1.5, size: Number(d.marker?.size) > 0 ? Number(d.marker!.size) : 1, angle: Number(d.marker?.angle) || 0, tapAction: projectedTapAction(d.marker?.tap_action, d.primary?.split('.')[0]), @@ -12508,7 +12515,7 @@ class HouseplanCard extends LitElement { this._markerDialog = { name: '', binding: 'virtual', bindingMode: 'virtual', bindingOpen: false, showEntities: false, bindingFilter: '', icon: '', autoIcon: '', - display: 'badge', rippleColor: '', rippleSize: 3, size: 1, angle: 0, + display: 'badge', rippleColor: '', rippleSize: 1.5, size: 1, angle: 0, tapAction: 'info', tapActionTouched: false, originalHasTapAction: false, originalTapAction: undefined, tapHintAnnouncement: '', toggleEntity: '', toggleEntityTouched: false, @@ -12997,7 +13004,7 @@ class HouseplanCard extends LitElement { icon: dlg.icon || null, display: dlg.display !== 'badge' ? dlg.display : null, ripple_color: dlg.display === 'icon_ripple' && dlg.rippleColor ? dlg.rippleColor : null, - ripple_size: dlg.display === 'icon_ripple' && dlg.rippleSize !== 3 ? dlg.rippleSize : null, + ripple_size: dlg.display === 'icon_ripple' && dlg.rippleSize !== 1.5 ? dlg.rippleSize : null, size: dlg.size !== 1 ? dlg.size : null, angle: dlg.angle ? dlg.angle : null, ...this._markerTapActionFields(dlg), @@ -16740,11 +16747,20 @@ class HouseplanCard extends LitElement { const ghostLabel = presentation.haDisabled ? this._t((`marker.ha_disabled_${disabledReason}`) as any) : d.userHidden ? this._t('marker.hidden_ghost') : d.name; + const a11yState = deviceA11yState(presentation); + const interactive = this._mode === 'view' || this._mode === 'devices'; const deviceAriaLabel = [ ghostLabel, + !presentation.haDisabled + ? this._t((`marker.state_a11y_${a11yState}`) as I18nKey) : '', presentation.pulse.kind !== 'none' ? this._t((`marker.pulse_a11y_${presentation.pulse.reason}`) as I18nKey) : '', + presentation.valueFullText || presentation.valueText || '', valueBadgeTitle(presentation.valueBadge), + presentation.lqiText != null && presentation.lqiBand + ? this._t((`marker.lqi_a11y_${presentation.lqiBand}`) as I18nKey, { + value: presentation.lqiText, + }) : '', ].filter(Boolean).join(', '); const metrics = [ d.model, @@ -16762,10 +16778,15 @@ class HouseplanCard extends LitElement { data-area=${d.area || nothing} data-binding-status=${presentation.haDisabled ? 'ha-disabled' : d.bindingStatus?.kind || 'active'} data-disabled-reason=${disabledReason ? disabledReason.replace('_', '-') : nothing} + data-state=${a11yState} + data-lqi-band=${presentation.lqiText != null ? presentation.lqiBand || nothing : nothing} + role=${interactive ? 'button' : nothing} + tabindex=${interactive ? '0' : nothing} aria-label=${deviceAriaLabel} - class="dev ${presentation.classes.join(' ')} ${this._selId === d.id ? 'sel' : ''} ${d.virtual ? 'virtual' : ''} ${d.hidden ? 'ghost' : ''} ${presentation.haDisabled ? 'ha-disabled' : ''} ${presentation.valueText != null ? 'valonly' : ''}" + class="dev ${deviceThemeClass(this._renderPlanHass)} ${presentation.classes.join(' ')} ${this._selId === d.id ? 'sel' : ''} ${d.virtual ? 'virtual' : ''} ${d.hidden ? 'ghost' : ''} ${presentation.haDisabled ? 'ha-disabled' : ''} ${presentation.valueText != null ? 'valonly' : ''}" style="${st.join(';')}" @click=${(e: MouseEvent) => this._clickDevice(e, d)} + @keydown=${(e: KeyboardEvent) => this._keyDevice(e, d)} @contextmenu=${(e: MouseEvent) => this._ctxDevice(e, d)} @mousemove=${(e: MouseEvent) => this._showTip(e, d.name, presentation.haDisabled ? ghostLabel : metrics)} @@ -18445,7 +18466,7 @@ class HouseplanCard extends LitElement { icon: d.icon || null, display: d.display !== 'badge' ? d.display : null, ripple_color: d.display === 'icon_ripple' && d.rippleColor ? d.rippleColor : null, - ripple_size: d.display === 'icon_ripple' && d.rippleSize !== 3 ? d.rippleSize : null, + ripple_size: d.display === 'icon_ripple' && d.rippleSize !== 1.5 ? d.rippleSize : null, size: d.size !== 1 ? d.size : null, angle: d.angle || null, ...this._markerTapActionFields(d), @@ -19416,7 +19437,7 @@ class HouseplanCard extends LitElement {

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�+gGZ|5wi{Pt)|xqbvb(4$JAjJn}yI#LuKPT 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 SUiRQu5TwNA#VS4<2K+w;byPh7 literal 62185 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�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 diff --git a/docs/images/06-device-display-preview.png b/docs/images/06-device-display-preview.png index 5d53977d313e2e9ade9989cbe066431d57fd7859..43b13d828fd30e2d437ada858144185768543b2e 100644 GIT binary patch delta 252590 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%0ACW0~_d4q`@)^E7`tnV{x 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 Mz+Ask7ZLZr0ASiEIsgCw delta 242506 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≷sjO28O1@Ey}= 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

${this._t('marker.ripple_size')} - ${this._rangeInput(2, 8, 0.5, d.rippleSize, (n) => (this._markerDialog = { ...d, rippleSize: n }))} + ${this._rangeInput(1, 8, 0.5, d.rippleSize, (n) => (this._markerDialog = { ...d, rippleSize: n }))} ×${d.rippleSize}

${this._t('marker.activity_alarm_note')}

` diff --git a/src/hp-device-preview.ts b/src/hp-device-preview.ts index 0ea04e07..a29260ee 100644 --- a/src/hp-device-preview.ts +++ b/src/hp-device-preview.ts @@ -1,7 +1,7 @@ /** Live, read-only device display preview used by the marker editor. */ import { LitElement, css, html, nothing, type PropertyValues, type TemplateResult } from 'lit'; import { cardStyles } from './styles'; -import { deviceFaceStyle, renderDeviceFace } from './device-face'; +import { deviceFaceStyle, deviceThemeClass, renderDeviceFace } from './device-face'; import { type PresentationReason, type ResolvedDevicePresentation, @@ -231,7 +231,7 @@ class HpDevicePreview extends LitElement { fit < 1 ? `transform:scale(${fit})` : '', ].filter(Boolean).join(';'); const rootClasses = [ - 'dev', ...shown.classes, + 'dev', deviceThemeClass(this.hass), ...shown.classes, shown.binding === 'virtual' ? 'virtual' : '', shown.haDisabled ? 'ghost ha-disabled' : '', shown.valueText != null ? 'valonly' : '', @@ -248,6 +248,9 @@ class HpDevicePreview extends LitElement { result, actual.valueFullText || '', valueBadgeTitle(actual.valueBadge), + actual.lqiText != null && actual.lqiBand + ? this._t((`marker.lqi_a11y_${actual.lqiBand}`) as any, { value: actual.lqiText }) + : '', ].filter(Boolean).join('. '); return html`
diff --git a/src/i18n/en.json b/src/i18n/en.json index 34ad5afd..687362cc 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -176,7 +176,7 @@ "marker.display_hint_icon": "The icon and dynamic plate show device state without the ordinary activity pulse. Red alarms remain visible.", "marker.display_hint_icon_ripple": "The icon, dynamic plate and pulse show a short pulse for events and a continuous pulse for work, motion or presence. Red alarms have separate priority.", "marker.display_hint_value": "One unambiguous Home Assistant value replaces the icon while the plate continues to show state. Red alarms remain visible.", - "marker.display_hint_static_icon": "The black plate and icon always stay the same. State, activity, unavailability and alarms do not change the face.", + "marker.display_hint_static_icon": "The theme-aware shell and icon always stay the same. State, activity, unavailability and alarms do not change the face.", "marker.static_alarm_warning": "This device can report alarms. Static display hides the marker's visual alarm indication.", "marker.preview.title": "Display preview", "marker.preview.actual": "Now", @@ -235,6 +235,16 @@ "marker.pulse_a11y_presence": "Presence detected", "marker.pulse_a11y_transition": "Changing state", "marker.pulse_a11y_running": "Working", + "marker.state_a11y_neutral": "Default state", + "marker.state_a11y_working": "Working", + "marker.state_a11y_open": "Open", + "marker.state_a11y_locked": "Locked", + "marker.state_a11y_unlocked": "Unlocked", + "marker.state_a11y_alarm": "Alarm", + "marker.state_a11y_unavailable": "Unavailable", + "marker.lqi_a11y_low": "LQI {value}, low signal", + "marker.lqi_a11y_mid": "LQI {value}, medium signal", + "marker.lqi_a11y_high": "LQI {value}, high signal", "marker.size_label": "Icon size / rotation", "marker.angle_label": "Rotate", "marker.model_label": "Model", diff --git a/src/i18n/ru.json b/src/i18n/ru.json index ef9fda5f..308f5786 100644 --- a/src/i18n/ru.json +++ b/src/i18n/ru.json @@ -176,7 +176,7 @@ "marker.display_hint_icon": "Значок и динамическая подложка показывают состояние устройства без обычной пульсации активности. Красная тревога сохраняется.", "marker.display_hint_icon_ripple": "Значок, динамическая подложка и пульсация: короткая — для событий, постоянная — для работы, движения или присутствия. Красная тревога имеет отдельный приоритет.", "marker.display_hint_value": "Значок заменяется одним однозначным значением Home Assistant; подложка продолжает показывать состояние. Красная тревога сохраняется.", - "marker.display_hint_static_icon": "Всегда одинаковые чёрная подложка и значок. Состояния, активность, недоступность и тревоги не меняют отображение.", + "marker.display_hint_static_icon": "Подложка в цветах темы и значок всегда остаются одинаковыми. Состояния, активность, недоступность и тревоги не меняют отображение.", "marker.static_alarm_warning": "Это устройство может сообщать о тревогах. Статичный режим скрывает визуальную тревогу маркера.", "marker.preview.title": "Предпросмотр отображения", "marker.preview.actual": "Сейчас", @@ -235,6 +235,16 @@ "marker.pulse_a11y_presence": "Обнаружено присутствие", "marker.pulse_a11y_transition": "Изменение состояния", "marker.pulse_a11y_running": "Работает", + "marker.state_a11y_neutral": "Обычное состояние", + "marker.state_a11y_working": "Работает", + "marker.state_a11y_open": "Открыто", + "marker.state_a11y_locked": "Заблокировано", + "marker.state_a11y_unlocked": "Разблокировано", + "marker.state_a11y_alarm": "Тревога", + "marker.state_a11y_unavailable": "Недоступно", + "marker.lqi_a11y_low": "LQI {value}, слабый сигнал", + "marker.lqi_a11y_mid": "LQI {value}, средний сигнал", + "marker.lqi_a11y_high": "LQI {value}, сильный сигнал", "marker.size_label": "Размер / поворот значка", "marker.angle_label": "Поворот", "marker.model_label": "Модель", diff --git a/src/space-render.ts b/src/space-render.ts index f5f37a74..08fa1a3e 100644 --- a/src/space-render.ts +++ b/src/space-render.ts @@ -33,10 +33,11 @@ import { } from './render/opening-symbol'; import { activeRegistryHass, fullRegistryHass, type HaRegistrySnapshot } from './ha-binding-status'; import { - resolveDevicePresentation, type PresentationActivityRuntime, type ResolvedDevicePresentation, + deviceA11yState, resolveDevicePresentation, + type PresentationActivityRuntime, type ResolvedDevicePresentation, } from './device-presentation'; import { presentationSnapshotKey } from './render-device-snapshot'; -import { deviceFaceStyle, renderDeviceFace } from './device-face'; +import { deviceFaceStyle, deviceThemeClass, renderDeviceFace } from './device-face'; import { valueBadgeTitle } from './device-value-badge'; import { contentFingerprint } from './visual-continuity'; import type { VirtualLightSnapshot } from './virtual-light-state'; @@ -361,15 +362,24 @@ export function renderSpaceStatic(o: StaticRenderOpts): TemplateResult | null { reducedMotion: o.reducedMotion, }); const st = [`left:${left}%`, `top:${top}%`, ...deviceFaceStyle(presentation)]; + const a11yState = deviceA11yState(presentation); const deviceAriaLabel = [ d.name, + t(o.lang, (`marker.state_a11y_${a11yState}`) as any), presentation.pulse.kind !== 'none' ? t(o.lang, (`marker.pulse_a11y_${presentation.pulse.reason}`) as any) : '', + presentation.valueFullText || presentation.valueText || '', valueBadgeTitle(presentation.valueBadge), + presentation.lqiText != null && presentation.lqiBand + ? t(o.lang, (`marker.lqi_a11y_${presentation.lqiBand}`) as any, { + value: presentation.lqiText, + }) : '', ].filter(Boolean).join(', '); - return html`