build: prepare v1.69.0-beta.2 candidate

Package the expanded furniture library, room-aware climate placement, controller-state parity, resilient editor delivery, revision-safe writes and the reviewed supporting fixes since beta.1.

Issue: #159
Issue: #317
Issue: #318
Issue: #335
Issue: #339
Issue: #340
Issue: #341
Issue: #353
Issue: #354
Issue: #356
User-Visible: yes
This commit is contained in:
Matysh
2026-08-28 20:37:13 +03:00
parent 07d59b1cad
commit f4dc13dea9
37 changed files with 158 additions and 154 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ PLAN_ORPHAN_TTL_S = 3600
SCHEDULED_GRACE_S = 30 * 24 * 3600
FILES_DIR = "houseplan/files"
CONF_ADMIN_ONLY = "admin_only"
VERSION = "1.69.0-beta.1"
VERSION = "1.69.0-beta.2"
# Portable backup format. This is deliberately independent from the Home
# Assistant Store version above: storage migrations and files exported by a
@@ -1,111 +1,111 @@
{
"schema": 1,
"fingerprint": "ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da",
"fingerprint": "c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43",
"entry": "houseplan-card.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-haeZFQ4t.js",
"houseplan-assets/houseplan-card-DZo3gC2T.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 270786,
"initialViewGzipBytes": 270793,
"lazyFiles": [
"houseplan-assets/de-C8wCW7i2.js",
"houseplan-assets/editor-B3bmlhO7.js",
"houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/de-Cuf6hSGS.js",
"houseplan-assets/editor-Drr9z9rK.js",
"houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"lazyGzipBytes": 166293,
"lazyGzipBytes": 166311,
"lazyEditorFiles": [
"houseplan-assets/editor-B3bmlhO7.js",
"houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/editor-Drr9z9rK.js",
"houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"lazyEditorGzipBytes": 137194,
"lazyEditorGzipBytes": 137204,
"lazyOnboardingFiles": [
"houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"lazyOnboardingGzipBytes": 7193,
"lazyOnboardingGzipBytes": 7198,
"lazyLocaleFiles": [
"houseplan-assets/de-C8wCW7i2.js"
"houseplan-assets/de-Cuf6hSGS.js"
],
"lazyLocaleGzipBytes": 22457,
"lazyLocaleGzipBytes": 22462,
"files": [
{
"path": "houseplan-assets/de-C8wCW7i2.js",
"sha256": "ec165396aa16c3d96f284ff19c76528755d27b834a1a272d5fda230e7cbdcbda",
"path": "houseplan-assets/de-Cuf6hSGS.js",
"sha256": "fff8ca0681b5dbd33a6dea7f5d05fbbebdec6caa6659f8b89bfc59fbb1ab50d1",
"rawBytes": 73919,
"gzipBytes": 22457,
"gzipBytes": 22462,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-B3bmlhO7.js",
"sha256": "2e0f14365be1e5e21b771d18dcd035d5c8654a9394d9ed0a10ddb3f05e85a40b",
"path": "houseplan-assets/editor-Drr9z9rK.js",
"sha256": "045707acaa6535cf617dedd8492ed8a2285c2cbe995b0fc88f3e263682522a60",
"rawBytes": 3831,
"gzipBytes": 1580,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-haeZFQ4t.js",
"sha256": "875e87d76ef8c2fa60f3521ae47150d073e5c712139a70af5e85b58f5d63179a",
"path": "houseplan-assets/houseplan-card-DZo3gC2T.js",
"sha256": "1e09aeec8c7ba2de3e665b132e4a4ea8a1f411274b924b4655bd7c9654f94cac",
"rawBytes": 955358,
"gzipBytes": 270035,
"gzipBytes": 270040,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-C8wCW7i2.js",
"houseplan-assets/editor-B3bmlhO7.js",
"houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js"
"houseplan-assets/de-Cuf6hSGS.js",
"houseplan-assets/editor-Drr9z9rK.js",
"houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"sha256": "9fae58e1f3f6317f810006c1ab0b377128c409c42d9f2e71dfe274c56c6a8ab4",
"path": "houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"sha256": "9834239d2910161215d70d12147ad83a0fe1d3062abbe6ea9f5165feb8a20d78",
"rawBytes": 521651,
"gzipBytes": 135063,
"gzipBytes": 135068,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js",
"sha256": "87a359f38f0f11eac942cda212d7a016712a356690b0694b8c011ca18b516353",
"path": "houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js",
"sha256": "cbd7d63ad1fdb1b16b58ba99cbc93a02d4ea6f70317a926018cffe56417c6ba2",
"rawBytes": 26356,
"gzipBytes": 6642,
"gzipBytes": 6645,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/space-deletion-Cx2C6--l.js",
"sha256": "49477fcf9a3f0133e6b09b1a12372e587cc4cced4f69ec0bde9a169d4910387f",
"path": "houseplan-assets/space-deletion-CrURpMqK.js",
"sha256": "7c9566acfd9fa8531e97cc955cba29dffae614c3c5e114d6235c71d44b6811b1",
"rawBytes": 911,
"gzipBytes": 551,
"gzipBytes": 553,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "1d235fe36b58b389091bde590f8c43fcbd9d7350f41deb80735a7eb050d9ac8e",
"sha256": "a69e76fc9673ef374d20aceba2d0d160b2a42e9d0b4bcfc3baf616a58c89b93f",
"rawBytes": 1089,
"gzipBytes": 751,
"gzipBytes": 753,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js"
],
"dynamicImports": []
}
@@ -1,14 +1,14 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da";import{c as e,l as o,t,d1 as s,A as a,d2 as i,d3 as l,d4 as n,E as r,b as c}from"./houseplan-card-haeZFQ4t.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__="c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43";import{c as e,l as o,t,d1 as s,A as a,d2 as i,d3 as l,d4 as n,E as r,b as c}from"./houseplan-card-DZo3gC2T.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);
@@ -1 +1 @@
function e(e,o){return{id:e,title:o,plan_url:null,view_box:[0,0,1,1],rooms:[],wall_segments:[]}}function o(e="file"){const o="draw"===e;return{source:e,showBorders:o,showNames:o,displayTouched:!1}}function r(e,o){if(e.displayTouched)return{...e,source:o};const r="draw"===o;return{...e,source:o,showBorders:r,showNames:r}}function s(e,o,r){return{...e,[o]:r,displayTouched:!0}}function t(e,o,r){const s=(e?.spaces||[]).find(e=>e?.id===r),t=new Set((s?.rooms||[]).map(e=>String(e?.id||"")).filter(Boolean)),a=[...new Set((e?.markers||[]).filter(e=>!0!==e?.removed&&"string"==typeof e?.id).filter(e=>e.space===r||"string"==typeof e.room_id&&t.has(e.room_id)||o?.[e.id]?.s===r).map(e=>e.id))].sort((e,o)=>e.localeCompare(o));return{markerIds:a,count:a.length}}globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da";export{t as a,e as c,o as i,r as s,s as t};
function e(e,o){return{id:e,title:o,plan_url:null,view_box:[0,0,1,1],rooms:[],wall_segments:[]}}function o(e="file"){const o="draw"===e;return{source:e,showBorders:o,showNames:o,displayTouched:!1}}function r(e,o){if(e.displayTouched)return{...e,source:o};const r="draw"===o;return{...e,source:o,showBorders:r,showNames:r}}function s(e,o,r){return{...e,[o]:r,displayTouched:!0}}function t(e,o,r){const s=(e?.spaces||[]).find(e=>e?.id===r),t=new Set((s?.rooms||[]).map(e=>String(e?.id||"")).filter(Boolean)),n=[...new Set((e?.markers||[]).filter(e=>!0!==e?.removed&&"string"==typeof e?.id).filter(e=>e.space===r||"string"==typeof e.room_id&&t.has(e.room_id)||o?.[e.id]?.s===r).map(e=>e.id))].sort((e,o)=>e.localeCompare(o));return{markerIds:n,count:n.length}}globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43";export{t as a,e as c,o as i,r as s,s as t};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da";try{await import("./houseplan-assets/houseplan-card-haeZFQ4t.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).":"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__="c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43";try{await import("./houseplan-assets/houseplan-card-DZo3gC2T.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).":"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.69.0-beta.1"
"version": "1.69.0-beta.2"
}
+48 -48
View File
@@ -1,111 +1,111 @@
{
"schema": 1,
"fingerprint": "ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da",
"fingerprint": "c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43",
"entry": "houseplan-card.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-haeZFQ4t.js",
"houseplan-assets/houseplan-card-DZo3gC2T.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 270786,
"initialViewGzipBytes": 270793,
"lazyFiles": [
"houseplan-assets/de-C8wCW7i2.js",
"houseplan-assets/editor-B3bmlhO7.js",
"houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/de-Cuf6hSGS.js",
"houseplan-assets/editor-Drr9z9rK.js",
"houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"lazyGzipBytes": 166293,
"lazyGzipBytes": 166311,
"lazyEditorFiles": [
"houseplan-assets/editor-B3bmlhO7.js",
"houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/editor-Drr9z9rK.js",
"houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"lazyEditorGzipBytes": 137194,
"lazyEditorGzipBytes": 137204,
"lazyOnboardingFiles": [
"houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"lazyOnboardingGzipBytes": 7193,
"lazyOnboardingGzipBytes": 7198,
"lazyLocaleFiles": [
"houseplan-assets/de-C8wCW7i2.js"
"houseplan-assets/de-Cuf6hSGS.js"
],
"lazyLocaleGzipBytes": 22457,
"lazyLocaleGzipBytes": 22462,
"files": [
{
"path": "houseplan-assets/de-C8wCW7i2.js",
"sha256": "ec165396aa16c3d96f284ff19c76528755d27b834a1a272d5fda230e7cbdcbda",
"path": "houseplan-assets/de-Cuf6hSGS.js",
"sha256": "fff8ca0681b5dbd33a6dea7f5d05fbbebdec6caa6659f8b89bfc59fbb1ab50d1",
"rawBytes": 73919,
"gzipBytes": 22457,
"gzipBytes": 22462,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-B3bmlhO7.js",
"sha256": "2e0f14365be1e5e21b771d18dcd035d5c8654a9394d9ed0a10ddb3f05e85a40b",
"path": "houseplan-assets/editor-Drr9z9rK.js",
"sha256": "045707acaa6535cf617dedd8492ed8a2285c2cbe995b0fc88f3e263682522a60",
"rawBytes": 3831,
"gzipBytes": 1580,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-haeZFQ4t.js",
"sha256": "875e87d76ef8c2fa60f3521ae47150d073e5c712139a70af5e85b58f5d63179a",
"path": "houseplan-assets/houseplan-card-DZo3gC2T.js",
"sha256": "1e09aeec8c7ba2de3e665b132e4a4ea8a1f411274b924b4655bd7c9654f94cac",
"rawBytes": 955358,
"gzipBytes": 270035,
"gzipBytes": 270040,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-C8wCW7i2.js",
"houseplan-assets/editor-B3bmlhO7.js",
"houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js"
"houseplan-assets/de-Cuf6hSGS.js",
"houseplan-assets/editor-Drr9z9rK.js",
"houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-CnzJFk5R.js",
"sha256": "9fae58e1f3f6317f810006c1ab0b377128c409c42d9f2e71dfe274c56c6a8ab4",
"path": "houseplan-assets/houseplan-editor-runtime-CCBmTE0A.js",
"sha256": "9834239d2910161215d70d12147ad83a0fe1d3062abbe6ea9f5165feb8a20d78",
"rawBytes": 521651,
"gzipBytes": 135063,
"gzipBytes": 135068,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DNd8fRh_.js",
"sha256": "87a359f38f0f11eac942cda212d7a016712a356690b0694b8c011ca18b516353",
"path": "houseplan-assets/houseplan-onboarding-runtime-CJAdI7qX.js",
"sha256": "cbd7d63ad1fdb1b16b58ba99cbc93a02d4ea6f70317a926018cffe56417c6ba2",
"rawBytes": 26356,
"gzipBytes": 6642,
"gzipBytes": 6645,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js",
"houseplan-assets/space-deletion-Cx2C6--l.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js",
"houseplan-assets/space-deletion-CrURpMqK.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/space-deletion-Cx2C6--l.js",
"sha256": "49477fcf9a3f0133e6b09b1a12372e587cc4cced4f69ec0bde9a169d4910387f",
"path": "houseplan-assets/space-deletion-CrURpMqK.js",
"sha256": "7c9566acfd9fa8531e97cc955cba29dffae614c3c5e114d6235c71d44b6811b1",
"rawBytes": 911,
"gzipBytes": 551,
"gzipBytes": 553,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "1d235fe36b58b389091bde590f8c43fcbd9d7350f41deb80735a7eb050d9ac8e",
"sha256": "a69e76fc9673ef374d20aceba2d0d160b2a42e9d0b4bcfc3baf616a58c89b93f",
"rawBytes": 1089,
"gzipBytes": 751,
"gzipBytes": 753,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-haeZFQ4t.js"
"houseplan-assets/houseplan-card-DZo3gC2T.js"
],
"dynamicImports": []
}
File diff suppressed because one or more lines are too long
@@ -1,14 +1,14 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da";import{c as e,l as o,t,d1 as s,A as a,d2 as i,d3 as l,d4 as n,E as r,b as c}from"./houseplan-card-haeZFQ4t.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__="c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43";import{c as e,l as o,t,d1 as s,A as a,d2 as i,d3 as l,d4 as n,E as r,b as c}from"./houseplan-card-DZo3gC2T.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);
@@ -1 +1 @@
function e(e,o){return{id:e,title:o,plan_url:null,view_box:[0,0,1,1],rooms:[],wall_segments:[]}}function o(e="file"){const o="draw"===e;return{source:e,showBorders:o,showNames:o,displayTouched:!1}}function r(e,o){if(e.displayTouched)return{...e,source:o};const r="draw"===o;return{...e,source:o,showBorders:r,showNames:r}}function s(e,o,r){return{...e,[o]:r,displayTouched:!0}}function t(e,o,r){const s=(e?.spaces||[]).find(e=>e?.id===r),t=new Set((s?.rooms||[]).map(e=>String(e?.id||"")).filter(Boolean)),a=[...new Set((e?.markers||[]).filter(e=>!0!==e?.removed&&"string"==typeof e?.id).filter(e=>e.space===r||"string"==typeof e.room_id&&t.has(e.room_id)||o?.[e.id]?.s===r).map(e=>e.id))].sort((e,o)=>e.localeCompare(o));return{markerIds:a,count:a.length}}globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da";export{t as a,e as c,o as i,r as s,s as t};
function e(e,o){return{id:e,title:o,plan_url:null,view_box:[0,0,1,1],rooms:[],wall_segments:[]}}function o(e="file"){const o="draw"===e;return{source:e,showBorders:o,showNames:o,displayTouched:!1}}function r(e,o){if(e.displayTouched)return{...e,source:o};const r="draw"===o;return{...e,source:o,showBorders:r,showNames:r}}function s(e,o,r){return{...e,[o]:r,displayTouched:!0}}function t(e,o,r){const s=(e?.spaces||[]).find(e=>e?.id===r),t=new Set((s?.rooms||[]).map(e=>String(e?.id||"")).filter(Boolean)),n=[...new Set((e?.markers||[]).filter(e=>!0!==e?.removed&&"string"==typeof e?.id).filter(e=>e.space===r||"string"==typeof e.room_id&&t.has(e.room_id)||o?.[e.id]?.s===r).map(e=>e.id))].sort((e,o)=>e.localeCompare(o));return{markerIds:n,count:n.length}}globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43";export{t as a,e as c,o as i,r as s,s as t};
+1 -1
View File
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="ff001fc4fdb7a72be9bf3afda60fc34ec1513092f8fe4127c2c6a6f1d11e43da";try{await import("./houseplan-assets/houseplan-card-haeZFQ4t.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).":"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__="c219ead6633cb4404f86d670c606d3f1c02a69cc43a411cf25ebd6beb45fcd43";try{await import("./houseplan-assets/houseplan-card-DZo3gC2T.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).":"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.69.0-beta.2 — 2026-08-28
- The Background furniture library now has 56 top-view symbols and a compact
two-level picker: choose a front-view category, then the exact plan variant.
Existing furniture keeps its saved geometry while 18 drawings receive the
+2
View File
@@ -8,6 +8,8 @@
## Не выпущено
## v1.69.0-beta.2 — 2026-08-28
- В библиотеке мебели редактора подложки теперь 56 видов сверху и компактный
двухуровневый выбор: сначала категория с видом спереди, затем точный вариант
для плана. Уже размещённая мебель сохраняет геометрию, а 18 рисунков получают
+9 -9
View File
@@ -1,18 +1,18 @@
<!-- release: v1.69.0-beta.1 -->
<!-- release: v1.69.0-beta.2 -->
## Основное
- Добавлена полная немецкая локализация интерфейса с автоматическим выбором по языку Home Assistant ([#348](https://github.com/Matysh/houseplan-card/issues/348)).
- В редакторе устройств появился единый каталог с поиском для добавления, скрытия и повторного размещения устройств ([#29](https://github.com/Matysh/houseplan-card/issues/29)).
- Исправлены острые вершины и пограничные ошибки стыков стен; проверки больших планов стали значительно быстрее ([#329](https://github.com/Matysh/houseplan-card/issues/329), [#330](https://github.com/Matysh/houseplan-card/issues/330), [#331](https://github.com/Matysh/houseplan-card/issues/331)).
- Полностью обновлена библиотека мебели: 56 видов сверху и удобный двухуровневый выбор категории и варианта ([#159](https://github.com/Matysh/houseplan-card/issues/159)).
- Исправлено определение температуры и влажности комнаты по фактическому размещению датчиков, а физические выключатели без собственной сущности теперь корректно показывают активность ([#317](https://github.com/Matysh/houseplan-card/issues/317), [#318](https://github.com/Matysh/houseplan-card/issues/318)).
- Редактор устойчивее переживает сетевые сбои и обновления, а сервер защищает планы и позиции устройств от перезаписи устаревшими вкладками ([#340](https://github.com/Matysh/houseplan-card/issues/340), [#353](https://github.com/Matysh/houseplan-card/issues/353), [#356](https://github.com/Matysh/houseplan-card/issues/356)).
- Мелкие исправления и улучшения.
## Highlights
- Added a complete German interface with automatic selection from the Home Assistant language ([#348](https://github.com/Matysh/houseplan-card/issues/348)).
- The Device editor now provides one searchable catalog for adding, hiding and restoring devices on the plan ([#29](https://github.com/Matysh/houseplan-card/issues/29)).
- Fixed acute wall apexes and boundary errors in junction validation; checks on large plans are now significantly faster ([#329](https://github.com/Matysh/houseplan-card/issues/329), [#330](https://github.com/Matysh/houseplan-card/issues/330), [#331](https://github.com/Matysh/houseplan-card/issues/331)).
- Completely refreshed the furniture library with 56 top-view symbols and a convenient two-level category and variant picker ([#159](https://github.com/Matysh/houseplan-card/issues/159)).
- Fixed room temperature and humidity selection by actual sensor placement; physical wall controllers without their own entity now show activity correctly ([#317](https://github.com/Matysh/houseplan-card/issues/317), [#318](https://github.com/Matysh/houseplan-card/issues/318)).
- The editor now survives network failures and updates more reliably, while the server protects plans and device positions from stale browser tabs ([#340](https://github.com/Matysh/houseplan-card/issues/340), [#353](https://github.com/Matysh/houseplan-card/issues/353), [#356](https://github.com/Matysh/houseplan-card/issues/356)).
- Small fixes and improvements.
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.69.0-beta.1/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.69.0-beta.1/docs/CHANGELOG.md)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.69.0-beta.2/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.69.0-beta.2/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.69.0-beta.1 candidate** everywhere (manifest, const.py, package.json, CARD_VERSION) |
| Current local cycle | v1.68.1 is the current stable release. v1.69.0-beta.1 packages the reviewed `S8-merged` work since it: the searchable Device lifecycle catalog (#29), resilient and faster wall-junction limits (#329–#331), lazy editor runtime (#337), scalable i18n registry (#62) and the complete German locale (#348), together with supporting refactors and release/test infrastructure. Publication remains gated by exact-SHA Validate. |
| Version | **v1.69.0-beta.2 candidate** everywhere (manifest, const.py, package.json, CARD_VERSION) |
| Current local cycle | v1.68.1 is the current stable release. v1.69.0-beta.2 packages the reviewed `S8-merged` work since beta.1: the expanded furniture library (#159), room-aware climate values (#317), physical-controller state parity (#318), resilient lazy editor delivery (#353), revision-safe configuration and layout writes (#340, #356), plus supporting fixes and test infrastructure. Publication remains gated by exact-SHA Validate. |
| 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) |
Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 320 KiB

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 KiB

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 134 KiB

+10 -10
View File
@@ -16,7 +16,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "7078120b4fe7469f523cd7835b31fa646caed81fe1bc0f900690502898f1bea2"
"imageSha256": "36223106c073f07d8cc3ecf8eaab37192ebb2687daba65c5c21047d0b7890de0"
},
"view-touch": {
"file": "02-view-touch.png",
@@ -27,7 +27,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "f234e55b02d2558c58935b3bc6340615fb343d3cf92b7d3a98303b1a2f4f346d"
"imageSha256": "a4aa3af48578ee41594a9b1a6e98b4d39f3324a949a9fd9e63d5854576d5db85"
},
"space-create": {
"file": "03-space-create.png",
@@ -38,7 +38,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "a86d4211af24923d5048e9094d0d35f9b28129394d00cd72582a8f8c2dd7ff75"
"imageSha256": "0dc024726327f60f4a9ceaf3044381691f81f1090af81d1812e870f22d9343ba"
},
"room-contour-close": {
"file": "04-room-contour-close.png",
@@ -49,7 +49,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "c7effd4ccd19bcaff9138458583368aaab488dcb6fc7ea5ab766383cb5377ac4"
"imageSha256": "44cfaa95bd51e2cd628400e28db0ad8b2f0cd904385845bd402494f3f5c0d93c"
},
"plan-context-tray": {
"file": "05-plan-context-tray.png",
@@ -60,7 +60,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "af1194f073f00b03af02b949a072cffb21bfd29995aa65a067eaaaec74ef8490"
"imageSha256": "e0662429b423fb74151b583dcc2c8635b001b637d03bbf7a6b16aec46399c3f8"
},
"device-editor": {
"file": "06-device-editor.png",
@@ -71,7 +71,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "50ac3eeb9629e60b5e7eff65e40c75016f564d85fddf6d010908919e0e9ad18c"
"imageSha256": "d0ffd31ce80bfde21ab75da356a5fc1af38246f2b301030880320620c228d89d"
},
"device-display-preview": {
"file": "06-device-display-preview.png",
@@ -82,7 +82,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "7151c96dc048381f7a7070ecb85a82a890b2f4c703628f14fa472eb8dacbf3dc"
"imageSha256": "2cdabae1f89c3286e4fac0ce30f757ee1690b707ab8a5488748b7cd420626160"
},
"background-editor": {
"file": "07-background-editor.png",
@@ -93,7 +93,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "9f08f3f3711b100d68fb1a05af269e43e47d8f8d12c0cbe4f9ab557138722989"
"imageSha256": "30147bb00a90eea7136b4cee30995f6e6a9217b5132f3e8d3ad7471413b1af8a"
},
"room-card": {
"file": "08-room-card.png",
@@ -104,7 +104,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "66d8b0a509909822ff6b891a483bad9d2c72b20f08e287355883aa5205c6cee0"
"imageSha256": "029a3e69ec647a8a370d99e6bb7f9225833c526739076022f6b52ba54bff30ea"
},
"device-info": {
"file": "09-device-info.png",
@@ -115,7 +115,7 @@
"theme": "dark",
"language": "en",
"sourceSha256": "232b156a56885d74f52e69608111212dbfae2a01ee5b1e8f39de695c5b9c70d1",
"imageSha256": "f4d3bda00a2fce54f408b1f20e03b5c590ba4b168fd214a28aafb1692b1f3124"
"imageSha256": "dd492f53150b7149085daada5cce9eeae9bde9e7ea1d86679a54b3041f72f517"
}
}
}
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "houseplan-card",
"version": "1.69.0-beta.1",
"version": "1.69.0-beta.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "houseplan-card",
"version": "1.69.0-beta.1",
"version": "1.69.0-beta.2",
"license": "MIT",
"dependencies": {
"lit": "^3.1.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "houseplan-card",
"version": "1.69.0-beta.1",
"version": "1.69.0-beta.2",
"description": "Interactive house plan Lovelace card for Home Assistant",
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -333,7 +333,7 @@ import {
} from './space-order';
import { applyOpeningMoves, mergeCollinearPartitions, spaceMergeGeometry } from './wall-merge';
const CARD_VERSION = '1.69.0-beta.1';
const CARD_VERSION = '1.69.0-beta.2';
const ENTRY_BUILD_FINGERPRINT = '__HOUSEPLAN_SOURCE_FINGERPRINT__';
const EDITOR_RETRY_ASSET = '__HOUSEPLAN_EDITOR_RETRY_ASSET__';
+1 -1
View File
@@ -332,7 +332,7 @@ import {
} from './space-order';
import { applyOpeningMoves, mergeCollinearPartitions, spaceMergeGeometry } from './wall-merge';
const CARD_VERSION = '1.69.0-beta.1';
const CARD_VERSION = '1.69.0-beta.2';
type ResizeLiveLabel = {
kind: 'length';