From 73ecfbd1d74a6d194f62e8e83766294018f8eb81 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 31 Aug 2026 07:57:02 +0300 Subject: [PATCH] build: refresh bundle trees and the doc capture for #400 User-Visible: no Issue: #400 --- .../houseplan/frontend/houseplan-assets.json | 110 +++---- ...-4jTd19VU.js => backdrop-pick-BpYD69bz.js} | 2 +- .../frontend/houseplan-assets/de-DgYg-Z6S.js | 2 +- .../houseplan-assets/editor-3Us45UEr.js | 2 +- .../frontend/houseplan-assets/fr-DraSp50q.js | 2 +- ...DVUSPdhz.js => houseplan-card-BSOQusOQ.js} | 12 +- ...s => houseplan-editor-runtime-Bo31fJpP.js} | 270 +++++++++--------- ... houseplan-onboarding-runtime-C8XVDW46.js} | 6 +- .../houseplan/frontend/houseplan-card.js | 2 +- dist/houseplan-assets.json | 110 +++---- ...-4jTd19VU.js => backdrop-pick-BpYD69bz.js} | 2 +- .../houseplan-assets/de-DgYg-Z6S.js | 2 +- .../houseplan-assets/editor-3Us45UEr.js | 2 +- .../houseplan-assets/fr-DraSp50q.js | 2 +- ...DVUSPdhz.js => houseplan-card-BSOQusOQ.js} | 12 +- ...s => houseplan-editor-runtime-Bo31fJpP.js} | 270 +++++++++--------- ... houseplan-onboarding-runtime-C8XVDW46.js} | 6 +- dist/houseplan-card.js | 2 +- docs/images/01-view-desktop.png | Bin 202542 -> 202540 bytes docs/images/09-device-info.png | Bin 144809 -> 144788 bytes docs/images/screenshots.json | 26 +- 21 files changed, 421 insertions(+), 421 deletions(-) rename custom_components/houseplan/frontend/houseplan-assets/{backdrop-pick-4jTd19VU.js => backdrop-pick-BpYD69bz.js} (99%) rename dist/houseplan-assets/de-BJMOdOYq.js => custom_components/houseplan/frontend/houseplan-assets/de-DgYg-Z6S.js (99%) rename dist/houseplan-assets/editor-BwnPil0h.js => custom_components/houseplan/frontend/houseplan-assets/editor-3Us45UEr.js (94%) rename dist/houseplan-assets/fr-Dhu6XNE4.js => custom_components/houseplan/frontend/houseplan-assets/fr-DraSp50q.js (99%) rename custom_components/houseplan/frontend/houseplan-assets/{houseplan-card-DVUSPdhz.js => houseplan-card-BSOQusOQ.js} (99%) rename custom_components/houseplan/frontend/houseplan-assets/{houseplan-editor-runtime-DnzMcW-_.js => houseplan-editor-runtime-Bo31fJpP.js} (87%) rename custom_components/houseplan/frontend/houseplan-assets/{houseplan-onboarding-runtime-kKe0zYd7.js => houseplan-onboarding-runtime-C8XVDW46.js} (97%) rename dist/houseplan-assets/{backdrop-pick-4jTd19VU.js => backdrop-pick-BpYD69bz.js} (99%) rename custom_components/houseplan/frontend/houseplan-assets/de-BJMOdOYq.js => dist/houseplan-assets/de-DgYg-Z6S.js (99%) rename custom_components/houseplan/frontend/houseplan-assets/editor-BwnPil0h.js => dist/houseplan-assets/editor-3Us45UEr.js (94%) rename custom_components/houseplan/frontend/houseplan-assets/fr-Dhu6XNE4.js => dist/houseplan-assets/fr-DraSp50q.js (99%) rename dist/houseplan-assets/{houseplan-card-DVUSPdhz.js => houseplan-card-BSOQusOQ.js} (99%) rename dist/houseplan-assets/{houseplan-editor-runtime-DnzMcW-_.js => houseplan-editor-runtime-Bo31fJpP.js} (87%) rename dist/houseplan-assets/{houseplan-onboarding-runtime-kKe0zYd7.js => houseplan-onboarding-runtime-C8XVDW46.js} (97%) diff --git a/custom_components/houseplan/frontend/houseplan-assets.json b/custom_components/houseplan/frontend/houseplan-assets.json index b195470c..c689609e 100644 --- a/custom_components/houseplan/frontend/houseplan-assets.json +++ b/custom_components/houseplan/frontend/houseplan-assets.json @@ -1,125 +1,125 @@ { "schema": 1, - "fingerprint": "e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b", + "fingerprint": "8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804", "entry": "houseplan-card.js", "initialViewFiles": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js", + "houseplan-assets/houseplan-card-BSOQusOQ.js", "houseplan-card.js" ], - "initialViewGzipBytes": 285431, + "initialViewGzipBytes": 285425, "lazyFiles": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/de-BJMOdOYq.js", - "houseplan-assets/editor-BwnPil0h.js", - "houseplan-assets/fr-Dhu6XNE4.js", - "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js", - "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/de-DgYg-Z6S.js", + "houseplan-assets/editor-3Us45UEr.js", + "houseplan-assets/fr-DraSp50q.js", + "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js", + "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js" ], - "lazyGzipBytes": 199614, + "lazyGzipBytes": 199603, "lazyEditorFiles": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/editor-BwnPil0h.js", - "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/editor-3Us45UEr.js", + "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js" ], - "lazyEditorGzipBytes": 144471, + "lazyEditorGzipBytes": 144465, "lazyOnboardingFiles": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js" ], - "lazyOnboardingGzipBytes": 14031, + "lazyOnboardingGzipBytes": 14028, "lazyLocaleFiles": [ - "houseplan-assets/de-BJMOdOYq.js", - "houseplan-assets/fr-Dhu6XNE4.js" + "houseplan-assets/de-DgYg-Z6S.js", + "houseplan-assets/fr-DraSp50q.js" ], - "lazyLocaleGzipBytes": 48183, + "lazyLocaleGzipBytes": 48179, "files": [ { - "path": "houseplan-assets/backdrop-pick-4jTd19VU.js", - "sha256": "cf1b34643097c81af7b80fa3c7a39fd6a11f95db277d3780cceaad54a5d185f7", + "path": "houseplan-assets/backdrop-pick-BpYD69bz.js", + "sha256": "741e88fc0a470db685148c7d9488909cababc99292c22faf9307d43d02aff991", "rawBytes": 20636, - "gzipBytes": 7071, + "gzipBytes": 7069, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/de-BJMOdOYq.js", - "sha256": "92b491e7e86a6c9d94507eb55e696778b6ef774b6d7b7e4df2cadd5a0b853a22", + "path": "houseplan-assets/de-DgYg-Z6S.js", + "sha256": "93c2056a47d9aaff3fb69917fd2ad615b81f7f64478d167146e79d4f3f862b1e", "rawBytes": 81096, - "gzipBytes": 24345, + "gzipBytes": 24343, "isEntry": false, "imports": [], "dynamicImports": [] }, { - "path": "houseplan-assets/editor-BwnPil0h.js", - "sha256": "be5978938fd4a6ddb6e65184408a195efeaca504f946d6e72706ae3d4f7238b6", + "path": "houseplan-assets/editor-3Us45UEr.js", + "sha256": "61a70b5482d1b98f6fbf057ca137d8ce6779dc57d6b2fd0e025ff1a0c7fb614a", "rawBytes": 3826, "gzipBytes": 1582, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/fr-Dhu6XNE4.js", - "sha256": "4b31986f50d2d05b0702b37cefb3b261ea940f2713d8ab4aa429a20eaf166ba3", + "path": "houseplan-assets/fr-DraSp50q.js", + "sha256": "c1a8ec066046e89310e70b413d201520fc82e545e5685b23996f82f1dab4bab4", "rawBytes": 83283, - "gzipBytes": 23838, + "gzipBytes": 23836, "isEntry": false, "imports": [], "dynamicImports": [] }, { - "path": "houseplan-assets/houseplan-card-DVUSPdhz.js", - "sha256": "921c0ed8a903beb23f3d39e60f495622f49a1b911e13b88f2bee6125796e221a", + "path": "houseplan-assets/houseplan-card-BSOQusOQ.js", + "sha256": "bf61bf5c24667b2fd8129db00fc7bcbdaff9039e4efb2b5efd94867a21d1fc2c", "rawBytes": 1011848, - "gzipBytes": 284634, + "gzipBytes": 284629, "isEntry": false, "imports": [], "dynamicImports": [ - "houseplan-assets/de-BJMOdOYq.js", - "houseplan-assets/editor-BwnPil0h.js", - "houseplan-assets/fr-Dhu6XNE4.js", - "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js", - "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js" + "houseplan-assets/de-DgYg-Z6S.js", + "houseplan-assets/editor-3Us45UEr.js", + "houseplan-assets/fr-DraSp50q.js", + "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js", + "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js" ] }, { - "path": "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js", - "sha256": "1e7d3802a5e77c5bd4f296108da2a0a5313d60b321b64572002347fce8611da4", - "rawBytes": 526370, - "gzipBytes": 135818, + "path": "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js", + "sha256": "ab85408a7de0a81130019d6e5e3af17f2990bb5c4a97f4be049f52182362152a", + "rawBytes": 526402, + "gzipBytes": 135814, "isEntry": false, "imports": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js", - "sha256": "4a058e86ba77475bb574f20cc717d74c1d5c56629ab290ce4666446364209de0", + "path": "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js", + "sha256": "39c44c7bf2b547575348db8a5ae5f73286c6c670cc26c3305e6b0118ad0d28e8", "rawBytes": 28088, - "gzipBytes": 6960, + "gzipBytes": 6959, "isEntry": false, "imports": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { "path": "houseplan-card.js", - "sha256": "cf4f002a214b9634d59ad77695108b5393a67a003fd82c8c224a07fd537c3585", + "sha256": "7a9645ee2c6f9c05335343a8cd58edb08faea6ac3f6bbc9e058fee6168d04d92", "rawBytes": 1183, - "gzipBytes": 797, + "gzipBytes": 796, "isEntry": true, "imports": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] } diff --git a/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-4jTd19VU.js b/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-BpYD69bz.js similarity index 99% rename from custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-4jTd19VU.js rename to custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-BpYD69bz.js index b3b09f25..d85b4408 100644 --- a/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-4jTd19VU.js +++ b/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-BpYD69bz.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";import{d5 as e,c as t,A as i,a as o,b as n,d6 as s}from"./houseplan-card-DVUSPdhz.js";function r(e){const t=e.visualViewport;return t&&Number.isFinite(t.width)&&Number.isFinite(t.height)?{left:Number(t.offsetLeft)||0,top:Number(t.offsetTop)||0,width:Math.max(0,Number(t.width)||0),height:Math.max(0,Number(t.height)||0)}:{left:0,top:0,width:e.innerWidth,height:e.innerHeight}}function a(e,t,i,o=7,n=8){const s=i.left+n,r=i.top+n,a=Math.max(s,i.left+i.width-n),l=Math.max(r,i.top+i.height-n),h=Math.max(0,a-s),c=Math.max(0,l-r),d=Math.min(Math.max(0,t.width),h),u=Math.min(Math.max(0,t.height),c);let p=e.left;p+d>a&&(p=e.right-d),p=Math.min(Math.max(s,p),Math.max(s,a-d));const _=e.bottom+o,g=e.top-o-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(h),maxHeight:Math.round(c)}}class l{constructor(e,t,i){this.owner=e,this.name=t,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(e=!1){const t=this.window();return!e&&!!t&&function(e){const t=e.HTMLElement?.prototype;return"function"==typeof t?.showPopover&&"function"==typeof t?.hidePopover}(t)}get hasFallback(){return!!this.host}containsPath(e){return e.includes(this.owner)||!!this.host&&e.includes(this.host)}ownsActiveElement(){let e=this.owner.ownerDocument.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(!e||e!==this.owner&&!this.owner.shadowRoot?.contains(e)&&!this.root?.contains(e))}renderFallback(i,o){const n=this.ensureFallback();return n?(e(t`${i}`,n),n):null}surface(e,t){return t?this.owner.shadowRoot?.querySelector(e)||null:this.root?.querySelector(e)||null}destroy(){this.root&&e(i,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const e=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!e)return null;const t=this.owner.ownerDocument.createElement("div");return t.dataset.hpOverlay=this.name,t.style.display="contents",this.keydown&&t.addEventListener("keydown",this.keydown,!0),e.append(t),this.host=t,this.root=t.attachShadow({mode:"open"}),this.root}}let h=0;class c extends n{constructor(){super(...arguments),this.text="",this.ariaLabel="",this.pointerHover=!1,this._open=!1,this._openTimer=0,this._closeTimer=0,this._positionRaf=0,this._forceFallback=!1,this._hoverOwned=!1,this._overlayDispose=null,this._scrollDialog=null,this._descriptionId="hp-help-description-"+ ++h,this._surfacePointerEnter=()=>{const e=this._window();this._closeTimer&&e?.clearTimeout(this._closeTimer),this._closeTimer=0},this._surfacePointerLeave=()=>{this._scheduleClose()},this._outsidePointerDown=e=>{if(!this._open)return;const t=e.composedPath();this._floating.containsPath(t)||this._closeHelp(!1,"outside")},this._dialogScroll=e=>{const t=this._floating.containsPath(e.composedPath()),i=e.target,o=this._dialog(),n=i instanceof Node&&(i===o||i instanceof Element&&i.contains(this));var s;this._open&&(s=n,!t&&s)&&this._closeHelp(!1,"scroll")},this._keyDown=e=>{if(!this._open||e.defaultPrevented)return;if("Escape"===e.key)return e.preventDefault(),e.stopImmediatePropagation(),void this._closeHelp(this._floating.ownsActiveElement(),"escape");const t=this.renderRoot.querySelector(".trigger");if(!t||!e.composedPath().includes(t))return;const i=this._surface();if(!i||i.scrollHeight<=i.clientHeight)return;const o=Math.max(40,.8*i.clientHeight),n={ArrowDown:40,ArrowUp:-40,PageDown:o,PageUp:-o};if("Home"===e.key)i.scrollTop=0;else if("End"===e.key)i.scrollTop=i.scrollHeight;else{if(!(e.key in n))return;i.scrollBy({top:n[e.key],behavior:"auto"})}e.preventDefault(),e.stopImmediatePropagation()},this._floating=new l(this,"help",this._keyDown),this._queuePosition=()=>{if(!this._open||this._positionRaf)return;const e=this._window();e&&(this._positionRaf=e.requestAnimationFrame(()=>{this._positionRaf=0,this._position()||this._closeHelp()}))}}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._keyDown,!0)}willUpdate(){this.toggleAttribute("data-has-content",this._hasContent())}disconnectedCallback(){const e=this.ownerDocument.defaultView;this._unsubscribeOpenListeners(),this.removeEventListener("keydown",this._keyDown,!0),this._clearTimers(),this._positionRaf&&e?.cancelAnimationFrame(this._positionRaf),this._positionRaf=0,this._closeHelp(!1,"disconnect"),super.disconnectedCallback()}updated(e){if(e.has("pointerHover")&&!this.pointerHover){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._openTimer=0,this._hoverOwned&&this._closeHelp(!1,"outside")}this._hasContent()||!this._open?this._open&&e.has("text")&&(this._usesPopover()||this._renderFallback(),this._queuePosition()):this._closeHelp()}_window(){return this._floating.window()}_dialog(){return this._floating.dialog()}_usesPopover(){return this._floating.usesPopover(this._forceFallback)}_hasContent(){return e=this.text,t=this.ariaLabel,"string"==typeof e&&e.trim().length>0&&"string"==typeof t&&t.trim().length>0;var e,t}_clearTimers(){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._closeTimer&&e?.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=0}_scheduleOpen(){const e=this._window();this.pointerHover&&e&&!this._open&&!this._openTimer&&(this._closeTimer&&e.clearTimeout(this._closeTimer),this._closeTimer=0,this._openTimer=e.setTimeout(()=>{this._openTimer=0,this.isConnected&&(this._hoverOwned=!0,this._openHelp())},300))}_scheduleClose(){const e=this._window(),t=this.renderRoot.querySelector(".trigger");e&&!t?.matches(":focus-visible")&&(this._openTimer&&e.clearTimeout(this._openTimer),this._closeTimer&&e.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=e.setTimeout(()=>{this._closeTimer=0,this.isConnected&&this._closeHelp()},150))}_triggerPointerEnter(e){this.pointerHover&&"mouse"===e.pointerType&&this._scheduleOpen()}_triggerPointerLeave(e){"mouse"===e.pointerType&&this._scheduleClose()}_triggerFocus(){queueMicrotask(()=>{const e=this.renderRoot.querySelector(".trigger");e?.matches(":focus-visible")&&(this._hoverOwned=!1,this._openHelp())})}_triggerBlur(){this._scheduleClose()}_triggerClick(){this._open?this._closeHelp():(this._hoverOwned=!1,this._openHelp())}_subscribeOpenListeners(){this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("keydown",this._keyDown,!0);const e=this._window();e?.addEventListener("resize",this._queuePosition),e?.addEventListener("orientationchange",this._queuePosition),e?.visualViewport?.addEventListener("resize",this._queuePosition),e?.visualViewport?.addEventListener("scroll",this._queuePosition),this._scrollDialog=this._dialog(),this._scrollDialog?.addEventListener("scroll",this._dialogScroll,!0)}_unsubscribeOpenListeners(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("keydown",this._keyDown,!0);const e=this._window();e?.removeEventListener("resize",this._queuePosition),e?.removeEventListener("orientationchange",this._queuePosition),e?.visualViewport?.removeEventListener("resize",this._queuePosition),e?.visualViewport?.removeEventListener("scroll",this._queuePosition),this._scrollDialog?.removeEventListener("scroll",this._dialogScroll,!0),this._scrollDialog=null}async _openHelp(){!this._open&&this._hasContent()&&(this._clearTimers(),this._forceFallback=!1,this._open=!0,this._subscribeOpenListeners(),await this.updateComplete,this._open&&(this._usesPopover()||this._renderFallback(),this._position()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:e=>this._closeHelp("escape"===e&&this._floating.ownsActiveElement(),e)})||null:this._closeHelp()))}_closeHelp(e=!1,t="exclusive"){if(!this._open&&!this._floating.hasFallback)return;this._clearTimers();const i=this._overlayDispose;this._overlayDispose=null,i?.();const o=this.renderRoot.querySelector(".tooltip");if(o?.hidePopover)try{o.matches(":popover-open")&&o.hidePopover()}catch{}this._open=!1,this._hoverOwned=!1,this._unsubscribeOpenListeners(),this._floating.destroy(),e&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_tooltipTemplate(e){return t`
a&&(p=e.right-d),p=Math.min(Math.max(s,p),Math.max(s,a-d));const _=e.bottom+o,g=e.top-o-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(h),maxHeight:Math.round(c)}}class l{constructor(e,t,i){this.owner=e,this.name=t,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(e=!1){const t=this.window();return!e&&!!t&&function(e){const t=e.HTMLElement?.prototype;return"function"==typeof t?.showPopover&&"function"==typeof t?.hidePopover}(t)}get hasFallback(){return!!this.host}containsPath(e){return e.includes(this.owner)||!!this.host&&e.includes(this.host)}ownsActiveElement(){let e=this.owner.ownerDocument.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(!e||e!==this.owner&&!this.owner.shadowRoot?.contains(e)&&!this.root?.contains(e))}renderFallback(i,o){const n=this.ensureFallback();return n?(e(t`${i}`,n),n):null}surface(e,t){return t?this.owner.shadowRoot?.querySelector(e)||null:this.root?.querySelector(e)||null}destroy(){this.root&&e(i,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const e=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!e)return null;const t=this.owner.ownerDocument.createElement("div");return t.dataset.hpOverlay=this.name,t.style.display="contents",this.keydown&&t.addEventListener("keydown",this.keydown,!0),e.append(t),this.host=t,this.root=t.attachShadow({mode:"open"}),this.root}}let h=0;class c extends n{constructor(){super(...arguments),this.text="",this.ariaLabel="",this.pointerHover=!1,this._open=!1,this._openTimer=0,this._closeTimer=0,this._positionRaf=0,this._forceFallback=!1,this._hoverOwned=!1,this._overlayDispose=null,this._scrollDialog=null,this._descriptionId="hp-help-description-"+ ++h,this._surfacePointerEnter=()=>{const e=this._window();this._closeTimer&&e?.clearTimeout(this._closeTimer),this._closeTimer=0},this._surfacePointerLeave=()=>{this._scheduleClose()},this._outsidePointerDown=e=>{if(!this._open)return;const t=e.composedPath();this._floating.containsPath(t)||this._closeHelp(!1,"outside")},this._dialogScroll=e=>{const t=this._floating.containsPath(e.composedPath()),i=e.target,o=this._dialog(),n=i instanceof Node&&(i===o||i instanceof Element&&i.contains(this));var s;this._open&&(s=n,!t&&s)&&this._closeHelp(!1,"scroll")},this._keyDown=e=>{if(!this._open||e.defaultPrevented)return;if("Escape"===e.key)return e.preventDefault(),e.stopImmediatePropagation(),void this._closeHelp(this._floating.ownsActiveElement(),"escape");const t=this.renderRoot.querySelector(".trigger");if(!t||!e.composedPath().includes(t))return;const i=this._surface();if(!i||i.scrollHeight<=i.clientHeight)return;const o=Math.max(40,.8*i.clientHeight),n={ArrowDown:40,ArrowUp:-40,PageDown:o,PageUp:-o};if("Home"===e.key)i.scrollTop=0;else if("End"===e.key)i.scrollTop=i.scrollHeight;else{if(!(e.key in n))return;i.scrollBy({top:n[e.key],behavior:"auto"})}e.preventDefault(),e.stopImmediatePropagation()},this._floating=new l(this,"help",this._keyDown),this._queuePosition=()=>{if(!this._open||this._positionRaf)return;const e=this._window();e&&(this._positionRaf=e.requestAnimationFrame(()=>{this._positionRaf=0,this._position()||this._closeHelp()}))}}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._keyDown,!0)}willUpdate(){this.toggleAttribute("data-has-content",this._hasContent())}disconnectedCallback(){const e=this.ownerDocument.defaultView;this._unsubscribeOpenListeners(),this.removeEventListener("keydown",this._keyDown,!0),this._clearTimers(),this._positionRaf&&e?.cancelAnimationFrame(this._positionRaf),this._positionRaf=0,this._closeHelp(!1,"disconnect"),super.disconnectedCallback()}updated(e){if(e.has("pointerHover")&&!this.pointerHover){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._openTimer=0,this._hoverOwned&&this._closeHelp(!1,"outside")}this._hasContent()||!this._open?this._open&&e.has("text")&&(this._usesPopover()||this._renderFallback(),this._queuePosition()):this._closeHelp()}_window(){return this._floating.window()}_dialog(){return this._floating.dialog()}_usesPopover(){return this._floating.usesPopover(this._forceFallback)}_hasContent(){return e=this.text,t=this.ariaLabel,"string"==typeof e&&e.trim().length>0&&"string"==typeof t&&t.trim().length>0;var e,t}_clearTimers(){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._closeTimer&&e?.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=0}_scheduleOpen(){const e=this._window();this.pointerHover&&e&&!this._open&&!this._openTimer&&(this._closeTimer&&e.clearTimeout(this._closeTimer),this._closeTimer=0,this._openTimer=e.setTimeout(()=>{this._openTimer=0,this.isConnected&&(this._hoverOwned=!0,this._openHelp())},300))}_scheduleClose(){const e=this._window(),t=this.renderRoot.querySelector(".trigger");e&&!t?.matches(":focus-visible")&&(this._openTimer&&e.clearTimeout(this._openTimer),this._closeTimer&&e.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=e.setTimeout(()=>{this._closeTimer=0,this.isConnected&&this._closeHelp()},150))}_triggerPointerEnter(e){this.pointerHover&&"mouse"===e.pointerType&&this._scheduleOpen()}_triggerPointerLeave(e){"mouse"===e.pointerType&&this._scheduleClose()}_triggerFocus(){queueMicrotask(()=>{const e=this.renderRoot.querySelector(".trigger");e?.matches(":focus-visible")&&(this._hoverOwned=!1,this._openHelp())})}_triggerBlur(){this._scheduleClose()}_triggerClick(){this._open?this._closeHelp():(this._hoverOwned=!1,this._openHelp())}_subscribeOpenListeners(){this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("keydown",this._keyDown,!0);const e=this._window();e?.addEventListener("resize",this._queuePosition),e?.addEventListener("orientationchange",this._queuePosition),e?.visualViewport?.addEventListener("resize",this._queuePosition),e?.visualViewport?.addEventListener("scroll",this._queuePosition),this._scrollDialog=this._dialog(),this._scrollDialog?.addEventListener("scroll",this._dialogScroll,!0)}_unsubscribeOpenListeners(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("keydown",this._keyDown,!0);const e=this._window();e?.removeEventListener("resize",this._queuePosition),e?.removeEventListener("orientationchange",this._queuePosition),e?.visualViewport?.removeEventListener("resize",this._queuePosition),e?.visualViewport?.removeEventListener("scroll",this._queuePosition),this._scrollDialog?.removeEventListener("scroll",this._dialogScroll,!0),this._scrollDialog=null}async _openHelp(){!this._open&&this._hasContent()&&(this._clearTimers(),this._forceFallback=!1,this._open=!0,this._subscribeOpenListeners(),await this.updateComplete,this._open&&(this._usesPopover()||this._renderFallback(),this._position()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:e=>this._closeHelp("escape"===e&&this._floating.ownsActiveElement(),e)})||null:this._closeHelp()))}_closeHelp(e=!1,t="exclusive"){if(!this._open&&!this._floating.hasFallback)return;this._clearTimers();const i=this._overlayDispose;this._overlayDispose=null,i?.();const o=this.renderRoot.querySelector(".tooltip");if(o?.hidePopover)try{o.matches(":popover-open")&&o.hidePopover()}catch{}this._open=!1,this._hoverOwned=!1,this._unsubscribeOpenListeners(),this._floating.destroy(),e&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_tooltipTemplate(e){return t``}_renderFallback(){const e=c.styles.cssText;this._floating.renderFallback(this._tooltipTemplate(!1),e)}_surface(){return this._floating.surface(".tooltip",this._usesPopover())}_position(){if(!this._open)return!1;const e=this._window(),t=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!e||!t?.isConnected||!i?.isConnected)return!1;const o=r(e);if(i.style.maxWidth=`${Math.max(0,Math.min(320,o.width-16))}px`,i.style.maxHeight=`${Math.max(0,o.height-16)}px`,i.style.visibility="hidden",this._usesPopover()&&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.visibility="hidden"}const n=t.getBoundingClientRect(),s=i.getBoundingClientRect();if(!(n.width&&n.height&&s.width&&s.height))return!1;const l=a(n,s,o);return i.style.left=`${l.left}px`,i.style.top=`${l.top}px`,i.dataset.side=l.side,i.style.visibility="",!0}render(){if(!this._hasContent())return i;const e=this.ariaLabel.trim();return t` ({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`{const n=1===e.length?e[0]:t.reduce((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1],e[0]);return new r(n,e,i)},s=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e,{is:a,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,m=p.trustedTypes,_=m?m.emptyScript:"",f=p.reactiveElementPolyfillSupport,g=(e,t)=>e,v={toAttribute(e,t){switch(t){case Boolean:e=e?_:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!a(e,t),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(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=b){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),n=this.getPropertyDescriptor(e,i,t);void 0!==n&&l(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){const{get:n,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:n,set(t){const o=n?.call(this);r?.call(this,t),this.requestUpdate(e,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??b}static _$Ei(){if(this.hasOwnProperty(g("elementProperties")))return;const e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(g("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(g("properties"))){const e=this.properties,t=[...h(e),...d(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.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(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{if(t)i.adoptedStyleSheets=n.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const t of n){const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,n=i._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=i.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:v;this._$Em=n;const o=r.fromAttribute(t,e.type);this[n]=o??this._$Ej?.get(n)??o,this._$Em=null}}requestUpdate(e,t,i,n=!1,r){if(void 0!==e){const o=this.constructor;if(!1===n&&(r=this[e]),i??=o.getPropertyOptions(e),!((i.hasChanged??y)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:n,wrapped:r},o){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),!0!==r||void 0!==o)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===n&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,n=this[t];!0!==e||this._$AL.has(t)||void 0===n||this.C(t,void 0,i,n)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[g("elementProperties")]=new Map,w[g("finalized")]=new Map,f?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=e=>e,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:e=>e}):void 0,M="$lit$",T=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+T,R=`<${C}>`,D=document,z=()=>D.createComment(""),A=e=>null===e||"object"!=typeof e&&"function"!=typeof e,P=Array.isArray,O="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,E=/>/g,H=RegExp(`>|${O}(?:([^\\s"'>=/]+)(${O}*=${O}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),W=q(1),j=q(2),U=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),G=new WeakMap,K=D.createTreeWalker(D,129);function Y(e,t){if(!P(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,n=[];let r,o=2===t?"":3===t?"":"",s=F;for(let t=0;t"===l[0]?(s=r??F,c=-1):void 0===l[1]?c=-2:(c=s.lastIndex-l[2].length,a=l[1],s=void 0===l[3]?H:'"'===l[3]?L:N):s===L||s===N?s=H:s===I||s===E?s=F:(s=H,r=void 0);const d=s===H&&e[t+1].startsWith("/>")?" ":"";o+=s===F?i+R:c>=0?(n.push(a),i.slice(0,c)+M+i.slice(c)+T+d):i+T+(-2===c?t:d)}return[Y(e,o+(e[i]||"")+(2===t?"":3===t?"":"")),n]};class Z{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,o=0;const s=e.length-1,a=this.parts,[l,c]=X(e,t);if(this.el=Z.createElement(l,i),K.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(n=K.nextNode())&&a.length0){n.textContent=$?$.emptyScript:"";for(let i=0;iP(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==V&&A(this._$AH)?this._$AA.nextSibling.data=e:this.T(D.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=Z.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===n)this._$AH.p(t);else{const e=new Q(n,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=G.get(e.strings);return void 0===t&&G.set(e.strings,t=new Z(e)),t}k(e){P(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new ee(this.O(z()),this.O(z()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(e,t=this,i,n){const r=this.strings;let o=!1;if(void 0===r)e=J(this,e,t,0),o=!A(e)||e!==this._$AH&&e!==U,o&&(this._$AH=e);else{const n=e;let s,a;for(e=r[0],s=0;s{const n=i?.renderBefore??t;let r=n._$litPart$;if(void 0===r){const e=i?.renderBefore??null;n._$litPart$=r=new ee(t.insertBefore(z(),e),e,void 0,i??{})}return r._$AI(e),r},ce=globalThis;let he=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=le(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};he._$litElement$=!0,he.finalized=!0,ce.litElementHydrateSupport?.({LitElement:he});const de=ce.litElementPolyfillSupport;de?.({LitElement:he}),(ce.litElementVersions??=[]).push("4.2.2");const ue=new WeakMap;let pe=0;class me extends he{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-"+ ++pe,this._focusInitial=()=>{const e=this._focusableElements(),t=e.find(e=>e.hasAttribute("autofocus"))||e[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");t?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=e=>{if("Escape"===e.key){e.preventDefault(),e.stopImmediatePropagation(),this._pruneOverlays();const t=this._overlays[this._overlays.length-1];return t?void this._closeOverlay(t,"escape"):void this._requestClose()}if("Tab"!==e.key||this._useHaDialog)return;const t=this.renderRoot.querySelector(".close"),i=t?[t,...this._focusableElements()]:this._focusableElements();if(!i.length)return e.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const n=this._deepActiveElement(),r=i[0],o=i[i.length-1];!e.shiftKey||n!==r&&i.includes(n)?e.shiftKey||n!==o||(e.preventDefault(),r.focus()):(e.preventDefault(),o.focus())},this._onFallbackCancel=e=>{e.preventDefault(),this._requestClose()},this._onFallbackClick=e=>{this.dismissOnScrim&&e.target===e.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const e=this.getRootNode();this._focusRoot=e;const t=ue.get(e)||{dialogs:new Set,opener:this._opener};t.dialogs.add(this),ue.set(e,t),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const e=[...this._overlays];this._overlays=[];for(const t of e.reverse())t.close("disconnect");const t=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const n=t?ue.get(t):void 0;n?.dialogs.delete(this),super.disconnectedCallback(),t&&n&&requestAnimationFrame(()=>{const e=ue.get(t);if(!e)return;if(!e.dialogs.size)return e.opener?.isConnected&&e.opener.focus({preventScroll:!0}),void ue.delete(t);const n=i?.closest("hp-dialog");i?.isConnected&&n&&e.dialogs.has(n)&&i.focus({preventScroll:!0})})}firstUpdated(e){if(super.firstUpdated(e),!this._useHaDialog){const e=this.renderRoot.querySelector("dialog");e&&!e.open&&e.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e&&e!==document.body?e:null}_focusableElements(){const e=["[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(","),t=[],i=new Set,n=r=>{if(!i.has(r)){if(i.add(r),r instanceof HTMLElement){if(r.matches(e)&&t.push(r),r instanceof HTMLSlotElement){for(const e of r.assignedNodes({flatten:!0}))n(e);return}if(r.shadowRoot){for(const e of r.shadowRoot.childNodes)n(e);return}}for(const e of r.childNodes)n(e)}};for(const e of this.childNodes)n(e);const r=this.overlayPortal();return r&&n(r),t.filter(e=>{let t=e;for(;t;){const e=getComputedStyle(t);if(t.hidden||t.inert||"true"===t.getAttribute("aria-hidden")||"none"===e.display||"hidden"===e.visibility)return!1;if(t=t.assignedSlot||t.parentElement||(t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:null),t===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(e=>e.owner.isConnected)}_closeOverlay(e,t){const i=this._overlays.findIndex(t=>t.token===e.token);i>=0&&this._overlays.splice(i,1),e.close(t)}registerOverlay(e){this._pruneOverlays();const t=this._overlays.find(t=>t.owner===e.owner);t&&this._overlays.splice(this._overlays.indexOf(t),1);const i=e.group||"transient";for(const e of[...this._overlays].reverse())e.group===i&&this._closeOverlay(e,"exclusive");const n={...e,group:i,token:Symbol("hp-overlay")};this._overlays.push(n);let r=!1;return()=>{if(r)return;r=!0;const e=this._overlays.findIndex(e=>e.token===n.token);e>=0&&this._overlays.splice(e,1)}}closeTransientOverlays(e="outside"){this._pruneOverlays();const t=[...this._overlays].filter(e=>"transient"===(e.group||"transient"));for(const i of t.reverse())this._closeOverlay(i,e);return t.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const e=W` +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";const e=globalThis,t=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),n=new WeakMap;let r=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const i=this.t;if(t&&void 0===e){const t=void 0!==i&&1===i.length;t&&(e=n.get(i)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&n.set(i,e))}return e}toString(){return this.cssText}};const o=(e,...t)=>{const n=1===e.length?e[0]:t.reduce((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1],e[0]);return new r(n,e,i)},s=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e,{is:a,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,m=p.trustedTypes,_=m?m.emptyScript:"",f=p.reactiveElementPolyfillSupport,g=(e,t)=>e,v={toAttribute(e,t){switch(t){case Boolean:e=e?_:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!a(e,t),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(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=b){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),n=this.getPropertyDescriptor(e,i,t);void 0!==n&&l(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){const{get:n,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:n,set(t){const o=n?.call(this);r?.call(this,t),this.requestUpdate(e,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??b}static _$Ei(){if(this.hasOwnProperty(g("elementProperties")))return;const e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(g("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(g("properties"))){const e=this.properties,t=[...h(e),...d(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.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(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{if(t)i.adoptedStyleSheets=n.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const t of n){const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,n=i._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=i.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:v;this._$Em=n;const o=r.fromAttribute(t,e.type);this[n]=o??this._$Ej?.get(n)??o,this._$Em=null}}requestUpdate(e,t,i,n=!1,r){if(void 0!==e){const o=this.constructor;if(!1===n&&(r=this[e]),i??=o.getPropertyOptions(e),!((i.hasChanged??y)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:n,wrapped:r},o){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),!0!==r||void 0!==o)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===n&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,n=this[t];!0!==e||this._$AL.has(t)||void 0===n||this.C(t,void 0,i,n)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[g("elementProperties")]=new Map,w[g("finalized")]=new Map,f?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=e=>e,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:e=>e}):void 0,M="$lit$",T=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+T,R=`<${C}>`,D=document,z=()=>D.createComment(""),A=e=>null===e||"object"!=typeof e&&"function"!=typeof e,P=Array.isArray,O="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,E=/>/g,H=RegExp(`>|${O}(?:([^\\s"'>=/]+)(${O}*=${O}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),W=q(1),j=q(2),U=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),G=new WeakMap,K=D.createTreeWalker(D,129);function Y(e,t){if(!P(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,n=[];let r,o=2===t?"":3===t?"":"",s=F;for(let t=0;t"===l[0]?(s=r??F,c=-1):void 0===l[1]?c=-2:(c=s.lastIndex-l[2].length,a=l[1],s=void 0===l[3]?H:'"'===l[3]?L:N):s===L||s===N?s=H:s===I||s===E?s=F:(s=H,r=void 0);const d=s===H&&e[t+1].startsWith("/>")?" ":"";o+=s===F?i+R:c>=0?(n.push(a),i.slice(0,c)+M+i.slice(c)+T+d):i+T+(-2===c?t:d)}return[Y(e,o+(e[i]||"")+(2===t?"":3===t?"":"")),n]};class Z{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,o=0;const s=e.length-1,a=this.parts,[l,c]=X(e,t);if(this.el=Z.createElement(l,i),K.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(n=K.nextNode())&&a.length0){n.textContent=$?$.emptyScript:"";for(let i=0;iP(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==V&&A(this._$AH)?this._$AA.nextSibling.data=e:this.T(D.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=Z.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===n)this._$AH.p(t);else{const e=new Q(n,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=G.get(e.strings);return void 0===t&&G.set(e.strings,t=new Z(e)),t}k(e){P(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new ee(this.O(z()),this.O(z()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(e,t=this,i,n){const r=this.strings;let o=!1;if(void 0===r)e=J(this,e,t,0),o=!A(e)||e!==this._$AH&&e!==U,o&&(this._$AH=e);else{const n=e;let s,a;for(e=r[0],s=0;s{const n=i?.renderBefore??t;let r=n._$litPart$;if(void 0===r){const e=i?.renderBefore??null;n._$litPart$=r=new ee(t.insertBefore(z(),e),e,void 0,i??{})}return r._$AI(e),r},ce=globalThis;let he=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=le(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};he._$litElement$=!0,he.finalized=!0,ce.litElementHydrateSupport?.({LitElement:he});const de=ce.litElementPolyfillSupport;de?.({LitElement:he}),(ce.litElementVersions??=[]).push("4.2.2");const ue=new WeakMap;let pe=0;class me extends he{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-"+ ++pe,this._focusInitial=()=>{const e=this._focusableElements(),t=e.find(e=>e.hasAttribute("autofocus"))||e[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");t?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=e=>{if("Escape"===e.key){e.preventDefault(),e.stopImmediatePropagation(),this._pruneOverlays();const t=this._overlays[this._overlays.length-1];return t?void this._closeOverlay(t,"escape"):void this._requestClose()}if("Tab"!==e.key||this._useHaDialog)return;const t=this.renderRoot.querySelector(".close"),i=t?[t,...this._focusableElements()]:this._focusableElements();if(!i.length)return e.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const n=this._deepActiveElement(),r=i[0],o=i[i.length-1];!e.shiftKey||n!==r&&i.includes(n)?e.shiftKey||n!==o||(e.preventDefault(),r.focus()):(e.preventDefault(),o.focus())},this._onFallbackCancel=e=>{e.preventDefault(),this._requestClose()},this._onFallbackClick=e=>{this.dismissOnScrim&&e.target===e.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const e=this.getRootNode();this._focusRoot=e;const t=ue.get(e)||{dialogs:new Set,opener:this._opener};t.dialogs.add(this),ue.set(e,t),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const e=[...this._overlays];this._overlays=[];for(const t of e.reverse())t.close("disconnect");const t=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const n=t?ue.get(t):void 0;n?.dialogs.delete(this),super.disconnectedCallback(),t&&n&&requestAnimationFrame(()=>{const e=ue.get(t);if(!e)return;if(!e.dialogs.size)return e.opener?.isConnected&&e.opener.focus({preventScroll:!0}),void ue.delete(t);const n=i?.closest("hp-dialog");i?.isConnected&&n&&e.dialogs.has(n)&&i.focus({preventScroll:!0})})}firstUpdated(e){if(super.firstUpdated(e),!this._useHaDialog){const e=this.renderRoot.querySelector("dialog");e&&!e.open&&e.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e&&e!==document.body?e:null}_focusableElements(){const e=["[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(","),t=[],i=new Set,n=r=>{if(!i.has(r)){if(i.add(r),r instanceof HTMLElement){if(r.matches(e)&&t.push(r),r instanceof HTMLSlotElement){for(const e of r.assignedNodes({flatten:!0}))n(e);return}if(r.shadowRoot){for(const e of r.shadowRoot.childNodes)n(e);return}}for(const e of r.childNodes)n(e)}};for(const e of this.childNodes)n(e);const r=this.overlayPortal();return r&&n(r),t.filter(e=>{let t=e;for(;t;){const e=getComputedStyle(t);if(t.hidden||t.inert||"true"===t.getAttribute("aria-hidden")||"none"===e.display||"hidden"===e.visibility)return!1;if(t=t.assignedSlot||t.parentElement||(t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:null),t===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(e=>e.owner.isConnected)}_closeOverlay(e,t){const i=this._overlays.findIndex(t=>t.token===e.token);i>=0&&this._overlays.splice(i,1),e.close(t)}registerOverlay(e){this._pruneOverlays();const t=this._overlays.find(t=>t.owner===e.owner);t&&this._overlays.splice(this._overlays.indexOf(t),1);const i=e.group||"transient";for(const e of[...this._overlays].reverse())e.group===i&&this._closeOverlay(e,"exclusive");const n={...e,group:i,token:Symbol("hp-overlay")};this._overlays.push(n);let r=!1;return()=>{if(r)return;r=!0;const e=this._overlays.findIndex(e=>e.token===n.token);e>=0&&this._overlays.splice(e,1)}}closeTransientOverlays(e="outside"){this._pruneOverlays();const t=[...this._overlays].filter(e=>"transient"===(e.group||"transient"));for(const i of t.reverse())this._closeOverlay(i,e);return t.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const e=W` ${this.icon?W``:V} ${this.title} `;return this._useHaDialog?W`
`}_vacMapId(t,e,s=this.host._planHass){return this.host._vacMapId(t,e,s)}_vacSaveMatrix(t,e,s,i){const o=this.host._devices.find(e=>e.id===t),a=o?this.host._vacEnsureMarker(o):this.host._serverCfg?.markers?.find(e=>e.id===t);if(!a)return!1;const n={...a.vacuum||{}};return n.source=e,n.calibration={...n.calibration||{},[s]:i.map(t=>Number(t.toFixed(6)))},a.vacuum=n,this.host._regSignature="",this.host._maybeRebuildDevices(),this._saveConfig(),this.host.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this.host._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:I(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const s=Ns(e);return s?{name:String(t.name),cx:s[0],cy:s[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this.host._vacSource(t),s=e?Ts(this.host.hass?.states[e]?.attributes):null;if(!e||!s||s.rooms.length<3)return void this.host._showToast(this.host._t("vac.autocal_no_rooms"));const i=this._vacPlanRoomAnchors(t.space),o=Hs(s.rooms,i);if(!o)return void this.host._showToast(this.host._t("vac.autocal_no_match"));const a=this.host._serverCfg?.spaces?.find(e=>e.id===t.space),n=Number(a?.cell_cm),r=Number.isFinite(n)&&n>0?n:5,h=Ls(o.residual,this.host._gridPitch,r),l=this._vacMapId(t,s);h>Os?this.host._vacCalConfirm={markerId:t.id,source:e,mapId:l,matrix:o.matrix,rooms:o.matched.length,error:Qt(h,"mi"===this.host.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,l,o.matrix)&&this.host._showToast(Fs(this.host._t("vac.autocal_done"),{rooms:String(o.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this.host._vacCalConfirm;if(e){if(this.host._vacCalConfirm=null,t){const t=this.host._devices.find(t=>t.id===e.markerId),s=Es(e.matrix);if(!t||!s)return;if(this.host._markerDialog=null,t.space!==this.host._space&&!this.host._commitSpace(t.space))return;return void(this.host._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:s,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this.host._showToast(Fs(this.host._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this.host._vacSource(t),s=e?Ts(this.host.hass?.states[e]?.attributes):null;if(!e||!s)return void this.host._showToast(this.host._t("vac.cal_need_pos"));const i=this._vacMapId(t,s),o=t.marker?.vacuum?.calibration?.[i],a=this.host._spaceModelById(t.space);if(!a)return;const n=a.vb,r=o&&6===o.length&&Es(o)||Bs(s.rooms,n);this.host._markerDialog=null,(t.space===this.host._space||this.host._commitSpace(t.space))&&(this.host._vacFit={markerId:t.id,source:e,mapId:i,p:r,drag:null})}_vacFitSave(){const t=this.host._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Ws(t.p));this.host._vacFit=null,e&&this.host._showToast(this.host._t("vac.cal_done"))}_vacFitTurn(t){const e=this.host._vacFit;if(!e)return;const s=Ts(this.host.hass?.states[e.source]?.attributes),i=this._vacGhostCentre(s?.rooms||[]),o={...e.p,...t};this.host._vacFit={...e,p:Gs(o,e.p,i[0],i[1])}}_vacGhostCentre(t){const e=[],s=[];for(const i of t)e.push(i.x0??i.cx,i.x1??i.cx),s.push(i.y0??i.cy,i.y1??i.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...s)+Math.max(...s))/2]:[0,0]}_vacDelta(t,e,s){const i=this.host._stageEl,o=i?.clientWidth||1,a=i?.clientHeight||1;return[e/o*t.w,s/a*t.h]}_vacFitPointer(t,e){const s=this.host._vacFit;if(!s)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,i=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this.host._vacFit={...s,drag:i?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...s.p},fx:Number(i.split(",")[0]),fy:Number(i.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...s.p},fx:0,fy:0}})}const i=s.drag;if(i){if("pointermove"===t.type){const[o,a]=this._vacDelta(e,t.clientX-i.sx,t.clientY-i.sy);if("move"===i.kind)this.host._vacFit={...s,p:{...i.p0,ox:i.p0.ox+o,oy:i.p0.oy+a}};else{const t=Ts(this.host.hass?.states[s.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),n=Ws(i.p0),[r,h]=js(n,e[0],e[1]),[l,c]=js(n,i.fx,i.fy),d=Math.hypot(r-l,h-c)||1,[p,_]=[2*r-l,2*h-c],u=Math.hypot(p+2*o-l,_+2*a-c)/2,m=Math.max(.05,u/d),g={...i.p0,s:i.p0.s*m};this.host._vacFit={...s,p:Gs(g,i.p0,i.fx,i.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this.host._vacFit={...s,drag:null})}}_renderVacFit(t){const e=this.host._vacFit;if(!e)return a;const s=Ts(this.host._renderPlanHass?.states?.[e.source]?.attributes);if(!s)return a;const i=Ws(e.p),o=[],r=[],h=[];for(const t of s.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])=>js(i,t,e));e.forEach(([t,e])=>{r.push(t),h.push(e)});const[s,a]=js(i,t.cx,t.cy);o.push(he` + ${t.name}`)}let l=a;if(s.pos){const[e,o]=js(i,s.pos.x,s.pos.y);l=he``}const c=[];if(r.length){const e=(()=>{const t=i[0]*i[4]-i[1]*i[3];return(e,s)=>[(i[4]*(e-i[2])-i[1]*(s-i[5]))/t,(-i[3]*(e-i[2])+i[0]*(s-i[5]))/t]})(),s=Math.min(...r),o=Math.max(...r),a=Math.min(...h),n=Math.max(...h),l=.022*t.w,d=l/4;for(const[t,i,r,h]of[[s,a,o,n],[o,a,s,n],[o,n,s,a],[s,n,o,a]]){const s=e(r,h);c.push(he` `)}}return n`this._vacFitPointer(e,t)} @pointermove=${e=>this._vacFitPointer(e,t)} @pointerup=${e=>this._vacFitPointer(e,t)} - @pointercancel=${e=>this._vacFitPointer(e,t)}>${o}${h}${c}`}_resetRoomDialogFields(){this.host._roomEditId=null,this.host._roomFill="",this.host._roomCustomFill=null,this.host._roomTempSrc="",this.host._roomHumSrc="",this.host._roomSrcOpen=null,this.host._roomSrcFilter="",this.host._roomNameScale=1,this.host._roomLabelScale=1}_openRoomEdit(t){if(!t.id)return;this.host._roomEditId=t.id,this.host._nameSel=t.name||"",this.host._areaSel=t.area||"",this.host._roomFill="glow"===t.settings?.fill_mode?"":t.settings?.fill_mode||"";const e=t.settings?.custom_fill;this.host._roomCustomFill=e&&"object"==typeof e?us(e,_s(this.host._curSpaceCfg).customFill):null,this.host._roomTempSrc=t.settings?.temp_source||"",this.host._roomHumSrc=t.settings?.hum_source||"",this.host._roomNameScale=Us(t.settings?.name_scale),this.host._roomLabelScale=Us(t.settings?.label_scale),this.host._roomSrcOpen=null,this.host._roomSrcFilter="",this.host._roomDialog=!0}_roomSettingsFromDialog(){const t={};return this.host._roomFill&&(t.fill_mode=this.host._roomFill),this.host._roomCustomFill&&(t.custom_fill=this.host._roomCustomFill),this.host._roomTempSrc&&(t.temp_source=this.host._roomTempSrc),this.host._roomHumSrc&&(t.hum_source=this.host._roomHumSrc),1!==this.host._roomNameScale&&(t.name_scale=this.host._roomNameScale),1!==this.host._roomLabelScale&&(t.label_scale=this.host._roomLabelScale),Object.keys(t).length?t:null}_saveRoomEdit(){const t=this.host._curSpaceCfg,e=t?.rooms.find(t=>t.id===this.host._roomEditId);if(!e)return this.host._roomDialog=!1,void(this.host._roomEditId=null);e.name=this.host._nameSel.trim()||e.name,e.area=this.host._areaSel||null;const s=e.settings||{},i={...s};this.host._roomFill?i.fill_mode=this.host._roomFill:delete i.fill_mode,this.host._roomCustomFill?i.custom_fill=this.host._roomCustomFill:delete i.custom_fill,"glow"===s.fill_mode&&"boolean"!=typeof s.glow&&(i.glow=!0),this.host._roomTempSrc?i.temp_source=this.host._roomTempSrc:delete i.temp_source,this.host._roomHumSrc?i.hum_source=this.host._roomHumSrc:delete i.hum_source,1!==this.host._roomNameScale?i.name_scale=this.host._roomNameScale:delete i.name_scale,1!==this.host._roomLabelScale?i.label_scale=this.host._roomLabelScale:delete i.label_scale,Object.keys(i).length?e.settings=i:delete e.settings,this._saveConfig(),this.host._roomDialog=!1,this.host._roomEditId=null,this.host._nameSel="",this.host._areaSel="",this.host._regSignature="",this.host._maybeRebuildDevices(),this.host.requestUpdate(),this.host._showToast(this.host._t("toast.room_updated"))}_roomSrcCandidates(){const t=this.host._planHass,e=w(this.host._markers),s=this.host._roomSrcFilter.trim().toLowerCase(),i=[];for(const o of Object.values(t.devices)){if("service"===o.entry_type)continue;if(e.devices.has(o.id))continue;const t=(o.name_by_user||o.name||o.id).trim();s&&!t.toLowerCase().includes(s)||i.push({value:"device:"+o.id,label:t,sub:o.model||this.host._t("marker.sub_device")})}for(const[o,a]of Object.entries(t.entities)){if(!o.startsWith("sensor.")||a.hidden)continue;if(k(t,o,e))continue;const n=a.name||t.states[o]?.attributes?.friendly_name||o;s&&!(n+" "+o).toLowerCase().includes(s)||i.push({value:"entity:"+o,label:n,sub:o})}return i.sort((t,e)=>t.label.localeCompare(e.label)),i.slice(0,200)}_roomSrcLabel(t){const e=t.indexOf(":"),s=t.slice(0,e),i=t.slice(e+1);return"device"===s?this.host._fullRegistryHass.devices[i]?.name_by_user||this.host._fullRegistryHass.devices[i]?.name||i:this.host._fullRegistryHass.entities[i]?.name||this.host.hass.states[i]?.attributes?.friendly_name||i}_labelPos(t,e){const s=this.host._layout["rl_"+(t.id||"")];if(s&&s.s===e)return{x:s.x*hl,y:s.y*hl};const i=this._snap(this.host._roomCenter(t));return{x:i[0],y:i[1]}}_labelDown(t,e,s){if("plan"!==this.host._mode)return;t.preventDefault(),t.stopPropagation();const i=this._labelPos(e,s);this.host._drag={id:"rl_"+(e.id||""),sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},dl(t),this.host._tip=null}_labelMove(t,e,s){const i="rl_"+(e.id||"");if(!this.host._drag||this.host._drag.id!==i)return;const o=this.host._stageEl;if(!o)return;const a=this.host._spaceModelById(s);if(!a)return;const n=a.vb,r=o.getBoundingClientRect(),l=this.host._viewOr(n),h=(t.clientX-this.host._drag.sx)/r.width*l.w,c=(t.clientY-this.host._drag.sy)/r.height*l.h;Math.abs(t.clientX-this.host._drag.sx)+Math.abs(t.clientY-this.host._drag.sy)>3&&(this.host._drag.moved=!0);const d=It(this.host._drag.ox+h),p=It(this.host._drag.oy+c);this.host._savePos({id:i,space:s},d,p)}_labelUp(t){const e="rl_"+(t.id||"");if(!this.host._drag||this.host._drag.id!==e)return;const s=this.host._drag.moved;this.host._drag=s?this.host._drag:null,s&&window.setTimeout(()=>this.host._drag=null,0)}_labelScale(t){const e=this.host._layout["rl_"+(t.id||"")]?.k;return"number"==typeof e&&Number.isFinite(e)?Math.min(3,Math.max(.5,e)):1}_rlResizeDown(t,e,s){if("plan"!==this.host._mode)return;t.preventDefault(),t.stopPropagation();const i=t.target.closest(".roomlabel");if(!i)return;const o=i.getBoundingClientRect(),a=o.left+o.width/2,n=o.top+o.height/2,r=Math.max(8,Math.hypot(t.clientX-a,t.clientY-n));this.host._rlResize={id:"rl_"+(e.id||""),space:s,k0:this._labelScale(e),cx:a,cy:n,d0:r},dl(t)}_rlResizeMove(t){const e=this.host._rlResize;if(!e)return;t.stopPropagation();const s=Math.max(8,Math.hypot(t.clientX-e.cx,t.clientY-e.cy)),i=Math.min(3,Math.max(.5,e.k0*(s/e.d0))),o=this.host._layout[e.id];if(o)this.host._layout={...this.host._layout,[e.id]:{...o,k:i}};else{const t=e.id.slice(3),s=this.host._spaceModelById(e.space);if(!s)return;const o=s.rooms.find(e=>e.id===t);if(!o)return;const a=this._labelPos(o,e.space);this.host._layout={...this.host._layout,[e.id]:{s:e.space,x:a.x/hl,y:a.y/hl,k:i}}}this.host._dirtyPos.add(e.id)}_rlResizeUp(){this.host._rlResize&&(this.host._rlResize=null,this.host._persistLayout())}_renderRoomGear(t,e,s){if(!t.id)return a;let i=null;if(t.poly?(i=this.host._gearPtCache.get(t.poly)||null,i||(i=ae(t.poly),this.host._gearPtCache.set(t.poly,i))):null!=t.x&&null!=t.y&&(i=[t.x+(t.w||0)/2,t.y+(t.h||0)/2]),!i)return a;const o=(i[0]-s.x)/s.w*100,r=(i[1]-s.y)/s.h*100;return n``}_alignCandidates(){const t=[],e=this.host._spaceModel();if(this.host._markup){if(!e)return t;if(this.host._drag?.id.startsWith("rl_")){const s=this.host._drag.id.slice(3);for(const i of e.rooms){if(!i.name||i.id===s)continue;const e=this._labelPos(i,this.host._space);t.push([e.x,e.y])}return t}for(const s of e.rooms){const e=I(s);if(e)for(const s of e)t.push(s)}if("draw"===this.host._tool)for(const e of this.host._path)t.push(e);if("split"===this.host._tool&&this.host._splitSel?.pts)for(const e of this.host._splitSel.pts)t.push(e);return t}if("devices"===this.host._mode){for(const e of this.host._devices){if(e.space!==this.host._space||e.id===this.host._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const s=this.host._pos(e);t.push([s.x,s.y])}return t}if("decor"===this.host._mode){const e=this.host._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this.host._decorDraft&&t.push(this.host._decorDraft.a),t}return t}_renderAlignGuides(){const t=this.host._alignPoint;if(!t)return le``;const e=this.host._drag?.id.startsWith("rl_")?.5*this.host._gridPitch:.05*this.host._gridPitch,s=qs(t,this._alignCandidates(),e);if(!s.length)return le``;const i=this.host._gridPitch,o=1.5*i;return le` - ${s.map(e=>{const[s,a,n,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*o]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*o,e.at];return le` + `}_alignCandidates(){const t=[],e=this.host._spaceModel();if(this.host._markup){if(!e)return t;if(this.host._drag?.id.startsWith("rl_")){const s=this.host._drag.id.slice(3);for(const i of e.rooms){if(!i.name||i.id===s)continue;const e=this._labelPos(i,this.host._space);t.push([e.x,e.y])}return t}for(const s of e.rooms){const e=I(s);if(e)for(const s of e)t.push(s)}if("draw"===this.host._tool)for(const e of this.host._path)t.push(e);if("split"===this.host._tool&&this.host._splitSel?.pts)for(const e of this.host._splitSel.pts)t.push(e);return t}if("devices"===this.host._mode){const e=this.host._deviceDrag?.id??this.host._drag?.id;for(const s of this.host._devices){if(s.space!==this.host._space||s.id===e||"ha_disabled"===s.bindingStatus?.kind)continue;const i=this.host._pos(s);t.push([i.x,i.y])}return t}if("decor"===this.host._mode){const e=this.host._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this.host._decorDraft&&t.push(this.host._decorDraft.a),t}return t}_renderAlignGuides(){const t=this.host._alignPoint;if(!t)return he``;const e=this.host._drag?.id.startsWith("rl_")?.5*this.host._gridPitch:.05*this.host._gridPitch,s=qs(t,this._alignCandidates(),e);if(!s.length)return he``;const i=this.host._gridPitch,o=1.5*i;return he` + ${s.map(e=>{const[s,a,n,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*o]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*o,e.at];return he` `})} - `}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180,s=Ne(15,this.host._cellCm);return le``}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180,s=Ne(15,this.host._cellCm);return he``}_renderOpeningDimensionGuides(t){const e=t.labels.flatMap(t=>t.dimension?[t.dimension]:[]);if(!e.length)return le``;const s=this._cssPxToRender(4);return le``;return he` ${o(t.from,"from")}${o(t.to,"to")} `})} - `}_renderOpeningPlacementPreview(){const t=this.host._openingPreview;if(!t)return le``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:Ks(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this.host._cellCm,gridPitch:this.host._gridPitch,face:t.face},s="passage"===t.type?Vs(t,Ne(this.host._gridPitch,this.host._cellCm)):null;return le``}_renderOpeningPlacementPreview(){const t=this.host._openingPreview;if(!t)return he``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:Ks(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this.host._cellCm,gridPitch:this.host._gridPitch,face:t.face},s="passage"===t.type?Vs(t,Ne(this.host._gridPitch,this.host._cellCm)):null;return he` `}_renderOpeningDialog(){const t=this.host._openingDialog,e=this.host._spaceModel()?.partitions||[],s=t.id?this.host._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,i={id:t.id||"preview",type:t.type,x:t.x/hl,y:t.y/this.host._spaceH,angle:t.angle,length:s&&!t.lengthTouched?s.length:this.host._cmToUnits(Math.max(20,t.lengthCm))/hl,...t.host?{host:t.host}:{}},o=qe(s,i),r=t.host?o?O(i,e,hl,this.host._cellCm,this.host._gridPitch):R(i,e,hl,this.host._cellCm,this.host._gridPitch):null,l="does-not-fit-jamb"===r?.reason,h=t.host?e.find(e=>e.id===t.host.id):null,c=h?Qt(h.cm/2,this.host._imperial):"",d=!!t.host&&!r?.resolved&&!l,p="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",_=(e,s)=>{const i="contact"===e?t.contact:t.lock,o="contact"===e?!!t.contactOpen:!!t.lockOpen,r="contact"===e?t.contactFilter||"":t.lockFilter||"",l=s.find(t=>t.value===i),h=l?.label||this.host.hass.states[i]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[i]?.name||i,c=Ri(s,r);return n` + r=${Ne(.18*this.host._gridPitch,this.host._cellCm)}>`}_renderOpeningDialog(){const t=this.host._openingDialog,e=this.host._spaceModel()?.partitions||[],s=t.id?this.host._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,i={id:t.id||"preview",type:t.type,x:t.x/lh,y:t.y/this.host._spaceH,angle:t.angle,length:s&&!t.lengthTouched?s.length:this.host._cmToUnits(Math.max(20,t.lengthCm))/lh,...t.host?{host:t.host}:{}},o=qe(s,i),r=t.host?o?O(i,e,lh,this.host._cellCm,this.host._gridPitch):R(i,e,lh,this.host._cellCm,this.host._gridPitch):null,h="does-not-fit-jamb"===r?.reason,l=t.host?e.find(e=>e.id===t.host.id):null,c=l?Qt(l.cm/2,this.host._imperial):"",d=!!t.host&&!r?.resolved&&!h,p="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",_=(e,s)=>{const i="contact"===e?t.contact:t.lock,o="contact"===e?!!t.contactOpen:!!t.lockOpen,r="contact"===e?t.contactFilter||"":t.lockFilter||"",h=s.find(t=>t.value===i),l=h?.label||this.host.hass.states[i]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[i]?.name||i,c=Ri(s,r);return n` ${o?n`
@@ -1366,10 +1366,10 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 @hp-close=${()=>this.host._openingDialog=null}>
${t.host?n` -
- ${d||l?n``:a} - ${d?this.host._t("opening.partition_orphan"):l?this.host._t("opening.partition_jamb_margin",{distance:c}):this.host._t("opening.host_partition")} +
+ ${d||h?n``:a} + ${d?this.host._t("opening.partition_orphan"):h?this.host._t("opening.partition_jamb_margin",{distance:c}):this.host._t("opening.host_partition")}
`:a}
- `}_gridLevels(){const t=this.host._stageEl,e=this.host._viewOr(this.host._baseVb()),s=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return Xs(this.host._gridPitch,s)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return le``;const s=this.host._gridPitch*e.fine,i=this.host._gridPitch*e.coarse,o=this.host._gridPitch*e.fine*.14;return le` + `}_gridLevels(){const t=this.host._stageEl,e=this.host._viewOr(this.host._baseVb()),s=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return Xs(this.host._gridPitch,s)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return he``;const s=this.host._gridPitch*e.fine,i=this.host._gridPitch*e.coarse,o=this.host._gridPitch*e.fine*.14;return he` @@ -1437,75 +1437,75 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 - `}_renderPhysicalEditorLayer(){const t=this.host._spaceModel();if(!t)return le``;const e=this.host._gridPitch,s=this.host._viewOr(this.host._baseVb()),i=this.host._stageEl,o=i?.clientWidth?s.w/i.clientWidth:e/8,n=Math.max(.22*e,8*o),r=Math.max(n,12*o),l=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,h=(t,e)=>this.host._physicalSel?.kind===t&&this.host._physicalSel.id===e||"column"===t&&this.host._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,s)=>{const i=t.points[s+1],a=Number(t.segments[s]?.cm),n=W(Number.isFinite(a)?a:15,this.host._cellCm,this.host._gridPitch);return le``}_renderPhysicalEditorLayer(){const t=this.host._spaceModel();if(!t)return he``;const e=this.host._gridPitch,s=this.host._viewOr(this.host._baseVb()),i=this.host._stageEl,o=i?.clientWidth?s.w/i.clientWidth:e/8,n=Math.max(.22*e,8*o),r=Math.max(n,12*o),h=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this.host._physicalSel?.kind===t&&this.host._physicalSel.id===e||"column"===t&&this.host._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,s)=>{const i=t.points[s+1],a=Number(t.segments[s]?.cm),n=W(Number.isFinite(a)?a:15,this.host._cellCm,this.host._gridPitch);return he`{this.host._physicalSel={kind:"draft",id:t.id,segment:s},this._registerPhysicalTap("draft",t.id,s)}}>`})),d=(t.partitions||[]).map(t=>{const e=Vt(t.a,t.b,t.cm,this.host._cellCm,this.host._gridPitch);return e?le`{this.host._physicalSel={kind:"draft",id:t.id,segment:s},this._registerPhysicalTap("draft",t.id,s)}}>`})),d=(t.partitions||[]).map(t=>{const e=Vt(t.a,t.b,t.cm,this.host._cellCm,this.host._gridPitch);return e?he`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`:le`this._physicalUp(t)}>`:he`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),p=(t.wall_columns||[]).map(t=>{const e=this.host._physicalRotate?.id===t.id?{...t,angle:this.host._physicalRotate.angle}:t,s=Kt(e,this.host._cellCm,this.host._gridPitch);return le`this._physicalUp(t)}>`}),p=(t.wall_columns||[]).map(t=>{const e=this.host._physicalRotate?.id===t.id?{...t,angle:this.host._physicalRotate.angle}:t,s=Kt(e,this.host._cellCm,this.host._gridPitch);return he`this._physicalDown(e,"column",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),_=this.host._physicalDrag,u=(()=>{if(!_?.moved)return a;if("partition"===_.kind&&0===Number(_.base.cm)){const t=_.base;return le`this._physicalUp(t)}>`}),_=this.host._physicalDrag,u=(()=>{if(!_?.moved)return a;if("partition"===_.kind&&0===Number(_.base.cm)){const t=_.base;return he``}const t="partition"===_.kind?Vt(_.base.a,_.base.b,_.base.cm,this.host._cellCm,this.host._gridPitch):Kt(_.base,this.host._cellCm,this.host._gridPitch);return t?le``:a})(),m=(()=>{const s=this.host._physicalSel;if(!s)return a;if("draft"===s.kind){const e=t.room_drafts.find(t=>t.id===s.id);return e?le` + transform="translate(${_.delta[0]} ${_.delta[1]})">`}const t="partition"===_.kind?Vt(_.base.a,_.base.b,_.base.cm,this.host._cellCm,this.host._gridPitch):Kt(_.base,this.host._cellCm,this.host._gridPitch);return t?he``:a})(),m=(()=>{const s=this.host._physicalSel;if(!s)return a;if("draft"===s.kind){const e=t.room_drafts.find(t=>t.id===s.id);return e?he` t.join(",")).join(" ")}> - ${e.points.map(t=>le``)} - `:a}if("partition"===s.kind){const e=t.partitions.find(t=>t.id===s.id);if(!e)return a;const i=Vt(e.a,e.b,e.cm,this.host._cellCm,this.host._gridPitch),o=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return le` - ${i?le``:le`he``)} + `:a}if("partition"===s.kind){const e=t.partitions.find(t=>t.id===s.id);if(!e)return a;const i=Vt(e.a,e.b,e.cm,this.host._cellCm,this.host._gridPitch),o=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return he` + ${i?he``:he``} - `}const i=t.wall_columns.find(t=>t.id===s.id);if(!i)return a;const h=this.host._physicalRotate?.id===i.id?{...i,angle:this.host._physicalRotate.angle}:i,c=Kt(h,this.host._cellCm,this.host._gridPitch);if("square"!==h.shape)return le` - - - `;const d=W(h.cm,this.host._cellCm,this.host._gridPitch),p=Ft(h.angle)*Math.PI/180,_=Math.sin(p),u=-Math.cos(p),m=[h.center[0]+_*d/2,h.center[1]+u*d/2],g=[m[0]+_*Math.max(e,24*o),m[1]+u*Math.max(e,24*o)];return le` - - + `}const i=t.wall_columns.find(t=>t.id===s.id);if(!i)return a;const l=this.host._physicalRotate?.id===i.id?{...i,angle:this.host._physicalRotate.angle}:i,c=Kt(l,this.host._cellCm,this.host._gridPitch);if("square"!==l.shape)return he` + + + `;const d=W(l.cm,this.host._cellCm,this.host._gridPitch),p=Ft(l.angle)*Math.PI/180,_=Math.sin(p),u=-Math.cos(p),m=[l.center[0]+_*d/2,l.center[1]+u*d/2],g=[m[0]+_*Math.max(e,24*o),m[1]+u*Math.max(e,24*o)];return he` + + this._physicalRotateDown(t,i)} @pointermove=${t=>this._physicalRotateMove(t)} @pointerup=${t=>this._physicalRotateUp(t)}> - `})();return le`${c}${d}${p}${u}${m}`}_renderHiddenWallDiagnosticOverlay(){if(!this.host._markup)return le``;const t=this._hiddenWallDiagnosticSnapshot().value;if(!t.segments.length)return le``;const e=W(5,this.host._cellCm,this.host._gridPitch);return le``})();return he`${c}${d}${p}${u}${m}`}_renderHiddenWallDiagnosticOverlay(){if(!this.host._markup)return he``;const t=this._hiddenWallDiagnosticSnapshot().value;if(!t.segments.length)return he``;const e=W(5,this.host._cellCm,this.host._gridPitch);return he``}_renderPlanSnapOverlay(){if(!this.host._markup)return le``;const t=this._planSnapGeometrySnapshot().value,e=this.host._activePlanSnapCandidate,s=new Set(this.host._activePlanSnapConflicts.map(t=>t.key)),i=W(5,this.host._cellCm,this.host._gridPitch),o=W(10,this.host._cellCm,this.host._gridPitch);return le``}_renderPlanSnapOverlay(){if(!this.host._markup)return he``;const t=this._planSnapGeometrySnapshot().value,e=this.host._activePlanSnapCandidate,s=new Set(this.host._activePlanSnapConflicts.map(t=>t.key)),i=W(5,this.host._cellCm,this.host._gridPitch),o=W(10,this.host._cellCm,this.host._gridPitch);return he``}_syncPlanSnapActiveMarker(t){const e=this.host.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(W(10,this.host._cellCm,this.host._gridPitch)))}}_syncPlanSnapConflictMarkers(t){const e=new Set(t.map(t=>t.key));for(const t of this.host.renderRoot?.querySelectorAll('.plan-snap-node[data-kind="endpoint"]')||[])t.setAttribute("class","plan-snap-node"+(e.has(t.dataset.key||"")?" conflict":""))}_planSnapPhysicalSegment(t){let e=0;const s=this.host._spaceModel();if(!s)return null;if("partition"===t.sourceKind)e=Number(s.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const i=/^(.*):(\d+)$/.exec(t.sourceId),o=i?s.room_drafts.find(t=>t.id===i[1]):null;e=o&&i&&Number(o.segments[Number(i[2])]?.cm)||0}else e=Zs(s.rooms,this.host._spaceWalls,this.host._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,hl);return e>0?{a:[...t.a],b:[...t.b],halfDepth:W(e,this.host._cellCm,this.host._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const s=[];for(let i=0;i+10&&s.push({a:t[i],b:t[i+1],halfDepth:e[i]});if(!s.length)return"";const i=2e-4*this.host._gridPitch,o=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>M(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=i)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Qs([...s,...o],i).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this.host._openCuts(),s=this.host._thickWallCuts(),i=e.concat(s),o=i.length?S(this.host._segments,i,.02*this.host._gridPitch):this.host._segments,n=this.host._path,r=this.host._gridPitch,l=this.host._viewOr(this.host._baseVb()),h="draw"===this.host._tool?this.host._drawWallCm:null,c=(()=>"draw"===this.host._tool&&n.length&&null!=h?this.host._contourClosed?n:this.host._cursorPt?[...n,this.host._cursorPt]:n.length>=2?n:null:null)(),d=c?Ha(c.length-1,this.host._contourClosed?[...this.host._draftSegmentCms,this.host._closingWallCm??void 0]:this.host._draftSegmentCms,h,F).map(t=>W(t,this.host._cellCm,this.host._gridPitch)/2):[],p=c?ti(c,W(h,this.host._cellCm,this.host._gridPitch)/2,this.host._contourClosed,d):"",_=c?this._drawPreviewJoinPatchD(c,d):"",u=this.host._wallFaceBatch?.candidates[this.host._wallFaceBatch.index]?.repair||this.host._wallRepairDiagnostic;return le` - ${this._gridLevels()?le``:a} - ${o.map(t=>le``)} + `}_syncPlanSnapActiveMarker(t){const e=this.host.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(W(10,this.host._cellCm,this.host._gridPitch)))}}_syncPlanSnapConflictMarkers(t){const e=new Set(t.map(t=>t.key));for(const t of this.host.renderRoot?.querySelectorAll('.plan-snap-node[data-kind="endpoint"]')||[])t.setAttribute("class","plan-snap-node"+(e.has(t.dataset.key||"")?" conflict":""))}_planSnapPhysicalSegment(t){let e=0;const s=this.host._spaceModel();if(!s)return null;if("partition"===t.sourceKind)e=Number(s.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const i=/^(.*):(\d+)$/.exec(t.sourceId),o=i?s.room_drafts.find(t=>t.id===i[1]):null;e=o&&i&&Number(o.segments[Number(i[2])]?.cm)||0}else e=Zs(s.rooms,this.host._spaceWalls,this.host._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,lh);return e>0?{a:[...t.a],b:[...t.b],halfDepth:W(e,this.host._cellCm,this.host._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const s=[];for(let i=0;i+10&&s.push({a:t[i],b:t[i+1],halfDepth:e[i]});if(!s.length)return"";const i=2e-4*this.host._gridPitch,o=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>M(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=i)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Qs([...s,...o],i).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this.host._openCuts(),s=this.host._thickWallCuts(),i=e.concat(s),o=i.length?S(this.host._segments,i,.02*this.host._gridPitch):this.host._segments,n=this.host._path,r=this.host._gridPitch,h=this.host._viewOr(this.host._baseVb()),l="draw"===this.host._tool?this.host._drawWallCm:null,c=(()=>"draw"===this.host._tool&&n.length&&null!=l?this.host._contourClosed?n:this.host._cursorPt?[...n,this.host._cursorPt]:n.length>=2?n:null:null)(),d=c?Ha(c.length-1,this.host._contourClosed?[...this.host._draftSegmentCms,this.host._closingWallCm??void 0]:this.host._draftSegmentCms,l,F).map(t=>W(t,this.host._cellCm,this.host._gridPitch)/2):[],p=c?ti(c,W(l,this.host._cellCm,this.host._gridPitch)/2,this.host._contourClosed,d):"",_=c?this._drawPreviewJoinPatchD(c,d):"",u=this.host._wallFaceBatch?.candidates[this.host._wallFaceBatch.index]?.repair||this.host._wallRepairDiagnostic;return he` + ${this._gridLevels()?he``:a} + ${o.map(t=>he``)} ${this._renderPhysicalEditorLayer()} - ${"column"===this.host._tool&&this.host._cursorPt&&this.host._drawWallCm?le`{const t={shape:"square",center:this.host._cursorPt,cm:this.host._drawWallCm};return`M ${Kt(t,this.host._cellCm,this.host._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`})()}>`:a} - ${p?le` + ${"column"===this.host._tool&&this.host._cursorPt&&this.host._drawWallCm?he`{const t={shape:"square",center:this.host._cursorPt,cm:this.host._drawWallCm};return`M ${Kt(t,this.host._cellCm,this.host._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`})()}>`:a} + ${p?he` `:a} - ${c&&0===h?le`t.join(",")).join(" ")}>`:a} - ${_?le` + ${_?he` `:a} - ${u?le``:a} - ${"split"===this.host._tool&&this.host._splitSel?.pts?.length?le`${this.host._splitSel.pts.length>1?le``:a} - ${this.host._splitSel.pts.map((t,e)=>le`1?he``:a} + ${this.host._splitSel.pts.map((t,e)=>he``)} - ${this.host._cursorPt?le``:a}`:a} - `}_renderActiveChainInk(){const t=this.host._path,e=this.host._gridPitch;return le` - ${t.length>1?le``:a} - ${t.length&&this.host._cursorPt&&"draw"===this.host._tool&&!this.host._contourClosed?le`1?he``:a} + ${t.length&&this.host._cursorPt&&"draw"===this.host._tool&&!this.host._contourClosed?he` - ${this.host._activePlanSnapCandidate||this.host._activePlanSnapConflicts.length?a:le``}`:a} - ${t.map((t,s)=>le`he``)} `}_renderPartitionDeleteDialog(){const t=this.host._partitionDeleteDialog,e="mi"===this.host.hass?.config?.unit_system?.length;return n`

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

    - ${t.openings.map(t=>n`
  • ${this.host._t("confirm.delete_partition_openings_item",{type:this.host._t(`opening.${t.type}`),length:Qt(t.length*hl/this.host._gridPitch*this.host._cellCm,e)})}
  • `)} + ${t.openings.map(t=>n`
  • ${this.host._t("confirm.delete_partition_openings_item",{type:this.host._t(`opening.${t.type}`),length:Qt(t.length*lh/this.host._gridPitch*this.host._cellCm,e)})}
  • `)}
@@ -1725,7 +1725,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4
-
`}_discoveryFilterState(t){const e=this.host._settings,s=void 0!==t.draftGroupLights?t.draftGroupLights:!1!==e.group_lights,i=e.exclude_integrations,o=void 0!==t.draftExcluded?null===t.draftExcluded?[...ei]:t.draftExcluded:i?[...i]:[...ei],a=void 0!==t.draftExcluded?null===t.draftExcluded:!i,n=void 0!==t.draftGroupLights||void 0!==t.draftExcluded;return{groupLights:s,excluded:o.sort(),usesProductList:a,dirty:n}}_registryIntegrations(){const t=new Set,e=this.host._fullRegistryHass;for(const s of Object.values(e?.entities||{}))s?.platform&&t.add(String(s.platform));for(const s of Object.values(e?.devices||{})){const e=s?.identifiers?.[0],i=Array.isArray(e)?e[0]:null;i&&t.add(String(i))}return[...t].sort()}_discoveryFilterPreview(t){const e=this._discoveryFilterState(t),s=[e.groupLights?1:0,e.usesProductList?"p":e.excluded.join(","),this.host._cfgEpoch,this.host._regSignature].join("|");if(this._discoveryPreviewMemo?.key===s)return this._discoveryPreviewMemo.value;const i={hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),markers:this.host._markers,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||"",loc:t=>this.host._t(t),iconRules:this.host._iconRules},o=(t,e)=>new Set(Ti({...i,settings:t,excluded:e})),a=(t,e)=>new Set(zi({...i,settings:t,excluded:e}).map(t=>t.bindingRef||t.id)),n=si(this.host._settings),r={...this.host._settings,group_lights:e.groupLights},l=new Set(e.excluded),h=o(this.host._settings,n),c=o(r,l),d=a(this.host._settings,n),p=a(r,l);let _=0,u=0,m=0;const g=t=>t.includes("light.");for(const t of h)c.has(t)||(_++,g(t)&&m++);for(const t of c)h.has(t)||(u++,g(t)&&m++);for(const t of p)d.has(t)||(_++,g(t)&&m++);for(const t of d)p.has(t)||(u++,g(t)&&m++);const f={appear:_,hide:u,lights:m};return this._discoveryPreviewMemo={key:s,value:f},f}async _saveDiscoveryFilters(t){const e=this.host._serverCfg;if(!e)return;const s=this._discoveryFilterState(t),i={...e.settings};s.groupLights?delete i.group_lights:i.group_lights=!1,s.usesProductList?delete i.exclude_integrations:i.exclude_integrations=s.excluded,this.host._serverCfg={...e,settings:i},this.host._deviceInboxMemo=null,this._discoveryPreviewMemo=null,this.host._regSignature="",this.host._deviceInbox&&(this.host._deviceInbox={...t,draftGroupLights:void 0,draftExcluded:void 0}),this._saveConfig(),this.host._maybeRebuildDevices(),this.host.requestUpdate()}_renderDiscoveryFilters(t){const e=this._discoveryFilterState(t),s=e=>this.host._deviceInbox={...t,...e},i=t.filtersOpen&&e.dirty?this._discoveryFilterPreview(t):null,o=this._registryIntegrations().filter(t=>!e.excluded.includes(t));return n`
`}_discoveryFilterState(t){const e=this.host._settings,s=void 0!==t.draftGroupLights?t.draftGroupLights:!1!==e.group_lights,i=e.exclude_integrations,o=void 0!==t.draftExcluded?null===t.draftExcluded?[...ei]:t.draftExcluded:i?[...i]:[...ei],a=void 0!==t.draftExcluded?null===t.draftExcluded:!i,n=void 0!==t.draftGroupLights||void 0!==t.draftExcluded;return{groupLights:s,excluded:o.sort(),usesProductList:a,dirty:n}}_registryIntegrations(){const t=new Set,e=this.host._fullRegistryHass;for(const s of Object.values(e?.entities||{}))s?.platform&&t.add(String(s.platform));for(const s of Object.values(e?.devices||{})){const e=s?.identifiers?.[0],i=Array.isArray(e)?e[0]:null;i&&t.add(String(i))}return[...t].sort()}_discoveryFilterPreview(t){const e=this._discoveryFilterState(t),s=[e.groupLights?1:0,e.usesProductList?"p":e.excluded.join(","),this.host._cfgEpoch,this.host._regSignature].join("|");if(this._discoveryPreviewMemo?.key===s)return this._discoveryPreviewMemo.value;const i={hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),markers:this.host._markers,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||"",loc:t=>this.host._t(t),iconRules:this.host._iconRules},o=(t,e)=>new Set(Ti({...i,settings:t,excluded:e})),a=(t,e)=>new Set(zi({...i,settings:t,excluded:e}).map(t=>t.bindingRef||t.id)),n=si(this.host._settings),r={...this.host._settings,group_lights:e.groupLights},h=new Set(e.excluded),l=o(this.host._settings,n),c=o(r,h),d=a(this.host._settings,n),p=a(r,h);let _=0,u=0,m=0;const g=t=>t.includes("light.");for(const t of l)c.has(t)||(_++,g(t)&&m++);for(const t of c)l.has(t)||(u++,g(t)&&m++);for(const t of p)d.has(t)||(_++,g(t)&&m++);for(const t of d)p.has(t)||(u++,g(t)&&m++);const f={appear:_,hide:u,lights:m};return this._discoveryPreviewMemo={key:s,value:f},f}async _saveDiscoveryFilters(t){const e=this.host._serverCfg;if(!e)return;const s=this._discoveryFilterState(t),i={...e.settings};s.groupLights?delete i.group_lights:i.group_lights=!1,s.usesProductList?delete i.exclude_integrations:i.exclude_integrations=s.excluded,this.host._serverCfg={...e,settings:i},this.host._deviceInboxMemo=null,this._discoveryPreviewMemo=null,this.host._regSignature="",this.host._deviceInbox&&(this.host._deviceInbox={...t,draftGroupLights:void 0,draftExcluded:void 0}),this._saveConfig(),this.host._maybeRebuildDevices(),this.host.requestUpdate()}_renderDiscoveryFilters(t){const e=this._discoveryFilterState(t),s=e=>this.host._deviceInbox={...t,...e},i=t.filtersOpen&&e.dirty?this._discoveryFilterPreview(t):null,o=this._registryIntegrations().filter(t=>!e.excluded.includes(t));return n`
s({filtersOpen:t.target.open})}> ${this.host._t("device_inbox.filters_title")}
`}_renderDeviceInbox(){const t=this.host._deviceInbox,e=this._deviceInboxRows(),s=Object.fromEntries(["on_plan","available","hidden","readd"].map(t=>[t,e.filter(e=>e.category===t).length])),i=function(t,e,s,i=!1){const o=s.trim().toLocaleLowerCase();return t.filter(t=>t.category===e&&(!i||t.isNew)&&(!o||t.searchText.includes(o)))}(e,t.tab,t.search,"on_plan"===t.tab&&t.onlyNew),o=i.slice(0,t.limit),r=t=>this.host._t(`device_inbox.tab_${t}`),l=`device_inbox.empty_${t.tab}`;return n``}_renderDeviceInbox(){const t=this.host._deviceInbox,e=this._deviceInboxRows(),s=Object.fromEntries(["on_plan","available","hidden","readd"].map(t=>[t,e.filter(e=>e.category===t).length])),i=function(t,e,s,i=!1){const o=s.trim().toLocaleLowerCase();return t.filter(t=>t.category===e&&(!i||t.isNew)&&(!o||t.searchText.includes(o)))}(e,t.tab,t.search,"on_plan"===t.tab&&t.onlyNew),o=i.slice(0,t.limit),r=t=>this.host._t(`device_inbox.tab_${t}`),h=`device_inbox.empty_${t.tab}`;return n`this.host._deviceInbox=null}>
@@ -1846,7 +1846,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4
`:a} - `}):n`
${this.host._t(l)}
`} + `}):n`
${this.host._t(h)}
`} ${i.length>o.length?n` - `}_markerValueBadgeFields(t){return ii({touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition})}_markerValueSourceFields(t){return oi({touched:t.valueSourceTouched,originalHas:t.originalHasValueSource,original:t.originalValueSource,source:t.valueSource})}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=rs(t.room),s=Qe(t.binding,t.devId,()=>"__hp_device_preview__"),i=this.host._markers.find(e=>e.id===s||e.id===t.devId),o=is(t.binding,t.controls,this.host._bindingEntities(t.binding)),a=this._effectiveStoredTapAction(t),n={id:s,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"===a&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:o.length?o:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),...this._markerValueSourceFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=rl(t.glowRadius);return null==e||e<=0?null:Math.round(this.host._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:i?.vacuum||null};return("virtual"===t.binding||t.room)&&(n.space=e?.space||("virtual"===t.binding?this.host._space:null),n.area=e?.area||null,n.room_id=e?.roomId||null),n}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const s=`${this.host._haRegistry.revision}\n${Ht(this.host._markers)}\n${JSON.stringify(e)}`;if(this.host._markerPreviewMemo?.key===s)return this.host._markerPreviewMemo.device;const i=ai({hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,siblingMarkers:this.host._markers,settings:this.host._settings,excluded:this.host._excluded,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||this.host._space,loc:t=>this.host._t(t),iconRules:this.host._iconRules});return this.host._markerPreviewMemo={key:s,device:i},i}_markerPreviewDevices(t){const e=this.host._markerPreviewDevicesMemo;if(e?.base===this.host._devices&&e.preview===t)return e.devices;const s=[...this.host._devices.filter(e=>e.id!==t.id),t];return this.host._markerPreviewDevicesMemo={base:this.host._devices,preview:t,devices:s},s}_toggleIntent(t,e=this.host._devices){return this.host._toggleIntent(t,e)}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s=this._markerPreviewDevices(e);return this._toggleIntent(e,s)}_toggleStateText(t,e){return this.host._toggleStateText(t,e)}_toggleConfirmationStateText(t){return this.host._toggleConfirmationStateText(t)}_toggleConfirmationLines(t){return this.host._toggleConfirmationLines(t)}_toggleHintLines(t){if(!t)return[];const e=t=>this.host._t(`marker.toggle_effect_${t.replace("-","_")}`),s=t=>this.host._t(`marker.toggle_skip_${t.replace("-","_")}`);return ni(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this.host._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),s=t.name||e;return this.host._t("marker.toggle_hint_single",{name:s,id:e})},group:t=>this.host._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,s)=>"virtual-light"===t.via?this.host._t("marker.virtual_light_current",{state:this.host._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(s)}):this.host._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(s)}),groupCurrentNext:(t,s)=>this.host._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(s)}),skipped:t=>this.host._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${s(t.reason)})`}).join(", ")}),none:t=>this.host._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:os(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),s=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},i="toggle"===s.tapAction?this._toggleHintLines(this._toggleIntentForDialog(s)).join(" "):"";return{...s,tapHintAnnouncement:i}}_valueBadgeForBinding(t,e){const s={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},i=this._markerPreviewDevice(s);if(!i)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const o=[...this.host._devices.filter(t=>t.id!==i.id),i],a=es(this.host._planHass,i,o),n=ss(this.host._planHass,i,a);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!n,valueBadgeSource:n,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s={...e,hidden:!1};return ri(li(this.host._planHass,[...this.host._devices.filter(t=>t.id!==s.id),s],null,this.host._virtualLights).filter(t=>t.device.id===s.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},s=this._markerPreviewDevice(e);return!!s&&hi(this.host._planHass,{...s})}_setMarkerLightRole(t){const e=this.host._markerDialog;e&&(this.host._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.host.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this.host._planEntityAvailable(t)};const e=t.slice(7),s=this.host._markers.find(t=>t.id===e),i=this.host._devices.find(t=>t.id===e);if(!s||s.removed||!0!==s.is_light)return{label:this.host._t("marker.control_missing_label"),sub:`${this.host._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const o=this.host._serverCfg?.spaces.find(t=>t.id===(i?.space||s.space)),a=!!i&&ci(i).length>0;return{label:s.name||i?.name||e,sub:[o?.title||i?.space||s.space,s.room_id||i?.area,a?"":this.host._t("marker.control_passive")].filter(Boolean).join(" · "),icon:s.icon||i?.icon||"mdi:lightbulb-outline",warning:!0===s.hidden||!0===i?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this.host._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this.host._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this.host._t("marker.value_badge_state",{name:t.label});const s=this.host.hass.states[e.entity_id]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this.host._t(`marker.value_badge_attr_${e.attribute}`,{name:s})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",s=[],i=new Set;for(const t of this.host._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this.host._bindingStatus(t.binding).kind)continue;const o=this.host._devices.find(e=>e.id===t.id);if(!o||o.hidden)continue;const a=this._controlRefInfo(`marker:${t.id}`);for(const t of ci(o))i.add(t);s.push({value:`marker:${t.id}`,label:a.label,sub:a.sub,icon:a.icon,search:`${a.label} ${a.sub} ${t.id} ${ci(o).join(" ")}`.toLowerCase()})}const o=Object.keys(this.host.hass.states||{}).filter(e=>di(e)&&!i.has(e)&&pi(t.binding,[e],this.host._bindingEntities(t.binding)).length>0&&this.host._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()}}),a=t.controlsFilter.trim().toLowerCase();return[...s,...o].filter(e=>!t.controls.includes(e.value)&&(!a||e.search.includes(a))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const s=this._markerDraft(t)?.id||t.devId||"";if(!s)return void this.host._showToast(this.host._t("toast.marker_binding_required"));const i=e.slice(7),o=this._markerDraft(t),a=o?[...this.host._markers.filter(t=>t.id!==s),o]:this.host._markers;if(_i(a,s,i))return void this.host._showToast(this.host._t("toast.marker_control_cycle"))}this.host._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this.host._markerDialog;if(!e)return;if("auto"===t)return void(this.host._markerDialog={...e,glowMode:t,glowTouched:!0});const s=this._markerSpatialSource(e),i=ui(s?this.host._planHass.states[s.eid]:void 0,null,this.host._fillColors.glow_light.c),o=!e.glowColorDrafted,a="fixed"===t&&!e.glowBrightnessDrafted;this.host._markerDialog={...e,glowMode:t,glowColor:o?i.c:e.glowColor,glowBrightness:a?Math.max(1,Math.round(100*i.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this.host._markerDialog,e="virtual"===t.bindingMode,s=this._bindingCandidates();this.host._bindingEntities(t.binding);const i=e?null:this.host._bindingStatus(t.binding),o=!e&&this.host._bindingHasHaPage(t.binding),r=this._markerPreviewDevice(t),l=this._effectiveMarkerTapAction(t,r),h=r?_s(this.host._serverCfg?.spaces.find(t=>t.id===r.space)):null,c=r?this._markerPreviewDevices(r):this.host._devices,d="toggle"===l&&r?this._toggleIntent(r,c):null,p=this._toggleHintLines(d),_=r?mi(this.host._planHass,r,{liveStates:!1!==this.host._config?.live_states,showTemperature:!1!==this.host._config?.show_temperature,showSignal:h?.showLqi??!1!==this.host._config?.show_signal,designPreview:!0,activityRuntime:this.host._activityRt.get(r.id),lightDevices:c,registryHass:this.host._fullRegistryHass,reducedMotion:this.host._reducedMotion}):null,u=r?es(this.host._planHass,r,c):[],m=r?ss(this.host._planHass,r,u):null,g=t.valueBadgeTouched?t.valueBadgeEnabled:!!_?.valueBadge,f=t.valueBadgeTouched?t.valueBadgeSource:_?.valueBadge?.source||t.valueBadgeSource,b=t.valueBadgeTouched?t.valueBadgePosition:_?.valueBadge?.position||t.valueBadgePosition,v=gi(f),y=!!f&&!u.some(t=>t.key===v),$=u.find(t=>t.key===v),w=gi(t.valueSource),k=!(!t.valueSource||w&&u.some(t=>t.key===w)),x=u.find(t=>t.key===w),S=_?.valueSource?.sourceKey||"",M=this._markerAutoHasSpatialSource(t),D=!!r&&fi(this.host._planHass,{...r}),C=bi(t.lightRole,M,D,t.glowMode),P=!C.sourceExists,I=!C.fromSourceEnabled,R=C.passive,T=C.effectiveMode,z="never"===t.lightRole?this.host._t("marker.glow_disabled_never"):"auto"!==t.lightRole||M?R?this.host._t("marker.glow_passive_hint"):this.host._t("marker.glow_disabled_no_entity"):this.host._t("marker.glow_disabled_auto"),F=r?ci(r):[],A=r&&vi(r)||"",N=!!t.lightEntity&&!F.includes(t.lightEntity),H=r?yi(r):[],L=!!t.toggleEntity&&!H.includes(t.toggleEntity),O="toggle"===l?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=O?[...O.targets,...O.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",B=(()=>{if(e)return null;const i=s.find(e=>e.value===t.binding);if(i)return i.label;const[o,a]=t.binding.split(":");return"device"===o?this.host._fullRegistryHass.devices[a]?.name_by_user||this.host._fullRegistryHass.devices[a]?.name||a:this.host._fullRegistryHass.entities[a]?.name||this.host.hass.states[a]?.attributes?.friendly_name||a})();return n``}_markerValueBadgeFields(t){return ii({touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition})}_markerValueSourceFields(t){return oi({touched:t.valueSourceTouched,originalHas:t.originalHasValueSource,original:t.originalValueSource,source:t.valueSource})}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=rs(t.room),s=Qe(t.binding,t.devId,()=>"__hp_device_preview__"),i=this.host._markers.find(e=>e.id===s||e.id===t.devId),o=is(t.binding,t.controls,this.host._bindingEntities(t.binding)),a=this._effectiveStoredTapAction(t),n={id:s,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"===a&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:o.length?o:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),...this._markerValueSourceFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=rh(t.glowRadius);return null==e||e<=0?null:Math.round(this.host._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:i?.vacuum||null};return("virtual"===t.binding||t.room)&&(n.space=e?.space||("virtual"===t.binding?this.host._space:null),n.area=e?.area||null,n.room_id=e?.roomId||null),n}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const s=`${this.host._haRegistry.revision}\n${Ht(this.host._markers)}\n${JSON.stringify(e)}`;if(this.host._markerPreviewMemo?.key===s)return this.host._markerPreviewMemo.device;const i=ai({hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,siblingMarkers:this.host._markers,settings:this.host._settings,excluded:this.host._excluded,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||this.host._space,loc:t=>this.host._t(t),iconRules:this.host._iconRules});return this.host._markerPreviewMemo={key:s,device:i},i}_markerPreviewDevices(t){const e=this.host._markerPreviewDevicesMemo;if(e?.base===this.host._devices&&e.preview===t)return e.devices;const s=[...this.host._devices.filter(e=>e.id!==t.id),t];return this.host._markerPreviewDevicesMemo={base:this.host._devices,preview:t,devices:s},s}_toggleIntent(t,e=this.host._devices){return this.host._toggleIntent(t,e)}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s=this._markerPreviewDevices(e);return this._toggleIntent(e,s)}_toggleStateText(t,e){return this.host._toggleStateText(t,e)}_toggleConfirmationStateText(t){return this.host._toggleConfirmationStateText(t)}_toggleConfirmationLines(t){return this.host._toggleConfirmationLines(t)}_toggleHintLines(t){if(!t)return[];const e=t=>this.host._t(`marker.toggle_effect_${t.replace("-","_")}`),s=t=>this.host._t(`marker.toggle_skip_${t.replace("-","_")}`);return ni(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this.host._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),s=t.name||e;return this.host._t("marker.toggle_hint_single",{name:s,id:e})},group:t=>this.host._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,s)=>"virtual-light"===t.via?this.host._t("marker.virtual_light_current",{state:this.host._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(s)}):this.host._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(s)}),groupCurrentNext:(t,s)=>this.host._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(s)}),skipped:t=>this.host._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${s(t.reason)})`}).join(", ")}),none:t=>this.host._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:os(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),s=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},i="toggle"===s.tapAction?this._toggleHintLines(this._toggleIntentForDialog(s)).join(" "):"";return{...s,tapHintAnnouncement:i}}_valueBadgeForBinding(t,e){const s={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},i=this._markerPreviewDevice(s);if(!i)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const o=[...this.host._devices.filter(t=>t.id!==i.id),i],a=es(this.host._planHass,i,o),n=ss(this.host._planHass,i,a);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!n,valueBadgeSource:n,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s={...e,hidden:!1};return ri(hi(this.host._planHass,[...this.host._devices.filter(t=>t.id!==s.id),s],null,this.host._virtualLights).filter(t=>t.device.id===s.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},s=this._markerPreviewDevice(e);return!!s&&li(this.host._planHass,{...s})}_setMarkerLightRole(t){const e=this.host._markerDialog;e&&(this.host._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.host.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this.host._planEntityAvailable(t)};const e=t.slice(7),s=this.host._markers.find(t=>t.id===e),i=this.host._devices.find(t=>t.id===e);if(!s||s.removed||!0!==s.is_light)return{label:this.host._t("marker.control_missing_label"),sub:`${this.host._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const o=this.host._serverCfg?.spaces.find(t=>t.id===(i?.space||s.space)),a=!!i&&ci(i).length>0;return{label:s.name||i?.name||e,sub:[o?.title||i?.space||s.space,s.room_id||i?.area,a?"":this.host._t("marker.control_passive")].filter(Boolean).join(" · "),icon:s.icon||i?.icon||"mdi:lightbulb-outline",warning:!0===s.hidden||!0===i?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this.host._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this.host._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this.host._t("marker.value_badge_state",{name:t.label});const s=this.host.hass.states[e.entity_id]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this.host._t(`marker.value_badge_attr_${e.attribute}`,{name:s})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",s=[],i=new Set;for(const t of this.host._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this.host._bindingStatus(t.binding).kind)continue;const o=this.host._devices.find(e=>e.id===t.id);if(!o||o.hidden)continue;const a=this._controlRefInfo(`marker:${t.id}`);for(const t of ci(o))i.add(t);s.push({value:`marker:${t.id}`,label:a.label,sub:a.sub,icon:a.icon,search:`${a.label} ${a.sub} ${t.id} ${ci(o).join(" ")}`.toLowerCase()})}const o=Object.keys(this.host.hass.states||{}).filter(e=>di(e)&&!i.has(e)&&pi(t.binding,[e],this.host._bindingEntities(t.binding)).length>0&&this.host._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()}}),a=t.controlsFilter.trim().toLowerCase();return[...s,...o].filter(e=>!t.controls.includes(e.value)&&(!a||e.search.includes(a))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const s=this._markerDraft(t)?.id||t.devId||"";if(!s)return void this.host._showToast(this.host._t("toast.marker_binding_required"));const i=e.slice(7),o=this._markerDraft(t),a=o?[...this.host._markers.filter(t=>t.id!==s),o]:this.host._markers;if(_i(a,s,i))return void this.host._showToast(this.host._t("toast.marker_control_cycle"))}this.host._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this.host._markerDialog;if(!e)return;if("auto"===t)return void(this.host._markerDialog={...e,glowMode:t,glowTouched:!0});const s=this._markerSpatialSource(e),i=ui(s?this.host._planHass.states[s.eid]:void 0,null,this.host._fillColors.glow_light.c),o=!e.glowColorDrafted,a="fixed"===t&&!e.glowBrightnessDrafted;this.host._markerDialog={...e,glowMode:t,glowColor:o?i.c:e.glowColor,glowBrightness:a?Math.max(1,Math.round(100*i.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this.host._markerDialog,e="virtual"===t.bindingMode,s=this._bindingCandidates();this.host._bindingEntities(t.binding);const i=e?null:this.host._bindingStatus(t.binding),o=!e&&this.host._bindingHasHaPage(t.binding),r=this._markerPreviewDevice(t),h=this._effectiveMarkerTapAction(t,r),l=r?_s(this.host._serverCfg?.spaces.find(t=>t.id===r.space)):null,c=r?this._markerPreviewDevices(r):this.host._devices,d="toggle"===h&&r?this._toggleIntent(r,c):null,p=this._toggleHintLines(d),_=r?mi(this.host._planHass,r,{liveStates:!1!==this.host._config?.live_states,showTemperature:!1!==this.host._config?.show_temperature,showSignal:l?.showLqi??!1!==this.host._config?.show_signal,designPreview:!0,activityRuntime:this.host._activityRt.get(r.id),lightDevices:c,registryHass:this.host._fullRegistryHass,reducedMotion:this.host._reducedMotion}):null,u=r?es(this.host._planHass,r,c):[],m=r?ss(this.host._planHass,r,u):null,g=t.valueBadgeTouched?t.valueBadgeEnabled:!!_?.valueBadge,f=t.valueBadgeTouched?t.valueBadgeSource:_?.valueBadge?.source||t.valueBadgeSource,b=t.valueBadgeTouched?t.valueBadgePosition:_?.valueBadge?.position||t.valueBadgePosition,v=gi(f),y=!!f&&!u.some(t=>t.key===v),$=u.find(t=>t.key===v),w=gi(t.valueSource),k=!(!t.valueSource||w&&u.some(t=>t.key===w)),x=u.find(t=>t.key===w),S=_?.valueSource?.sourceKey||"",M=this._markerAutoHasSpatialSource(t),D=!!r&&fi(this.host._planHass,{...r}),C=bi(t.lightRole,M,D,t.glowMode),P=!C.sourceExists,I=!C.fromSourceEnabled,R=C.passive,T=C.effectiveMode,z="never"===t.lightRole?this.host._t("marker.glow_disabled_never"):"auto"!==t.lightRole||M?R?this.host._t("marker.glow_passive_hint"):this.host._t("marker.glow_disabled_no_entity"):this.host._t("marker.glow_disabled_auto"),F=r?ci(r):[],A=r&&vi(r)||"",N=!!t.lightEntity&&!F.includes(t.lightEntity),H=r?yi(r):[],L=!!t.toggleEntity&&!H.includes(t.toggleEntity),O="toggle"===h?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=O?[...O.targets,...O.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",B=(()=>{if(e)return null;const i=s.find(e=>e.value===t.binding);if(i)return i.label;const[o,a]=t.binding.split(":");return"device"===o?this.host._fullRegistryHass.devices[a]?.name_by_user||this.host._fullRegistryHass.devices[a]?.name||a:this.host._fullRegistryHass.entities[a]?.name||this.host.hass.states[a]?.attributes?.friendly_name||a})();return n`this._closeMarkerDialog()}>
@@ -1926,13 +1926,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 - ${"toggle"===l&&(H.length>1||L)?n`
+ ${"toggle"===h&&(H.length>1||L)?n`
${this._help("marker.toggle_entity.help")} @@ -1952,11 +1952,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 ${this.host._t("marker.toggle_entity_missing",{entity:t.toggleEntity,fallback:E||this.host._t("marker.toggle_entity_none")})}

`:a}
`:a} - ${"toggle"===l?n`
+ ${"toggle"===h?n`
${p.map(t=>n`
${t}
`)}
${t.tapHintAnnouncement}
`:a} - ${"run"===l?(()=>{const e=t.runFilter.trim().toLowerCase(),s=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),i=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return n` + ${"run"===h?(()=>{const e=t.runFilter.trim().toLowerCase(),s=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),i=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return n` ${t.tapTarget&&!i?n`
${this.host._t("marker.run_target_gone",{id:t.tapTarget})}
`:a} ${this.host._t("marker.nothing_found")}
`}
`}`})():a} - ${"run"===l||"toggle"===l?n`
`:a}`:a}`}_renderRoomDialog(){const t=!!this.host._roomEditId,e=t?null:this.host._wallFaceBatch,s=e&&e.candidates.length>1?this.host._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",i=!!this.host._areaSel||!!this.host._nameSel.trim(),o=_s(this.host._curSpaceCfg),r=this.host._roomFill||o.fill,l=this.host._roomCustomFill||o.customFill,h=[...this.host._freeAreas];if(t&&this.host._areaSel&&!h.some(t=>t.area_id===this.host._areaSel)){const t=this.host.hass.areas[this.host._areaSel];t&&h.unshift(t)}return n``:a}`:a}`}_renderRoomDialog(){const t=!!this.host._roomEditId,e=t?null:this.host._wallFaceBatch,s=e&&e.candidates.length>1?this.host._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",i=!!this.host._areaSel||!!this.host._nameSel.trim(),o=_s(this.host._curSpaceCfg),r=this.host._roomFill||o.fill,h=this.host._roomCustomFill||o.customFill,l=[...this.host._freeAreas];if(t&&this.host._areaSel&&!l.some(t=>t.area_id===this.host._areaSel)){const t=this.host.hass.areas[this.host._areaSel];t&&l.unshift(t)}return n`this._roomDialogCancel()}>
@@ -2526,7 +2526,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 @@ -2542,8 +2542,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 .label=${this.host._roomCustomFill?this.host._t("room.custom_fill_own"):this.host._t("room.custom_fill_space")} .opacityLabel=${this.host._t("space.opacity")} .pickerLabels=${this.host._colorPickerLabels} - .color=${l.c} - .opacity=${l.a} + .color=${h.c} + .opacity=${h.a} @hp-color-opacity-change=${t=>{this.host._roomCustomFill={c:t.detail.color,a:t.detail.opacity}}}> ${this.host._roomCustomFill?n``:a}
`:a} @@ -2575,4 +2575,4 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 ${this.host._t("btn.save")} `}
-
`}}export{pl as EDITOR_RUNTIME_FINGERPRINT,_l as HouseplanEditorRuntime}; +
`}}export{ph as EDITOR_RUNTIME_FINGERPRINT,_h as HouseplanEditorRuntime}; diff --git a/custom_components/houseplan/frontend/houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js b/custom_components/houseplan/frontend/houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js similarity index 97% rename from custom_components/houseplan/frontend/houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js rename to custom_components/houseplan/frontend/houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js index f048c01e..99d58e09 100644 --- a/custom_components/houseplan/frontend/houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js +++ b/custom_components/houseplan/frontend/houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js @@ -1,5 +1,5 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";import{l as t,ar as s,A as e,t as o,c as a,bV as l,bW as i,bX as h,bY as c,ao as n,bZ as r,c2 as p,b_ as d,b$ as _,c0 as u,c1 as g,cX as m,an as b,ap as $,cY as v}from"./houseplan-card-DVUSPdhz.js";import{i as f,c as y,e as w,r as D,a as k,b as S,s as C,t as M}from"./backdrop-pick-4jTd19VU.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?a``:e}_openSpaceDialog(t,s){if(!this.host._serverStorage||!this.host._serverCfg)return void this.host._showToast(this.host._t("toast.integration_missing"));if("edit"===t){const e=this.host._serverCfg.spaces.find(t=>t.id===s);if(!e)return;const o=l(e),a=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===o.fill?{...a||h,a:0}:a;return void(this.host._spaceDialog={mode:t,spaceId:s,title:e.title,planUrl:e.plan_url||null,planFile:null,source:e.plan_url?"file":"draw",showBorders:o.showBorders,showNames:o.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:o.hideDecor,hideOpenings:o.hideOpenings,roomColor:o.color,roomOpacity:o.opacity,fillMode:"none"===o.fill?"custom":o.fill,customFill:p,glowEnabled:o.glow,bgColor:o.bgColor,bgMode:"static"===e.settings?.bg_mode||"daynight"===e.settings?.bg_mode?e.settings.bg_mode:null,northDeg:n({},e.settings),sunRays:"boolean"==typeof e.settings?.sun_rays?e.settings.sun_rays:null,tempMin:o.tempMin,tempMax:o.tempMax,showLqi:o.showLqi??this.host._config?.show_signal??!0,cardFontScale:o.cardFontScale,labelTemp:o.labelTemp,labelHum:o.labelHum,labelLqi:o.labelLqi,labelLight:o.labelLight,cellCm:Number(e.cell_cm)>0?Number(e.cell_cm):5,cellCmInput:c(Number(e.cell_cm)>0?Number(e.cell_cm):5,this.host._imperial),cellCmTouched:!1,busy:!1})}const e=p(this.host._imperial);this.host._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:{...h,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:_,tempMax:d,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:e,cellCmInput:c(e,this.host._imperial),cellCmTouched:!1,busy:!1}}async _pickPlanFile(t){const s=t.target,e=s.files?.[0];if(!e||!this.host._spaceDialog)return;s.value="";const o=await y(e);if("reject"===o.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===o.kind)return void(this.host._backdropGuard=o.state);const a=await w(e,o.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:a})}_renderBackdropGuard(){return D(this.host,t=>{this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:t})},()=>{this.host._backdropGuard=null},this.host.hass)??e}_useServerPlan(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this.host._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let s=0;s<40;s++){const s=this.host._display(t);if(s){const e=await new Promise(t=>{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:0),e.onerror=()=>t(0),e.src=s}),o=this.host._spaceDialog;return o&&o.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...o,savedAspect:e},e):0}if(await new Promise(t=>setTimeout(t,150)),this.host._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){const s=this.host._spaceDialog,e=s?.saved?.find(s=>s.name===t);if(!s||!e||e.used_by.length||e.url===s.planUrl)return;const o=await this.host._confirmDanger({key:"delete-plan",kind:"destructive",title:this.host._t("confirm.delete_plan_title"),message:this.host._t("confirm.delete_plan_body"),objectName:t,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),a=this.host._spaceDialog,l=a?.saved?.find(s=>s.name===t);if(o&&a&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==a.planUrl)try{await this.host.hass.callWS({type:"houseplan/plans/delete",name:t});const s=this.host._spaceDialog;s?.saved&&(this.host._spaceDialog={...s,saved:s.saved.filter(s=>s.name!==t)})}catch(t){this.host._showToast(this.host._t("toast.plan_delete_failed",{err:this.host._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return a`
${this.host._t("space.loading")}
`;const s=t.saved||[];if(!s.length)return a`
${this.host._t("space.no_saved")}
`;return a`
+globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";import{l as t,ar as s,A as e,t as o,c as a,bV as l,bW as i,bX as h,bY as c,ao as n,bZ as r,c2 as p,b_ as _,b$ as d,c0 as u,c1 as g,cX as m,an as b,ap as $,cY as v}from"./houseplan-card-BSOQusOQ.js";import{i as f,c as y,e as w,r as D,a as k,b as S,s as C,t as M}from"./backdrop-pick-BpYD69bz.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?a``:e}_openSpaceDialog(t,s){if(!this.host._serverStorage||!this.host._serverCfg)return void this.host._showToast(this.host._t("toast.integration_missing"));if("edit"===t){const e=this.host._serverCfg.spaces.find(t=>t.id===s);if(!e)return;const o=l(e),a=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===o.fill?{...a||h,a:0}:a;return void(this.host._spaceDialog={mode:t,spaceId:s,title:e.title,planUrl:e.plan_url||null,planFile:null,source:e.plan_url?"file":"draw",showBorders:o.showBorders,showNames:o.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:o.hideDecor,hideOpenings:o.hideOpenings,roomColor:o.color,roomOpacity:o.opacity,fillMode:"none"===o.fill?"custom":o.fill,customFill:p,glowEnabled:o.glow,bgColor:o.bgColor,bgMode:"static"===e.settings?.bg_mode||"daynight"===e.settings?.bg_mode?e.settings.bg_mode:null,northDeg:n({},e.settings),sunRays:"boolean"==typeof e.settings?.sun_rays?e.settings.sun_rays:null,tempMin:o.tempMin,tempMax:o.tempMax,showLqi:o.showLqi??this.host._config?.show_signal??!0,cardFontScale:o.cardFontScale,labelTemp:o.labelTemp,labelHum:o.labelHum,labelLqi:o.labelLqi,labelLight:o.labelLight,cellCm:Number(e.cell_cm)>0?Number(e.cell_cm):5,cellCmInput:c(Number(e.cell_cm)>0?Number(e.cell_cm):5,this.host._imperial),cellCmTouched:!1,busy:!1})}const e=p(this.host._imperial);this.host._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:{...h,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:d,tempMax:_,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:e,cellCmInput:c(e,this.host._imperial),cellCmTouched:!1,busy:!1}}async _pickPlanFile(t){const s=t.target,e=s.files?.[0];if(!e||!this.host._spaceDialog)return;s.value="";const o=await y(e);if("reject"===o.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===o.kind)return void(this.host._backdropGuard=o.state);const a=await w(e,o.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:a})}_renderBackdropGuard(){return D(this.host,t=>{this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:t})},()=>{this.host._backdropGuard=null},this.host.hass)??e}_useServerPlan(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this.host._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let s=0;s<40;s++){const s=this.host._display(t);if(s){const e=await new Promise(t=>{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:0),e.onerror=()=>t(0),e.src=s}),o=this.host._spaceDialog;return o&&o.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...o,savedAspect:e},e):0}if(await new Promise(t=>setTimeout(t,150)),this.host._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){const s=this.host._spaceDialog,e=s?.saved?.find(s=>s.name===t);if(!s||!e||e.used_by.length||e.url===s.planUrl)return;const o=await this.host._confirmDanger({key:"delete-plan",kind:"destructive",title:this.host._t("confirm.delete_plan_title"),message:this.host._t("confirm.delete_plan_body"),objectName:t,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),a=this.host._spaceDialog,l=a?.saved?.find(s=>s.name===t);if(o&&a&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==a.planUrl)try{await this.host.hass.callWS({type:"houseplan/plans/delete",name:t});const s=this.host._spaceDialog;s?.saved&&(this.host._spaceDialog={...s,saved:s.saved.filter(s=>s.name!==t)})}catch(t){this.host._showToast(this.host._t("toast.plan_delete_failed",{err:this.host._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return a`
${this.host._t("space.loading")}
`;const s=t.saved||[];if(!s.length)return a`
${this.host._t("space.no_saved")}
`;return a`
${s.map(s=>{return a`
@@ -16,7 +16,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4
`;var e})} -
`}async _saveConfigNow(){this.host._cfgEpoch++;try{await this.host._writeConfig()}catch(t){const s=t;throw s?.physicalGeometryRolledBack?await this.host._reloadRejectedPhysicalWrite():"conflict"===s?.code&&await this.host._reloadConfigOnly(),t}}async _saveSpaceDialog(){const t=this.host._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this.host._showToast(this.host._t("toast.plan_required"));const s="create"===t.mode&&0===(this.host._serverCfg?.spaces.length||0);this.host._spaceDialog={...t,busy:!0};try{const e="create"===t.mode?`s${Date.now().toString(36)}`:t.spaceId;let o=null;if("file"===t.source&&t.planFile){o={url:(await this.host.hass.callWS({type:"houseplan/plan/set",space_id:e,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let a=t.savedAspect||null;!o&&"file"===t.source&&t.planUrl&&!a&&this.host._aspectJob&&(a=await this.host._aspectJob||null);const l=this.host._serverCfg;let i=l.spaces.find(t=>t.id===e);if("create"===t.mode)i=k(e,t.title.trim()),l.spaces.push(i);else{if(!i)throw new Error(`space ${e} is gone from the config`);i.title=t.title.trim()}if(!i)throw new Error(`space ${e} is unavailable`);if(o?(i.plan_url=o.url,i.plan_aspect=o.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==i.plan_url&&(i.plan_url=t.planUrl,i.plan_aspect=a),"draw"===t.source&&(i.plan_url=null,i.plan_aspect=null,delete i.plan_x,delete i.plan_y,delete i.plan_scale,delete i.plan_scale_x,delete i.plan_scale_y,delete i.plan_angle),i.settings={...i.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):_,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):d,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},i.zero_wall_style=t.zeroWallStyle,i.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(F,t.cellCm)):5,await this._saveConfigNow(),this.host._spaceDialog=null,"create"===t.mode&&this.host._commitSpace(i.id),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._importQueue.length)this._openNextImport();else if(s||this.host._importTotal>0){const t=this.host._importTotal>0;this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),await this.host._requestMode("plan"),this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._showToast(this.host._t(s&&!t?"toast.space_added_onboard":"import.done"))}else this.host._showToast(this.host._t("create"===t.mode?"toast.space_added":"toast.space_saved")),"create"===t.mode&&("plan"!==this.host._mode?await this.host._requestMode("plan"):(this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._saveNav()))}catch(t){const s=t;"conflict"!==s?.code&&await this.host._reloadConfigOnly(!0),this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,busy:!1}),this.host._showToast(this.host._t("toast.error",{err:this.host._errText(t)}))}}async _deleteSpace(){const t=this.host._spaceDialog;if(!t||"edit"!==t.mode)return;const s=this.host._serverCfg;if(!s)return;const e=s.spaces.find(s=>s.id===t.spaceId);if(!e)return;const o=S(s,this.host._layout||{},t.spaceId||""),a=1===s.spaces.length&&s.spaces[0]?.id===t.spaceId;if(o.count&&!a)return void(this.host._spaceDialog={...t,deleteBlockers:o.count});const l=t.spaceId,i=await this.host._confirmDanger({key:"delete-space",kind:"destructive",title:this.host._t("confirm.delete_space_title"),message:this.host._t("confirm.delete_space_body"),objectName:e.title,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),h=this.host._spaceDialog,c=this.host._serverCfg;if(!i||!h||"edit"!==h.mode||h.busy||h.spaceId!==l||!c)return;if(!c.spaces.find(t=>t.id===l))return;const n=S(c,this.host._layout||{},l),r=1===c.spaces.length&&c.spaces[0]?.id===l;if(!n.count||r){this.host._spaceDialog={...h,deleteBlockers:0,busy:!0};try{this.host._saveConfigDebounced.pending()&&this.host._saveConfigDebounced.flush(),this.host._persistLayout.pending()&&this.host._persistLayout.flush(),await this.host._writeChain;const t=await this.host.hass.callWS({type:"houseplan/space/delete",space_id:l,expected_config_rev:this.host._cfgRev,expected_layout_rev:this.host._layoutRev}),[s,e]=await Promise.all([this.host.hass.callWS({type:"houseplan/config/get"}),this.host.hass.callWS({type:"houseplan/layout/get"})]);this.host._adoptStructuralResponses(s,e),this.host._cfgRev=t?.config_rev??this.host._cfgRev,this.host._layoutRev=t?.layout_rev??this.host._layoutRev,this.host._spaceDialog=null,this.host._space===l&&this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||""),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._showToast(this.host._t("toast.space_deleted"))}catch(t){const s=t;"conflict"!==s?.code&&"space_in_use"!==s?.code||await Promise.all([this.host._reloadConfigOnly(!0),this.host._reloadLayoutOnly()]);const e=this.host._serverCfg;if(this.host._spaceDialog&&e){const t=S(e,this.host._layout||{},l),s=1===e.spaces.length&&e.spaces[0]?.id===l;this.host._spaceDialog={...this.host._spaceDialog,busy:!1,deleteBlockers:s?0:t.count}}this.host._showToast(this.host._t("toast.delete_failed",{err:this.host._errText(t)}))}}else this.host._spaceDialog={...h,deleteBlockers:n.count}}_startImport(){const t=this.host._importDialog;if(!t)return;const s=t.floors.filter(t=>t.checked).map(t=>t.name);this.host._importDialog=null,s.length?(this.host._importQueue=s,this.host._importTotal=s.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this.host._importQueue.shift();if(void 0===t)return;const s=p(this.host._imperial);this.host._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:_,tempMax:d,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:s,cellCmInput:c(s,this.host._imperial),cellCmTouched:!1,busy:!1}}_skipImport(){this.host._spaceDialog=null,this.host._importQueue.length?this._openNextImport():this.host._importTotal>0&&this.host._model.length&&(this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),this.host._requestMode("plan").then(()=>{this.host._showToast(this.host._t("import.done"))}))}_renderImportDialog(){const t=this.host._importDialog,s=t.floors.filter(t=>t.checked).length;return a``}async _saveConfigNow(){this.host._cfgEpoch++;try{await this.host._writeConfig()}catch(t){const s=t;throw s?.physicalGeometryRolledBack?await this.host._reloadRejectedPhysicalWrite():"conflict"===s?.code&&await this.host._reloadConfigOnly(),t}}async _saveSpaceDialog(){const t=this.host._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this.host._showToast(this.host._t("toast.plan_required"));const s="create"===t.mode&&0===(this.host._serverCfg?.spaces.length||0);this.host._spaceDialog={...t,busy:!0};try{const e="create"===t.mode?`s${Date.now().toString(36)}`:t.spaceId;let o=null;if("file"===t.source&&t.planFile){o={url:(await this.host.hass.callWS({type:"houseplan/plan/set",space_id:e,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let a=t.savedAspect||null;!o&&"file"===t.source&&t.planUrl&&!a&&this.host._aspectJob&&(a=await this.host._aspectJob||null);const l=this.host._serverCfg;let i=l.spaces.find(t=>t.id===e);if("create"===t.mode)i=k(e,t.title.trim()),l.spaces.push(i);else{if(!i)throw new Error(`space ${e} is gone from the config`);i.title=t.title.trim()}if(!i)throw new Error(`space ${e} is unavailable`);if(o?(i.plan_url=o.url,i.plan_aspect=o.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==i.plan_url&&(i.plan_url=t.planUrl,i.plan_aspect=a),"draw"===t.source&&(i.plan_url=null,i.plan_aspect=null,delete i.plan_x,delete i.plan_y,delete i.plan_scale,delete i.plan_scale_x,delete i.plan_scale_y,delete i.plan_angle),i.settings={...i.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):d,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):_,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},i.zero_wall_style=t.zeroWallStyle,i.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(F,t.cellCm)):5,await this._saveConfigNow(),this.host._spaceDialog=null,"create"===t.mode&&this.host._commitSpace(i.id),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._importQueue.length)this._openNextImport();else if(s||this.host._importTotal>0){const t=this.host._importTotal>0;this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),await this.host._requestMode("plan"),this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._showToast(this.host._t(s&&!t?"toast.space_added_onboard":"import.done"))}else this.host._showToast(this.host._t("create"===t.mode?"toast.space_added":"toast.space_saved")),"create"===t.mode&&("plan"!==this.host._mode?await this.host._requestMode("plan"):(this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._saveNav()))}catch(t){const s=t;"conflict"!==s?.code&&await this.host._reloadConfigOnly(!0),this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,busy:!1}),this.host._showToast(this.host._t("toast.error",{err:this.host._errText(t)}))}}async _deleteSpace(){const t=this.host._spaceDialog;if(!t||"edit"!==t.mode)return;const s=this.host._serverCfg;if(!s)return;const e=s.spaces.find(s=>s.id===t.spaceId);if(!e)return;const o=S(s,this.host._layout||{},t.spaceId||""),a=1===s.spaces.length&&s.spaces[0]?.id===t.spaceId;if(o.count&&!a)return void(this.host._spaceDialog={...t,deleteBlockers:o.count});const l=t.spaceId,i=await this.host._confirmDanger({key:"delete-space",kind:"destructive",title:this.host._t("confirm.delete_space_title"),message:this.host._t("confirm.delete_space_body"),objectName:e.title,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),h=this.host._spaceDialog,c=this.host._serverCfg;if(!i||!h||"edit"!==h.mode||h.busy||h.spaceId!==l||!c)return;if(!c.spaces.find(t=>t.id===l))return;const n=S(c,this.host._layout||{},l),r=1===c.spaces.length&&c.spaces[0]?.id===l;if(!n.count||r){this.host._spaceDialog={...h,deleteBlockers:0,busy:!0};try{this.host._saveConfigDebounced.pending()&&this.host._saveConfigDebounced.flush(),this.host._persistLayout.pending()&&this.host._persistLayout.flush(),await this.host._writeChain;const t=await this.host.hass.callWS({type:"houseplan/space/delete",space_id:l,expected_config_rev:this.host._cfgRev,expected_layout_rev:this.host._layoutRev}),[s,e]=await Promise.all([this.host.hass.callWS({type:"houseplan/config/get"}),this.host.hass.callWS({type:"houseplan/layout/get"})]);this.host._adoptStructuralResponses(s,e),this.host._cfgRev=t?.config_rev??this.host._cfgRev,this.host._layoutRev=t?.layout_rev??this.host._layoutRev,this.host._spaceDialog=null,this.host._space===l&&this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||""),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._showToast(this.host._t("toast.space_deleted"))}catch(t){const s=t;"conflict"!==s?.code&&"space_in_use"!==s?.code||await Promise.all([this.host._reloadConfigOnly(!0),this.host._reloadLayoutOnly()]);const e=this.host._serverCfg;if(this.host._spaceDialog&&e){const t=S(e,this.host._layout||{},l),s=1===e.spaces.length&&e.spaces[0]?.id===l;this.host._spaceDialog={...this.host._spaceDialog,busy:!1,deleteBlockers:s?0:t.count}}this.host._showToast(this.host._t("toast.delete_failed",{err:this.host._errText(t)}))}}else this.host._spaceDialog={...h,deleteBlockers:n.count}}_startImport(){const t=this.host._importDialog;if(!t)return;const s=t.floors.filter(t=>t.checked).map(t=>t.name);this.host._importDialog=null,s.length?(this.host._importQueue=s,this.host._importTotal=s.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this.host._importQueue.shift();if(void 0===t)return;const s=p(this.host._imperial);this.host._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:d,tempMax:_,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:s,cellCmInput:c(s,this.host._imperial),cellCmTouched:!1,busy:!1}}_skipImport(){this.host._spaceDialog=null,this.host._importQueue.length?this._openNextImport():this.host._importTotal>0&&this.host._model.length&&(this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),this.host._requestMode("plan").then(()=>{this.host._showToast(this.host._t("import.done"))}))}_renderImportDialog(){const t=this.host._importDialog,s=t.floors.filter(t=>t.checked).length;return a`this.host._importDialog=null}>
${this.host._t("import.hint")}
diff --git a/custom_components/houseplan/frontend/houseplan-card.js b/custom_components/houseplan/frontend/houseplan-card.js index a8dea33d..77163c65 100644 --- a/custom_components/houseplan/frontend/houseplan-card.js +++ b/custom_components/houseplan/frontend/houseplan-card.js @@ -1 +1 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";try{await import("./houseplan-assets/houseplan-card-DVUSPdhz.js")}catch(e){if(!customElements.get("houseplan-card")){const l=String(navigator.language||"en").toLowerCase();const m=l.startsWith("ru")?"House Plan обновился — перезагрузите страницу (Ctrl+F5).":l.startsWith("de")?"House Plan wurde aktualisiert — bitte laden Sie die Seite neu (Strg+F5).":l.startsWith("fr")?"House Plan a été mis à jour — veuillez recharger la page (Ctrl+F5).":"House Plan was updated — please reload the page (Ctrl+F5).";customElements.define("houseplan-card",class extends HTMLElement{setConfig(){}getCardSize(){return 1}connectedCallback(){this.style.cssText="display:block;box-sizing:border-box;padding:16px;border:1px solid var(--divider-color,#e0e0e0);border-radius:var(--ha-card-border-radius,12px);background:var(--card-background-color,#fff);color:var(--primary-text-color,#212121);font:14px/1.4 var(--paper-font-body1_-_font-family,sans-serif)";this.textContent=m}})}console.error("[houseplan] stale entry: the main chunk is unavailable",e)} +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";try{await import("./houseplan-assets/houseplan-card-BSOQusOQ.js")}catch(e){if(!customElements.get("houseplan-card")){const l=String(navigator.language||"en").toLowerCase();const m=l.startsWith("ru")?"House Plan обновился — перезагрузите страницу (Ctrl+F5).":l.startsWith("de")?"House Plan wurde aktualisiert — bitte laden Sie die Seite neu (Strg+F5).":l.startsWith("fr")?"House Plan a été mis à jour — veuillez recharger la page (Ctrl+F5).":"House Plan was updated — please reload the page (Ctrl+F5).";customElements.define("houseplan-card",class extends HTMLElement{setConfig(){}getCardSize(){return 1}connectedCallback(){this.style.cssText="display:block;box-sizing:border-box;padding:16px;border:1px solid var(--divider-color,#e0e0e0);border-radius:var(--ha-card-border-radius,12px);background:var(--card-background-color,#fff);color:var(--primary-text-color,#212121);font:14px/1.4 var(--paper-font-body1_-_font-family,sans-serif)";this.textContent=m}})}console.error("[houseplan] stale entry: the main chunk is unavailable",e)} diff --git a/dist/houseplan-assets.json b/dist/houseplan-assets.json index b195470c..c689609e 100644 --- a/dist/houseplan-assets.json +++ b/dist/houseplan-assets.json @@ -1,125 +1,125 @@ { "schema": 1, - "fingerprint": "e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b", + "fingerprint": "8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804", "entry": "houseplan-card.js", "initialViewFiles": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js", + "houseplan-assets/houseplan-card-BSOQusOQ.js", "houseplan-card.js" ], - "initialViewGzipBytes": 285431, + "initialViewGzipBytes": 285425, "lazyFiles": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/de-BJMOdOYq.js", - "houseplan-assets/editor-BwnPil0h.js", - "houseplan-assets/fr-Dhu6XNE4.js", - "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js", - "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/de-DgYg-Z6S.js", + "houseplan-assets/editor-3Us45UEr.js", + "houseplan-assets/fr-DraSp50q.js", + "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js", + "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js" ], - "lazyGzipBytes": 199614, + "lazyGzipBytes": 199603, "lazyEditorFiles": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/editor-BwnPil0h.js", - "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/editor-3Us45UEr.js", + "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js" ], - "lazyEditorGzipBytes": 144471, + "lazyEditorGzipBytes": 144465, "lazyOnboardingFiles": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js" ], - "lazyOnboardingGzipBytes": 14031, + "lazyOnboardingGzipBytes": 14028, "lazyLocaleFiles": [ - "houseplan-assets/de-BJMOdOYq.js", - "houseplan-assets/fr-Dhu6XNE4.js" + "houseplan-assets/de-DgYg-Z6S.js", + "houseplan-assets/fr-DraSp50q.js" ], - "lazyLocaleGzipBytes": 48183, + "lazyLocaleGzipBytes": 48179, "files": [ { - "path": "houseplan-assets/backdrop-pick-4jTd19VU.js", - "sha256": "cf1b34643097c81af7b80fa3c7a39fd6a11f95db277d3780cceaad54a5d185f7", + "path": "houseplan-assets/backdrop-pick-BpYD69bz.js", + "sha256": "741e88fc0a470db685148c7d9488909cababc99292c22faf9307d43d02aff991", "rawBytes": 20636, - "gzipBytes": 7071, + "gzipBytes": 7069, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/de-BJMOdOYq.js", - "sha256": "92b491e7e86a6c9d94507eb55e696778b6ef774b6d7b7e4df2cadd5a0b853a22", + "path": "houseplan-assets/de-DgYg-Z6S.js", + "sha256": "93c2056a47d9aaff3fb69917fd2ad615b81f7f64478d167146e79d4f3f862b1e", "rawBytes": 81096, - "gzipBytes": 24345, + "gzipBytes": 24343, "isEntry": false, "imports": [], "dynamicImports": [] }, { - "path": "houseplan-assets/editor-BwnPil0h.js", - "sha256": "be5978938fd4a6ddb6e65184408a195efeaca504f946d6e72706ae3d4f7238b6", + "path": "houseplan-assets/editor-3Us45UEr.js", + "sha256": "61a70b5482d1b98f6fbf057ca137d8ce6779dc57d6b2fd0e025ff1a0c7fb614a", "rawBytes": 3826, "gzipBytes": 1582, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/fr-Dhu6XNE4.js", - "sha256": "4b31986f50d2d05b0702b37cefb3b261ea940f2713d8ab4aa429a20eaf166ba3", + "path": "houseplan-assets/fr-DraSp50q.js", + "sha256": "c1a8ec066046e89310e70b413d201520fc82e545e5685b23996f82f1dab4bab4", "rawBytes": 83283, - "gzipBytes": 23838, + "gzipBytes": 23836, "isEntry": false, "imports": [], "dynamicImports": [] }, { - "path": "houseplan-assets/houseplan-card-DVUSPdhz.js", - "sha256": "921c0ed8a903beb23f3d39e60f495622f49a1b911e13b88f2bee6125796e221a", + "path": "houseplan-assets/houseplan-card-BSOQusOQ.js", + "sha256": "bf61bf5c24667b2fd8129db00fc7bcbdaff9039e4efb2b5efd94867a21d1fc2c", "rawBytes": 1011848, - "gzipBytes": 284634, + "gzipBytes": 284629, "isEntry": false, "imports": [], "dynamicImports": [ - "houseplan-assets/de-BJMOdOYq.js", - "houseplan-assets/editor-BwnPil0h.js", - "houseplan-assets/fr-Dhu6XNE4.js", - "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js", - "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js" + "houseplan-assets/de-DgYg-Z6S.js", + "houseplan-assets/editor-3Us45UEr.js", + "houseplan-assets/fr-DraSp50q.js", + "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js", + "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js" ] }, { - "path": "houseplan-assets/houseplan-editor-runtime-DnzMcW-_.js", - "sha256": "1e7d3802a5e77c5bd4f296108da2a0a5313d60b321b64572002347fce8611da4", - "rawBytes": 526370, - "gzipBytes": 135818, + "path": "houseplan-assets/houseplan-editor-runtime-Bo31fJpP.js", + "sha256": "ab85408a7de0a81130019d6e5e3af17f2990bb5c4a97f4be049f52182362152a", + "rawBytes": 526402, + "gzipBytes": 135814, "isEntry": false, "imports": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js", - "sha256": "4a058e86ba77475bb574f20cc717d74c1d5c56629ab290ce4666446364209de0", + "path": "houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js", + "sha256": "39c44c7bf2b547575348db8a5ae5f73286c6c670cc26c3305e6b0118ad0d28e8", "rawBytes": 28088, - "gzipBytes": 6960, + "gzipBytes": 6959, "isEntry": false, "imports": [ - "houseplan-assets/backdrop-pick-4jTd19VU.js", - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/backdrop-pick-BpYD69bz.js", + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] }, { "path": "houseplan-card.js", - "sha256": "cf4f002a214b9634d59ad77695108b5393a67a003fd82c8c224a07fd537c3585", + "sha256": "7a9645ee2c6f9c05335343a8cd58edb08faea6ac3f6bbc9e058fee6168d04d92", "rawBytes": 1183, - "gzipBytes": 797, + "gzipBytes": 796, "isEntry": true, "imports": [ - "houseplan-assets/houseplan-card-DVUSPdhz.js" + "houseplan-assets/houseplan-card-BSOQusOQ.js" ], "dynamicImports": [] } diff --git a/dist/houseplan-assets/backdrop-pick-4jTd19VU.js b/dist/houseplan-assets/backdrop-pick-BpYD69bz.js similarity index 99% rename from dist/houseplan-assets/backdrop-pick-4jTd19VU.js rename to dist/houseplan-assets/backdrop-pick-BpYD69bz.js index b3b09f25..d85b4408 100644 --- a/dist/houseplan-assets/backdrop-pick-4jTd19VU.js +++ b/dist/houseplan-assets/backdrop-pick-BpYD69bz.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";import{d5 as e,c as t,A as i,a as o,b as n,d6 as s}from"./houseplan-card-DVUSPdhz.js";function r(e){const t=e.visualViewport;return t&&Number.isFinite(t.width)&&Number.isFinite(t.height)?{left:Number(t.offsetLeft)||0,top:Number(t.offsetTop)||0,width:Math.max(0,Number(t.width)||0),height:Math.max(0,Number(t.height)||0)}:{left:0,top:0,width:e.innerWidth,height:e.innerHeight}}function a(e,t,i,o=7,n=8){const s=i.left+n,r=i.top+n,a=Math.max(s,i.left+i.width-n),l=Math.max(r,i.top+i.height-n),h=Math.max(0,a-s),c=Math.max(0,l-r),d=Math.min(Math.max(0,t.width),h),u=Math.min(Math.max(0,t.height),c);let p=e.left;p+d>a&&(p=e.right-d),p=Math.min(Math.max(s,p),Math.max(s,a-d));const _=e.bottom+o,g=e.top-o-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(h),maxHeight:Math.round(c)}}class l{constructor(e,t,i){this.owner=e,this.name=t,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(e=!1){const t=this.window();return!e&&!!t&&function(e){const t=e.HTMLElement?.prototype;return"function"==typeof t?.showPopover&&"function"==typeof t?.hidePopover}(t)}get hasFallback(){return!!this.host}containsPath(e){return e.includes(this.owner)||!!this.host&&e.includes(this.host)}ownsActiveElement(){let e=this.owner.ownerDocument.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(!e||e!==this.owner&&!this.owner.shadowRoot?.contains(e)&&!this.root?.contains(e))}renderFallback(i,o){const n=this.ensureFallback();return n?(e(t`${i}`,n),n):null}surface(e,t){return t?this.owner.shadowRoot?.querySelector(e)||null:this.root?.querySelector(e)||null}destroy(){this.root&&e(i,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const e=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!e)return null;const t=this.owner.ownerDocument.createElement("div");return t.dataset.hpOverlay=this.name,t.style.display="contents",this.keydown&&t.addEventListener("keydown",this.keydown,!0),e.append(t),this.host=t,this.root=t.attachShadow({mode:"open"}),this.root}}let h=0;class c extends n{constructor(){super(...arguments),this.text="",this.ariaLabel="",this.pointerHover=!1,this._open=!1,this._openTimer=0,this._closeTimer=0,this._positionRaf=0,this._forceFallback=!1,this._hoverOwned=!1,this._overlayDispose=null,this._scrollDialog=null,this._descriptionId="hp-help-description-"+ ++h,this._surfacePointerEnter=()=>{const e=this._window();this._closeTimer&&e?.clearTimeout(this._closeTimer),this._closeTimer=0},this._surfacePointerLeave=()=>{this._scheduleClose()},this._outsidePointerDown=e=>{if(!this._open)return;const t=e.composedPath();this._floating.containsPath(t)||this._closeHelp(!1,"outside")},this._dialogScroll=e=>{const t=this._floating.containsPath(e.composedPath()),i=e.target,o=this._dialog(),n=i instanceof Node&&(i===o||i instanceof Element&&i.contains(this));var s;this._open&&(s=n,!t&&s)&&this._closeHelp(!1,"scroll")},this._keyDown=e=>{if(!this._open||e.defaultPrevented)return;if("Escape"===e.key)return e.preventDefault(),e.stopImmediatePropagation(),void this._closeHelp(this._floating.ownsActiveElement(),"escape");const t=this.renderRoot.querySelector(".trigger");if(!t||!e.composedPath().includes(t))return;const i=this._surface();if(!i||i.scrollHeight<=i.clientHeight)return;const o=Math.max(40,.8*i.clientHeight),n={ArrowDown:40,ArrowUp:-40,PageDown:o,PageUp:-o};if("Home"===e.key)i.scrollTop=0;else if("End"===e.key)i.scrollTop=i.scrollHeight;else{if(!(e.key in n))return;i.scrollBy({top:n[e.key],behavior:"auto"})}e.preventDefault(),e.stopImmediatePropagation()},this._floating=new l(this,"help",this._keyDown),this._queuePosition=()=>{if(!this._open||this._positionRaf)return;const e=this._window();e&&(this._positionRaf=e.requestAnimationFrame(()=>{this._positionRaf=0,this._position()||this._closeHelp()}))}}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._keyDown,!0)}willUpdate(){this.toggleAttribute("data-has-content",this._hasContent())}disconnectedCallback(){const e=this.ownerDocument.defaultView;this._unsubscribeOpenListeners(),this.removeEventListener("keydown",this._keyDown,!0),this._clearTimers(),this._positionRaf&&e?.cancelAnimationFrame(this._positionRaf),this._positionRaf=0,this._closeHelp(!1,"disconnect"),super.disconnectedCallback()}updated(e){if(e.has("pointerHover")&&!this.pointerHover){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._openTimer=0,this._hoverOwned&&this._closeHelp(!1,"outside")}this._hasContent()||!this._open?this._open&&e.has("text")&&(this._usesPopover()||this._renderFallback(),this._queuePosition()):this._closeHelp()}_window(){return this._floating.window()}_dialog(){return this._floating.dialog()}_usesPopover(){return this._floating.usesPopover(this._forceFallback)}_hasContent(){return e=this.text,t=this.ariaLabel,"string"==typeof e&&e.trim().length>0&&"string"==typeof t&&t.trim().length>0;var e,t}_clearTimers(){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._closeTimer&&e?.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=0}_scheduleOpen(){const e=this._window();this.pointerHover&&e&&!this._open&&!this._openTimer&&(this._closeTimer&&e.clearTimeout(this._closeTimer),this._closeTimer=0,this._openTimer=e.setTimeout(()=>{this._openTimer=0,this.isConnected&&(this._hoverOwned=!0,this._openHelp())},300))}_scheduleClose(){const e=this._window(),t=this.renderRoot.querySelector(".trigger");e&&!t?.matches(":focus-visible")&&(this._openTimer&&e.clearTimeout(this._openTimer),this._closeTimer&&e.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=e.setTimeout(()=>{this._closeTimer=0,this.isConnected&&this._closeHelp()},150))}_triggerPointerEnter(e){this.pointerHover&&"mouse"===e.pointerType&&this._scheduleOpen()}_triggerPointerLeave(e){"mouse"===e.pointerType&&this._scheduleClose()}_triggerFocus(){queueMicrotask(()=>{const e=this.renderRoot.querySelector(".trigger");e?.matches(":focus-visible")&&(this._hoverOwned=!1,this._openHelp())})}_triggerBlur(){this._scheduleClose()}_triggerClick(){this._open?this._closeHelp():(this._hoverOwned=!1,this._openHelp())}_subscribeOpenListeners(){this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("keydown",this._keyDown,!0);const e=this._window();e?.addEventListener("resize",this._queuePosition),e?.addEventListener("orientationchange",this._queuePosition),e?.visualViewport?.addEventListener("resize",this._queuePosition),e?.visualViewport?.addEventListener("scroll",this._queuePosition),this._scrollDialog=this._dialog(),this._scrollDialog?.addEventListener("scroll",this._dialogScroll,!0)}_unsubscribeOpenListeners(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("keydown",this._keyDown,!0);const e=this._window();e?.removeEventListener("resize",this._queuePosition),e?.removeEventListener("orientationchange",this._queuePosition),e?.visualViewport?.removeEventListener("resize",this._queuePosition),e?.visualViewport?.removeEventListener("scroll",this._queuePosition),this._scrollDialog?.removeEventListener("scroll",this._dialogScroll,!0),this._scrollDialog=null}async _openHelp(){!this._open&&this._hasContent()&&(this._clearTimers(),this._forceFallback=!1,this._open=!0,this._subscribeOpenListeners(),await this.updateComplete,this._open&&(this._usesPopover()||this._renderFallback(),this._position()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:e=>this._closeHelp("escape"===e&&this._floating.ownsActiveElement(),e)})||null:this._closeHelp()))}_closeHelp(e=!1,t="exclusive"){if(!this._open&&!this._floating.hasFallback)return;this._clearTimers();const i=this._overlayDispose;this._overlayDispose=null,i?.();const o=this.renderRoot.querySelector(".tooltip");if(o?.hidePopover)try{o.matches(":popover-open")&&o.hidePopover()}catch{}this._open=!1,this._hoverOwned=!1,this._unsubscribeOpenListeners(),this._floating.destroy(),e&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_tooltipTemplate(e){return t`
a&&(p=e.right-d),p=Math.min(Math.max(s,p),Math.max(s,a-d));const _=e.bottom+o,g=e.top-o-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(h),maxHeight:Math.round(c)}}class l{constructor(e,t,i){this.owner=e,this.name=t,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(e=!1){const t=this.window();return!e&&!!t&&function(e){const t=e.HTMLElement?.prototype;return"function"==typeof t?.showPopover&&"function"==typeof t?.hidePopover}(t)}get hasFallback(){return!!this.host}containsPath(e){return e.includes(this.owner)||!!this.host&&e.includes(this.host)}ownsActiveElement(){let e=this.owner.ownerDocument.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(!e||e!==this.owner&&!this.owner.shadowRoot?.contains(e)&&!this.root?.contains(e))}renderFallback(i,o){const n=this.ensureFallback();return n?(e(t`${i}`,n),n):null}surface(e,t){return t?this.owner.shadowRoot?.querySelector(e)||null:this.root?.querySelector(e)||null}destroy(){this.root&&e(i,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const e=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!e)return null;const t=this.owner.ownerDocument.createElement("div");return t.dataset.hpOverlay=this.name,t.style.display="contents",this.keydown&&t.addEventListener("keydown",this.keydown,!0),e.append(t),this.host=t,this.root=t.attachShadow({mode:"open"}),this.root}}let h=0;class c extends n{constructor(){super(...arguments),this.text="",this.ariaLabel="",this.pointerHover=!1,this._open=!1,this._openTimer=0,this._closeTimer=0,this._positionRaf=0,this._forceFallback=!1,this._hoverOwned=!1,this._overlayDispose=null,this._scrollDialog=null,this._descriptionId="hp-help-description-"+ ++h,this._surfacePointerEnter=()=>{const e=this._window();this._closeTimer&&e?.clearTimeout(this._closeTimer),this._closeTimer=0},this._surfacePointerLeave=()=>{this._scheduleClose()},this._outsidePointerDown=e=>{if(!this._open)return;const t=e.composedPath();this._floating.containsPath(t)||this._closeHelp(!1,"outside")},this._dialogScroll=e=>{const t=this._floating.containsPath(e.composedPath()),i=e.target,o=this._dialog(),n=i instanceof Node&&(i===o||i instanceof Element&&i.contains(this));var s;this._open&&(s=n,!t&&s)&&this._closeHelp(!1,"scroll")},this._keyDown=e=>{if(!this._open||e.defaultPrevented)return;if("Escape"===e.key)return e.preventDefault(),e.stopImmediatePropagation(),void this._closeHelp(this._floating.ownsActiveElement(),"escape");const t=this.renderRoot.querySelector(".trigger");if(!t||!e.composedPath().includes(t))return;const i=this._surface();if(!i||i.scrollHeight<=i.clientHeight)return;const o=Math.max(40,.8*i.clientHeight),n={ArrowDown:40,ArrowUp:-40,PageDown:o,PageUp:-o};if("Home"===e.key)i.scrollTop=0;else if("End"===e.key)i.scrollTop=i.scrollHeight;else{if(!(e.key in n))return;i.scrollBy({top:n[e.key],behavior:"auto"})}e.preventDefault(),e.stopImmediatePropagation()},this._floating=new l(this,"help",this._keyDown),this._queuePosition=()=>{if(!this._open||this._positionRaf)return;const e=this._window();e&&(this._positionRaf=e.requestAnimationFrame(()=>{this._positionRaf=0,this._position()||this._closeHelp()}))}}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._keyDown,!0)}willUpdate(){this.toggleAttribute("data-has-content",this._hasContent())}disconnectedCallback(){const e=this.ownerDocument.defaultView;this._unsubscribeOpenListeners(),this.removeEventListener("keydown",this._keyDown,!0),this._clearTimers(),this._positionRaf&&e?.cancelAnimationFrame(this._positionRaf),this._positionRaf=0,this._closeHelp(!1,"disconnect"),super.disconnectedCallback()}updated(e){if(e.has("pointerHover")&&!this.pointerHover){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._openTimer=0,this._hoverOwned&&this._closeHelp(!1,"outside")}this._hasContent()||!this._open?this._open&&e.has("text")&&(this._usesPopover()||this._renderFallback(),this._queuePosition()):this._closeHelp()}_window(){return this._floating.window()}_dialog(){return this._floating.dialog()}_usesPopover(){return this._floating.usesPopover(this._forceFallback)}_hasContent(){return e=this.text,t=this.ariaLabel,"string"==typeof e&&e.trim().length>0&&"string"==typeof t&&t.trim().length>0;var e,t}_clearTimers(){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._closeTimer&&e?.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=0}_scheduleOpen(){const e=this._window();this.pointerHover&&e&&!this._open&&!this._openTimer&&(this._closeTimer&&e.clearTimeout(this._closeTimer),this._closeTimer=0,this._openTimer=e.setTimeout(()=>{this._openTimer=0,this.isConnected&&(this._hoverOwned=!0,this._openHelp())},300))}_scheduleClose(){const e=this._window(),t=this.renderRoot.querySelector(".trigger");e&&!t?.matches(":focus-visible")&&(this._openTimer&&e.clearTimeout(this._openTimer),this._closeTimer&&e.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=e.setTimeout(()=>{this._closeTimer=0,this.isConnected&&this._closeHelp()},150))}_triggerPointerEnter(e){this.pointerHover&&"mouse"===e.pointerType&&this._scheduleOpen()}_triggerPointerLeave(e){"mouse"===e.pointerType&&this._scheduleClose()}_triggerFocus(){queueMicrotask(()=>{const e=this.renderRoot.querySelector(".trigger");e?.matches(":focus-visible")&&(this._hoverOwned=!1,this._openHelp())})}_triggerBlur(){this._scheduleClose()}_triggerClick(){this._open?this._closeHelp():(this._hoverOwned=!1,this._openHelp())}_subscribeOpenListeners(){this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("keydown",this._keyDown,!0);const e=this._window();e?.addEventListener("resize",this._queuePosition),e?.addEventListener("orientationchange",this._queuePosition),e?.visualViewport?.addEventListener("resize",this._queuePosition),e?.visualViewport?.addEventListener("scroll",this._queuePosition),this._scrollDialog=this._dialog(),this._scrollDialog?.addEventListener("scroll",this._dialogScroll,!0)}_unsubscribeOpenListeners(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("keydown",this._keyDown,!0);const e=this._window();e?.removeEventListener("resize",this._queuePosition),e?.removeEventListener("orientationchange",this._queuePosition),e?.visualViewport?.removeEventListener("resize",this._queuePosition),e?.visualViewport?.removeEventListener("scroll",this._queuePosition),this._scrollDialog?.removeEventListener("scroll",this._dialogScroll,!0),this._scrollDialog=null}async _openHelp(){!this._open&&this._hasContent()&&(this._clearTimers(),this._forceFallback=!1,this._open=!0,this._subscribeOpenListeners(),await this.updateComplete,this._open&&(this._usesPopover()||this._renderFallback(),this._position()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:e=>this._closeHelp("escape"===e&&this._floating.ownsActiveElement(),e)})||null:this._closeHelp()))}_closeHelp(e=!1,t="exclusive"){if(!this._open&&!this._floating.hasFallback)return;this._clearTimers();const i=this._overlayDispose;this._overlayDispose=null,i?.();const o=this.renderRoot.querySelector(".tooltip");if(o?.hidePopover)try{o.matches(":popover-open")&&o.hidePopover()}catch{}this._open=!1,this._hoverOwned=!1,this._unsubscribeOpenListeners(),this._floating.destroy(),e&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_tooltipTemplate(e){return t``}_renderFallback(){const e=c.styles.cssText;this._floating.renderFallback(this._tooltipTemplate(!1),e)}_surface(){return this._floating.surface(".tooltip",this._usesPopover())}_position(){if(!this._open)return!1;const e=this._window(),t=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!e||!t?.isConnected||!i?.isConnected)return!1;const o=r(e);if(i.style.maxWidth=`${Math.max(0,Math.min(320,o.width-16))}px`,i.style.maxHeight=`${Math.max(0,o.height-16)}px`,i.style.visibility="hidden",this._usesPopover()&&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.visibility="hidden"}const n=t.getBoundingClientRect(),s=i.getBoundingClientRect();if(!(n.width&&n.height&&s.width&&s.height))return!1;const l=a(n,s,o);return i.style.left=`${l.left}px`,i.style.top=`${l.top}px`,i.dataset.side=l.side,i.style.visibility="",!0}render(){if(!this._hasContent())return i;const e=this.ariaLabel.trim();return t` ({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`{const n=1===e.length?e[0]:t.reduce((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1],e[0]);return new r(n,e,i)},s=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e,{is:a,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,m=p.trustedTypes,_=m?m.emptyScript:"",f=p.reactiveElementPolyfillSupport,g=(e,t)=>e,v={toAttribute(e,t){switch(t){case Boolean:e=e?_:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!a(e,t),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(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=b){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),n=this.getPropertyDescriptor(e,i,t);void 0!==n&&l(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){const{get:n,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:n,set(t){const o=n?.call(this);r?.call(this,t),this.requestUpdate(e,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??b}static _$Ei(){if(this.hasOwnProperty(g("elementProperties")))return;const e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(g("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(g("properties"))){const e=this.properties,t=[...h(e),...d(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.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(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{if(t)i.adoptedStyleSheets=n.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const t of n){const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,n=i._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=i.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:v;this._$Em=n;const o=r.fromAttribute(t,e.type);this[n]=o??this._$Ej?.get(n)??o,this._$Em=null}}requestUpdate(e,t,i,n=!1,r){if(void 0!==e){const o=this.constructor;if(!1===n&&(r=this[e]),i??=o.getPropertyOptions(e),!((i.hasChanged??y)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:n,wrapped:r},o){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),!0!==r||void 0!==o)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===n&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,n=this[t];!0!==e||this._$AL.has(t)||void 0===n||this.C(t,void 0,i,n)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[g("elementProperties")]=new Map,w[g("finalized")]=new Map,f?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=e=>e,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:e=>e}):void 0,M="$lit$",T=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+T,R=`<${C}>`,D=document,z=()=>D.createComment(""),A=e=>null===e||"object"!=typeof e&&"function"!=typeof e,P=Array.isArray,O="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,E=/>/g,H=RegExp(`>|${O}(?:([^\\s"'>=/]+)(${O}*=${O}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),W=q(1),j=q(2),U=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),G=new WeakMap,K=D.createTreeWalker(D,129);function Y(e,t){if(!P(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,n=[];let r,o=2===t?"":3===t?"":"",s=F;for(let t=0;t"===l[0]?(s=r??F,c=-1):void 0===l[1]?c=-2:(c=s.lastIndex-l[2].length,a=l[1],s=void 0===l[3]?H:'"'===l[3]?L:N):s===L||s===N?s=H:s===I||s===E?s=F:(s=H,r=void 0);const d=s===H&&e[t+1].startsWith("/>")?" ":"";o+=s===F?i+R:c>=0?(n.push(a),i.slice(0,c)+M+i.slice(c)+T+d):i+T+(-2===c?t:d)}return[Y(e,o+(e[i]||"")+(2===t?"":3===t?"":"")),n]};class Z{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,o=0;const s=e.length-1,a=this.parts,[l,c]=X(e,t);if(this.el=Z.createElement(l,i),K.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(n=K.nextNode())&&a.length0){n.textContent=$?$.emptyScript:"";for(let i=0;iP(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==V&&A(this._$AH)?this._$AA.nextSibling.data=e:this.T(D.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=Z.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===n)this._$AH.p(t);else{const e=new Q(n,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=G.get(e.strings);return void 0===t&&G.set(e.strings,t=new Z(e)),t}k(e){P(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new ee(this.O(z()),this.O(z()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(e,t=this,i,n){const r=this.strings;let o=!1;if(void 0===r)e=J(this,e,t,0),o=!A(e)||e!==this._$AH&&e!==U,o&&(this._$AH=e);else{const n=e;let s,a;for(e=r[0],s=0;s{const n=i?.renderBefore??t;let r=n._$litPart$;if(void 0===r){const e=i?.renderBefore??null;n._$litPart$=r=new ee(t.insertBefore(z(),e),e,void 0,i??{})}return r._$AI(e),r},ce=globalThis;let he=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=le(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};he._$litElement$=!0,he.finalized=!0,ce.litElementHydrateSupport?.({LitElement:he});const de=ce.litElementPolyfillSupport;de?.({LitElement:he}),(ce.litElementVersions??=[]).push("4.2.2");const ue=new WeakMap;let pe=0;class me extends he{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-"+ ++pe,this._focusInitial=()=>{const e=this._focusableElements(),t=e.find(e=>e.hasAttribute("autofocus"))||e[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");t?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=e=>{if("Escape"===e.key){e.preventDefault(),e.stopImmediatePropagation(),this._pruneOverlays();const t=this._overlays[this._overlays.length-1];return t?void this._closeOverlay(t,"escape"):void this._requestClose()}if("Tab"!==e.key||this._useHaDialog)return;const t=this.renderRoot.querySelector(".close"),i=t?[t,...this._focusableElements()]:this._focusableElements();if(!i.length)return e.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const n=this._deepActiveElement(),r=i[0],o=i[i.length-1];!e.shiftKey||n!==r&&i.includes(n)?e.shiftKey||n!==o||(e.preventDefault(),r.focus()):(e.preventDefault(),o.focus())},this._onFallbackCancel=e=>{e.preventDefault(),this._requestClose()},this._onFallbackClick=e=>{this.dismissOnScrim&&e.target===e.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const e=this.getRootNode();this._focusRoot=e;const t=ue.get(e)||{dialogs:new Set,opener:this._opener};t.dialogs.add(this),ue.set(e,t),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const e=[...this._overlays];this._overlays=[];for(const t of e.reverse())t.close("disconnect");const t=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const n=t?ue.get(t):void 0;n?.dialogs.delete(this),super.disconnectedCallback(),t&&n&&requestAnimationFrame(()=>{const e=ue.get(t);if(!e)return;if(!e.dialogs.size)return e.opener?.isConnected&&e.opener.focus({preventScroll:!0}),void ue.delete(t);const n=i?.closest("hp-dialog");i?.isConnected&&n&&e.dialogs.has(n)&&i.focus({preventScroll:!0})})}firstUpdated(e){if(super.firstUpdated(e),!this._useHaDialog){const e=this.renderRoot.querySelector("dialog");e&&!e.open&&e.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e&&e!==document.body?e:null}_focusableElements(){const e=["[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(","),t=[],i=new Set,n=r=>{if(!i.has(r)){if(i.add(r),r instanceof HTMLElement){if(r.matches(e)&&t.push(r),r instanceof HTMLSlotElement){for(const e of r.assignedNodes({flatten:!0}))n(e);return}if(r.shadowRoot){for(const e of r.shadowRoot.childNodes)n(e);return}}for(const e of r.childNodes)n(e)}};for(const e of this.childNodes)n(e);const r=this.overlayPortal();return r&&n(r),t.filter(e=>{let t=e;for(;t;){const e=getComputedStyle(t);if(t.hidden||t.inert||"true"===t.getAttribute("aria-hidden")||"none"===e.display||"hidden"===e.visibility)return!1;if(t=t.assignedSlot||t.parentElement||(t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:null),t===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(e=>e.owner.isConnected)}_closeOverlay(e,t){const i=this._overlays.findIndex(t=>t.token===e.token);i>=0&&this._overlays.splice(i,1),e.close(t)}registerOverlay(e){this._pruneOverlays();const t=this._overlays.find(t=>t.owner===e.owner);t&&this._overlays.splice(this._overlays.indexOf(t),1);const i=e.group||"transient";for(const e of[...this._overlays].reverse())e.group===i&&this._closeOverlay(e,"exclusive");const n={...e,group:i,token:Symbol("hp-overlay")};this._overlays.push(n);let r=!1;return()=>{if(r)return;r=!0;const e=this._overlays.findIndex(e=>e.token===n.token);e>=0&&this._overlays.splice(e,1)}}closeTransientOverlays(e="outside"){this._pruneOverlays();const t=[...this._overlays].filter(e=>"transient"===(e.group||"transient"));for(const i of t.reverse())this._closeOverlay(i,e);return t.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const e=W` +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";const e=globalThis,t=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),n=new WeakMap;let r=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const i=this.t;if(t&&void 0===e){const t=void 0!==i&&1===i.length;t&&(e=n.get(i)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&n.set(i,e))}return e}toString(){return this.cssText}};const o=(e,...t)=>{const n=1===e.length?e[0]:t.reduce((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1],e[0]);return new r(n,e,i)},s=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e,{is:a,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,m=p.trustedTypes,_=m?m.emptyScript:"",f=p.reactiveElementPolyfillSupport,g=(e,t)=>e,v={toAttribute(e,t){switch(t){case Boolean:e=e?_:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!a(e,t),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(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=b){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),n=this.getPropertyDescriptor(e,i,t);void 0!==n&&l(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){const{get:n,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:n,set(t){const o=n?.call(this);r?.call(this,t),this.requestUpdate(e,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??b}static _$Ei(){if(this.hasOwnProperty(g("elementProperties")))return;const e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(g("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(g("properties"))){const e=this.properties,t=[...h(e),...d(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.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(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{if(t)i.adoptedStyleSheets=n.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const t of n){const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,n=i._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=i.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:v;this._$Em=n;const o=r.fromAttribute(t,e.type);this[n]=o??this._$Ej?.get(n)??o,this._$Em=null}}requestUpdate(e,t,i,n=!1,r){if(void 0!==e){const o=this.constructor;if(!1===n&&(r=this[e]),i??=o.getPropertyOptions(e),!((i.hasChanged??y)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:n,wrapped:r},o){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),!0!==r||void 0!==o)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===n&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,n=this[t];!0!==e||this._$AL.has(t)||void 0===n||this.C(t,void 0,i,n)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[g("elementProperties")]=new Map,w[g("finalized")]=new Map,f?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=e=>e,$=k.trustedTypes,S=$?$.createPolicy("lit-html",{createHTML:e=>e}):void 0,M="$lit$",T=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+T,R=`<${C}>`,D=document,z=()=>D.createComment(""),A=e=>null===e||"object"!=typeof e&&"function"!=typeof e,P=Array.isArray,O="[ \t\n\f\r]",F=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,E=/>/g,H=RegExp(`>|${O}(?:([^\\s"'>=/]+)(${O}*=${O}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),N=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),W=q(1),j=q(2),U=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),G=new WeakMap,K=D.createTreeWalker(D,129);function Y(e,t){if(!P(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==S?S.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,n=[];let r,o=2===t?"":3===t?"":"",s=F;for(let t=0;t"===l[0]?(s=r??F,c=-1):void 0===l[1]?c=-2:(c=s.lastIndex-l[2].length,a=l[1],s=void 0===l[3]?H:'"'===l[3]?L:N):s===L||s===N?s=H:s===I||s===E?s=F:(s=H,r=void 0);const d=s===H&&e[t+1].startsWith("/>")?" ":"";o+=s===F?i+R:c>=0?(n.push(a),i.slice(0,c)+M+i.slice(c)+T+d):i+T+(-2===c?t:d)}return[Y(e,o+(e[i]||"")+(2===t?"":3===t?"":"")),n]};class Z{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,o=0;const s=e.length-1,a=this.parts,[l,c]=X(e,t);if(this.el=Z.createElement(l,i),K.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(n=K.nextNode())&&a.length0){n.textContent=$?$.emptyScript:"";for(let i=0;iP(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==V&&A(this._$AH)?this._$AA.nextSibling.data=e:this.T(D.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=Z.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===n)this._$AH.p(t);else{const e=new Q(n,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=G.get(e.strings);return void 0===t&&G.set(e.strings,t=new Z(e)),t}k(e){P(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new ee(this.O(z()),this.O(z()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(e,t=this,i,n){const r=this.strings;let o=!1;if(void 0===r)e=J(this,e,t,0),o=!A(e)||e!==this._$AH&&e!==U,o&&(this._$AH=e);else{const n=e;let s,a;for(e=r[0],s=0;s{const n=i?.renderBefore??t;let r=n._$litPart$;if(void 0===r){const e=i?.renderBefore??null;n._$litPart$=r=new ee(t.insertBefore(z(),e),e,void 0,i??{})}return r._$AI(e),r},ce=globalThis;let he=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=le(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};he._$litElement$=!0,he.finalized=!0,ce.litElementHydrateSupport?.({LitElement:he});const de=ce.litElementPolyfillSupport;de?.({LitElement:he}),(ce.litElementVersions??=[]).push("4.2.2");const ue=new WeakMap;let pe=0;class me extends he{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-"+ ++pe,this._focusInitial=()=>{const e=this._focusableElements(),t=e.find(e=>e.hasAttribute("autofocus"))||e[0]||(this._useHaDialog?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");t?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=e=>{if("Escape"===e.key){e.preventDefault(),e.stopImmediatePropagation(),this._pruneOverlays();const t=this._overlays[this._overlays.length-1];return t?void this._closeOverlay(t,"escape"):void this._requestClose()}if("Tab"!==e.key||this._useHaDialog)return;const t=this.renderRoot.querySelector(".close"),i=t?[t,...this._focusableElements()]:this._focusableElements();if(!i.length)return e.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const n=this._deepActiveElement(),r=i[0],o=i[i.length-1];!e.shiftKey||n!==r&&i.includes(n)?e.shiftKey||n!==o||(e.preventDefault(),r.focus()):(e.preventDefault(),o.focus())},this._onFallbackCancel=e=>{e.preventDefault(),this._requestClose()},this._onFallbackClick=e=>{this.dismissOnScrim&&e.target===e.currentTarget&&this._requestClose()}}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const e=this.getRootNode();this._focusRoot=e;const t=ue.get(e)||{dialogs:new Set,opener:this._opener};t.dialogs.add(this),ue.set(e,t),this._useHaDialog=!!customElements.get("ha-dialog"),this.addEventListener("keydown",this._onKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const e=[...this._overlays];this._overlays=[];for(const t of e.reverse())t.close("disconnect");const t=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const n=t?ue.get(t):void 0;n?.dialogs.delete(this),super.disconnectedCallback(),t&&n&&requestAnimationFrame(()=>{const e=ue.get(t);if(!e)return;if(!e.dialogs.size)return e.opener?.isConnected&&e.opener.focus({preventScroll:!0}),void ue.delete(t);const n=i?.closest("hp-dialog");i?.isConnected&&n&&e.dialogs.has(n)&&i.focus({preventScroll:!0})})}firstUpdated(e){if(super.firstUpdated(e),!this._useHaDialog){const e=this.renderRoot.querySelector("dialog");e&&!e.open&&e.showModal()}queueMicrotask(()=>this._focusInitial())}_deepActiveElement(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e&&e!==document.body?e:null}_focusableElements(){const e=["[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(","),t=[],i=new Set,n=r=>{if(!i.has(r)){if(i.add(r),r instanceof HTMLElement){if(r.matches(e)&&t.push(r),r instanceof HTMLSlotElement){for(const e of r.assignedNodes({flatten:!0}))n(e);return}if(r.shadowRoot){for(const e of r.shadowRoot.childNodes)n(e);return}}for(const e of r.childNodes)n(e)}};for(const e of this.childNodes)n(e);const r=this.overlayPortal();return r&&n(r),t.filter(e=>{let t=e;for(;t;){const e=getComputedStyle(t);if(t.hidden||t.inert||"true"===t.getAttribute("aria-hidden")||"none"===e.display||"hidden"===e.visibility)return!1;if(t=t.assignedSlot||t.parentElement||(t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:null),t===this)break}return!0})}_pruneOverlays(){this._overlays=this._overlays.filter(e=>e.owner.isConnected)}_closeOverlay(e,t){const i=this._overlays.findIndex(t=>t.token===e.token);i>=0&&this._overlays.splice(i,1),e.close(t)}registerOverlay(e){this._pruneOverlays();const t=this._overlays.find(t=>t.owner===e.owner);t&&this._overlays.splice(this._overlays.indexOf(t),1);const i=e.group||"transient";for(const e of[...this._overlays].reverse())e.group===i&&this._closeOverlay(e,"exclusive");const n={...e,group:i,token:Symbol("hp-overlay")};this._overlays.push(n);let r=!1;return()=>{if(r)return;r=!0;const e=this._overlays.findIndex(e=>e.token===n.token);e>=0&&this._overlays.splice(e,1)}}closeTransientOverlays(e="outside"){this._pruneOverlays();const t=[...this._overlays].filter(e=>"transient"===(e.group||"transient"));for(const i of t.reverse())this._closeOverlay(i,e);return t.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const e=W` ${this.icon?W``:V} ${this.title} `;return this._useHaDialog?W`
`}_vacMapId(t,e,s=this.host._planHass){return this.host._vacMapId(t,e,s)}_vacSaveMatrix(t,e,s,i){const o=this.host._devices.find(e=>e.id===t),a=o?this.host._vacEnsureMarker(o):this.host._serverCfg?.markers?.find(e=>e.id===t);if(!a)return!1;const n={...a.vacuum||{}};return n.source=e,n.calibration={...n.calibration||{},[s]:i.map(t=>Number(t.toFixed(6)))},a.vacuum=n,this.host._regSignature="",this.host._maybeRebuildDevices(),this._saveConfig(),this.host.requestUpdate(),!0}_vacPlanRoomAnchors(t){return(this.host._spaceModelById(t)?.rooms||[]).map(t=>({room:t,poly:I(t)})).filter(({room:t,poly:e})=>t.name&&e).map(({room:t,poly:e})=>{const s=Ns(e);return s?{name:String(t.name),cx:s[0],cy:s[1]}:null}).filter(Boolean)}_vacAutoCalibrate(t){const e=this.host._vacSource(t),s=e?Ts(this.host.hass?.states[e]?.attributes):null;if(!e||!s||s.rooms.length<3)return void this.host._showToast(this.host._t("vac.autocal_no_rooms"));const i=this._vacPlanRoomAnchors(t.space),o=Hs(s.rooms,i);if(!o)return void this.host._showToast(this.host._t("vac.autocal_no_match"));const a=this.host._serverCfg?.spaces?.find(e=>e.id===t.space),n=Number(a?.cell_cm),r=Number.isFinite(n)&&n>0?n:5,h=Ls(o.residual,this.host._gridPitch,r),l=this._vacMapId(t,s);h>Os?this.host._vacCalConfirm={markerId:t.id,source:e,mapId:l,matrix:o.matrix,rooms:o.matched.length,error:Qt(h,"mi"===this.host.hass?.config?.unit_system?.length)}:this._vacSaveMatrix(t.id,e,l,o.matrix)&&this.host._showToast(Fs(this.host._t("vac.autocal_done"),{rooms:String(o.matched.length)}))}_vacApplyCalibrationProposal(t){const e=this.host._vacCalConfirm;if(e){if(this.host._vacCalConfirm=null,t){const t=this.host._devices.find(t=>t.id===e.markerId),s=Es(e.matrix);if(!t||!s)return;if(this.host._markerDialog=null,t.space!==this.host._space&&!this.host._commitSpace(t.space))return;return void(this.host._vacFit={markerId:e.markerId,source:e.source,mapId:e.mapId,p:s,drag:null})}this._vacSaveMatrix(e.markerId,e.source,e.mapId,e.matrix)&&this.host._showToast(Fs(this.host._t("vac.autocal_done"),{rooms:String(e.rooms)}))}}_vacStartFit(t){const e=this.host._vacSource(t),s=e?Ts(this.host.hass?.states[e]?.attributes):null;if(!e||!s)return void this.host._showToast(this.host._t("vac.cal_need_pos"));const i=this._vacMapId(t,s),o=t.marker?.vacuum?.calibration?.[i],a=this.host._spaceModelById(t.space);if(!a)return;const n=a.vb,r=o&&6===o.length&&Es(o)||Bs(s.rooms,n);this.host._markerDialog=null,(t.space===this.host._space||this.host._commitSpace(t.space))&&(this.host._vacFit={markerId:t.id,source:e,mapId:i,p:r,drag:null})}_vacFitSave(){const t=this.host._vacFit;if(!t)return;const e=this._vacSaveMatrix(t.markerId,t.source,t.mapId,Ws(t.p));this.host._vacFit=null,e&&this.host._showToast(this.host._t("vac.cal_done"))}_vacFitTurn(t){const e=this.host._vacFit;if(!e)return;const s=Ts(this.host.hass?.states[e.source]?.attributes),i=this._vacGhostCentre(s?.rooms||[]),o={...e.p,...t};this.host._vacFit={...e,p:Gs(o,e.p,i[0],i[1])}}_vacGhostCentre(t){const e=[],s=[];for(const i of t)e.push(i.x0??i.cx,i.x1??i.cx),s.push(i.y0??i.cy,i.y1??i.cy);return e.length?[(Math.min(...e)+Math.max(...e))/2,(Math.min(...s)+Math.max(...s))/2]:[0,0]}_vacDelta(t,e,s){const i=this.host._stageEl,o=i?.clientWidth||1,a=i?.clientHeight||1;return[e/o*t.w,s/a*t.h]}_vacFitPointer(t,e){const s=this.host._vacFit;if(!s)return;if(t.stopPropagation(),"pointerdown"===t.type){const e=t.target,i=e.getAttribute?.("data-corner");try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}return void(this.host._vacFit={...s,drag:i?{kind:"scale",sx:t.clientX,sy:t.clientY,p0:{...s.p},fx:Number(i.split(",")[0]),fy:Number(i.split(",")[1])}:{kind:"move",sx:t.clientX,sy:t.clientY,p0:{...s.p},fx:0,fy:0}})}const i=s.drag;if(i){if("pointermove"===t.type){const[o,a]=this._vacDelta(e,t.clientX-i.sx,t.clientY-i.sy);if("move"===i.kind)this.host._vacFit={...s,p:{...i.p0,ox:i.p0.ox+o,oy:i.p0.oy+a}};else{const t=Ts(this.host.hass?.states[s.source]?.attributes),e=this._vacGhostCentre(t?.rooms||[]),n=Ws(i.p0),[r,h]=js(n,e[0],e[1]),[l,c]=js(n,i.fx,i.fy),d=Math.hypot(r-l,h-c)||1,[p,_]=[2*r-l,2*h-c],u=Math.hypot(p+2*o-l,_+2*a-c)/2,m=Math.max(.05,u/d),g={...i.p0,s:i.p0.s*m};this.host._vacFit={...s,p:Gs(g,i.p0,i.fx,i.fy)}}return}"pointerup"!==t.type&&"pointercancel"!==t.type||(this.host._vacFit={...s,drag:null})}}_renderVacFit(t){const e=this.host._vacFit;if(!e)return a;const s=Ts(this.host._renderPlanHass?.states?.[e.source]?.attributes);if(!s)return a;const i=Ws(e.p),o=[],r=[],h=[];for(const t of s.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])=>js(i,t,e));e.forEach(([t,e])=>{r.push(t),h.push(e)});const[s,a]=js(i,t.cx,t.cy);o.push(he` + ${t.name}`)}let l=a;if(s.pos){const[e,o]=js(i,s.pos.x,s.pos.y);l=he``}const c=[];if(r.length){const e=(()=>{const t=i[0]*i[4]-i[1]*i[3];return(e,s)=>[(i[4]*(e-i[2])-i[1]*(s-i[5]))/t,(-i[3]*(e-i[2])+i[0]*(s-i[5]))/t]})(),s=Math.min(...r),o=Math.max(...r),a=Math.min(...h),n=Math.max(...h),l=.022*t.w,d=l/4;for(const[t,i,r,h]of[[s,a,o,n],[o,a,s,n],[o,n,s,a],[s,n,o,a]]){const s=e(r,h);c.push(he` `)}}return n`this._vacFitPointer(e,t)} @pointermove=${e=>this._vacFitPointer(e,t)} @pointerup=${e=>this._vacFitPointer(e,t)} - @pointercancel=${e=>this._vacFitPointer(e,t)}>${o}${h}${c}`}_resetRoomDialogFields(){this.host._roomEditId=null,this.host._roomFill="",this.host._roomCustomFill=null,this.host._roomTempSrc="",this.host._roomHumSrc="",this.host._roomSrcOpen=null,this.host._roomSrcFilter="",this.host._roomNameScale=1,this.host._roomLabelScale=1}_openRoomEdit(t){if(!t.id)return;this.host._roomEditId=t.id,this.host._nameSel=t.name||"",this.host._areaSel=t.area||"",this.host._roomFill="glow"===t.settings?.fill_mode?"":t.settings?.fill_mode||"";const e=t.settings?.custom_fill;this.host._roomCustomFill=e&&"object"==typeof e?us(e,_s(this.host._curSpaceCfg).customFill):null,this.host._roomTempSrc=t.settings?.temp_source||"",this.host._roomHumSrc=t.settings?.hum_source||"",this.host._roomNameScale=Us(t.settings?.name_scale),this.host._roomLabelScale=Us(t.settings?.label_scale),this.host._roomSrcOpen=null,this.host._roomSrcFilter="",this.host._roomDialog=!0}_roomSettingsFromDialog(){const t={};return this.host._roomFill&&(t.fill_mode=this.host._roomFill),this.host._roomCustomFill&&(t.custom_fill=this.host._roomCustomFill),this.host._roomTempSrc&&(t.temp_source=this.host._roomTempSrc),this.host._roomHumSrc&&(t.hum_source=this.host._roomHumSrc),1!==this.host._roomNameScale&&(t.name_scale=this.host._roomNameScale),1!==this.host._roomLabelScale&&(t.label_scale=this.host._roomLabelScale),Object.keys(t).length?t:null}_saveRoomEdit(){const t=this.host._curSpaceCfg,e=t?.rooms.find(t=>t.id===this.host._roomEditId);if(!e)return this.host._roomDialog=!1,void(this.host._roomEditId=null);e.name=this.host._nameSel.trim()||e.name,e.area=this.host._areaSel||null;const s=e.settings||{},i={...s};this.host._roomFill?i.fill_mode=this.host._roomFill:delete i.fill_mode,this.host._roomCustomFill?i.custom_fill=this.host._roomCustomFill:delete i.custom_fill,"glow"===s.fill_mode&&"boolean"!=typeof s.glow&&(i.glow=!0),this.host._roomTempSrc?i.temp_source=this.host._roomTempSrc:delete i.temp_source,this.host._roomHumSrc?i.hum_source=this.host._roomHumSrc:delete i.hum_source,1!==this.host._roomNameScale?i.name_scale=this.host._roomNameScale:delete i.name_scale,1!==this.host._roomLabelScale?i.label_scale=this.host._roomLabelScale:delete i.label_scale,Object.keys(i).length?e.settings=i:delete e.settings,this._saveConfig(),this.host._roomDialog=!1,this.host._roomEditId=null,this.host._nameSel="",this.host._areaSel="",this.host._regSignature="",this.host._maybeRebuildDevices(),this.host.requestUpdate(),this.host._showToast(this.host._t("toast.room_updated"))}_roomSrcCandidates(){const t=this.host._planHass,e=w(this.host._markers),s=this.host._roomSrcFilter.trim().toLowerCase(),i=[];for(const o of Object.values(t.devices)){if("service"===o.entry_type)continue;if(e.devices.has(o.id))continue;const t=(o.name_by_user||o.name||o.id).trim();s&&!t.toLowerCase().includes(s)||i.push({value:"device:"+o.id,label:t,sub:o.model||this.host._t("marker.sub_device")})}for(const[o,a]of Object.entries(t.entities)){if(!o.startsWith("sensor.")||a.hidden)continue;if(k(t,o,e))continue;const n=a.name||t.states[o]?.attributes?.friendly_name||o;s&&!(n+" "+o).toLowerCase().includes(s)||i.push({value:"entity:"+o,label:n,sub:o})}return i.sort((t,e)=>t.label.localeCompare(e.label)),i.slice(0,200)}_roomSrcLabel(t){const e=t.indexOf(":"),s=t.slice(0,e),i=t.slice(e+1);return"device"===s?this.host._fullRegistryHass.devices[i]?.name_by_user||this.host._fullRegistryHass.devices[i]?.name||i:this.host._fullRegistryHass.entities[i]?.name||this.host.hass.states[i]?.attributes?.friendly_name||i}_labelPos(t,e){const s=this.host._layout["rl_"+(t.id||"")];if(s&&s.s===e)return{x:s.x*hl,y:s.y*hl};const i=this._snap(this.host._roomCenter(t));return{x:i[0],y:i[1]}}_labelDown(t,e,s){if("plan"!==this.host._mode)return;t.preventDefault(),t.stopPropagation();const i=this._labelPos(e,s);this.host._drag={id:"rl_"+(e.id||""),sx:t.clientX,sy:t.clientY,ox:i.x,oy:i.y,moved:!1},dl(t),this.host._tip=null}_labelMove(t,e,s){const i="rl_"+(e.id||"");if(!this.host._drag||this.host._drag.id!==i)return;const o=this.host._stageEl;if(!o)return;const a=this.host._spaceModelById(s);if(!a)return;const n=a.vb,r=o.getBoundingClientRect(),l=this.host._viewOr(n),h=(t.clientX-this.host._drag.sx)/r.width*l.w,c=(t.clientY-this.host._drag.sy)/r.height*l.h;Math.abs(t.clientX-this.host._drag.sx)+Math.abs(t.clientY-this.host._drag.sy)>3&&(this.host._drag.moved=!0);const d=It(this.host._drag.ox+h),p=It(this.host._drag.oy+c);this.host._savePos({id:i,space:s},d,p)}_labelUp(t){const e="rl_"+(t.id||"");if(!this.host._drag||this.host._drag.id!==e)return;const s=this.host._drag.moved;this.host._drag=s?this.host._drag:null,s&&window.setTimeout(()=>this.host._drag=null,0)}_labelScale(t){const e=this.host._layout["rl_"+(t.id||"")]?.k;return"number"==typeof e&&Number.isFinite(e)?Math.min(3,Math.max(.5,e)):1}_rlResizeDown(t,e,s){if("plan"!==this.host._mode)return;t.preventDefault(),t.stopPropagation();const i=t.target.closest(".roomlabel");if(!i)return;const o=i.getBoundingClientRect(),a=o.left+o.width/2,n=o.top+o.height/2,r=Math.max(8,Math.hypot(t.clientX-a,t.clientY-n));this.host._rlResize={id:"rl_"+(e.id||""),space:s,k0:this._labelScale(e),cx:a,cy:n,d0:r},dl(t)}_rlResizeMove(t){const e=this.host._rlResize;if(!e)return;t.stopPropagation();const s=Math.max(8,Math.hypot(t.clientX-e.cx,t.clientY-e.cy)),i=Math.min(3,Math.max(.5,e.k0*(s/e.d0))),o=this.host._layout[e.id];if(o)this.host._layout={...this.host._layout,[e.id]:{...o,k:i}};else{const t=e.id.slice(3),s=this.host._spaceModelById(e.space);if(!s)return;const o=s.rooms.find(e=>e.id===t);if(!o)return;const a=this._labelPos(o,e.space);this.host._layout={...this.host._layout,[e.id]:{s:e.space,x:a.x/hl,y:a.y/hl,k:i}}}this.host._dirtyPos.add(e.id)}_rlResizeUp(){this.host._rlResize&&(this.host._rlResize=null,this.host._persistLayout())}_renderRoomGear(t,e,s){if(!t.id)return a;let i=null;if(t.poly?(i=this.host._gearPtCache.get(t.poly)||null,i||(i=ae(t.poly),this.host._gearPtCache.set(t.poly,i))):null!=t.x&&null!=t.y&&(i=[t.x+(t.w||0)/2,t.y+(t.h||0)/2]),!i)return a;const o=(i[0]-s.x)/s.w*100,r=(i[1]-s.y)/s.h*100;return n``}_alignCandidates(){const t=[],e=this.host._spaceModel();if(this.host._markup){if(!e)return t;if(this.host._drag?.id.startsWith("rl_")){const s=this.host._drag.id.slice(3);for(const i of e.rooms){if(!i.name||i.id===s)continue;const e=this._labelPos(i,this.host._space);t.push([e.x,e.y])}return t}for(const s of e.rooms){const e=I(s);if(e)for(const s of e)t.push(s)}if("draw"===this.host._tool)for(const e of this.host._path)t.push(e);if("split"===this.host._tool&&this.host._splitSel?.pts)for(const e of this.host._splitSel.pts)t.push(e);return t}if("devices"===this.host._mode){for(const e of this.host._devices){if(e.space!==this.host._space||e.id===this.host._drag?.id||"ha_disabled"===e.bindingStatus?.kind)continue;const s=this.host._pos(e);t.push([s.x,s.y])}return t}if("decor"===this.host._mode){const e=this.host._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this.host._decorDraft&&t.push(this.host._decorDraft.a),t}return t}_renderAlignGuides(){const t=this.host._alignPoint;if(!t)return le``;const e=this.host._drag?.id.startsWith("rl_")?.5*this.host._gridPitch:.05*this.host._gridPitch,s=qs(t,this._alignCandidates(),e);if(!s.length)return le``;const i=this.host._gridPitch,o=1.5*i;return le` - ${s.map(e=>{const[s,a,n,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*o]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*o,e.at];return le` + `}_alignCandidates(){const t=[],e=this.host._spaceModel();if(this.host._markup){if(!e)return t;if(this.host._drag?.id.startsWith("rl_")){const s=this.host._drag.id.slice(3);for(const i of e.rooms){if(!i.name||i.id===s)continue;const e=this._labelPos(i,this.host._space);t.push([e.x,e.y])}return t}for(const s of e.rooms){const e=I(s);if(e)for(const s of e)t.push(s)}if("draw"===this.host._tool)for(const e of this.host._path)t.push(e);if("split"===this.host._tool&&this.host._splitSel?.pts)for(const e of this.host._splitSel.pts)t.push(e);return t}if("devices"===this.host._mode){const e=this.host._deviceDrag?.id??this.host._drag?.id;for(const s of this.host._devices){if(s.space!==this.host._space||s.id===e||"ha_disabled"===s.bindingStatus?.kind)continue;const i=this.host._pos(s);t.push([i.x,i.y])}return t}if("decor"===this.host._mode){const e=this.host._decorMove?.id;return t.push(...this._decorSnapGeometry(e).points),this.host._decorDraft&&t.push(this.host._decorDraft.a),t}return t}_renderAlignGuides(){const t=this.host._alignPoint;if(!t)return he``;const e=this.host._drag?.id.startsWith("rl_")?.5*this.host._gridPitch:.05*this.host._gridPitch,s=qs(t,this._alignCandidates(),e);if(!s.length)return he``;const i=this.host._gridPitch,o=1.5*i;return he` + ${s.map(e=>{const[s,a,n,r]="x"===e.axis?[e.at,e.from[1],e.at,t[1]+Math.sign(t[1]-e.from[1])*o]:[e.from[0],e.at,t[0]+Math.sign(t[0]-e.from[0])*o,e.at];return he` `})} - `}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180,s=Ne(15,this.host._cellCm);return le``}_renderOpeningCenterTick(t){const e=(t.angle+90)*Math.PI/180,s=Ne(15,this.host._cellCm);return he``}_renderOpeningDimensionGuides(t){const e=t.labels.flatMap(t=>t.dimension?[t.dimension]:[]);if(!e.length)return le``;const s=this._cssPxToRender(4);return le``;return he` ${o(t.from,"from")}${o(t.to,"to")} `})} - `}_renderOpeningPlacementPreview(){const t=this.host._openingPreview;if(!t)return le``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:Ks(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this.host._cellCm,gridPitch:this.host._gridPitch,face:t.face},s="passage"===t.type?Vs(t,Ne(this.host._gridPitch,this.host._cellCm)):null;return le``}_renderOpeningPlacementPreview(){const t=this.host._openingPreview;if(!t)return he``;const e={type:t.type,length:t.renderedLength,angle:t.angle,amount:Ks(t.type,null),flipH:t.flipH,flipV:t.flipV,base:"var(--hp-open)",tone:"var(--hp-open)",cellCm:this.host._cellCm,gridPitch:this.host._gridPitch,face:t.face},s="passage"===t.type?Vs(t,Ne(this.host._gridPitch,this.host._cellCm)):null;return he` `}_renderOpeningDialog(){const t=this.host._openingDialog,e=this.host._spaceModel()?.partitions||[],s=t.id?this.host._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,i={id:t.id||"preview",type:t.type,x:t.x/hl,y:t.y/this.host._spaceH,angle:t.angle,length:s&&!t.lengthTouched?s.length:this.host._cmToUnits(Math.max(20,t.lengthCm))/hl,...t.host?{host:t.host}:{}},o=qe(s,i),r=t.host?o?O(i,e,hl,this.host._cellCm,this.host._gridPitch):R(i,e,hl,this.host._cellCm,this.host._gridPitch):null,l="does-not-fit-jamb"===r?.reason,h=t.host?e.find(e=>e.id===t.host.id):null,c=h?Qt(h.cm/2,this.host._imperial):"",d=!!t.host&&!r?.resolved&&!l,p="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",_=(e,s)=>{const i="contact"===e?t.contact:t.lock,o="contact"===e?!!t.contactOpen:!!t.lockOpen,r="contact"===e?t.contactFilter||"":t.lockFilter||"",l=s.find(t=>t.value===i),h=l?.label||this.host.hass.states[i]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[i]?.name||i,c=Ri(s,r);return n` + r=${Ne(.18*this.host._gridPitch,this.host._cellCm)}>`}_renderOpeningDialog(){const t=this.host._openingDialog,e=this.host._spaceModel()?.partitions||[],s=t.id?this.host._curSpaceCfg?.openings?.find(e=>e.id===t.id):null,i={id:t.id||"preview",type:t.type,x:t.x/lh,y:t.y/this.host._spaceH,angle:t.angle,length:s&&!t.lengthTouched?s.length:this.host._cmToUnits(Math.max(20,t.lengthCm))/lh,...t.host?{host:t.host}:{}},o=qe(s,i),r=t.host?o?O(i,e,lh,this.host._cellCm,this.host._gridPitch):R(i,e,lh,this.host._cellCm,this.host._gridPitch):null,h="does-not-fit-jamb"===r?.reason,l=t.host?e.find(e=>e.id===t.host.id):null,c=l?Qt(l.cm/2,this.host._imperial):"",d=!!t.host&&!r?.resolved&&!h,p="gate"===t.type?"mdi:gate":"window"===t.type?"mdi:window-closed-variant":"passage"===t.type?"mdi:arch":"mdi:door",_=(e,s)=>{const i="contact"===e?t.contact:t.lock,o="contact"===e?!!t.contactOpen:!!t.lockOpen,r="contact"===e?t.contactFilter||"":t.lockFilter||"",h=s.find(t=>t.value===i),l=h?.label||this.host.hass.states[i]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[i]?.name||i,c=Ri(s,r);return n` ${o?n`
@@ -1366,10 +1366,10 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 @hp-close=${()=>this.host._openingDialog=null}>
${t.host?n` -
- ${d||l?n``:a} - ${d?this.host._t("opening.partition_orphan"):l?this.host._t("opening.partition_jamb_margin",{distance:c}):this.host._t("opening.host_partition")} +
+ ${d||h?n``:a} + ${d?this.host._t("opening.partition_orphan"):h?this.host._t("opening.partition_jamb_margin",{distance:c}):this.host._t("opening.host_partition")}
`:a}
- `}_gridLevels(){const t=this.host._stageEl,e=this.host._viewOr(this.host._baseVb()),s=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return Xs(this.host._gridPitch,s)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return le``;const s=this.host._gridPitch*e.fine,i=this.host._gridPitch*e.coarse,o=this.host._gridPitch*e.fine*.14;return le` + `}_gridLevels(){const t=this.host._stageEl,e=this.host._viewOr(this.host._baseVb()),s=t&&t.clientWidth&&e.w?t.clientWidth/e.w:1;return Xs(this.host._gridPitch,s)}_renderMarkupDefs(t){const e=this._gridLevels();if(!e)return he``;const s=this.host._gridPitch*e.fine,i=this.host._gridPitch*e.coarse,o=this.host._gridPitch*e.fine*.14;return he` @@ -1437,75 +1437,75 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 - `}_renderPhysicalEditorLayer(){const t=this.host._spaceModel();if(!t)return le``;const e=this.host._gridPitch,s=this.host._viewOr(this.host._baseVb()),i=this.host._stageEl,o=i?.clientWidth?s.w/i.clientWidth:e/8,n=Math.max(.22*e,8*o),r=Math.max(n,12*o),l=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,h=(t,e)=>this.host._physicalSel?.kind===t&&this.host._physicalSel.id===e||"column"===t&&this.host._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,s)=>{const i=t.points[s+1],a=Number(t.segments[s]?.cm),n=W(Number.isFinite(a)?a:15,this.host._cellCm,this.host._gridPitch);return le``}_renderPhysicalEditorLayer(){const t=this.host._spaceModel();if(!t)return he``;const e=this.host._gridPitch,s=this.host._viewOr(this.host._baseVb()),i=this.host._stageEl,o=i?.clientWidth?s.w/i.clientWidth:e/8,n=Math.max(.22*e,8*o),r=Math.max(n,12*o),h=t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`,l=(t,e)=>this.host._physicalSel?.kind===t&&this.host._physicalSel.id===e||"column"===t&&this.host._duplicateColumnId===e,c=(t.room_drafts||[]).flatMap(t=>t.points.slice(0,-1).map((e,s)=>{const i=t.points[s+1],a=Number(t.segments[s]?.cm),n=W(Number.isFinite(a)?a:15,this.host._cellCm,this.host._gridPitch);return he`{this.host._physicalSel={kind:"draft",id:t.id,segment:s},this._registerPhysicalTap("draft",t.id,s)}}>`})),d=(t.partitions||[]).map(t=>{const e=Vt(t.a,t.b,t.cm,this.host._cellCm,this.host._gridPitch);return e?le`{this.host._physicalSel={kind:"draft",id:t.id,segment:s},this._registerPhysicalTap("draft",t.id,s)}}>`})),d=(t.partitions||[]).map(t=>{const e=Vt(t.a,t.b,t.cm,this.host._cellCm,this.host._gridPitch);return e?he`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`:le`this._physicalUp(t)}>`:he`this._physicalDown(e,"partition",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),p=(t.wall_columns||[]).map(t=>{const e=this.host._physicalRotate?.id===t.id?{...t,angle:this.host._physicalRotate.angle}:t,s=Kt(e,this.host._cellCm,this.host._gridPitch);return le`this._physicalUp(t)}>`}),p=(t.wall_columns||[]).map(t=>{const e=this.host._physicalRotate?.id===t.id?{...t,angle:this.host._physicalRotate.angle}:t,s=Kt(e,this.host._cellCm,this.host._gridPitch);return he`this._physicalDown(e,"column",t.id)} @pointermove=${t=>this._physicalMove(t)} - @pointerup=${t=>this._physicalUp(t)}>`}),_=this.host._physicalDrag,u=(()=>{if(!_?.moved)return a;if("partition"===_.kind&&0===Number(_.base.cm)){const t=_.base;return le`this._physicalUp(t)}>`}),_=this.host._physicalDrag,u=(()=>{if(!_?.moved)return a;if("partition"===_.kind&&0===Number(_.base.cm)){const t=_.base;return he``}const t="partition"===_.kind?Vt(_.base.a,_.base.b,_.base.cm,this.host._cellCm,this.host._gridPitch):Kt(_.base,this.host._cellCm,this.host._gridPitch);return t?le``:a})(),m=(()=>{const s=this.host._physicalSel;if(!s)return a;if("draft"===s.kind){const e=t.room_drafts.find(t=>t.id===s.id);return e?le` + transform="translate(${_.delta[0]} ${_.delta[1]})">`}const t="partition"===_.kind?Vt(_.base.a,_.base.b,_.base.cm,this.host._cellCm,this.host._gridPitch):Kt(_.base,this.host._cellCm,this.host._gridPitch);return t?he``:a})(),m=(()=>{const s=this.host._physicalSel;if(!s)return a;if("draft"===s.kind){const e=t.room_drafts.find(t=>t.id===s.id);return e?he` t.join(",")).join(" ")}> - ${e.points.map(t=>le``)} - `:a}if("partition"===s.kind){const e=t.partitions.find(t=>t.id===s.id);if(!e)return a;const i=Vt(e.a,e.b,e.cm,this.host._cellCm,this.host._gridPitch),o=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return le` - ${i?le``:le`he``)} + `:a}if("partition"===s.kind){const e=t.partitions.find(t=>t.id===s.id);if(!e)return a;const i=Vt(e.a,e.b,e.cm,this.host._cellCm,this.host._gridPitch),o=(e.a[0]+e.b[0])/2,r=(e.a[1]+e.b[1])/2;return he` + ${i?he``:he``} - `}const i=t.wall_columns.find(t=>t.id===s.id);if(!i)return a;const h=this.host._physicalRotate?.id===i.id?{...i,angle:this.host._physicalRotate.angle}:i,c=Kt(h,this.host._cellCm,this.host._gridPitch);if("square"!==h.shape)return le` - - - `;const d=W(h.cm,this.host._cellCm,this.host._gridPitch),p=Ft(h.angle)*Math.PI/180,_=Math.sin(p),u=-Math.cos(p),m=[h.center[0]+_*d/2,h.center[1]+u*d/2],g=[m[0]+_*Math.max(e,24*o),m[1]+u*Math.max(e,24*o)];return le` - - + `}const i=t.wall_columns.find(t=>t.id===s.id);if(!i)return a;const l=this.host._physicalRotate?.id===i.id?{...i,angle:this.host._physicalRotate.angle}:i,c=Kt(l,this.host._cellCm,this.host._gridPitch);if("square"!==l.shape)return he` + + + `;const d=W(l.cm,this.host._cellCm,this.host._gridPitch),p=Ft(l.angle)*Math.PI/180,_=Math.sin(p),u=-Math.cos(p),m=[l.center[0]+_*d/2,l.center[1]+u*d/2],g=[m[0]+_*Math.max(e,24*o),m[1]+u*Math.max(e,24*o)];return he` + + this._physicalRotateDown(t,i)} @pointermove=${t=>this._physicalRotateMove(t)} @pointerup=${t=>this._physicalRotateUp(t)}> - `})();return le`${c}${d}${p}${u}${m}`}_renderHiddenWallDiagnosticOverlay(){if(!this.host._markup)return le``;const t=this._hiddenWallDiagnosticSnapshot().value;if(!t.segments.length)return le``;const e=W(5,this.host._cellCm,this.host._gridPitch);return le``})();return he`${c}${d}${p}${u}${m}`}_renderHiddenWallDiagnosticOverlay(){if(!this.host._markup)return he``;const t=this._hiddenWallDiagnosticSnapshot().value;if(!t.segments.length)return he``;const e=W(5,this.host._cellCm,this.host._gridPitch);return he``}_renderPlanSnapOverlay(){if(!this.host._markup)return le``;const t=this._planSnapGeometrySnapshot().value,e=this.host._activePlanSnapCandidate,s=new Set(this.host._activePlanSnapConflicts.map(t=>t.key)),i=W(5,this.host._cellCm,this.host._gridPitch),o=W(10,this.host._cellCm,this.host._gridPitch);return le``}_renderPlanSnapOverlay(){if(!this.host._markup)return he``;const t=this._planSnapGeometrySnapshot().value,e=this.host._activePlanSnapCandidate,s=new Set(this.host._activePlanSnapConflicts.map(t=>t.key)),i=W(5,this.host._cellCm,this.host._gridPitch),o=W(10,this.host._cellCm,this.host._gridPitch);return he``}_syncPlanSnapActiveMarker(t){const e=this.host.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(W(10,this.host._cellCm,this.host._gridPitch)))}}_syncPlanSnapConflictMarkers(t){const e=new Set(t.map(t=>t.key));for(const t of this.host.renderRoot?.querySelectorAll('.plan-snap-node[data-kind="endpoint"]')||[])t.setAttribute("class","plan-snap-node"+(e.has(t.dataset.key||"")?" conflict":""))}_planSnapPhysicalSegment(t){let e=0;const s=this.host._spaceModel();if(!s)return null;if("partition"===t.sourceKind)e=Number(s.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const i=/^(.*):(\d+)$/.exec(t.sourceId),o=i?s.room_drafts.find(t=>t.id===i[1]):null;e=o&&i&&Number(o.segments[Number(i[2])]?.cm)||0}else e=Zs(s.rooms,this.host._spaceWalls,this.host._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,hl);return e>0?{a:[...t.a],b:[...t.b],halfDepth:W(e,this.host._cellCm,this.host._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const s=[];for(let i=0;i+10&&s.push({a:t[i],b:t[i+1],halfDepth:e[i]});if(!s.length)return"";const i=2e-4*this.host._gridPitch,o=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>M(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=i)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Qs([...s,...o],i).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this.host._openCuts(),s=this.host._thickWallCuts(),i=e.concat(s),o=i.length?S(this.host._segments,i,.02*this.host._gridPitch):this.host._segments,n=this.host._path,r=this.host._gridPitch,l=this.host._viewOr(this.host._baseVb()),h="draw"===this.host._tool?this.host._drawWallCm:null,c=(()=>"draw"===this.host._tool&&n.length&&null!=h?this.host._contourClosed?n:this.host._cursorPt?[...n,this.host._cursorPt]:n.length>=2?n:null:null)(),d=c?Ha(c.length-1,this.host._contourClosed?[...this.host._draftSegmentCms,this.host._closingWallCm??void 0]:this.host._draftSegmentCms,h,F).map(t=>W(t,this.host._cellCm,this.host._gridPitch)/2):[],p=c?ti(c,W(h,this.host._cellCm,this.host._gridPitch)/2,this.host._contourClosed,d):"",_=c?this._drawPreviewJoinPatchD(c,d):"",u=this.host._wallFaceBatch?.candidates[this.host._wallFaceBatch.index]?.repair||this.host._wallRepairDiagnostic;return le` - ${this._gridLevels()?le``:a} - ${o.map(t=>le``)} + `}_syncPlanSnapActiveMarker(t){const e=this.host.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(W(10,this.host._cellCm,this.host._gridPitch)))}}_syncPlanSnapConflictMarkers(t){const e=new Set(t.map(t=>t.key));for(const t of this.host.renderRoot?.querySelectorAll('.plan-snap-node[data-kind="endpoint"]')||[])t.setAttribute("class","plan-snap-node"+(e.has(t.dataset.key||"")?" conflict":""))}_planSnapPhysicalSegment(t){let e=0;const s=this.host._spaceModel();if(!s)return null;if("partition"===t.sourceKind)e=Number(s.partitions.find(e=>e.id===t.sourceId)?.cm)||0;else if("draft"===t.sourceKind){const i=/^(.*):(\d+)$/.exec(t.sourceId),o=i?s.room_drafts.find(t=>t.id===i[1]):null;e=o&&i&&Number(o.segments[Number(i[2])]?.cm)||0}else e=Zs(s.rooms,this.host._spaceWalls,this.host._openCuts(),[t.a[0],t.a[1],t.b[0],t.b[1]],this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,lh);return e>0?{a:[...t.a],b:[...t.b],halfDepth:W(e,this.host._cellCm,this.host._gridPitch)/2}:null}_drawPreviewJoinPatchD(t,e){if(t.length<2)return"";const s=[];for(let i=0;i+10&&s.push({a:t[i],b:t[i+1],halfDepth:e[i]});if(!s.length)return"";const i=2e-4*this.host._gridPitch,o=this._planSnapGeometrySnapshot().value.segments.filter(e=>t.some(t=>M(t,[e.a[0],e.a[1],e.b[0],e.b[1]])<=i)).map(t=>this._planSnapPhysicalSegment(t)).filter(t=>!!t);return Qs([...s,...o],i).map(t=>`M ${t.map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`).join(" ")}_renderMarkupLayer(t){const e=this.host._openCuts(),s=this.host._thickWallCuts(),i=e.concat(s),o=i.length?S(this.host._segments,i,.02*this.host._gridPitch):this.host._segments,n=this.host._path,r=this.host._gridPitch,h=this.host._viewOr(this.host._baseVb()),l="draw"===this.host._tool?this.host._drawWallCm:null,c=(()=>"draw"===this.host._tool&&n.length&&null!=l?this.host._contourClosed?n:this.host._cursorPt?[...n,this.host._cursorPt]:n.length>=2?n:null:null)(),d=c?Ha(c.length-1,this.host._contourClosed?[...this.host._draftSegmentCms,this.host._closingWallCm??void 0]:this.host._draftSegmentCms,l,F).map(t=>W(t,this.host._cellCm,this.host._gridPitch)/2):[],p=c?ti(c,W(l,this.host._cellCm,this.host._gridPitch)/2,this.host._contourClosed,d):"",_=c?this._drawPreviewJoinPatchD(c,d):"",u=this.host._wallFaceBatch?.candidates[this.host._wallFaceBatch.index]?.repair||this.host._wallRepairDiagnostic;return he` + ${this._gridLevels()?he``:a} + ${o.map(t=>he``)} ${this._renderPhysicalEditorLayer()} - ${"column"===this.host._tool&&this.host._cursorPt&&this.host._drawWallCm?le`{const t={shape:"square",center:this.host._cursorPt,cm:this.host._drawWallCm};return`M ${Kt(t,this.host._cellCm,this.host._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`})()}>`:a} - ${p?le` + ${"column"===this.host._tool&&this.host._cursorPt&&this.host._drawWallCm?he`{const t={shape:"square",center:this.host._cursorPt,cm:this.host._drawWallCm};return`M ${Kt(t,this.host._cellCm,this.host._gridPitch).map(t=>`${t[0]} ${t[1]}`).join(" L ")} Z`})()}>`:a} + ${p?he` `:a} - ${c&&0===h?le`t.join(",")).join(" ")}>`:a} - ${_?le` + ${_?he` `:a} - ${u?le``:a} - ${"split"===this.host._tool&&this.host._splitSel?.pts?.length?le`${this.host._splitSel.pts.length>1?le``:a} - ${this.host._splitSel.pts.map((t,e)=>le`1?he``:a} + ${this.host._splitSel.pts.map((t,e)=>he``)} - ${this.host._cursorPt?le``:a}`:a} - `}_renderActiveChainInk(){const t=this.host._path,e=this.host._gridPitch;return le` - ${t.length>1?le``:a} - ${t.length&&this.host._cursorPt&&"draw"===this.host._tool&&!this.host._contourClosed?le`1?he``:a} + ${t.length&&this.host._cursorPt&&"draw"===this.host._tool&&!this.host._contourClosed?he` - ${this.host._activePlanSnapCandidate||this.host._activePlanSnapConflicts.length?a:le``}`:a} - ${t.map((t,s)=>le`he``)} `}_renderPartitionDeleteDialog(){const t=this.host._partitionDeleteDialog,e="mi"===this.host.hass?.config?.unit_system?.length;return n`

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

    - ${t.openings.map(t=>n`
  • ${this.host._t("confirm.delete_partition_openings_item",{type:this.host._t(`opening.${t.type}`),length:Qt(t.length*hl/this.host._gridPitch*this.host._cellCm,e)})}
  • `)} + ${t.openings.map(t=>n`
  • ${this.host._t("confirm.delete_partition_openings_item",{type:this.host._t(`opening.${t.type}`),length:Qt(t.length*lh/this.host._gridPitch*this.host._cellCm,e)})}
  • `)}
@@ -1725,7 +1725,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4
-
`}_discoveryFilterState(t){const e=this.host._settings,s=void 0!==t.draftGroupLights?t.draftGroupLights:!1!==e.group_lights,i=e.exclude_integrations,o=void 0!==t.draftExcluded?null===t.draftExcluded?[...ei]:t.draftExcluded:i?[...i]:[...ei],a=void 0!==t.draftExcluded?null===t.draftExcluded:!i,n=void 0!==t.draftGroupLights||void 0!==t.draftExcluded;return{groupLights:s,excluded:o.sort(),usesProductList:a,dirty:n}}_registryIntegrations(){const t=new Set,e=this.host._fullRegistryHass;for(const s of Object.values(e?.entities||{}))s?.platform&&t.add(String(s.platform));for(const s of Object.values(e?.devices||{})){const e=s?.identifiers?.[0],i=Array.isArray(e)?e[0]:null;i&&t.add(String(i))}return[...t].sort()}_discoveryFilterPreview(t){const e=this._discoveryFilterState(t),s=[e.groupLights?1:0,e.usesProductList?"p":e.excluded.join(","),this.host._cfgEpoch,this.host._regSignature].join("|");if(this._discoveryPreviewMemo?.key===s)return this._discoveryPreviewMemo.value;const i={hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),markers:this.host._markers,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||"",loc:t=>this.host._t(t),iconRules:this.host._iconRules},o=(t,e)=>new Set(Ti({...i,settings:t,excluded:e})),a=(t,e)=>new Set(zi({...i,settings:t,excluded:e}).map(t=>t.bindingRef||t.id)),n=si(this.host._settings),r={...this.host._settings,group_lights:e.groupLights},l=new Set(e.excluded),h=o(this.host._settings,n),c=o(r,l),d=a(this.host._settings,n),p=a(r,l);let _=0,u=0,m=0;const g=t=>t.includes("light.");for(const t of h)c.has(t)||(_++,g(t)&&m++);for(const t of c)h.has(t)||(u++,g(t)&&m++);for(const t of p)d.has(t)||(_++,g(t)&&m++);for(const t of d)p.has(t)||(u++,g(t)&&m++);const f={appear:_,hide:u,lights:m};return this._discoveryPreviewMemo={key:s,value:f},f}async _saveDiscoveryFilters(t){const e=this.host._serverCfg;if(!e)return;const s=this._discoveryFilterState(t),i={...e.settings};s.groupLights?delete i.group_lights:i.group_lights=!1,s.usesProductList?delete i.exclude_integrations:i.exclude_integrations=s.excluded,this.host._serverCfg={...e,settings:i},this.host._deviceInboxMemo=null,this._discoveryPreviewMemo=null,this.host._regSignature="",this.host._deviceInbox&&(this.host._deviceInbox={...t,draftGroupLights:void 0,draftExcluded:void 0}),this._saveConfig(),this.host._maybeRebuildDevices(),this.host.requestUpdate()}_renderDiscoveryFilters(t){const e=this._discoveryFilterState(t),s=e=>this.host._deviceInbox={...t,...e},i=t.filtersOpen&&e.dirty?this._discoveryFilterPreview(t):null,o=this._registryIntegrations().filter(t=>!e.excluded.includes(t));return n`
`}_discoveryFilterState(t){const e=this.host._settings,s=void 0!==t.draftGroupLights?t.draftGroupLights:!1!==e.group_lights,i=e.exclude_integrations,o=void 0!==t.draftExcluded?null===t.draftExcluded?[...ei]:t.draftExcluded:i?[...i]:[...ei],a=void 0!==t.draftExcluded?null===t.draftExcluded:!i,n=void 0!==t.draftGroupLights||void 0!==t.draftExcluded;return{groupLights:s,excluded:o.sort(),usesProductList:a,dirty:n}}_registryIntegrations(){const t=new Set,e=this.host._fullRegistryHass;for(const s of Object.values(e?.entities||{}))s?.platform&&t.add(String(s.platform));for(const s of Object.values(e?.devices||{})){const e=s?.identifiers?.[0],i=Array.isArray(e)?e[0]:null;i&&t.add(String(i))}return[...t].sort()}_discoveryFilterPreview(t){const e=this._discoveryFilterState(t),s=[e.groupLights?1:0,e.usesProductList?"p":e.excluded.join(","),this.host._cfgEpoch,this.host._regSignature].join("|");if(this._discoveryPreviewMemo?.key===s)return this._discoveryPreviewMemo.value;const i={hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),markers:this.host._markers,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||"",loc:t=>this.host._t(t),iconRules:this.host._iconRules},o=(t,e)=>new Set(Ti({...i,settings:t,excluded:e})),a=(t,e)=>new Set(zi({...i,settings:t,excluded:e}).map(t=>t.bindingRef||t.id)),n=si(this.host._settings),r={...this.host._settings,group_lights:e.groupLights},h=new Set(e.excluded),l=o(this.host._settings,n),c=o(r,h),d=a(this.host._settings,n),p=a(r,h);let _=0,u=0,m=0;const g=t=>t.includes("light.");for(const t of l)c.has(t)||(_++,g(t)&&m++);for(const t of c)l.has(t)||(u++,g(t)&&m++);for(const t of p)d.has(t)||(_++,g(t)&&m++);for(const t of d)p.has(t)||(u++,g(t)&&m++);const f={appear:_,hide:u,lights:m};return this._discoveryPreviewMemo={key:s,value:f},f}async _saveDiscoveryFilters(t){const e=this.host._serverCfg;if(!e)return;const s=this._discoveryFilterState(t),i={...e.settings};s.groupLights?delete i.group_lights:i.group_lights=!1,s.usesProductList?delete i.exclude_integrations:i.exclude_integrations=s.excluded,this.host._serverCfg={...e,settings:i},this.host._deviceInboxMemo=null,this._discoveryPreviewMemo=null,this.host._regSignature="",this.host._deviceInbox&&(this.host._deviceInbox={...t,draftGroupLights:void 0,draftExcluded:void 0}),this._saveConfig(),this.host._maybeRebuildDevices(),this.host.requestUpdate()}_renderDiscoveryFilters(t){const e=this._discoveryFilterState(t),s=e=>this.host._deviceInbox={...t,...e},i=t.filtersOpen&&e.dirty?this._discoveryFilterPreview(t):null,o=this._registryIntegrations().filter(t=>!e.excluded.includes(t));return n`
s({filtersOpen:t.target.open})}> ${this.host._t("device_inbox.filters_title")}
`}_renderDeviceInbox(){const t=this.host._deviceInbox,e=this._deviceInboxRows(),s=Object.fromEntries(["on_plan","available","hidden","readd"].map(t=>[t,e.filter(e=>e.category===t).length])),i=function(t,e,s,i=!1){const o=s.trim().toLocaleLowerCase();return t.filter(t=>t.category===e&&(!i||t.isNew)&&(!o||t.searchText.includes(o)))}(e,t.tab,t.search,"on_plan"===t.tab&&t.onlyNew),o=i.slice(0,t.limit),r=t=>this.host._t(`device_inbox.tab_${t}`),l=`device_inbox.empty_${t.tab}`;return n``}_renderDeviceInbox(){const t=this.host._deviceInbox,e=this._deviceInboxRows(),s=Object.fromEntries(["on_plan","available","hidden","readd"].map(t=>[t,e.filter(e=>e.category===t).length])),i=function(t,e,s,i=!1){const o=s.trim().toLocaleLowerCase();return t.filter(t=>t.category===e&&(!i||t.isNew)&&(!o||t.searchText.includes(o)))}(e,t.tab,t.search,"on_plan"===t.tab&&t.onlyNew),o=i.slice(0,t.limit),r=t=>this.host._t(`device_inbox.tab_${t}`),h=`device_inbox.empty_${t.tab}`;return n`this.host._deviceInbox=null}>
@@ -1846,7 +1846,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4
`:a}
- `}):n`
${this.host._t(l)}
`} + `}):n`
${this.host._t(h)}
`}
${i.length>o.length?n` - `}_markerValueBadgeFields(t){return ii({touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition})}_markerValueSourceFields(t){return oi({touched:t.valueSourceTouched,originalHas:t.originalHasValueSource,original:t.originalValueSource,source:t.valueSource})}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=rs(t.room),s=Qe(t.binding,t.devId,()=>"__hp_device_preview__"),i=this.host._markers.find(e=>e.id===s||e.id===t.devId),o=is(t.binding,t.controls,this.host._bindingEntities(t.binding)),a=this._effectiveStoredTapAction(t),n={id:s,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"===a&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:o.length?o:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),...this._markerValueSourceFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=rl(t.glowRadius);return null==e||e<=0?null:Math.round(this.host._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:i?.vacuum||null};return("virtual"===t.binding||t.room)&&(n.space=e?.space||("virtual"===t.binding?this.host._space:null),n.area=e?.area||null,n.room_id=e?.roomId||null),n}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const s=`${this.host._haRegistry.revision}\n${Ht(this.host._markers)}\n${JSON.stringify(e)}`;if(this.host._markerPreviewMemo?.key===s)return this.host._markerPreviewMemo.device;const i=ai({hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,siblingMarkers:this.host._markers,settings:this.host._settings,excluded:this.host._excluded,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||this.host._space,loc:t=>this.host._t(t),iconRules:this.host._iconRules});return this.host._markerPreviewMemo={key:s,device:i},i}_markerPreviewDevices(t){const e=this.host._markerPreviewDevicesMemo;if(e?.base===this.host._devices&&e.preview===t)return e.devices;const s=[...this.host._devices.filter(e=>e.id!==t.id),t];return this.host._markerPreviewDevicesMemo={base:this.host._devices,preview:t,devices:s},s}_toggleIntent(t,e=this.host._devices){return this.host._toggleIntent(t,e)}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s=this._markerPreviewDevices(e);return this._toggleIntent(e,s)}_toggleStateText(t,e){return this.host._toggleStateText(t,e)}_toggleConfirmationStateText(t){return this.host._toggleConfirmationStateText(t)}_toggleConfirmationLines(t){return this.host._toggleConfirmationLines(t)}_toggleHintLines(t){if(!t)return[];const e=t=>this.host._t(`marker.toggle_effect_${t.replace("-","_")}`),s=t=>this.host._t(`marker.toggle_skip_${t.replace("-","_")}`);return ni(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this.host._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),s=t.name||e;return this.host._t("marker.toggle_hint_single",{name:s,id:e})},group:t=>this.host._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,s)=>"virtual-light"===t.via?this.host._t("marker.virtual_light_current",{state:this.host._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(s)}):this.host._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(s)}),groupCurrentNext:(t,s)=>this.host._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(s)}),skipped:t=>this.host._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${s(t.reason)})`}).join(", ")}),none:t=>this.host._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:os(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),s=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},i="toggle"===s.tapAction?this._toggleHintLines(this._toggleIntentForDialog(s)).join(" "):"";return{...s,tapHintAnnouncement:i}}_valueBadgeForBinding(t,e){const s={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},i=this._markerPreviewDevice(s);if(!i)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const o=[...this.host._devices.filter(t=>t.id!==i.id),i],a=es(this.host._planHass,i,o),n=ss(this.host._planHass,i,a);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!n,valueBadgeSource:n,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s={...e,hidden:!1};return ri(li(this.host._planHass,[...this.host._devices.filter(t=>t.id!==s.id),s],null,this.host._virtualLights).filter(t=>t.device.id===s.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},s=this._markerPreviewDevice(e);return!!s&&hi(this.host._planHass,{...s})}_setMarkerLightRole(t){const e=this.host._markerDialog;e&&(this.host._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.host.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this.host._planEntityAvailable(t)};const e=t.slice(7),s=this.host._markers.find(t=>t.id===e),i=this.host._devices.find(t=>t.id===e);if(!s||s.removed||!0!==s.is_light)return{label:this.host._t("marker.control_missing_label"),sub:`${this.host._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const o=this.host._serverCfg?.spaces.find(t=>t.id===(i?.space||s.space)),a=!!i&&ci(i).length>0;return{label:s.name||i?.name||e,sub:[o?.title||i?.space||s.space,s.room_id||i?.area,a?"":this.host._t("marker.control_passive")].filter(Boolean).join(" · "),icon:s.icon||i?.icon||"mdi:lightbulb-outline",warning:!0===s.hidden||!0===i?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this.host._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this.host._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this.host._t("marker.value_badge_state",{name:t.label});const s=this.host.hass.states[e.entity_id]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this.host._t(`marker.value_badge_attr_${e.attribute}`,{name:s})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",s=[],i=new Set;for(const t of this.host._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this.host._bindingStatus(t.binding).kind)continue;const o=this.host._devices.find(e=>e.id===t.id);if(!o||o.hidden)continue;const a=this._controlRefInfo(`marker:${t.id}`);for(const t of ci(o))i.add(t);s.push({value:`marker:${t.id}`,label:a.label,sub:a.sub,icon:a.icon,search:`${a.label} ${a.sub} ${t.id} ${ci(o).join(" ")}`.toLowerCase()})}const o=Object.keys(this.host.hass.states||{}).filter(e=>di(e)&&!i.has(e)&&pi(t.binding,[e],this.host._bindingEntities(t.binding)).length>0&&this.host._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()}}),a=t.controlsFilter.trim().toLowerCase();return[...s,...o].filter(e=>!t.controls.includes(e.value)&&(!a||e.search.includes(a))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const s=this._markerDraft(t)?.id||t.devId||"";if(!s)return void this.host._showToast(this.host._t("toast.marker_binding_required"));const i=e.slice(7),o=this._markerDraft(t),a=o?[...this.host._markers.filter(t=>t.id!==s),o]:this.host._markers;if(_i(a,s,i))return void this.host._showToast(this.host._t("toast.marker_control_cycle"))}this.host._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this.host._markerDialog;if(!e)return;if("auto"===t)return void(this.host._markerDialog={...e,glowMode:t,glowTouched:!0});const s=this._markerSpatialSource(e),i=ui(s?this.host._planHass.states[s.eid]:void 0,null,this.host._fillColors.glow_light.c),o=!e.glowColorDrafted,a="fixed"===t&&!e.glowBrightnessDrafted;this.host._markerDialog={...e,glowMode:t,glowColor:o?i.c:e.glowColor,glowBrightness:a?Math.max(1,Math.round(100*i.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this.host._markerDialog,e="virtual"===t.bindingMode,s=this._bindingCandidates();this.host._bindingEntities(t.binding);const i=e?null:this.host._bindingStatus(t.binding),o=!e&&this.host._bindingHasHaPage(t.binding),r=this._markerPreviewDevice(t),l=this._effectiveMarkerTapAction(t,r),h=r?_s(this.host._serverCfg?.spaces.find(t=>t.id===r.space)):null,c=r?this._markerPreviewDevices(r):this.host._devices,d="toggle"===l&&r?this._toggleIntent(r,c):null,p=this._toggleHintLines(d),_=r?mi(this.host._planHass,r,{liveStates:!1!==this.host._config?.live_states,showTemperature:!1!==this.host._config?.show_temperature,showSignal:h?.showLqi??!1!==this.host._config?.show_signal,designPreview:!0,activityRuntime:this.host._activityRt.get(r.id),lightDevices:c,registryHass:this.host._fullRegistryHass,reducedMotion:this.host._reducedMotion}):null,u=r?es(this.host._planHass,r,c):[],m=r?ss(this.host._planHass,r,u):null,g=t.valueBadgeTouched?t.valueBadgeEnabled:!!_?.valueBadge,f=t.valueBadgeTouched?t.valueBadgeSource:_?.valueBadge?.source||t.valueBadgeSource,b=t.valueBadgeTouched?t.valueBadgePosition:_?.valueBadge?.position||t.valueBadgePosition,v=gi(f),y=!!f&&!u.some(t=>t.key===v),$=u.find(t=>t.key===v),w=gi(t.valueSource),k=!(!t.valueSource||w&&u.some(t=>t.key===w)),x=u.find(t=>t.key===w),S=_?.valueSource?.sourceKey||"",M=this._markerAutoHasSpatialSource(t),D=!!r&&fi(this.host._planHass,{...r}),C=bi(t.lightRole,M,D,t.glowMode),P=!C.sourceExists,I=!C.fromSourceEnabled,R=C.passive,T=C.effectiveMode,z="never"===t.lightRole?this.host._t("marker.glow_disabled_never"):"auto"!==t.lightRole||M?R?this.host._t("marker.glow_passive_hint"):this.host._t("marker.glow_disabled_no_entity"):this.host._t("marker.glow_disabled_auto"),F=r?ci(r):[],A=r&&vi(r)||"",N=!!t.lightEntity&&!F.includes(t.lightEntity),H=r?yi(r):[],L=!!t.toggleEntity&&!H.includes(t.toggleEntity),O="toggle"===l?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=O?[...O.targets,...O.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",B=(()=>{if(e)return null;const i=s.find(e=>e.value===t.binding);if(i)return i.label;const[o,a]=t.binding.split(":");return"device"===o?this.host._fullRegistryHass.devices[a]?.name_by_user||this.host._fullRegistryHass.devices[a]?.name||a:this.host._fullRegistryHass.entities[a]?.name||this.host.hass.states[a]?.attributes?.friendly_name||a})();return n``}_markerValueBadgeFields(t){return ii({touched:t.valueBadgeTouched,originalHas:t.originalHasValueBadge,original:t.originalValueBadge,enabled:t.valueBadgeEnabled,source:t.valueBadgeSource,position:t.valueBadgePosition})}_markerValueSourceFields(t){return oi({touched:t.valueSourceTouched,originalHas:t.originalHasValueSource,original:t.originalValueSource,source:t.valueSource})}_markerDraft(t){if("ha"===t.bindingMode&&(!t.binding||"virtual"===t.binding))return null;const e=rs(t.room),s=Qe(t.binding,t.devId,()=>"__hp_device_preview__"),i=this.host._markers.find(e=>e.id===s||e.id===t.devId),o=is(t.binding,t.controls,this.host._bindingEntities(t.binding)),a=this._effectiveStoredTapAction(t),n={id:s,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"===a&&t.tapTarget||null,tap_confirm:!!t.tapConfirm||null,controls:o.length?o:null,...this._markerLightFields(t),...this._markerValueBadgeFields(t),...this._markerValueSourceFields(t),use_climate_temp:!!t.useClimateTemp||null,glow_radius_cm:(()=>{const e=rh(t.glowRadius);return null==e||e<=0?null:Math.round(this.host._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:i?.vacuum||null};return("virtual"===t.binding||t.room)&&(n.space=e?.space||("virtual"===t.binding?this.host._space:null),n.area=e?.area||null,n.room_id=e?.roomId||null),n}_markerPreviewDevice(t){const e=this._markerDraft(t);if(!e)return null;const s=`${this.host._haRegistry.revision}\n${Ht(this.host._markers)}\n${JSON.stringify(e)}`;if(this.host._markerPreviewMemo?.key===s)return this.host._markerPreviewMemo.device;const i=ai({hass:this.host.hass,registry:this.host._haRegistry,areaToSpace:Object.fromEntries(Object.entries(this.host._areaToSpace).map(([t,e])=>[t,e.space])),marker:e,siblingMarkers:this.host._markers,settings:this.host._settings,excluded:this.host._excluded,showAll:this.host._showAll,firstSpaceId:this.host._model[0]?.id||this.host._space,loc:t=>this.host._t(t),iconRules:this.host._iconRules});return this.host._markerPreviewMemo={key:s,device:i},i}_markerPreviewDevices(t){const e=this.host._markerPreviewDevicesMemo;if(e?.base===this.host._devices&&e.preview===t)return e.devices;const s=[...this.host._devices.filter(e=>e.id!==t.id),t];return this.host._markerPreviewDevicesMemo={base:this.host._devices,preview:t,devices:s},s}_toggleIntent(t,e=this.host._devices){return this.host._toggleIntent(t,e)}_toggleIntentForDialog(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s=this._markerPreviewDevices(e);return this._toggleIntent(e,s)}_toggleStateText(t,e){return this.host._toggleStateText(t,e)}_toggleConfirmationStateText(t){return this.host._toggleConfirmationStateText(t)}_toggleConfirmationLines(t){return this.host._toggleConfirmationLines(t)}_toggleHintLines(t){if(!t)return[];const e=t=>this.host._t(`marker.toggle_effect_${t.replace("-","_")}`),s=t=>this.host._t(`marker.toggle_skip_${t.replace("-","_")}`);return ni(t,{single:t=>{if("via"in t&&"virtual-light"===t.via)return this.host._t("marker.virtual_light_target",{name:t.name});const e=t.entityId||("ref"in t?t.ref:""),s=t.name||e;return this.host._t("marker.toggle_hint_single",{name:s,id:e})},group:t=>this.host._t("marker.toggle_hint_group",{count:t.length,names:t.map(t=>`${t.name} (${t.entityId})`).join(", ")}),currentNext:(t,s)=>"virtual-light"===t.via?this.host._t("marker.virtual_light_current",{state:this.host._t("on"===t.state?"marker.virtual_light_state_on":"marker.virtual_light_state_off"),effect:e(s)}):this.host._t("marker.toggle_hint_current",{state:this._toggleStateText(t.entityId,t.state),effect:e(s)}),groupCurrentNext:(t,s)=>this.host._t("marker.toggle_hint_group_current",{on:t.filter(t=>"on"===t.state).length,count:t.length,effect:e(s)}),skipped:t=>this.host._t("marker.toggle_hint_skipped",{count:t.length,targets:t.map(t=>{const e=t.entityId||t.ref;return`${t.name||e} (${e}: ${s(t.reason)})`}).join(", ")}),none:t=>this.host._t(`marker.toggle_none_${t.replaceAll("-","_")}`)})}_effectiveStoredTapAction(t,e){return t.tapActionTouched?t.tapAction:os(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),s=t.tapActionTouched?t:{...t,tapAction:this._effectiveMarkerTapAction(t,e)},i="toggle"===s.tapAction?this._toggleHintLines(this._toggleIntentForDialog(s)).join(" "):"";return{...s,tapHintAnnouncement:i}}_valueBadgeForBinding(t,e){const s={...t,binding:e,valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0},i=this._markerPreviewDevice(s);if(!i)return{valueBadgeEnabled:!1,valueBadgeSource:null,valueBadgeTouched:!0};const o=[...this.host._devices.filter(t=>t.id!==i.id),i],a=es(this.host._planHass,i,o),n=ss(this.host._planHass,i,a);return{valueBadgeEnabled:t.valueBadgeEnabled&&!!n,valueBadgeSource:n,valueBadgeTouched:!0}}_markerSpatialSource(t){const e=this._markerPreviewDevice(t);if(!e)return null;const s={...e,hidden:!1};return ri(hi(this.host._planHass,[...this.host._devices.filter(t=>t.id!==s.id),s],null,this.host._virtualLights).filter(t=>t.device.id===s.id))}_markerAutoHasSpatialSource(t){const e={...t,lightRole:"auto",lightRoleTouched:!0},s=this._markerPreviewDevice(e);return!!s&&li(this.host._planHass,{...s})}_setMarkerLightRole(t){const e=this.host._markerDialog;e&&(this.host._markerDialog={...e,lightRole:t,lightRoleTouched:!0})}_controlRefInfo(t){if(!t.startsWith("marker:"))return{label:this.host.hass.states[t]?.attributes?.friendly_name||t,sub:t,icon:t.startsWith("light.")?"mdi:lightbulb":"mdi:toggle-switch",warning:!this.host._planEntityAvailable(t)};const e=t.slice(7),s=this.host._markers.find(t=>t.id===e),i=this.host._devices.find(t=>t.id===e);if(!s||s.removed||!0!==s.is_light)return{label:this.host._t("marker.control_missing_label"),sub:`${this.host._t("marker.control_broken")} (${t})`,icon:"mdi:alert-outline",warning:!0};const o=this.host._serverCfg?.spaces.find(t=>t.id===(i?.space||s.space)),a=!!i&&ci(i).length>0;return{label:s.name||i?.name||e,sub:[o?.title||i?.space||s.space,s.room_id||i?.area,a?"":this.host._t("marker.control_passive")].filter(Boolean).join(" · "),icon:s.icon||i?.icon||"mdi:lightbulb-outline",warning:!0===s.hidden||!0===i?.hidden}}_valueBadgeCandidateLabel(t){const e=t.source;if("derived_lqi"===e.kind)return this.host._t("marker.value_badge_lqi");if("derived_marker_state"===e.kind)return this.host._t("marker.value_badge_marker_state",{name:t.label});if("entity_state"===e.kind)return this.host._t("marker.value_badge_state",{name:t.label});const s=this.host.hass.states[e.entity_id]?.attributes?.friendly_name||this.host._fullRegistryHass.entities[e.entity_id]?.name||e.entity_id;return this.host._t(`marker.value_badge_attr_${e.attribute}`,{name:s})}_controlCandidates(t){const e=this._markerDraft(t)?.id||t.devId||"",s=[],i=new Set;for(const t of this.host._markers){if(t.id===e||t.removed||t.hidden||!0!==t.is_light)continue;if("virtual"!==t.binding&&"active"!==this.host._bindingStatus(t.binding).kind)continue;const o=this.host._devices.find(e=>e.id===t.id);if(!o||o.hidden)continue;const a=this._controlRefInfo(`marker:${t.id}`);for(const t of ci(o))i.add(t);s.push({value:`marker:${t.id}`,label:a.label,sub:a.sub,icon:a.icon,search:`${a.label} ${a.sub} ${t.id} ${ci(o).join(" ")}`.toLowerCase()})}const o=Object.keys(this.host.hass.states||{}).filter(e=>di(e)&&!i.has(e)&&pi(t.binding,[e],this.host._bindingEntities(t.binding)).length>0&&this.host._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()}}),a=t.controlsFilter.trim().toLowerCase();return[...s,...o].filter(e=>!t.controls.includes(e.value)&&(!a||e.search.includes(a))).slice(0,12).map(({search:t,...e})=>e)}_addControlRef(t,e){if(e.startsWith("marker:")){const s=this._markerDraft(t)?.id||t.devId||"";if(!s)return void this.host._showToast(this.host._t("toast.marker_binding_required"));const i=e.slice(7),o=this._markerDraft(t),a=o?[...this.host._markers.filter(t=>t.id!==s),o]:this.host._markers;if(_i(a,s,i))return void this.host._showToast(this.host._t("toast.marker_control_cycle"))}this.host._markerDialog=this._announceToggleDraft({...t,controls:[...t.controls,e],controlsFilter:""})}_setMarkerGlowMode(t){const e=this.host._markerDialog;if(!e)return;if("auto"===t)return void(this.host._markerDialog={...e,glowMode:t,glowTouched:!0});const s=this._markerSpatialSource(e),i=ui(s?this.host._planHass.states[s.eid]:void 0,null,this.host._fillColors.glow_light.c),o=!e.glowColorDrafted,a="fixed"===t&&!e.glowBrightnessDrafted;this.host._markerDialog={...e,glowMode:t,glowColor:o?i.c:e.glowColor,glowBrightness:a?Math.max(1,Math.round(100*i.bri)):e.glowBrightness,glowColorDrafted:!0,glowBrightnessDrafted:e.glowBrightnessDrafted||"fixed"===t,glowTouched:!0}}_renderMarkerDialog(){const t=this.host._markerDialog,e="virtual"===t.bindingMode,s=this._bindingCandidates();this.host._bindingEntities(t.binding);const i=e?null:this.host._bindingStatus(t.binding),o=!e&&this.host._bindingHasHaPage(t.binding),r=this._markerPreviewDevice(t),h=this._effectiveMarkerTapAction(t,r),l=r?_s(this.host._serverCfg?.spaces.find(t=>t.id===r.space)):null,c=r?this._markerPreviewDevices(r):this.host._devices,d="toggle"===h&&r?this._toggleIntent(r,c):null,p=this._toggleHintLines(d),_=r?mi(this.host._planHass,r,{liveStates:!1!==this.host._config?.live_states,showTemperature:!1!==this.host._config?.show_temperature,showSignal:l?.showLqi??!1!==this.host._config?.show_signal,designPreview:!0,activityRuntime:this.host._activityRt.get(r.id),lightDevices:c,registryHass:this.host._fullRegistryHass,reducedMotion:this.host._reducedMotion}):null,u=r?es(this.host._planHass,r,c):[],m=r?ss(this.host._planHass,r,u):null,g=t.valueBadgeTouched?t.valueBadgeEnabled:!!_?.valueBadge,f=t.valueBadgeTouched?t.valueBadgeSource:_?.valueBadge?.source||t.valueBadgeSource,b=t.valueBadgeTouched?t.valueBadgePosition:_?.valueBadge?.position||t.valueBadgePosition,v=gi(f),y=!!f&&!u.some(t=>t.key===v),$=u.find(t=>t.key===v),w=gi(t.valueSource),k=!(!t.valueSource||w&&u.some(t=>t.key===w)),x=u.find(t=>t.key===w),S=_?.valueSource?.sourceKey||"",M=this._markerAutoHasSpatialSource(t),D=!!r&&fi(this.host._planHass,{...r}),C=bi(t.lightRole,M,D,t.glowMode),P=!C.sourceExists,I=!C.fromSourceEnabled,R=C.passive,T=C.effectiveMode,z="never"===t.lightRole?this.host._t("marker.glow_disabled_never"):"auto"!==t.lightRole||M?R?this.host._t("marker.glow_passive_hint"):this.host._t("marker.glow_disabled_no_entity"):this.host._t("marker.glow_disabled_auto"),F=r?ci(r):[],A=r&&vi(r)||"",N=!!t.lightEntity&&!F.includes(t.lightEntity),H=r?yi(r):[],L=!!t.toggleEntity&&!H.includes(t.toggleEntity),O="toggle"===h?this._toggleIntentForDialog({...t,toggleEntity:"",toggleEntityTouched:!0}):null,E=O?[...O.targets,...O.skippedTargets].map(t=>t.entityId||("ref"in t?t.ref:"")).filter(Boolean).join(", "):"",B=(()=>{if(e)return null;const i=s.find(e=>e.value===t.binding);if(i)return i.label;const[o,a]=t.binding.split(":");return"device"===o?this.host._fullRegistryHass.devices[a]?.name_by_user||this.host._fullRegistryHass.devices[a]?.name||a:this.host._fullRegistryHass.entities[a]?.name||this.host.hass.states[a]?.attributes?.friendly_name||a})();return n`this._closeMarkerDialog()}>
@@ -1926,13 +1926,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 - ${"toggle"===l&&(H.length>1||L)?n`
+ ${"toggle"===h&&(H.length>1||L)?n`
${this._help("marker.toggle_entity.help")} @@ -1952,11 +1952,11 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 ${this.host._t("marker.toggle_entity_missing",{entity:t.toggleEntity,fallback:E||this.host._t("marker.toggle_entity_none")})}

`:a}
`:a} - ${"toggle"===l?n`
+ ${"toggle"===h?n`
${p.map(t=>n`
${t}
`)}
${t.tapHintAnnouncement}
`:a} - ${"run"===l?(()=>{const e=t.runFilter.trim().toLowerCase(),s=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),i=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return n` + ${"run"===h?(()=>{const e=t.runFilter.trim().toLowerCase(),s=this._runCandidates().filter(t=>!e||t.label.toLowerCase().includes(e)||t.value.includes(e)),i=t.tapTarget?this._runCandidates().find(e=>e.value===t.tapTarget):null;return n` ${t.tapTarget&&!i?n`
${this.host._t("marker.run_target_gone",{id:t.tapTarget})}
`:a} ${this.host._t("marker.nothing_found")}
`}
`}`})():a} - ${"run"===l||"toggle"===l?n`
`:a}`:a}`}_renderRoomDialog(){const t=!!this.host._roomEditId,e=t?null:this.host._wallFaceBatch,s=e&&e.candidates.length>1?this.host._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",i=!!this.host._areaSel||!!this.host._nameSel.trim(),o=_s(this.host._curSpaceCfg),r=this.host._roomFill||o.fill,l=this.host._roomCustomFill||o.customFill,h=[...this.host._freeAreas];if(t&&this.host._areaSel&&!h.some(t=>t.area_id===this.host._areaSel)){const t=this.host.hass.areas[this.host._areaSel];t&&h.unshift(t)}return n``:a}`:a}`}_renderRoomDialog(){const t=!!this.host._roomEditId,e=t?null:this.host._wallFaceBatch,s=e&&e.candidates.length>1?this.host._t("room.queue_progress",{current:e.index+1,total:e.candidates.length}):"",i=!!this.host._areaSel||!!this.host._nameSel.trim(),o=_s(this.host._curSpaceCfg),r=this.host._roomFill||o.fill,h=this.host._roomCustomFill||o.customFill,l=[...this.host._freeAreas];if(t&&this.host._areaSel&&!l.some(t=>t.area_id===this.host._areaSel)){const t=this.host.hass.areas[this.host._areaSel];t&&l.unshift(t)}return n`this._roomDialogCancel()}>
@@ -2526,7 +2526,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 @@ -2542,8 +2542,8 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 .label=${this.host._roomCustomFill?this.host._t("room.custom_fill_own"):this.host._t("room.custom_fill_space")} .opacityLabel=${this.host._t("space.opacity")} .pickerLabels=${this.host._colorPickerLabels} - .color=${l.c} - .opacity=${l.a} + .color=${h.c} + .opacity=${h.a} @hp-color-opacity-change=${t=>{this.host._roomCustomFill={c:t.detail.color,a:t.detail.opacity}}}> ${this.host._roomCustomFill?n``:a}
`:a} @@ -2575,4 +2575,4 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4 ${this.host._t("btn.save")} `}
-
`}}export{pl as EDITOR_RUNTIME_FINGERPRINT,_l as HouseplanEditorRuntime}; +
`}}export{ph as EDITOR_RUNTIME_FINGERPRINT,_h as HouseplanEditorRuntime}; diff --git a/dist/houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js b/dist/houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js similarity index 97% rename from dist/houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js rename to dist/houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js index f048c01e..99d58e09 100644 --- a/dist/houseplan-assets/houseplan-onboarding-runtime-kKe0zYd7.js +++ b/dist/houseplan-assets/houseplan-onboarding-runtime-C8XVDW46.js @@ -1,5 +1,5 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";import{l as t,ar as s,A as e,t as o,c as a,bV as l,bW as i,bX as h,bY as c,ao as n,bZ as r,c2 as p,b_ as d,b$ as _,c0 as u,c1 as g,cX as m,an as b,ap as $,cY as v}from"./houseplan-card-DVUSPdhz.js";import{i as f,c as y,e as w,r as D,a as k,b as S,s as C,t as M}from"./backdrop-pick-4jTd19VU.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?a``:e}_openSpaceDialog(t,s){if(!this.host._serverStorage||!this.host._serverCfg)return void this.host._showToast(this.host._t("toast.integration_missing"));if("edit"===t){const e=this.host._serverCfg.spaces.find(t=>t.id===s);if(!e)return;const o=l(e),a=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===o.fill?{...a||h,a:0}:a;return void(this.host._spaceDialog={mode:t,spaceId:s,title:e.title,planUrl:e.plan_url||null,planFile:null,source:e.plan_url?"file":"draw",showBorders:o.showBorders,showNames:o.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:o.hideDecor,hideOpenings:o.hideOpenings,roomColor:o.color,roomOpacity:o.opacity,fillMode:"none"===o.fill?"custom":o.fill,customFill:p,glowEnabled:o.glow,bgColor:o.bgColor,bgMode:"static"===e.settings?.bg_mode||"daynight"===e.settings?.bg_mode?e.settings.bg_mode:null,northDeg:n({},e.settings),sunRays:"boolean"==typeof e.settings?.sun_rays?e.settings.sun_rays:null,tempMin:o.tempMin,tempMax:o.tempMax,showLqi:o.showLqi??this.host._config?.show_signal??!0,cardFontScale:o.cardFontScale,labelTemp:o.labelTemp,labelHum:o.labelHum,labelLqi:o.labelLqi,labelLight:o.labelLight,cellCm:Number(e.cell_cm)>0?Number(e.cell_cm):5,cellCmInput:c(Number(e.cell_cm)>0?Number(e.cell_cm):5,this.host._imperial),cellCmTouched:!1,busy:!1})}const e=p(this.host._imperial);this.host._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:{...h,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:_,tempMax:d,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:e,cellCmInput:c(e,this.host._imperial),cellCmTouched:!1,busy:!1}}async _pickPlanFile(t){const s=t.target,e=s.files?.[0];if(!e||!this.host._spaceDialog)return;s.value="";const o=await y(e);if("reject"===o.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===o.kind)return void(this.host._backdropGuard=o.state);const a=await w(e,o.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:a})}_renderBackdropGuard(){return D(this.host,t=>{this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:t})},()=>{this.host._backdropGuard=null},this.host.hass)??e}_useServerPlan(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this.host._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let s=0;s<40;s++){const s=this.host._display(t);if(s){const e=await new Promise(t=>{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:0),e.onerror=()=>t(0),e.src=s}),o=this.host._spaceDialog;return o&&o.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...o,savedAspect:e},e):0}if(await new Promise(t=>setTimeout(t,150)),this.host._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){const s=this.host._spaceDialog,e=s?.saved?.find(s=>s.name===t);if(!s||!e||e.used_by.length||e.url===s.planUrl)return;const o=await this.host._confirmDanger({key:"delete-plan",kind:"destructive",title:this.host._t("confirm.delete_plan_title"),message:this.host._t("confirm.delete_plan_body"),objectName:t,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),a=this.host._spaceDialog,l=a?.saved?.find(s=>s.name===t);if(o&&a&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==a.planUrl)try{await this.host.hass.callWS({type:"houseplan/plans/delete",name:t});const s=this.host._spaceDialog;s?.saved&&(this.host._spaceDialog={...s,saved:s.saved.filter(s=>s.name!==t)})}catch(t){this.host._showToast(this.host._t("toast.plan_delete_failed",{err:this.host._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return a`
${this.host._t("space.loading")}
`;const s=t.saved||[];if(!s.length)return a`
${this.host._t("space.no_saved")}
`;return a`
+globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";import{l as t,ar as s,A as e,t as o,c as a,bV as l,bW as i,bX as h,bY as c,ao as n,bZ as r,c2 as p,b_ as _,b$ as d,c0 as u,c1 as g,cX as m,an as b,ap as $,cY as v}from"./houseplan-card-BSOQusOQ.js";import{i as f,c as y,e as w,r as D,a as k,b as S,s as C,t as M}from"./backdrop-pick-BpYD69bz.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?a``:e}_openSpaceDialog(t,s){if(!this.host._serverStorage||!this.host._serverCfg)return void this.host._showToast(this.host._t("toast.integration_missing"));if("edit"===t){const e=this.host._serverCfg.spaces.find(t=>t.id===s);if(!e)return;const o=l(e),a=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===o.fill?{...a||h,a:0}:a;return void(this.host._spaceDialog={mode:t,spaceId:s,title:e.title,planUrl:e.plan_url||null,planFile:null,source:e.plan_url?"file":"draw",showBorders:o.showBorders,showNames:o.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:o.hideDecor,hideOpenings:o.hideOpenings,roomColor:o.color,roomOpacity:o.opacity,fillMode:"none"===o.fill?"custom":o.fill,customFill:p,glowEnabled:o.glow,bgColor:o.bgColor,bgMode:"static"===e.settings?.bg_mode||"daynight"===e.settings?.bg_mode?e.settings.bg_mode:null,northDeg:n({},e.settings),sunRays:"boolean"==typeof e.settings?.sun_rays?e.settings.sun_rays:null,tempMin:o.tempMin,tempMax:o.tempMax,showLqi:o.showLqi??this.host._config?.show_signal??!0,cardFontScale:o.cardFontScale,labelTemp:o.labelTemp,labelHum:o.labelHum,labelLqi:o.labelLqi,labelLight:o.labelLight,cellCm:Number(e.cell_cm)>0?Number(e.cell_cm):5,cellCmInput:c(Number(e.cell_cm)>0?Number(e.cell_cm):5,this.host._imperial),cellCmTouched:!1,busy:!1})}const e=p(this.host._imperial);this.host._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:{...h,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:d,tempMax:_,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:e,cellCmInput:c(e,this.host._imperial),cellCmTouched:!1,busy:!1}}async _pickPlanFile(t){const s=t.target,e=s.files?.[0];if(!e||!this.host._spaceDialog)return;s.value="";const o=await y(e);if("reject"===o.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===o.kind)return void(this.host._backdropGuard=o.state);const a=await w(e,o.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:a})}_renderBackdropGuard(){return D(this.host,t=>{this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:t})},()=>{this.host._backdropGuard=null},this.host.hass)??e}_useServerPlan(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this.host._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let s=0;s<40;s++){const s=this.host._display(t);if(s){const e=await new Promise(t=>{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:0),e.onerror=()=>t(0),e.src=s}),o=this.host._spaceDialog;return o&&o.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...o,savedAspect:e},e):0}if(await new Promise(t=>setTimeout(t,150)),this.host._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){const s=this.host._spaceDialog,e=s?.saved?.find(s=>s.name===t);if(!s||!e||e.used_by.length||e.url===s.planUrl)return;const o=await this.host._confirmDanger({key:"delete-plan",kind:"destructive",title:this.host._t("confirm.delete_plan_title"),message:this.host._t("confirm.delete_plan_body"),objectName:t,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),a=this.host._spaceDialog,l=a?.saved?.find(s=>s.name===t);if(o&&a&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==a.planUrl)try{await this.host.hass.callWS({type:"houseplan/plans/delete",name:t});const s=this.host._spaceDialog;s?.saved&&(this.host._spaceDialog={...s,saved:s.saved.filter(s=>s.name!==t)})}catch(t){this.host._showToast(this.host._t("toast.plan_delete_failed",{err:this.host._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return a`
${this.host._t("space.loading")}
`;const s=t.saved||[];if(!s.length)return a`
${this.host._t("space.no_saved")}
`;return a`
${s.map(s=>{return a`
@@ -16,7 +16,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4
`;var e})} -
`}async _saveConfigNow(){this.host._cfgEpoch++;try{await this.host._writeConfig()}catch(t){const s=t;throw s?.physicalGeometryRolledBack?await this.host._reloadRejectedPhysicalWrite():"conflict"===s?.code&&await this.host._reloadConfigOnly(),t}}async _saveSpaceDialog(){const t=this.host._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this.host._showToast(this.host._t("toast.plan_required"));const s="create"===t.mode&&0===(this.host._serverCfg?.spaces.length||0);this.host._spaceDialog={...t,busy:!0};try{const e="create"===t.mode?`s${Date.now().toString(36)}`:t.spaceId;let o=null;if("file"===t.source&&t.planFile){o={url:(await this.host.hass.callWS({type:"houseplan/plan/set",space_id:e,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let a=t.savedAspect||null;!o&&"file"===t.source&&t.planUrl&&!a&&this.host._aspectJob&&(a=await this.host._aspectJob||null);const l=this.host._serverCfg;let i=l.spaces.find(t=>t.id===e);if("create"===t.mode)i=k(e,t.title.trim()),l.spaces.push(i);else{if(!i)throw new Error(`space ${e} is gone from the config`);i.title=t.title.trim()}if(!i)throw new Error(`space ${e} is unavailable`);if(o?(i.plan_url=o.url,i.plan_aspect=o.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==i.plan_url&&(i.plan_url=t.planUrl,i.plan_aspect=a),"draw"===t.source&&(i.plan_url=null,i.plan_aspect=null,delete i.plan_x,delete i.plan_y,delete i.plan_scale,delete i.plan_scale_x,delete i.plan_scale_y,delete i.plan_angle),i.settings={...i.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):_,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):d,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},i.zero_wall_style=t.zeroWallStyle,i.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(F,t.cellCm)):5,await this._saveConfigNow(),this.host._spaceDialog=null,"create"===t.mode&&this.host._commitSpace(i.id),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._importQueue.length)this._openNextImport();else if(s||this.host._importTotal>0){const t=this.host._importTotal>0;this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),await this.host._requestMode("plan"),this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._showToast(this.host._t(s&&!t?"toast.space_added_onboard":"import.done"))}else this.host._showToast(this.host._t("create"===t.mode?"toast.space_added":"toast.space_saved")),"create"===t.mode&&("plan"!==this.host._mode?await this.host._requestMode("plan"):(this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._saveNav()))}catch(t){const s=t;"conflict"!==s?.code&&await this.host._reloadConfigOnly(!0),this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,busy:!1}),this.host._showToast(this.host._t("toast.error",{err:this.host._errText(t)}))}}async _deleteSpace(){const t=this.host._spaceDialog;if(!t||"edit"!==t.mode)return;const s=this.host._serverCfg;if(!s)return;const e=s.spaces.find(s=>s.id===t.spaceId);if(!e)return;const o=S(s,this.host._layout||{},t.spaceId||""),a=1===s.spaces.length&&s.spaces[0]?.id===t.spaceId;if(o.count&&!a)return void(this.host._spaceDialog={...t,deleteBlockers:o.count});const l=t.spaceId,i=await this.host._confirmDanger({key:"delete-space",kind:"destructive",title:this.host._t("confirm.delete_space_title"),message:this.host._t("confirm.delete_space_body"),objectName:e.title,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),h=this.host._spaceDialog,c=this.host._serverCfg;if(!i||!h||"edit"!==h.mode||h.busy||h.spaceId!==l||!c)return;if(!c.spaces.find(t=>t.id===l))return;const n=S(c,this.host._layout||{},l),r=1===c.spaces.length&&c.spaces[0]?.id===l;if(!n.count||r){this.host._spaceDialog={...h,deleteBlockers:0,busy:!0};try{this.host._saveConfigDebounced.pending()&&this.host._saveConfigDebounced.flush(),this.host._persistLayout.pending()&&this.host._persistLayout.flush(),await this.host._writeChain;const t=await this.host.hass.callWS({type:"houseplan/space/delete",space_id:l,expected_config_rev:this.host._cfgRev,expected_layout_rev:this.host._layoutRev}),[s,e]=await Promise.all([this.host.hass.callWS({type:"houseplan/config/get"}),this.host.hass.callWS({type:"houseplan/layout/get"})]);this.host._adoptStructuralResponses(s,e),this.host._cfgRev=t?.config_rev??this.host._cfgRev,this.host._layoutRev=t?.layout_rev??this.host._layoutRev,this.host._spaceDialog=null,this.host._space===l&&this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||""),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._showToast(this.host._t("toast.space_deleted"))}catch(t){const s=t;"conflict"!==s?.code&&"space_in_use"!==s?.code||await Promise.all([this.host._reloadConfigOnly(!0),this.host._reloadLayoutOnly()]);const e=this.host._serverCfg;if(this.host._spaceDialog&&e){const t=S(e,this.host._layout||{},l),s=1===e.spaces.length&&e.spaces[0]?.id===l;this.host._spaceDialog={...this.host._spaceDialog,busy:!1,deleteBlockers:s?0:t.count}}this.host._showToast(this.host._t("toast.delete_failed",{err:this.host._errText(t)}))}}else this.host._spaceDialog={...h,deleteBlockers:n.count}}_startImport(){const t=this.host._importDialog;if(!t)return;const s=t.floors.filter(t=>t.checked).map(t=>t.name);this.host._importDialog=null,s.length?(this.host._importQueue=s,this.host._importTotal=s.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this.host._importQueue.shift();if(void 0===t)return;const s=p(this.host._imperial);this.host._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:_,tempMax:d,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:s,cellCmInput:c(s,this.host._imperial),cellCmTouched:!1,busy:!1}}_skipImport(){this.host._spaceDialog=null,this.host._importQueue.length?this._openNextImport():this.host._importTotal>0&&this.host._model.length&&(this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),this.host._requestMode("plan").then(()=>{this.host._showToast(this.host._t("import.done"))}))}_renderImportDialog(){const t=this.host._importDialog,s=t.floors.filter(t=>t.checked).length;return a``}async _saveConfigNow(){this.host._cfgEpoch++;try{await this.host._writeConfig()}catch(t){const s=t;throw s?.physicalGeometryRolledBack?await this.host._reloadRejectedPhysicalWrite():"conflict"===s?.code&&await this.host._reloadConfigOnly(),t}}async _saveSpaceDialog(){const t=this.host._spaceDialog;if(!t||t.busy||!t.title.trim())return;if("file"===t.source&&!t.planFile&&!t.planUrl)return void this.host._showToast(this.host._t("toast.plan_required"));const s="create"===t.mode&&0===(this.host._serverCfg?.spaces.length||0);this.host._spaceDialog={...t,busy:!0};try{const e="create"===t.mode?`s${Date.now().toString(36)}`:t.spaceId;let o=null;if("file"===t.source&&t.planFile){o={url:(await this.host.hass.callWS({type:"houseplan/plan/set",space_id:e,ext:t.planFile.ext,data:t.planFile.b64})).url,aspect:t.planFile.aspect}}let a=t.savedAspect||null;!o&&"file"===t.source&&t.planUrl&&!a&&this.host._aspectJob&&(a=await this.host._aspectJob||null);const l=this.host._serverCfg;let i=l.spaces.find(t=>t.id===e);if("create"===t.mode)i=k(e,t.title.trim()),l.spaces.push(i);else{if(!i)throw new Error(`space ${e} is gone from the config`);i.title=t.title.trim()}if(!i)throw new Error(`space ${e} is unavailable`);if(o?(i.plan_url=o.url,i.plan_aspect=o.aspect):"file"===t.source&&t.planUrl&&t.planUrl!==i.plan_url&&(i.plan_url=t.planUrl,i.plan_aspect=a),"draw"===t.source&&(i.plan_url=null,i.plan_aspect=null,delete i.plan_x,delete i.plan_y,delete i.plan_scale,delete i.plan_scale_x,delete i.plan_scale_y,delete i.plan_angle),i.settings={...i.settings||{},show_borders:t.showBorders,show_names:t.showNames,hide_decor:t.hideDecor||void 0,hide_openings:t.hideOpenings||void 0,room_color:t.roomColor,room_opacity:t.roomOpacity,bg_color:t.bgColor||void 0,bg_mode:t.bgMode||void 0,north_deg:t.northDeg??void 0,sun_rays:t.sunRays??void 0,fill_mode:t.fillMode,custom_fill:t.customFill||void 0,glow_enabled:t.glowEnabled,temp_min:Number.isFinite(t.tempMin)?Math.min(t.tempMin,t.tempMax):d,temp_max:Number.isFinite(t.tempMax)?Math.max(t.tempMin,t.tempMax):_,show_lqi:t.showLqi,card_font_scale:1!==t.cardFontScale?t.cardFontScale:void 0,label_temp:t.labelTemp,label_hum:t.labelHum,label_lqi:t.labelLqi,label_light:t.labelLight},i.zero_wall_style=t.zeroWallStyle,i.cell_cm=Number.isFinite(t.cellCm)&&t.cellCm>0?Math.max(.1,Math.min(F,t.cellCm)):5,await this._saveConfigNow(),this.host._spaceDialog=null,"create"===t.mode&&this.host._commitSpace(i.id),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._importQueue.length)this._openNextImport();else if(s||this.host._importTotal>0){const t=this.host._importTotal>0;this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),await this.host._requestMode("plan"),this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._showToast(this.host._t(s&&!t?"toast.space_added_onboard":"import.done"))}else this.host._showToast(this.host._t("create"===t.mode?"toast.space_added":"toast.space_saved")),"create"===t.mode&&("plan"!==this.host._mode?await this.host._requestMode("plan"):(this.host._tool="draw",this.host._path=[],this.host._cursorPt=null,this.host._primeDrawWallField(),this.host._saveNav()))}catch(t){const s=t;"conflict"!==s?.code&&await this.host._reloadConfigOnly(!0),this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,busy:!1}),this.host._showToast(this.host._t("toast.error",{err:this.host._errText(t)}))}}async _deleteSpace(){const t=this.host._spaceDialog;if(!t||"edit"!==t.mode)return;const s=this.host._serverCfg;if(!s)return;const e=s.spaces.find(s=>s.id===t.spaceId);if(!e)return;const o=S(s,this.host._layout||{},t.spaceId||""),a=1===s.spaces.length&&s.spaces[0]?.id===t.spaceId;if(o.count&&!a)return void(this.host._spaceDialog={...t,deleteBlockers:o.count});const l=t.spaceId,i=await this.host._confirmDanger({key:"delete-space",kind:"destructive",title:this.host._t("confirm.delete_space_title"),message:this.host._t("confirm.delete_space_body"),objectName:e.title,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),h=this.host._spaceDialog,c=this.host._serverCfg;if(!i||!h||"edit"!==h.mode||h.busy||h.spaceId!==l||!c)return;if(!c.spaces.find(t=>t.id===l))return;const n=S(c,this.host._layout||{},l),r=1===c.spaces.length&&c.spaces[0]?.id===l;if(!n.count||r){this.host._spaceDialog={...h,deleteBlockers:0,busy:!0};try{this.host._saveConfigDebounced.pending()&&this.host._saveConfigDebounced.flush(),this.host._persistLayout.pending()&&this.host._persistLayout.flush(),await this.host._writeChain;const t=await this.host.hass.callWS({type:"houseplan/space/delete",space_id:l,expected_config_rev:this.host._cfgRev,expected_layout_rev:this.host._layoutRev}),[s,e]=await Promise.all([this.host.hass.callWS({type:"houseplan/config/get"}),this.host.hass.callWS({type:"houseplan/layout/get"})]);this.host._adoptStructuralResponses(s,e),this.host._cfgRev=t?.config_rev??this.host._cfgRev,this.host._layoutRev=t?.layout_rev??this.host._layoutRev,this.host._spaceDialog=null,this.host._space===l&&this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||""),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host._showToast(this.host._t("toast.space_deleted"))}catch(t){const s=t;"conflict"!==s?.code&&"space_in_use"!==s?.code||await Promise.all([this.host._reloadConfigOnly(!0),this.host._reloadLayoutOnly()]);const e=this.host._serverCfg;if(this.host._spaceDialog&&e){const t=S(e,this.host._layout||{},l),s=1===e.spaces.length&&e.spaces[0]?.id===l;this.host._spaceDialog={...this.host._spaceDialog,busy:!1,deleteBlockers:s?0:t.count}}this.host._showToast(this.host._t("toast.delete_failed",{err:this.host._errText(t)}))}}else this.host._spaceDialog={...h,deleteBlockers:n.count}}_startImport(){const t=this.host._importDialog;if(!t)return;const s=t.floors.filter(t=>t.checked).map(t=>t.name);this.host._importDialog=null,s.length?(this.host._importQueue=s,this.host._importTotal=s.length,this._openNextImport()):this._openSpaceDialog("create")}_openNextImport(){const t=this.host._importQueue.shift();if(void 0===t)return;const s=p(this.host._imperial);this.host._spaceDialog={mode:"create",title:t,planUrl:null,planFile:null,...f(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:null,glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:d,tempMax:_,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:s,cellCmInput:c(s,this.host._imperial),cellCmTouched:!1,busy:!1}}_skipImport(){this.host._spaceDialog=null,this.host._importQueue.length?this._openNextImport():this.host._importTotal>0&&this.host._model.length&&(this.host._importTotal=0,this.host._commitSpace(this.host._serverCfg.spaces[0]?.id||this.host._space),this.host._requestMode("plan").then(()=>{this.host._showToast(this.host._t("import.done"))}))}_renderImportDialog(){const t=this.host._importDialog,s=t.floors.filter(t=>t.checked).length;return a`this.host._importDialog=null}>
${this.host._t("import.hint")}
diff --git a/dist/houseplan-card.js b/dist/houseplan-card.js index a8dea33d..77163c65 100644 --- a/dist/houseplan-card.js +++ b/dist/houseplan-card.js @@ -1 +1 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="e2d839e97aa4efbd705a785c97fc4d8d98b4f652413c149361bd8f8d8f107d0b";try{await import("./houseplan-assets/houseplan-card-DVUSPdhz.js")}catch(e){if(!customElements.get("houseplan-card")){const l=String(navigator.language||"en").toLowerCase();const m=l.startsWith("ru")?"House Plan обновился — перезагрузите страницу (Ctrl+F5).":l.startsWith("de")?"House Plan wurde aktualisiert — bitte laden Sie die Seite neu (Strg+F5).":l.startsWith("fr")?"House Plan a été mis à jour — veuillez recharger la page (Ctrl+F5).":"House Plan was updated — please reload the page (Ctrl+F5).";customElements.define("houseplan-card",class extends HTMLElement{setConfig(){}getCardSize(){return 1}connectedCallback(){this.style.cssText="display:block;box-sizing:border-box;padding:16px;border:1px solid var(--divider-color,#e0e0e0);border-radius:var(--ha-card-border-radius,12px);background:var(--card-background-color,#fff);color:var(--primary-text-color,#212121);font:14px/1.4 var(--paper-font-body1_-_font-family,sans-serif)";this.textContent=m}})}console.error("[houseplan] stale entry: the main chunk is unavailable",e)} +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8f2c886ca493cdf60d2e41a1f6fbf0e7ba9ccd021365ea29959a5bd42843b804";try{await import("./houseplan-assets/houseplan-card-BSOQusOQ.js")}catch(e){if(!customElements.get("houseplan-card")){const l=String(navigator.language||"en").toLowerCase();const m=l.startsWith("ru")?"House Plan обновился — перезагрузите страницу (Ctrl+F5).":l.startsWith("de")?"House Plan wurde aktualisiert — bitte laden Sie die Seite neu (Strg+F5).":l.startsWith("fr")?"House Plan a été mis à jour — veuillez recharger la page (Ctrl+F5).":"House Plan was updated — please reload the page (Ctrl+F5).";customElements.define("houseplan-card",class extends HTMLElement{setConfig(){}getCardSize(){return 1}connectedCallback(){this.style.cssText="display:block;box-sizing:border-box;padding:16px;border:1px solid var(--divider-color,#e0e0e0);border-radius:var(--ha-card-border-radius,12px);background:var(--card-background-color,#fff);color:var(--primary-text-color,#212121);font:14px/1.4 var(--paper-font-body1_-_font-family,sans-serif)";this.textContent=m}})}console.error("[houseplan] stale entry: the main chunk is unavailable",e)} diff --git a/docs/images/01-view-desktop.png b/docs/images/01-view-desktop.png index 137dbf84786b9f23c05cc2a717fcd248d82e4437..7db5466123b47ceade8ea227291d3f451a06425f 100644 GIT binary patch delta 11110 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 U&gdPs{L4WSA}3ZN`o-t}027Y(EdT%j delta 11112 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 diff --git a/docs/images/09-device-info.png b/docs/images/09-device-info.png index 4cf3f93f334f353d4d92729f80ee950d2cf5bfaf..41c433aac12904b9fcbc862371c602660775baa7 100644 GIT binary patch delta 47665 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�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

WuUE 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 F{{t>AdKUly delta 47718 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