build: prepare v1.72.0-beta.4 candidate

Issue: #456
Issue: #457
Issue: #459
Issue: #460
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-09-05 12:32:06 +03:00
parent 9ee60993ff
commit 16b4c2d6d3
38 changed files with 346 additions and 332 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ SCHEDULED_GRACE_S = 30 * 24 * 3600
FILES_DIR = "houseplan/files"
ASSETS_DIR = "houseplan/assets"
CONF_ADMIN_ONLY = "admin_only"
VERSION = "1.72.0-beta.3"
VERSION = "1.72.0-beta.4"
DECOR_ASSETS_API_VERSION = 1
# #43: the support transport is deliberately not configurable. A user supplied
@@ -1,182 +1,182 @@
{
"schema": 1,
"fingerprint": "f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7",
"fingerprint": "f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11",
"entry": "houseplan-card.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 297481,
"initialViewGzipBytes": 297486,
"lazyFiles": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/de-ikYRfVaQ.js",
"houseplan-assets/editor-D3hGLWnj.js",
"houseplan-assets/fr-CztCSf8d.js",
"houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js",
"houseplan-assets/hp-zigbee-topology-overlay-GnSX-nxk.js",
"houseplan-assets/live-interaction-runtime-DBSJOtiD.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js",
"houseplan-assets/zigbee-topology-runtime-eieh242A.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/de-CXv_Vh2u.js",
"houseplan-assets/editor-D1NFFlNr.js",
"houseplan-assets/fr-H_vau5CZ.js",
"houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js",
"houseplan-assets/hp-zigbee-topology-overlay-MW1LwwjY.js",
"houseplan-assets/live-interaction-runtime-UCIhvgjn.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js",
"houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js"
],
"lazyGzipBytes": 247974,
"lazyGzipBytes": 248003,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/editor-D3hGLWnj.js",
"houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/editor-D1NFFlNr.js",
"houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js"
],
"lazyEditorGzipBytes": 183988,
"lazyEditorGzipBytes": 183997,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js"
],
"lazyOnboardingGzipBytes": 14312,
"lazyOnboardingGzipBytes": 14313,
"lazyLocaleFiles": [
"houseplan-assets/de-ikYRfVaQ.js",
"houseplan-assets/fr-CztCSf8d.js"
"houseplan-assets/de-CXv_Vh2u.js",
"houseplan-assets/fr-H_vau5CZ.js"
],
"lazyLocaleGzipBytes": 49914,
"lazyLocaleGzipBytes": 49927,
"files": [
{
"path": "houseplan-assets/backdrop-pick-BlzFtfHW.js",
"sha256": "15fde4dd87aa1039573fae46a9dc05bd4190eabec121686fe323192019345efe",
"path": "houseplan-assets/backdrop-pick-Dilkzy9t.js",
"sha256": "90eb66b813c7588efac4467f1e53cd7025d9a4a9b4c839b839d7a433de1ca9fc",
"rawBytes": 21592,
"gzipBytes": 7357,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-ikYRfVaQ.js",
"sha256": "2afe4ba96c9b4779665af9ec1c286c246d7cf4fb0b0f5d55c9e1f8bce22e2403",
"path": "houseplan-assets/de-CXv_Vh2u.js",
"sha256": "4d351e04587f22e967887586725f6af21b168b9a731deb1107d0a329d7914a11",
"rawBytes": 83907,
"gzipBytes": 25232,
"gzipBytes": 25238,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-D3hGLWnj.js",
"sha256": "016215135309933c3655320b4332d415995ad2ecf831014bd82c963b968f0700",
"path": "houseplan-assets/editor-D1NFFlNr.js",
"sha256": "fda685a539d9c191c7ebaa525c18ef6e6103243dc449e552f275b027a0c4fb44",
"rawBytes": 3831,
"gzipBytes": 1579,
"gzipBytes": 1581,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-CztCSf8d.js",
"sha256": "b0c22cda12f5f09379b0900b670afe10f6cc456988fbb5433204b321cc817f2f",
"path": "houseplan-assets/fr-H_vau5CZ.js",
"sha256": "d132464ed1c51ba5cc7bc5610a5268d69f21cd0dff9a53be8281d0ded9e551c3",
"rawBytes": 85967,
"gzipBytes": 24682,
"gzipBytes": 24689,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card--Yu_3uZU.js",
"sha256": "cf3e3c01dc56cd44b3cdae00fc38ef54ddcf47fc5cb02531ee222f764818732e",
"path": "houseplan-assets/houseplan-card-B34Dj2Wv.js",
"sha256": "7a4a4c6ea60dff4deb5b828201099dfaecbc6d1807099c87f6496a050ec67256",
"rawBytes": 1058176,
"gzipBytes": 296688,
"gzipBytes": 296692,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-ikYRfVaQ.js",
"houseplan-assets/editor-D3hGLWnj.js",
"houseplan-assets/fr-CztCSf8d.js",
"houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js",
"houseplan-assets/hp-zigbee-topology-overlay-GnSX-nxk.js",
"houseplan-assets/live-interaction-runtime-DBSJOtiD.js"
"houseplan-assets/de-CXv_Vh2u.js",
"houseplan-assets/editor-D1NFFlNr.js",
"houseplan-assets/fr-H_vau5CZ.js",
"houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js",
"houseplan-assets/hp-zigbee-topology-overlay-MW1LwwjY.js",
"houseplan-assets/live-interaction-runtime-UCIhvgjn.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"sha256": "1309a63497de61690f0f86cc862902c57b9cb4cde841e0948494a2c074b15dc4",
"path": "houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"sha256": "e9a9550a0111cdabdb2411396702bf15a1c27b5ce58f61c70caf5fb39a5ae634",
"rawBytes": 631744,
"gzipBytes": 167631,
"gzipBytes": 167635,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-eieh242A.js"
"houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js",
"sha256": "a71b2f5339068aee09b9222503b734f0c91bf31b46c3b74337ee6d49ea444634",
"path": "houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js",
"sha256": "79417d4ef5de003940e0ede98f7bb06e47c8ce96a4205b5e31efe6334904ca17",
"rawBytes": 28088,
"gzipBytes": 6955,
"gzipBytes": 6956,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-GnSX-nxk.js",
"sha256": "18fbb64b96dbdb48569355909b6d70e7ee3f369c761304329e5d28382a10863e",
"path": "houseplan-assets/hp-zigbee-topology-overlay-MW1LwwjY.js",
"sha256": "8110be62ed901d407c4947ba8770a04a83ca9ce2ccdedafcdbe1e0f9c310fd51",
"rawBytes": 8626,
"gzipBytes": 3234,
"gzipBytes": 3233,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js",
"houseplan-assets/zigbee-topology-runtime-eieh242A.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js",
"houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-DBSJOtiD.js",
"sha256": "e2188ee62c129161ead60af08a613353ff6e6b5fea0209d88c60a00795293f47",
"path": "houseplan-assets/live-interaction-runtime-UCIhvgjn.js",
"sha256": "9665d15195cdaed9b9ad0039bf6def8082742edc1a5fedf968a3182145759b1f",
"rawBytes": 5196,
"gzipBytes": 2122,
"gzipBytes": 2126,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-CYMZJB0I.js",
"sha256": "3dbdda4a3c8decf229325193447a7e8498ac79ee9671e5fa923e1afab15fda78",
"path": "houseplan-assets/zigbee-topology-C2VfSKkl.js",
"sha256": "093a182d434fbbafe4218f18ba98ac11aa5d20b8d28f526ea754186d4efd7102",
"rawBytes": 18961,
"gzipBytes": 7421,
"gzipBytes": 7424,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-eieh242A.js",
"sha256": "9226ed8ab8996a3139630492336d1c669077ca6442f60e85b84068b94165754e",
"path": "houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js",
"sha256": "458384bd207cfa03c9087be629a91ac97bcf1bedaeaf3071d7475260aba00fba",
"rawBytes": 3941,
"gzipBytes": 1761,
"gzipBytes": 1764,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "fa974652b479dbe9381b5862de0feb250083eda438065263b15754ffb069696a",
"sha256": "a8abc0e88f0aed895e3029cbf860ae5ba7131ba003b607c27aceacb9813fccf6",
"rawBytes": 1183,
"gzipBytes": 793,
"gzipBytes": 794,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
}
File diff suppressed because one or more lines are too long
@@ -1,14 +1,14 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";import{v as e,l as o,z as t,dt as s,A as a,du as i,dv as l,dw as n,E as r,c}from"./houseplan-card--Yu_3uZU.js";class f extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({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,f={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")},h=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`<ha-form
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";import{v as e,l as o,z as t,dt as s,A as a,du as i,dv as l,dw as n,E as r,c}from"./houseplan-card-B34Dj2Wv.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({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`<ha-form
.hass=${this.hass}
.data=${this._formData}
.schema=${e}
.computeLabel=${e=>f[e.name]||e.name}
.computeLabel=${e=>h[e.name]||e.name}
@value-changed=${this._valueChanged}
></ha-form>`;return c`
${d(h.slice(0,3))}
${d(f.slice(0,3))}
${_?c`<div class="default-floor-error" role="alert"
style="color:var(--error-color,#db4437);margin:-4px 0 12px;overflow-wrap:anywhere">
${t(s,"editor.default_floor_missing",{id:_})}
</div>`:a}
${d(h.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}f.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",f);
${d(f.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}h.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",h);
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";import{l as t,a$ as s,A as e,z as a,c as o,cj as l,ck as i,cl as h,cm as c,aY as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,dj as m,aX as b,aZ as $,dk as v}from"./houseplan-card--Yu_3uZU.js";import{i as f,c as y,e as w,r as D,a as k,b as S,g as C,t as M}from"./backdrop-pick-BlzFtfHW.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";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)?o`<hp-help data-help-key=${l}
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";import{l as t,a$ as s,A as e,z as a,c as o,cj as l,ck as i,cl as h,cm as c,aY as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,dj as m,aX as b,aZ as $,dk as v}from"./houseplan-card-B34Dj2Wv.js";import{i as f,c as y,e as w,r as D,a as k,b as S,g as C,t as M}from"./backdrop-pick-Dilkzy9t.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";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)?o`<hp-help data-help-key=${l}
.text=${a(h,l)} .ariaLabel=${a(h,i)}></hp-help>`: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 a=l(e),o=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===a.fill?{...o||h,a:0}:o;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:a.showBorders,showNames:a.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:a.hideDecor,hideOpenings:a.hideOpenings,roomColor:a.color,roomOpacity:a.opacity,fillMode:"none"===a.fill?"custom":a.fill,customFill:p,glowEnabled:a.glow,bgColor:a.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:a.tempMin,tempMax:a.tempMax,showLqi:a.showLqi??this.host._config?.show_signal??!0,cardFontScale:a.cardFontScale,labelTemp:a.labelTemp,labelHum:a.labelHum,labelLqi:a.labelLqi,labelLight:a.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 a=await y(e);if("reject"===a.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===a.kind)return void(this.host._backdropGuard=a.state);const o=await w(e,a.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:o})}_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}),a=this.host._spaceDialog;return a&&a.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...a,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 a=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")}),o=this.host._spaceDialog,l=o?.saved?.find(s=>s.name===t);if(a&&o&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==o.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 o`<div class="savedplans muted">${this.host._t("space.loading")}</div>`;const s=t.saved||[];if(!s.length)return o`<div class="savedplans muted">${this.host._t("space.no_saved")}</div>`;return o`<div class="savedplans">
${s.map(s=>{return o`
<div class="savedplan ${s.url===t.planUrl?"cur":""}">
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";import{n as t,b as n}from"./zigbee-topology-CYMZJB0I.js";import{I as e}from"./houseplan-card--Yu_3uZU.js";const o=new WeakMap;function i(t){const n=function(t){const n=t?.connection||t;return!n||"object"!=typeof n&&"function"!=typeof n?null:n}(t);if(!n)return null;let e=o.get(n);return e||(e={revision:0,topologies:[],states:{},listeners:new Set,inflight:new Map},o.set(n,e)),e}function r(t,n,e){t.states={...t.states,[n]:e},function(t){t.revision++;for(const n of t.listeners)n()}(t)}function s(t){const n=t?.code;if("permission"===n||"unsupported"===n||"timeout"===n||"invalid_topic"===n||"invalid_payload"===n)return n;const e=String(t?.message||"").toLowerCase();return e.includes("unauthor")||e.includes("permission")?"permission":e.includes("unknown_command")||e.includes("not found")?"unsupported":"provider"}function a(t){return Object.assign(new Error(t),{code:t})}function c(t,n,e){const o=t.inflight.get(n);if(o)return o;r(t,n,{phase:"loading"});const i=e().then(n=>{if(!n.nodes.length&&n.warnings.some(t=>"invalid_payload"===t.code))throw a("invalid_payload");!function(t,n){t.topologies=[...t.topologies.filter(t=>!(t.provider===n.provider&&t.instanceId===n.instanceId)),n],r(t,"zha"===n.provider?"zha":`z2m:${n.instanceId}`,{phase:"ready",obtainedAt:n.obtainedAt,partial:n.warnings.length>0})}(t,n)}).catch(e=>{r(t,n,{phase:"error",error:s(e)})}).finally(()=>t.inflight.delete(n));return t.inflight.set(n,i),i}function l(t){const n=i(t);return n?{revision:n.revision,topologies:n.topologies,states:n.states}:{revision:0,topologies:[],states:{}}}function u(t,n){const e=i(t);return e?(e.listeners.add(n),()=>e.listeners.delete(n)):()=>{}}function f(t){if(!0!==t?.user?.is_admin)throw a("permission")}function p(n){const e=i(n);return e?c(e,"zha",async()=>{if(f(n),"function"!=typeof n?.callWS)throw a("unsupported");return t(await n.callWS({type:"zha/devices"}))}):Promise.resolve()}function d(t){return null!==t&&"object"==typeof t?t:null}function h(t){const n=d(t),e=n?.payload??t;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}}async function m(t,n){let e;try{return await Promise.race([t,new Promise((t,o)=>{e=globalThis.setTimeout(()=>o(a("timeout")),Math.max(1,n))})])}finally{void 0!==e&&globalThis.clearTimeout(e)}}function g(t,o,r=15e4){const s=i(t);if(!s)return Promise.resolve();const l=e(o);return c(s,`z2m:${l||String(o)}`,async()=>{if(f(t),!l)throw a("invalid_topic");const e=t.connection,o=e?.subscribeMessage;if("function"!=typeof o||"function"!=typeof t?.callService)throw a("unsupported");const i=function(){const t=globalThis.crypto;return"function"==typeof t?.randomUUID?`houseplan-${t.randomUUID()}`:`houseplan-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}(),s=Date.now()+Math.max(1,r);let c=!1,u=null,p=null,g=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{p=t,g=n}),b=[];try{const r=await o.call(e,t=>{!0===d(t)?.retain&&h(t)&&u?.()},{type:"mqtt/subscribe",topic:`${l}/bridge/info`});"function"==typeof r&&b.push(r);const f=await o.call(e,t=>{if(!0===d(t)?.retain)return;const n=h(t);null!==n?n&&function(t){const n=d(t),e=n?.transaction??d(n?.data)?.transaction;return"string"==typeof e||"number"==typeof e?String(e):null}(n)===i&&p?.(n):c&&g?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof f&&b.push(f),await m(y,Math.min(4e3,Math.max(1,s-Date.now()))),c=!0,await t.callService("mqtt","publish",{topic:`${l}/bridge/request/networkmap`,payload:JSON.stringify({type:"raw",routes:!1,transaction:i}),qos:0,retain:!1});const v=await m(w,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of b)try{t()}catch{}}})}export{p as readZhaTopology,g as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";import{n as t,b as n}from"./zigbee-topology-C2VfSKkl.js";import{I as e}from"./houseplan-card-B34Dj2Wv.js";const o=new WeakMap;function i(t){const n=function(t){const n=t?.connection||t;return!n||"object"!=typeof n&&"function"!=typeof n?null:n}(t);if(!n)return null;let e=o.get(n);return e||(e={revision:0,topologies:[],states:{},listeners:new Set,inflight:new Map},o.set(n,e)),e}function r(t,n,e){t.states={...t.states,[n]:e},function(t){t.revision++;for(const n of t.listeners)n()}(t)}function s(t){const n=t?.code;if("permission"===n||"unsupported"===n||"timeout"===n||"invalid_topic"===n||"invalid_payload"===n)return n;const e=String(t?.message||"").toLowerCase();return e.includes("unauthor")||e.includes("permission")?"permission":e.includes("unknown_command")||e.includes("not found")?"unsupported":"provider"}function a(t){return Object.assign(new Error(t),{code:t})}function c(t,n,e){const o=t.inflight.get(n);if(o)return o;r(t,n,{phase:"loading"});const i=e().then(n=>{if(!n.nodes.length&&n.warnings.some(t=>"invalid_payload"===t.code))throw a("invalid_payload");!function(t,n){t.topologies=[...t.topologies.filter(t=>!(t.provider===n.provider&&t.instanceId===n.instanceId)),n],r(t,"zha"===n.provider?"zha":`z2m:${n.instanceId}`,{phase:"ready",obtainedAt:n.obtainedAt,partial:n.warnings.length>0})}(t,n)}).catch(e=>{r(t,n,{phase:"error",error:s(e)})}).finally(()=>t.inflight.delete(n));return t.inflight.set(n,i),i}function l(t){const n=i(t);return n?{revision:n.revision,topologies:n.topologies,states:n.states}:{revision:0,topologies:[],states:{}}}function u(t,n){const e=i(t);return e?(e.listeners.add(n),()=>e.listeners.delete(n)):()=>{}}function p(t){if(!0!==t?.user?.is_admin)throw a("permission")}function f(n){const e=i(n);return e?c(e,"zha",async()=>{if(p(n),"function"!=typeof n?.callWS)throw a("unsupported");return t(await n.callWS({type:"zha/devices"}))}):Promise.resolve()}function d(t){return null!==t&&"object"==typeof t?t:null}function h(t){const n=d(t),e=n?.payload??t;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}}async function m(t,n){let e;try{return await Promise.race([t,new Promise((t,o)=>{e=globalThis.setTimeout(()=>o(a("timeout")),Math.max(1,n))})])}finally{void 0!==e&&globalThis.clearTimeout(e)}}function g(t,o,r=15e4){const s=i(t);if(!s)return Promise.resolve();const l=e(o);return c(s,`z2m:${l||String(o)}`,async()=>{if(p(t),!l)throw a("invalid_topic");const e=t.connection,o=e?.subscribeMessage;if("function"!=typeof o||"function"!=typeof t?.callService)throw a("unsupported");const i=function(){const t=globalThis.crypto;return"function"==typeof t?.randomUUID?`houseplan-${t.randomUUID()}`:`houseplan-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}(),s=Date.now()+Math.max(1,r);let c=!1,u=null,f=null,g=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{f=t,g=n}),b=[];try{const r=await o.call(e,t=>{!0===d(t)?.retain&&h(t)&&u?.()},{type:"mqtt/subscribe",topic:`${l}/bridge/info`});"function"==typeof r&&b.push(r);const p=await o.call(e,t=>{if(!0===d(t)?.retain)return;const n=h(t);null!==n?n&&function(t){const n=d(t),e=n?.transaction??d(n?.data)?.transaction;return"string"==typeof e||"number"==typeof e?String(e):null}(n)===i&&f?.(n):c&&g?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof p&&b.push(p),await m(y,Math.min(4e3,Math.max(1,s-Date.now()))),c=!0,await t.callService("mqtt","publish",{topic:`${l}/bridge/request/networkmap`,payload:JSON.stringify({type:"raw",routes:!1,transaction:i}),qos:0,retain:!1});const v=await m(w,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of b)try{t()}catch{}}})}export{f as readZhaTopology,g as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";try{await import("./houseplan-assets/houseplan-card--Yu_3uZU.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__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";try{await import("./houseplan-assets/houseplan-card-B34Dj2Wv.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)}
+1 -1
View File
@@ -16,5 +16,5 @@
"issue_tracker": "https://github.com/Matysh/houseplan-card/issues",
"requirements": [],
"single_config_entry": true,
"version": "1.72.0-beta.3"
"version": "1.72.0-beta.4"
}
+82 -82
View File
@@ -1,182 +1,182 @@
{
"schema": 1,
"fingerprint": "f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7",
"fingerprint": "f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11",
"entry": "houseplan-card.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 297481,
"initialViewGzipBytes": 297486,
"lazyFiles": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/de-ikYRfVaQ.js",
"houseplan-assets/editor-D3hGLWnj.js",
"houseplan-assets/fr-CztCSf8d.js",
"houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js",
"houseplan-assets/hp-zigbee-topology-overlay-GnSX-nxk.js",
"houseplan-assets/live-interaction-runtime-DBSJOtiD.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js",
"houseplan-assets/zigbee-topology-runtime-eieh242A.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/de-CXv_Vh2u.js",
"houseplan-assets/editor-D1NFFlNr.js",
"houseplan-assets/fr-H_vau5CZ.js",
"houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js",
"houseplan-assets/hp-zigbee-topology-overlay-MW1LwwjY.js",
"houseplan-assets/live-interaction-runtime-UCIhvgjn.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js",
"houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js"
],
"lazyGzipBytes": 247974,
"lazyGzipBytes": 248003,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/editor-D3hGLWnj.js",
"houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/editor-D1NFFlNr.js",
"houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js"
],
"lazyEditorGzipBytes": 183988,
"lazyEditorGzipBytes": 183997,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js"
],
"lazyOnboardingGzipBytes": 14312,
"lazyOnboardingGzipBytes": 14313,
"lazyLocaleFiles": [
"houseplan-assets/de-ikYRfVaQ.js",
"houseplan-assets/fr-CztCSf8d.js"
"houseplan-assets/de-CXv_Vh2u.js",
"houseplan-assets/fr-H_vau5CZ.js"
],
"lazyLocaleGzipBytes": 49914,
"lazyLocaleGzipBytes": 49927,
"files": [
{
"path": "houseplan-assets/backdrop-pick-BlzFtfHW.js",
"sha256": "15fde4dd87aa1039573fae46a9dc05bd4190eabec121686fe323192019345efe",
"path": "houseplan-assets/backdrop-pick-Dilkzy9t.js",
"sha256": "90eb66b813c7588efac4467f1e53cd7025d9a4a9b4c839b839d7a433de1ca9fc",
"rawBytes": 21592,
"gzipBytes": 7357,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-ikYRfVaQ.js",
"sha256": "2afe4ba96c9b4779665af9ec1c286c246d7cf4fb0b0f5d55c9e1f8bce22e2403",
"path": "houseplan-assets/de-CXv_Vh2u.js",
"sha256": "4d351e04587f22e967887586725f6af21b168b9a731deb1107d0a329d7914a11",
"rawBytes": 83907,
"gzipBytes": 25232,
"gzipBytes": 25238,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-D3hGLWnj.js",
"sha256": "016215135309933c3655320b4332d415995ad2ecf831014bd82c963b968f0700",
"path": "houseplan-assets/editor-D1NFFlNr.js",
"sha256": "fda685a539d9c191c7ebaa525c18ef6e6103243dc449e552f275b027a0c4fb44",
"rawBytes": 3831,
"gzipBytes": 1579,
"gzipBytes": 1581,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-CztCSf8d.js",
"sha256": "b0c22cda12f5f09379b0900b670afe10f6cc456988fbb5433204b321cc817f2f",
"path": "houseplan-assets/fr-H_vau5CZ.js",
"sha256": "d132464ed1c51ba5cc7bc5610a5268d69f21cd0dff9a53be8281d0ded9e551c3",
"rawBytes": 85967,
"gzipBytes": 24682,
"gzipBytes": 24689,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card--Yu_3uZU.js",
"sha256": "cf3e3c01dc56cd44b3cdae00fc38ef54ddcf47fc5cb02531ee222f764818732e",
"path": "houseplan-assets/houseplan-card-B34Dj2Wv.js",
"sha256": "7a4a4c6ea60dff4deb5b828201099dfaecbc6d1807099c87f6496a050ec67256",
"rawBytes": 1058176,
"gzipBytes": 296688,
"gzipBytes": 296692,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-ikYRfVaQ.js",
"houseplan-assets/editor-D3hGLWnj.js",
"houseplan-assets/fr-CztCSf8d.js",
"houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js",
"houseplan-assets/hp-zigbee-topology-overlay-GnSX-nxk.js",
"houseplan-assets/live-interaction-runtime-DBSJOtiD.js"
"houseplan-assets/de-CXv_Vh2u.js",
"houseplan-assets/editor-D1NFFlNr.js",
"houseplan-assets/fr-H_vau5CZ.js",
"houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js",
"houseplan-assets/hp-zigbee-topology-overlay-MW1LwwjY.js",
"houseplan-assets/live-interaction-runtime-UCIhvgjn.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-QXAvNIKY.js",
"sha256": "1309a63497de61690f0f86cc862902c57b9cb4cde841e0948494a2c074b15dc4",
"path": "houseplan-assets/houseplan-editor-runtime-CJ0y3czq.js",
"sha256": "e9a9550a0111cdabdb2411396702bf15a1c27b5ce58f61c70caf5fb39a5ae634",
"rawBytes": 631744,
"gzipBytes": 167631,
"gzipBytes": 167635,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-eieh242A.js"
"houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DoCgwkP3.js",
"sha256": "a71b2f5339068aee09b9222503b734f0c91bf31b46c3b74337ee6d49ea444634",
"path": "houseplan-assets/houseplan-onboarding-runtime-Cd0NDMYR.js",
"sha256": "79417d4ef5de003940e0ede98f7bb06e47c8ce96a4205b5e31efe6334904ca17",
"rawBytes": 28088,
"gzipBytes": 6955,
"gzipBytes": 6956,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BlzFtfHW.js",
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/backdrop-pick-Dilkzy9t.js",
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-GnSX-nxk.js",
"sha256": "18fbb64b96dbdb48569355909b6d70e7ee3f369c761304329e5d28382a10863e",
"path": "houseplan-assets/hp-zigbee-topology-overlay-MW1LwwjY.js",
"sha256": "8110be62ed901d407c4947ba8770a04a83ca9ce2ccdedafcdbe1e0f9c310fd51",
"rawBytes": 8626,
"gzipBytes": 3234,
"gzipBytes": 3233,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js",
"houseplan-assets/zigbee-topology-runtime-eieh242A.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js",
"houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-DBSJOtiD.js",
"sha256": "e2188ee62c129161ead60af08a613353ff6e6b5fea0209d88c60a00795293f47",
"path": "houseplan-assets/live-interaction-runtime-UCIhvgjn.js",
"sha256": "9665d15195cdaed9b9ad0039bf6def8082742edc1a5fedf968a3182145759b1f",
"rawBytes": 5196,
"gzipBytes": 2122,
"gzipBytes": 2126,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-CYMZJB0I.js",
"sha256": "3dbdda4a3c8decf229325193447a7e8498ac79ee9671e5fa923e1afab15fda78",
"path": "houseplan-assets/zigbee-topology-C2VfSKkl.js",
"sha256": "093a182d434fbbafe4218f18ba98ac11aa5d20b8d28f526ea754186d4efd7102",
"rawBytes": 18961,
"gzipBytes": 7421,
"gzipBytes": 7424,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-eieh242A.js",
"sha256": "9226ed8ab8996a3139630492336d1c669077ca6442f60e85b84068b94165754e",
"path": "houseplan-assets/zigbee-topology-runtime-Cm3YvxF_.js",
"sha256": "458384bd207cfa03c9087be629a91ac97bcf1bedaeaf3071d7475260aba00fba",
"rawBytes": 3941,
"gzipBytes": 1761,
"gzipBytes": 1764,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js",
"houseplan-assets/zigbee-topology-CYMZJB0I.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js",
"houseplan-assets/zigbee-topology-C2VfSKkl.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "fa974652b479dbe9381b5862de0feb250083eda438065263b15754ffb069696a",
"sha256": "a8abc0e88f0aed895e3029cbf860ae5ba7131ba003b607c27aceacb9813fccf6",
"rawBytes": 1183,
"gzipBytes": 793,
"gzipBytes": 794,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card--Yu_3uZU.js"
"houseplan-assets/houseplan-card-B34Dj2Wv.js"
],
"dynamicImports": []
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,14 +1,14 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";import{v as e,l as o,z as t,dt as s,A as a,du as i,dv as l,dw as n,E as r,c}from"./houseplan-card--Yu_3uZU.js";class f extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({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,f={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")},h=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`<ha-form
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";import{v as e,l as o,z as t,dt as s,A as a,du as i,dv as l,dw as n,E as r,c}from"./houseplan-card-B34Dj2Wv.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({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`<ha-form
.hass=${this.hass}
.data=${this._formData}
.schema=${e}
.computeLabel=${e=>f[e.name]||e.name}
.computeLabel=${e=>h[e.name]||e.name}
@value-changed=${this._valueChanged}
></ha-form>`;return c`
${d(h.slice(0,3))}
${d(f.slice(0,3))}
${_?c`<div class="default-floor-error" role="alert"
style="color:var(--error-color,#db4437);margin:-4px 0 12px;overflow-wrap:anywhere">
${t(s,"editor.default_floor_missing",{id:_})}
</div>`:a}
${d(h.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}f.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",f);
${d(f.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}h.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",h);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";import{l as t,a$ as s,A as e,z as a,c as o,cj as l,ck as i,cl as h,cm as c,aY as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,dj as m,aX as b,aZ as $,dk as v}from"./houseplan-card--Yu_3uZU.js";import{i as f,c as y,e as w,r as D,a as k,b as S,g as C,t as M}from"./backdrop-pick-BlzFtfHW.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";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)?o`<hp-help data-help-key=${l}
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";import{l as t,a$ as s,A as e,z as a,c as o,cj as l,ck as i,cl as h,cm as c,aY as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,dj as m,aX as b,aZ as $,dk as v}from"./houseplan-card-B34Dj2Wv.js";import{i as f,c as y,e as w,r as D,a as k,b as S,g as C,t as M}from"./backdrop-pick-Dilkzy9t.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";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)?o`<hp-help data-help-key=${l}
.text=${a(h,l)} .ariaLabel=${a(h,i)}></hp-help>`: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 a=l(e),o=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===a.fill?{...o||h,a:0}:o;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:a.showBorders,showNames:a.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:a.hideDecor,hideOpenings:a.hideOpenings,roomColor:a.color,roomOpacity:a.opacity,fillMode:"none"===a.fill?"custom":a.fill,customFill:p,glowEnabled:a.glow,bgColor:a.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:a.tempMin,tempMax:a.tempMax,showLqi:a.showLqi??this.host._config?.show_signal??!0,cardFontScale:a.cardFontScale,labelTemp:a.labelTemp,labelHum:a.labelHum,labelLqi:a.labelLqi,labelLight:a.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 a=await y(e);if("reject"===a.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===a.kind)return void(this.host._backdropGuard=a.state);const o=await w(e,a.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:o})}_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}),a=this.host._spaceDialog;return a&&a.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...a,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 a=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")}),o=this.host._spaceDialog,l=o?.saved?.find(s=>s.name===t);if(a&&o&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==o.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 o`<div class="savedplans muted">${this.host._t("space.loading")}</div>`;const s=t.saved||[];if(!s.length)return o`<div class="savedplans muted">${this.host._t("space.no_saved")}</div>`;return o`<div class="savedplans">
${s.map(s=>{return o`
<div class="savedplan ${s.url===t.planUrl?"cur":""}">
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";import{n as t,b as n}from"./zigbee-topology-CYMZJB0I.js";import{I as e}from"./houseplan-card--Yu_3uZU.js";const o=new WeakMap;function i(t){const n=function(t){const n=t?.connection||t;return!n||"object"!=typeof n&&"function"!=typeof n?null:n}(t);if(!n)return null;let e=o.get(n);return e||(e={revision:0,topologies:[],states:{},listeners:new Set,inflight:new Map},o.set(n,e)),e}function r(t,n,e){t.states={...t.states,[n]:e},function(t){t.revision++;for(const n of t.listeners)n()}(t)}function s(t){const n=t?.code;if("permission"===n||"unsupported"===n||"timeout"===n||"invalid_topic"===n||"invalid_payload"===n)return n;const e=String(t?.message||"").toLowerCase();return e.includes("unauthor")||e.includes("permission")?"permission":e.includes("unknown_command")||e.includes("not found")?"unsupported":"provider"}function a(t){return Object.assign(new Error(t),{code:t})}function c(t,n,e){const o=t.inflight.get(n);if(o)return o;r(t,n,{phase:"loading"});const i=e().then(n=>{if(!n.nodes.length&&n.warnings.some(t=>"invalid_payload"===t.code))throw a("invalid_payload");!function(t,n){t.topologies=[...t.topologies.filter(t=>!(t.provider===n.provider&&t.instanceId===n.instanceId)),n],r(t,"zha"===n.provider?"zha":`z2m:${n.instanceId}`,{phase:"ready",obtainedAt:n.obtainedAt,partial:n.warnings.length>0})}(t,n)}).catch(e=>{r(t,n,{phase:"error",error:s(e)})}).finally(()=>t.inflight.delete(n));return t.inflight.set(n,i),i}function l(t){const n=i(t);return n?{revision:n.revision,topologies:n.topologies,states:n.states}:{revision:0,topologies:[],states:{}}}function u(t,n){const e=i(t);return e?(e.listeners.add(n),()=>e.listeners.delete(n)):()=>{}}function f(t){if(!0!==t?.user?.is_admin)throw a("permission")}function p(n){const e=i(n);return e?c(e,"zha",async()=>{if(f(n),"function"!=typeof n?.callWS)throw a("unsupported");return t(await n.callWS({type:"zha/devices"}))}):Promise.resolve()}function d(t){return null!==t&&"object"==typeof t?t:null}function h(t){const n=d(t),e=n?.payload??t;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}}async function m(t,n){let e;try{return await Promise.race([t,new Promise((t,o)=>{e=globalThis.setTimeout(()=>o(a("timeout")),Math.max(1,n))})])}finally{void 0!==e&&globalThis.clearTimeout(e)}}function g(t,o,r=15e4){const s=i(t);if(!s)return Promise.resolve();const l=e(o);return c(s,`z2m:${l||String(o)}`,async()=>{if(f(t),!l)throw a("invalid_topic");const e=t.connection,o=e?.subscribeMessage;if("function"!=typeof o||"function"!=typeof t?.callService)throw a("unsupported");const i=function(){const t=globalThis.crypto;return"function"==typeof t?.randomUUID?`houseplan-${t.randomUUID()}`:`houseplan-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}(),s=Date.now()+Math.max(1,r);let c=!1,u=null,p=null,g=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{p=t,g=n}),b=[];try{const r=await o.call(e,t=>{!0===d(t)?.retain&&h(t)&&u?.()},{type:"mqtt/subscribe",topic:`${l}/bridge/info`});"function"==typeof r&&b.push(r);const f=await o.call(e,t=>{if(!0===d(t)?.retain)return;const n=h(t);null!==n?n&&function(t){const n=d(t),e=n?.transaction??d(n?.data)?.transaction;return"string"==typeof e||"number"==typeof e?String(e):null}(n)===i&&p?.(n):c&&g?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof f&&b.push(f),await m(y,Math.min(4e3,Math.max(1,s-Date.now()))),c=!0,await t.callService("mqtt","publish",{topic:`${l}/bridge/request/networkmap`,payload:JSON.stringify({type:"raw",routes:!1,transaction:i}),qos:0,retain:!1});const v=await m(w,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of b)try{t()}catch{}}})}export{p as readZhaTopology,g as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";import{n as t,b as n}from"./zigbee-topology-C2VfSKkl.js";import{I as e}from"./houseplan-card-B34Dj2Wv.js";const o=new WeakMap;function i(t){const n=function(t){const n=t?.connection||t;return!n||"object"!=typeof n&&"function"!=typeof n?null:n}(t);if(!n)return null;let e=o.get(n);return e||(e={revision:0,topologies:[],states:{},listeners:new Set,inflight:new Map},o.set(n,e)),e}function r(t,n,e){t.states={...t.states,[n]:e},function(t){t.revision++;for(const n of t.listeners)n()}(t)}function s(t){const n=t?.code;if("permission"===n||"unsupported"===n||"timeout"===n||"invalid_topic"===n||"invalid_payload"===n)return n;const e=String(t?.message||"").toLowerCase();return e.includes("unauthor")||e.includes("permission")?"permission":e.includes("unknown_command")||e.includes("not found")?"unsupported":"provider"}function a(t){return Object.assign(new Error(t),{code:t})}function c(t,n,e){const o=t.inflight.get(n);if(o)return o;r(t,n,{phase:"loading"});const i=e().then(n=>{if(!n.nodes.length&&n.warnings.some(t=>"invalid_payload"===t.code))throw a("invalid_payload");!function(t,n){t.topologies=[...t.topologies.filter(t=>!(t.provider===n.provider&&t.instanceId===n.instanceId)),n],r(t,"zha"===n.provider?"zha":`z2m:${n.instanceId}`,{phase:"ready",obtainedAt:n.obtainedAt,partial:n.warnings.length>0})}(t,n)}).catch(e=>{r(t,n,{phase:"error",error:s(e)})}).finally(()=>t.inflight.delete(n));return t.inflight.set(n,i),i}function l(t){const n=i(t);return n?{revision:n.revision,topologies:n.topologies,states:n.states}:{revision:0,topologies:[],states:{}}}function u(t,n){const e=i(t);return e?(e.listeners.add(n),()=>e.listeners.delete(n)):()=>{}}function p(t){if(!0!==t?.user?.is_admin)throw a("permission")}function f(n){const e=i(n);return e?c(e,"zha",async()=>{if(p(n),"function"!=typeof n?.callWS)throw a("unsupported");return t(await n.callWS({type:"zha/devices"}))}):Promise.resolve()}function d(t){return null!==t&&"object"==typeof t?t:null}function h(t){const n=d(t),e=n?.payload??t;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}}async function m(t,n){let e;try{return await Promise.race([t,new Promise((t,o)=>{e=globalThis.setTimeout(()=>o(a("timeout")),Math.max(1,n))})])}finally{void 0!==e&&globalThis.clearTimeout(e)}}function g(t,o,r=15e4){const s=i(t);if(!s)return Promise.resolve();const l=e(o);return c(s,`z2m:${l||String(o)}`,async()=>{if(p(t),!l)throw a("invalid_topic");const e=t.connection,o=e?.subscribeMessage;if("function"!=typeof o||"function"!=typeof t?.callService)throw a("unsupported");const i=function(){const t=globalThis.crypto;return"function"==typeof t?.randomUUID?`houseplan-${t.randomUUID()}`:`houseplan-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}(),s=Date.now()+Math.max(1,r);let c=!1,u=null,f=null,g=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{f=t,g=n}),b=[];try{const r=await o.call(e,t=>{!0===d(t)?.retain&&h(t)&&u?.()},{type:"mqtt/subscribe",topic:`${l}/bridge/info`});"function"==typeof r&&b.push(r);const p=await o.call(e,t=>{if(!0===d(t)?.retain)return;const n=h(t);null!==n?n&&function(t){const n=d(t),e=n?.transaction??d(n?.data)?.transaction;return"string"==typeof e||"number"==typeof e?String(e):null}(n)===i&&f?.(n):c&&g?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof p&&b.push(p),await m(y,Math.min(4e3,Math.max(1,s-Date.now()))),c=!0,await t.callService("mqtt","publish",{topic:`${l}/bridge/request/networkmap`,payload:JSON.stringify({type:"raw",routes:!1,transaction:i}),qos:0,retain:!1});const v=await m(w,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of b)try{t()}catch{}}})}export{f as readZhaTopology,g as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
+1 -1
View File
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="f5a5df099a166da3e233ffe681f86d9ee30cfedaac3da73518fcea0d0e4db9b7";try{await import("./houseplan-assets/houseplan-card--Yu_3uZU.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__="f4645d446a428dbca2b0c52dd0af193ab85d8561d072cda5a8a0d9201dd8ae11";try{await import("./houseplan-assets/houseplan-card-B34Dj2Wv.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)}
+2
View File
@@ -2,6 +2,8 @@
## Unreleased
## v1.72.0-beta.4 — 2026-09-05
- Furniture placement previews now clear reliably when the pointer leaves the
plan, including after a full editor redraw; the live editor also exposes a
deterministic paint barrier for browser checks
+2
View File
@@ -8,6 +8,8 @@
## Не выпущено
## v1.72.0-beta.4 — 2026-09-05
- Превью размещения мебели теперь надёжно исчезает при уходе указателя с плана,
в том числе после полной перерисовки редактора; у живого редактора также
появилась детерминированная точка ожидания отрисовки для браузерных проверок
+23 -13
View File
@@ -1,22 +1,32 @@
<!-- release: v1.72.0-beta.3 -->
<!-- release: v1.72.0-beta.4 -->
## Основное
- На больших планах тяжёлая сцена больше не перестраивается при каждом hover,
pan, pinch и перетаскивании в редакторах, а нерелевантные обновления Home
Assistant не вызывают полный render; внешний вид и поведение сохраняются,
отклик становится заметно плавнее
([#451](https://github.com/Matysh/houseplan-card/issues/451)).
- В настройках пространства теперь можно создать копию стен, проёмов,
подложки, масштаба и вида под новым именем, не перенося комнаты и размещение
устройств ([#456](https://github.com/Matysh/houseplan-card/issues/456)).
- Связи Zigbee при наведении теперь показывают стрелками путь к координатору,
а контекстная подсказка объясняет цвета, пунктир и ограничения диагностики
([#457](https://github.com/Matysh/houseplan-card/issues/457),
[#459](https://github.com/Matysh/houseplan-card/issues/459)).
- Превью мебели теперь надёжно исчезает при уходе указателя и не расходится с
итоговым размещением после перерисовки редактора
([#460](https://github.com/Matysh/houseplan-card/issues/460)).
- Мелкие исправления и улучшения.
## Highlights
- Large plans no longer rebuild the heavy scene on every hover, pan, pinch or
editor drag, while unrelated Home Assistant updates no longer trigger a full
render; visuals and interaction semantics stay unchanged while response is
noticeably smoother
([#451](https://github.com/Matysh/houseplan-card/issues/451)).
- Space settings can now create a room-free copy of walls, openings,
Background objects, scale and view under a new name without carrying over
device placement ([#456](https://github.com/Matysh/houseplan-card/issues/456)).
- Zigbee links now use arrows to show the route towards the coordinator on
hover, with contextual help explaining colours, dashes and diagnostic limits
([#457](https://github.com/Matysh/houseplan-card/issues/457),
[#459](https://github.com/Matysh/houseplan-card/issues/459)).
- Furniture previews now clear reliably when the pointer leaves and stay in
sync with the final placement after an editor redraw
([#460](https://github.com/Matysh/houseplan-card/issues/460)).
- Small fixes and improvements.
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.72.0-beta.3/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.72.0-beta.3/docs/CHANGELOG.md)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.72.0-beta.4/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.72.0-beta.4/docs/CHANGELOG.md)
+2 -2
View File
@@ -21,8 +21,8 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
| Item | State |
|---|---|
| Version | **v1.72.0-beta.3** everywhere (manifest, const.py, package.json, CARD_VERSION) |
| Current local cycle | v1.72.0-beta.3 keeps the heavy scene stable during hover, pan, pinch and editor drags, filters unrelated Home Assistant updates, and preserves exact live resize validation on large plans (#451). Publish from `dev` only after exact-SHA Validate is green; `main` remains at v1.71.0. |
| Version | **v1.72.0-beta.4** everywhere (manifest, const.py, package.json, CARD_VERSION) |
| Current local cycle | v1.72.0-beta.4 adds room-free space copies (#456), directional Zigbee route arrows and contextual help (#457, #459), and deterministic live-editor settlement for reliable furniture previews (#460). Publish from `dev` only after exact-SHA Validate is green; `main` remains at v1.71.0. |
| Hidden Labs Stage | #89 Stage 1 ships in v1.63.0-beta.1. #122 Stage 2 ships in v1.64.0 and evolves the same hidden, expiring `iso` experiment with matte walls, a low exterior floor edge, restrained shared shadows and live vertical door/window/gate panels. Flat remains default; editors and `houseplan-space-card` remain flat; live floor effects and HA actions remain unchanged. Public activation remains a separate task. |
| Workflow | Superseded 2026-08-12: the pre-1.62 rule of "local edits without tests or commits" is **dead** — since release 1.62 every product change follows `PROCESS.md` (issue in `S5-ready`+, branch `issue/<NN>-slug`, trailers on every commit, review pipeline; `AGENTS.md` is the summary). Release mechanics below remain current. A requested pre-release gets a production build plus the smallest targeted unit/smoke set covering the changed surfaces, one tested `dev` commit/tag and a GitHub Release with `prerelease=true`; `main` stays untouched. The complete local frontend/backend/smoke gate runs only before a stable release, after which `main` is fast-forwarded to the exact tested `dev` SHA and the GitHub Release uses `prerelease=false`. Release bodies are short and bilingual (Russian first); every bullet links its GitHub issue (#NN) so the #328 rules stay machine-checkable. A STABLE body aggregates the changelog since the PREVIOUS STABLE release (never since the last beta): features/fixes described across the line's beta changelogs must appear, while bugs that were introduced and fixed strictly inside the beta line (never shipped in any stable) are excluded — draft with `npm run release:notes -- <tag>`, curate by hand, then `npm run release:notes -- <tag> --verify` must pass. `Мелкие исправления и улучшения` / `Small fixes and improvements` is allowed only when the range really contains user-visible work not itemised in the body; a single-issue hotfix ships without it (the verifier enforces this). Every body ends with separate links to the Russian and English changelogs. Open or partially delivered issues are never presented as shipped. Telegram announcements are sent only for stable releases; beta and RC publication is silent. `docs/RELEASE-NOTES.md` is the current canonical body instance; `npm run release:prerelease -- <tag> --issues=… --yes` is the primary local publication path and the manual `Publish prerelease` workflow is its GitHub-only equivalent once present on `main`. Nothing is copied to the home instance by hand |
| GitHub | https://github.com/Matysh/houseplan-card — [Issues](https://github.com/Matysh/houseplan-card/issues) are the canonical task records; their labels carry priority and workflow status (`PROCESS.md` §9). GitHub Projects is no longer used. `main` carries stable releases; pre-release tags may point directly at `dev`. Work lands on `dev` and is merged into `main` for a stable release, so `dev` is normally equal to or ahead of `main`, never behind. Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) |
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "houseplan-card",
"version": "1.72.0-beta.3",
"version": "1.72.0-beta.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "houseplan-card",
"version": "1.72.0-beta.3",
"version": "1.72.0-beta.4",
"license": "MIT",
"dependencies": {
"lit": "^3.1.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "houseplan-card",
"version": "1.72.0-beta.3",
"version": "1.72.0-beta.4",
"description": "Interactive house plan Lovelace card for Home Assistant",
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -399,7 +399,7 @@ import {
} from './space-order';
import { applyOpeningMoves, mergeCollinearPartitions, spaceMergeGeometry } from './wall-merge';
const CARD_VERSION = '1.72.0-beta.3';
const CARD_VERSION = '1.72.0-beta.4';
const ENTRY_BUILD_FINGERPRINT = '__HOUSEPLAN_SOURCE_FINGERPRINT__';
const EDITOR_RETRY_ASSET = '__HOUSEPLAN_EDITOR_RETRY_ASSET__';
+1 -1
View File
@@ -376,7 +376,7 @@ import {
} from './space-order';
import { applyOpeningMoves, mergeCollinearPartitions, spaceMergeGeometry } from './wall-merge';
const CARD_VERSION = '1.72.0-beta.3';
const CARD_VERSION = '1.72.0-beta.4';
type ResizeLiveLabel = {
kind: 'length';