fix: закрыть compositor-пути day-cycle (#582)

Issue: #582
User-Visible: no
This commit is contained in:
Sergey Matyunin
2026-09-15 13:41:51 +03:00
parent a0a108cf13
commit 54dc836dee
54 changed files with 581 additions and 432 deletions
@@ -1,295 +1,295 @@
{
"schema": 1,
"fingerprint": "11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855",
"fingerprint": "fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 291058,
"initialViewGzipBytes": 291143,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 292581,
"initialPanelGzipBytes": 292665,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2325,
"initialPanelOnlyGzipBytes": 2322,
"lazyFiles": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/de-CBJiwcHq.js",
"houseplan-assets/editor-DlugLFBc.js",
"houseplan-assets/fr-BmoheqsM.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js",
"houseplan-assets/hp-zigbee-topology-overlay-9KkXyqC9.js",
"houseplan-assets/iso-scene-render-BamXjvj2.js",
"houseplan-assets/live-interaction-runtime-C2LZlzmN.js",
"houseplan-assets/pdf-export-h683Fdwh.js",
"houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js",
"houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/de-KlTUt_fX.js",
"houseplan-assets/editor-CCcq-tXr.js",
"houseplan-assets/fr-Gp-clGXe.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js",
"houseplan-assets/hp-zigbee-topology-overlay-gK1eFCH4.js",
"houseplan-assets/iso-scene-render-8emvwTa4.js",
"houseplan-assets/live-interaction-runtime-Cb8HadJA.js",
"houseplan-assets/pdf-export-CPm3InsE.js",
"houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js",
"houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js"
],
"lazyGzipBytes": 418773,
"lazyGzipBytes": 418732,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/editor-DlugLFBc.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/editor-CCcq-tXr.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js"
],
"lazyEditorGzipBytes": 204959,
"lazyEditorGzipBytes": 204950,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js"
],
"lazyOnboardingGzipBytes": 13916,
"lazyOnboardingGzipBytes": 13913,
"lazyLocaleFiles": [
"houseplan-assets/de-CBJiwcHq.js",
"houseplan-assets/fr-BmoheqsM.js"
"houseplan-assets/de-KlTUt_fX.js",
"houseplan-assets/fr-Gp-clGXe.js"
],
"lazyLocaleGzipBytes": 54925,
"lazyLocaleGzipBytes": 54909,
"lazyIsometricFiles": [
"houseplan-assets/iso-scene-render-BamXjvj2.js"
"houseplan-assets/iso-scene-render-8emvwTa4.js"
],
"lazyIsometricGzipBytes": 13235,
"lazyIsometricGzipBytes": 13230,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js"
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js"
],
"lazyFurnitureArtGzipBytes": 10253,
"lazyFurnitureArtGzipBytes": 10256,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/pdf-export-h683Fdwh.js"
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/pdf-export-CPm3InsE.js"
],
"lazyPdfGzipBytes": 120126,
"lazyPdfGzipBytes": 120127,
"files": [
{
"path": "houseplan-assets/backdrop-pick-D6CKjBU0.js",
"sha256": "76fcaaa16f7853367d34e02c6f6c45eec09e8ddf021248db5f3d78501996d7e7",
"path": "houseplan-assets/backdrop-pick-CSHGeMZB.js",
"sha256": "d84dca58f94d42f2378261c586becbbf7cdf2f42ae0f64d0b1c55423b759ad9f",
"rawBytes": 19956,
"gzipBytes": 6879,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-CBJiwcHq.js",
"sha256": "1a831240765902455d98789b6617d8b333be8c5fb53b68df3bf0770dc2415988",
"path": "houseplan-assets/de-KlTUt_fX.js",
"sha256": "3c0c206a1ace4ec7c08c431131d9962874cf0647a3165a2df3e93316fa1529e2",
"rawBytes": 91590,
"gzipBytes": 27746,
"gzipBytes": 27738,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-DlugLFBc.js",
"sha256": "73a130edac09aa38f889c0e6cfe858a44f3121607ce4266bad92dc100da7c78b",
"path": "houseplan-assets/editor-CCcq-tXr.js",
"sha256": "b5ea588bc922cdb0419196a59742203b5d336cf8f018524b022f0f44e2350838",
"rawBytes": 3831,
"gzipBytes": 1583,
"gzipBytes": 1581,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-BmoheqsM.js",
"sha256": "bc10e714adb9c8a06fa331e3cbb4d7e7453d23dc4d9650c2eda871d2229ec28f",
"path": "houseplan-assets/fr-Gp-clGXe.js",
"sha256": "1b5b63be27ffbda19b9f64b83c290e29d1333550dfeaf561066fcd7d69844b4a",
"rawBytes": 93884,
"gzipBytes": 27179,
"gzipBytes": 27171,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"sha256": "13639b6c02f43432217c7f0b02bde754259041ab48da3d9b7eeb6a24d90e540f",
"path": "houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"sha256": "f61aca94e19cebe395109b5c773e60064e2845ac38c7053c500437822cdc8df8",
"rawBytes": 33655,
"gzipBytes": 10253,
"gzipBytes": 10256,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-B4aZmrg_.js",
"sha256": "e1cd8ee5579c38ab8fb2dfd163901c15c2a4fe27b0a191be89b0eb57944528e6",
"rawBytes": 1033782,
"gzipBytes": 290256,
"path": "houseplan-assets/houseplan-card-BQvA-dac.js",
"sha256": "3176e419449c5648c8ff697f208d03df4b9ad2d975d936c0ca8357cf02f68643",
"rawBytes": 1034311,
"gzipBytes": 290343,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-CBJiwcHq.js",
"houseplan-assets/editor-DlugLFBc.js",
"houseplan-assets/fr-BmoheqsM.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js",
"houseplan-assets/hp-zigbee-topology-overlay-9KkXyqC9.js",
"houseplan-assets/iso-scene-render-BamXjvj2.js",
"houseplan-assets/live-interaction-runtime-C2LZlzmN.js",
"houseplan-assets/pdf-export-h683Fdwh.js",
"houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js"
"houseplan-assets/de-KlTUt_fX.js",
"houseplan-assets/editor-CCcq-tXr.js",
"houseplan-assets/fr-Gp-clGXe.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js",
"houseplan-assets/hp-zigbee-topology-overlay-gK1eFCH4.js",
"houseplan-assets/iso-scene-render-8emvwTa4.js",
"houseplan-assets/live-interaction-runtime-Cb8HadJA.js",
"houseplan-assets/pdf-export-CPm3InsE.js",
"houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"sha256": "6c82224500d98284df2b4167b62cbc6f2f90b8880b4d959c5352722117439189",
"path": "houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"sha256": "f9b08f1a6705c49d5871844023a4239ef137ebb212c8a80d476b7946da8807f8",
"rawBytes": 670150,
"gzipBytes": 178816,
"gzipBytes": 178813,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js"
"houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js",
"sha256": "ff7f91b3b0b0f33e39303e118898bc648ce2d1c55bd7de6d4da13c079cb56c25",
"path": "houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js",
"sha256": "37bac17816314d6fd748a64e5e72c762a26523857bbae29b6500a0b614e62c4c",
"rawBytes": 28287,
"gzipBytes": 7037,
"gzipBytes": 7034,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-9KkXyqC9.js",
"sha256": "6847b0b88c4128c93b0b608ba69ccf2ffd7efee9b8275982e2829016a20c3260",
"path": "houseplan-assets/hp-zigbee-topology-overlay-gK1eFCH4.js",
"sha256": "b216e3e83cc666fedf39edb6a8cf524e6097b1e18904b2841360adfd1039553e",
"rawBytes": 10756,
"gzipBytes": 3685,
"gzipBytes": 3683,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js",
"houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js"
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js",
"houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-BamXjvj2.js",
"sha256": "c96ad88d26de5df7fd419d23999bc61771808ea2060bf4944ca27782c9221a98",
"path": "houseplan-assets/iso-scene-render-8emvwTa4.js",
"sha256": "b46264233066ada5239a0f4242f6e3a8c2bff435f429a3d3e81dccbd5f9233ef",
"rawBytes": 39206,
"gzipBytes": 13235,
"gzipBytes": 13230,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-C2LZlzmN.js",
"sha256": "3e5255827f6c68ed481d470aaeff591efdc3bd98fe33680d68071193f1ada696",
"path": "houseplan-assets/live-interaction-runtime-Cb8HadJA.js",
"sha256": "ef7c2919eacad557ee0b166edd76c9238b80be3fe0ddf9a3e5346abdd6e87a8e",
"rawBytes": 8216,
"gzipBytes": 3208,
"gzipBytes": 3205,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-h683Fdwh.js",
"sha256": "fe44b0f4a2489fcf952733a22f907f0e008e89a1a583ac71e15abe769c3e2cc8",
"path": "houseplan-assets/pdf-export-CPm3InsE.js",
"sha256": "fd3c3c139bac3b3af19ce97c152e9159a636878aa0b760a99c2dbafd0947cfd9",
"rawBytes": 236244,
"gzipBytes": 109873,
"gzipBytes": 109871,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-ZO4Lo-8M.js",
"sha256": "76addf1d67dc32ed78caf02b6458a7c595effb4df36aa405a70c6c12fd232493",
"path": "houseplan-assets/summary-panel-editor-DPy3kUWL.js",
"sha256": "f060d64e6d0e90ce15b8e65653823a74188189e196ba2e6f24695fb3b4042c91",
"rawBytes": 14824,
"gzipBytes": 3400,
"gzipBytes": 3395,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js"
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-Bp-0cVwy.js",
"sha256": "6e28158f358b94572b2dba002ed9af3bfb0d1d728da28b327a960432ef782ec1",
"path": "houseplan-assets/summary-panel-metrics-BM7Nf-ck.js",
"sha256": "86c9a0d9fd7944346e9dd035e28a58269d35b3e75a6460d9465aadab703b3bbb",
"rawBytes": 2610,
"gzipBytes": 1305,
"gzipBytes": 1304,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js",
"sha256": "a68321d364e54320c7deaf76b28acef79c43db39df34a33d2812911a5265ab8e",
"path": "houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js",
"sha256": "beaa2ca1b4d7652fb9d92f57459590bc6d81031cc199c0c24d32595fbb16eae2",
"rawBytes": 73366,
"gzipBytes": 20087,
"gzipBytes": 20088,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-ZO4Lo-8M.js",
"houseplan-assets/summary-panel-metrics-Bp-0cVwy.js"
"houseplan-assets/summary-panel-editor-DPy3kUWL.js",
"houseplan-assets/summary-panel-metrics-BM7Nf-ck.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-D6AD-V2V.js",
"sha256": "eedb0ca1bcbf69141534048c9dee3ef0582804a5309f3666fc088220b8913d30",
"path": "houseplan-assets/zigbee-topology-DbRQ578B.js",
"sha256": "d67cca713df19678386a861a19fa956545b12177cb25141553f5094f8e23e3ff",
"rawBytes": 18961,
"gzipBytes": 7428,
"gzipBytes": 7421,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js",
"sha256": "ef15a3d99da69565b0d24bf7596b45860b34de7ba58ab261b8dd1f1926e5a12a",
"path": "houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js",
"sha256": "d28e1e61ef689031bb03a7e00811cd8a513c0b7de722071ce1023c383d2edce4",
"rawBytes": 3941,
"gzipBytes": 1764,
"gzipBytes": 1762,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js"
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "6fe438ef7ae7234c51f0deed80157a40801b1070cdd638c3ffe3cceda245b146",
"sha256": "371f0c4f44a6afd94f1c5da76a882a83ab5c9b211b2f2a4bcddc6138178994f9",
"rawBytes": 1205,
"gzipBytes": 802,
"gzipBytes": 800,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "a972881d658bc7d0af76c2cf94388547580dc4ad0fc3ae385b3e16ca063e067d",
"sha256": "ad4b606eeedcceda0502abc9601abb753f22fea1b08115eea5f00b82650fffd8",
"rawBytes": 6165,
"gzipBytes": 2325,
"gzipBytes": 2322,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
}
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{q as e,l as o,v as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,E as r,c}from"./houseplan-card-B4aZmrg_.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
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{q as e,l as o,v as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,E as r,c}from"./houseplan-card-BQvA-dac.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}
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{c as a,A as e}from"./houseplan-card-B4aZmrg_.js";import{s,n as t,a as l,m as r,b as o,c as i,d as u}from"./summary-panel-runtime-loaded-BEyqCaYJ.js";const m=m=>{const{host:c,dialog:d,problems:n,t:b}=m,y=n.find(a=>"error"===a.kind),$=d.localShow!==d.baseLocalShow||!d.localOnly&&!s(t(d.draft),d.base),p=$&&!d.busy&&!y,v=a=>n.find(e=>e.path===a),h=a=>a?b(`summary.problem.${a.code}`):"",k=()=>m.close(),g=a`<label class="summary-switch" for="summary-local-show">
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{c as a,A as e}from"./houseplan-card-BQvA-dac.js";import{s,n as t,a as l,m as r,b as o,c as i,d as u}from"./summary-panel-runtime-loaded-pv46h96I.js";const m=m=>{const{host:c,dialog:d,problems:n,t:b}=m,y=n.find(a=>"error"===a.kind),$=d.localShow!==d.baseLocalShow||!d.localOnly&&!s(t(d.draft),d.base),p=$&&!d.busy&&!y,v=a=>n.find(e=>e.path===a),h=a=>a?b(`summary.problem.${a.code}`):"",k=()=>m.close(),g=a`<label class="summary-switch" for="summary-local-show">
<span class="summary-switch-caption"><strong>${b("summary.show_local")}</strong>
<small id="summary-local-show-hint">${b("summary.show_local_hint")}</small></span>
<input id="summary-local-show" data-summary-local-show type="checkbox"
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{ea as e,P as t,a5 as n,M as i,aq as r,N as o,bs as s,br as a,a4 as c,a3 as l,aA as d,eb as u,ec as f,bu as m,ed as g}from"./houseplan-card-B4aZmrg_.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const r=String(i.binding||"").indexOf(":");if(r<1)continue;const o=i.binding.slice(0,r),s=i.binding.slice(r+1),a="device"===o?e.registry.devices?.[s]:null,c="entity"===o?e.registry.entities?.[s]:null,l="device"===o?s:c?.device_id,d="device"===o?a?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===o&&n.liveEntities.has(s))&&t.add(l)}return t}function y(e,t){return e?.length?t?.length?g(e,t):e:t}function _(e,t){const n=c(e.rooms,t.walls,t.openCuts,[],i,t.cellCm,r,o);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:l(e.rooms,t.walls,t.openCuts,i,t.cellCm,r,o)}}function*h(c,l,d=_){try{let u=0;for(const f of l){const l=c.spaces.find(e=>String(e?.id)===f.id);if(!l)continue;const m=e(l,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const a=t(e);if(!a)continue;const c=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,r,o,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(c,m.physicalBodies)),yield}const _=m.cellCm/r;u+=a(v)*_*_/1e4}return u}catch{return null}}function p(e,t,n=_){const i=h(e,t,n);let r=i.next();for(;!r.done;)r=i.next();return r.value}function b(e,t,n,i){if("system"!==e.type)return null;if("device_count"===e.key)return null===t.deviceCount?null:String(t.deviceCount);if("total_area"===e.key)return null===t.areaM2?null:m(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(i||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function S(e,t){const n=e?.states?.[t];if(!n)return null;const i=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{h as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,b as summarySystemValue,p as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{ea as e,P as t,a5 as n,M as i,aq as r,N as o,bs as a,br as s,a4 as l,a3 as c,aA as d,eb as u,ec as f,bu as m,ed as g}from"./houseplan-card-BQvA-dac.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const r=String(i.binding||"").indexOf(":");if(r<1)continue;const o=i.binding.slice(0,r),a=i.binding.slice(r+1),s="device"===o?e.registry.devices?.[a]:null,l="entity"===o?e.registry.entities?.[a]:null,c="device"===o?a:l?.device_id,d="device"===o?s?.area_id:l?.area_id||c&&e.registry.devices?.[c]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;c&&e.registry.devices?.[c]&&e.spaceIds.has(f)&&(!n.devices.has(c)||"entity"===o&&n.liveEntities.has(a))&&t.add(c)}return t}function y(e,t){return e?.length?t?.length?g(e,t):e:t}function _(e,t){const n=l(e.rooms,t.walls,t.openCuts,[],i,t.cellCm,r,o);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:c(e.rooms,t.walls,t.openCuts,i,t.cellCm,r,o)}}function*h(l,c,d=_){try{let u=0;for(const f of c){const c=l.spaces.find(e=>String(e?.id)===f.id);if(!c)continue;const m=e(c,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const s=t(e);if(!s)continue;const l=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,r,o,g.roomGeom,g.multiWallNodes)||s;v=y(v,a(l,m.physicalBodies)),yield}const _=m.cellCm/r;u+=s(v)*_*_/1e4}return u}catch{return null}}function p(e,t,n=_){const i=h(e,t,n);let r=i.next();for(;!r.done;)r=i.next();return r.value}function b(e,t,n,i){if("system"!==e.type)return null;if("device_count"===e.key)return null===t.deviceCount?null:String(t.deviceCount);if("total_area"===e.key)return null===t.areaM2?null:m(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(i||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function S(e,t){const n=e?.states?.[t];if(!n)return null;const i=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{h as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,b as summarySystemValue,p as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{n as t,b as n}from"./zigbee-topology-D6AD-V2V.js";import{F as e}from"./houseplan-card-B4aZmrg_.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};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{n as t,b as n}from"./zigbee-topology-DbRQ578B.js";import{F as e}from"./houseplan-card-BQvA-dac.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};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";try{await import("./houseplan-assets/houseplan-card-B4aZmrg_.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 houseplan-card.js: the implementation chunk is unavailable",e)}
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";try{await import("./houseplan-assets/houseplan-card-BQvA-dac.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 houseplan-card.js: the implementation chunk is unavailable",e)}
File diff suppressed because one or more lines are too long
+7 -2
View File
@@ -175,11 +175,16 @@ const res = await page.evaluate(async () => {
&& st.querySelector('.hp-day-cycle-env')?.dataset.dayCycleSource === 'sun'
&& st.querySelector('.hp-day-cycle-bg.active')?.dataset.dayCycleLayer === 'dawn';
const staticPlan = st.querySelector(':scope > .hp-static-plan-svg');
const staticOutline = st.querySelector(':scope > .hp-paper-outline-svg');
const staticPaper = staticPlan?.querySelector('.hp-paperg');
out.staticCardLayersStayOrdered = !!staticPlan
&& !!staticOutline
&& !!staticPaper
&& !st.querySelector('.hp-paper-outline-svg')
&& /drop-shadow/.test(getComputedStyle(staticPaper).filter)
&& /drop-shadow/.test(getComputedStyle(staticOutline).filter)
&& getComputedStyle(staticOutline).willChange.includes('filter')
&& getComputedStyle(staticOutline).zIndex === '0'
&& getComputedStyle(staticPaper).filter === 'none'
&& !getComputedStyle(staticPaper).willChange.includes('filter')
&& getComputedStyle(staticPlan).zIndex === '1'
&& getComputedStyle(st.querySelector('.devlayer')).zIndex === '2';
// ...and the space override beats the global there too
+103 -24
View File
@@ -60,6 +60,33 @@ await cdp.send('Page.startScreencast', {
});
await page.waitForTimeout(80);
const describeContentLayers = async () => {
const content = latestLayers.filter((layer) => layer.drawsContent);
const described = [];
for (const layer of content) {
let className = '';
if (layer.backendNodeId) {
try {
const { node } = await cdp.send('DOM.describeNode', { backendNodeId: layer.backendNodeId });
const attrs = node.attributes || [];
const classIndex = attrs.indexOf('class');
className = classIndex >= 0 ? attrs[classIndex + 1] : '';
} catch { /* detached between LayerTree event and inspection */ }
}
let reasons = [];
try {
({ compositingReasons: reasons } = await cdp.send('LayerTree.compositingReasons', {
layerId: layer.layerId,
}));
} catch { /* root/retired layers may have no reason record */ }
described.push({
className, width: layer.width, height: layer.height,
pixels: layer.width * layer.height, reasons,
});
}
return described;
};
const layerSnapshot = async () => {
await page.waitForTimeout(80);
const stage = await page.evaluate(() => {
@@ -85,30 +112,7 @@ const layerSnapshot = async () => {
} : null,
};
});
const content = latestLayers.filter((layer) => layer.drawsContent);
const described = [];
for (const layer of content) {
let className = '';
if (layer.backendNodeId) {
try {
const { node } = await cdp.send('DOM.describeNode', { backendNodeId: layer.backendNodeId });
const attrs = node.attributes || [];
const classIndex = attrs.indexOf('class');
className = classIndex >= 0 ? attrs[classIndex + 1] : '';
} catch { /* detached between LayerTree event and inspection */ }
}
let reasons = [];
try {
({ compositingReasons: reasons } = await cdp.send('LayerTree.compositingReasons', {
layerId: layer.layerId,
}));
} catch { /* root/retired layers may have no reason record */ }
described.push({
className, width: layer.width, height: layer.height,
pixels: layer.width * layer.height, reasons,
});
}
return { stage, layers: described };
return { stage, layers: await describeContentLayers() };
};
await page.evaluate(() => {
@@ -195,6 +199,58 @@ const frameMetrics = await page.evaluate(async ({ encoded, stage }) => {
}),
});
// Contract item 6: the non-interactive houseplan-space-card never needs a
// gesture to become safe. Its day-cycle silhouette is stage-bounded from its
// first frame, while the visible paper group owns no filter layer.
const staticStage = await page.evaluate(async () => {
await customElements.whenDefined('houseplan-space-card');
const full = window.__card;
const fallbackCallWS = full.hass.callWS?.bind(full.hass);
const hass = { ...full.hass, callWS: async (message) => {
if (message.type === 'houseplan/config/get') {
return { config: full._serverCfg, rev: full._cfgRev || 1 };
}
if (message.type === 'houseplan/layout/get') return { layout: {} };
return fallbackCallWS ? fallbackCallWS(message) : {};
} };
const host = document.createElement('div');
host.style.cssText = 'width:820px';
document.body.appendChild(host);
const card = document.createElement('houseplan-space-card');
card.setConfig({
type: 'custom:houseplan-space-card', space: 'hp582-large-daycycle',
title: '', show_button: false,
});
card.hass = hass;
host.appendChild(card);
const deadline = Date.now() + 6000;
while (!card.renderRoot?.querySelector('.hp-static-stage') && Date.now() < deadline) {
await new Promise((done) => setTimeout(done, 60));
}
await card.updateComplete;
await new Promise((done) => requestAnimationFrame(() => requestAnimationFrame(done)));
full.style.display = 'none';
const stage = card.renderRoot?.querySelector('.hp-static-stage');
const outline = stage?.querySelector(':scope > .hp-paper-outline-svg');
const plan = stage?.querySelector(':scope > .hp-static-plan-svg');
const paper = plan?.querySelector('.hp-paperg');
const rect = stage?.getBoundingClientRect();
return {
width: rect?.width || 0,
height: rect?.height || 0,
outlinePresent: !!outline,
outlineFilter: outline ? getComputedStyle(outline).filter : 'none',
outlineWillChange: outline ? getComputedStyle(outline).willChange : 'auto',
outlineVisibility: outline ? getComputedStyle(outline).visibility : 'hidden',
outlineZ: outline ? getComputedStyle(outline).zIndex : 'auto',
planZ: plan ? getComputedStyle(plan).zIndex : 'auto',
paperFilter: paper ? getComputedStyle(paper).filter : 'missing',
paperWillChange: paper ? getComputedStyle(paper).willChange : 'missing',
};
});
await page.waitForTimeout(180);
const staticLayers = await describeContentLayers();
const checks = {};
const outlineLayers = active.layers.filter((layer) => layer.className.includes('hp-paper-outline-svg'));
const outlineLayer = outlineLayers[0];
@@ -202,6 +258,13 @@ const settledPlanLayer = settled.layers.find((layer) => layer.className.includes
const oversized = active.layers.filter((layer) => layer.width > 4096 || layer.height > 4096);
const activePixels = active.layers.reduce((sum, layer) => sum + layer.pixels, 0);
const screenPixels = active.stage.width * active.stage.height;
const staticOutlineLayers = staticLayers.filter(
(layer) => layer.className.includes('hp-paper-outline-svg'),
);
const staticOutlineLayer = staticOutlineLayers[0];
const staticOversized = staticLayers.filter(
(layer) => layer.width > 4096 || layer.height > 4096,
);
checks.largeCoordinateFixture = active.stage.paper?.bbox?.[0] > 4096
&& active.stage.paper?.bbox?.[1] > 4000;
@@ -232,6 +295,19 @@ checks.capturedPresentedPinchFrames = frameMetrics.length >= 3;
checks.presentedFramesHaveNoWhiteTile = frameMetrics.every(
(frame) => frame.nearWhiteRatio < 0.01,
);
checks.staticCardUsesSeparateFilteredOutline = staticStage.outlinePresent
&& staticStage.outlineVisibility === 'visible'
&& /drop-shadow/.test(staticStage.outlineFilter)
&& /filter/.test(staticStage.outlineWillChange)
&& staticStage.outlineZ === '0'
&& staticStage.planZ === '1';
checks.staticCardPaperStaysUnfiltered = staticStage.paperFilter === 'none'
&& !/filter/.test(staticStage.paperWillChange);
checks.staticCardHasOneOutlineLayer = staticOutlineLayers.length === 1;
checks.staticCardOutlineLayerIsStageBounded = !!staticOutlineLayer
&& staticOutlineLayer.width <= staticStage.width * 1.5 + 64
&& staticOutlineLayer.height <= staticStage.height * 1.5 + 64;
checks.staticCardHasNo4096ContentLayer = staticOversized.length === 0;
console.log(JSON.stringify({
stage: active.stage,
@@ -242,6 +318,9 @@ console.log(JSON.stringify({
activeLayers: active.layers,
settledLayers: settled.layers,
presentedFrameMetrics: frameMetrics,
staticStage,
staticLayers,
staticOversized,
}, null, 2));
checkAll(checks);
await cdp.send('LayerTree.disable');
+4
View File
@@ -42,6 +42,9 @@ const out = await page.evaluate(async () => {
stage().clientWidth / 2, stage().clientHeight / 2, 1.4,
).target;
card._stepZoom(1);
const buttonActivatesSafeDayCycleOutline = stage().classList.contains(
'hp-safe-daycycle-outline',
);
const buttonSamples = await settle();
const buttonFinal = camera();
const buttonSaves = saveCount;
@@ -277,6 +280,7 @@ const out = await page.evaluate(async () => {
await settle();
return {
programmaticCameraActivatesSafeDayCycleOutline: buttonActivatesSafeDayCycleOutline,
buttonHasIntermediateFrame: buttonSamples.some((sample) =>
sample.zoom > 1.001 && sample.zoom < buttonExpected.zoom - 0.001),
buttonSettlesAtExactTarget: close(buttonFinal.zoom, buttonExpected.zoom)
+133 -133
View File
@@ -1,295 +1,295 @@
{
"schema": 1,
"fingerprint": "11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855",
"fingerprint": "fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 291058,
"initialViewGzipBytes": 291143,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 292581,
"initialPanelGzipBytes": 292665,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2325,
"initialPanelOnlyGzipBytes": 2322,
"lazyFiles": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/de-CBJiwcHq.js",
"houseplan-assets/editor-DlugLFBc.js",
"houseplan-assets/fr-BmoheqsM.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js",
"houseplan-assets/hp-zigbee-topology-overlay-9KkXyqC9.js",
"houseplan-assets/iso-scene-render-BamXjvj2.js",
"houseplan-assets/live-interaction-runtime-C2LZlzmN.js",
"houseplan-assets/pdf-export-h683Fdwh.js",
"houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js",
"houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/de-KlTUt_fX.js",
"houseplan-assets/editor-CCcq-tXr.js",
"houseplan-assets/fr-Gp-clGXe.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js",
"houseplan-assets/hp-zigbee-topology-overlay-gK1eFCH4.js",
"houseplan-assets/iso-scene-render-8emvwTa4.js",
"houseplan-assets/live-interaction-runtime-Cb8HadJA.js",
"houseplan-assets/pdf-export-CPm3InsE.js",
"houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js",
"houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js"
],
"lazyGzipBytes": 418773,
"lazyGzipBytes": 418732,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/editor-DlugLFBc.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/editor-CCcq-tXr.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js"
],
"lazyEditorGzipBytes": 204959,
"lazyEditorGzipBytes": 204950,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js"
],
"lazyOnboardingGzipBytes": 13916,
"lazyOnboardingGzipBytes": 13913,
"lazyLocaleFiles": [
"houseplan-assets/de-CBJiwcHq.js",
"houseplan-assets/fr-BmoheqsM.js"
"houseplan-assets/de-KlTUt_fX.js",
"houseplan-assets/fr-Gp-clGXe.js"
],
"lazyLocaleGzipBytes": 54925,
"lazyLocaleGzipBytes": 54909,
"lazyIsometricFiles": [
"houseplan-assets/iso-scene-render-BamXjvj2.js"
"houseplan-assets/iso-scene-render-8emvwTa4.js"
],
"lazyIsometricGzipBytes": 13235,
"lazyIsometricGzipBytes": 13230,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js"
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js"
],
"lazyFurnitureArtGzipBytes": 10253,
"lazyFurnitureArtGzipBytes": 10256,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/pdf-export-h683Fdwh.js"
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/pdf-export-CPm3InsE.js"
],
"lazyPdfGzipBytes": 120126,
"lazyPdfGzipBytes": 120127,
"files": [
{
"path": "houseplan-assets/backdrop-pick-D6CKjBU0.js",
"sha256": "76fcaaa16f7853367d34e02c6f6c45eec09e8ddf021248db5f3d78501996d7e7",
"path": "houseplan-assets/backdrop-pick-CSHGeMZB.js",
"sha256": "d84dca58f94d42f2378261c586becbbf7cdf2f42ae0f64d0b1c55423b759ad9f",
"rawBytes": 19956,
"gzipBytes": 6879,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-CBJiwcHq.js",
"sha256": "1a831240765902455d98789b6617d8b333be8c5fb53b68df3bf0770dc2415988",
"path": "houseplan-assets/de-KlTUt_fX.js",
"sha256": "3c0c206a1ace4ec7c08c431131d9962874cf0647a3165a2df3e93316fa1529e2",
"rawBytes": 91590,
"gzipBytes": 27746,
"gzipBytes": 27738,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-DlugLFBc.js",
"sha256": "73a130edac09aa38f889c0e6cfe858a44f3121607ce4266bad92dc100da7c78b",
"path": "houseplan-assets/editor-CCcq-tXr.js",
"sha256": "b5ea588bc922cdb0419196a59742203b5d336cf8f018524b022f0f44e2350838",
"rawBytes": 3831,
"gzipBytes": 1583,
"gzipBytes": 1581,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-BmoheqsM.js",
"sha256": "bc10e714adb9c8a06fa331e3cbb4d7e7453d23dc4d9650c2eda871d2229ec28f",
"path": "houseplan-assets/fr-Gp-clGXe.js",
"sha256": "1b5b63be27ffbda19b9f64b83c290e29d1333550dfeaf561066fcd7d69844b4a",
"rawBytes": 93884,
"gzipBytes": 27179,
"gzipBytes": 27171,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"sha256": "13639b6c02f43432217c7f0b02bde754259041ab48da3d9b7eeb6a24d90e540f",
"path": "houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"sha256": "f61aca94e19cebe395109b5c773e60064e2845ac38c7053c500437822cdc8df8",
"rawBytes": 33655,
"gzipBytes": 10253,
"gzipBytes": 10256,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-B4aZmrg_.js",
"sha256": "e1cd8ee5579c38ab8fb2dfd163901c15c2a4fe27b0a191be89b0eb57944528e6",
"rawBytes": 1033782,
"gzipBytes": 290256,
"path": "houseplan-assets/houseplan-card-BQvA-dac.js",
"sha256": "3176e419449c5648c8ff697f208d03df4b9ad2d975d936c0ca8357cf02f68643",
"rawBytes": 1034311,
"gzipBytes": 290343,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-CBJiwcHq.js",
"houseplan-assets/editor-DlugLFBc.js",
"houseplan-assets/fr-BmoheqsM.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js",
"houseplan-assets/hp-zigbee-topology-overlay-9KkXyqC9.js",
"houseplan-assets/iso-scene-render-BamXjvj2.js",
"houseplan-assets/live-interaction-runtime-C2LZlzmN.js",
"houseplan-assets/pdf-export-h683Fdwh.js",
"houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js"
"houseplan-assets/de-KlTUt_fX.js",
"houseplan-assets/editor-CCcq-tXr.js",
"houseplan-assets/fr-Gp-clGXe.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js",
"houseplan-assets/hp-zigbee-topology-overlay-gK1eFCH4.js",
"houseplan-assets/iso-scene-render-8emvwTa4.js",
"houseplan-assets/live-interaction-runtime-Cb8HadJA.js",
"houseplan-assets/pdf-export-CPm3InsE.js",
"houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-Do4goBWS.js",
"sha256": "6c82224500d98284df2b4167b62cbc6f2f90b8880b4d959c5352722117439189",
"path": "houseplan-assets/houseplan-editor-runtime-DBQhY036.js",
"sha256": "f9b08f1a6705c49d5871844023a4239ef137ebb212c8a80d476b7946da8807f8",
"rawBytes": 670150,
"gzipBytes": 178816,
"gzipBytes": 178813,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js"
"houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-DZTesMiM.js",
"sha256": "ff7f91b3b0b0f33e39303e118898bc648ce2d1c55bd7de6d4da13c079cb56c25",
"path": "houseplan-assets/houseplan-onboarding-runtime-C8cCNIra.js",
"sha256": "37bac17816314d6fd748a64e5e72c762a26523857bbae29b6500a0b614e62c4c",
"rawBytes": 28287,
"gzipBytes": 7037,
"gzipBytes": 7034,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-D6CKjBU0.js",
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/backdrop-pick-CSHGeMZB.js",
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-9KkXyqC9.js",
"sha256": "6847b0b88c4128c93b0b608ba69ccf2ffd7efee9b8275982e2829016a20c3260",
"path": "houseplan-assets/hp-zigbee-topology-overlay-gK1eFCH4.js",
"sha256": "b216e3e83cc666fedf39edb6a8cf524e6097b1e18904b2841360adfd1039553e",
"rawBytes": 10756,
"gzipBytes": 3685,
"gzipBytes": 3683,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js",
"houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js"
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js",
"houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-BamXjvj2.js",
"sha256": "c96ad88d26de5df7fd419d23999bc61771808ea2060bf4944ca27782c9221a98",
"path": "houseplan-assets/iso-scene-render-8emvwTa4.js",
"sha256": "b46264233066ada5239a0f4242f6e3a8c2bff435f429a3d3e81dccbd5f9233ef",
"rawBytes": 39206,
"gzipBytes": 13235,
"gzipBytes": 13230,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-C2LZlzmN.js",
"sha256": "3e5255827f6c68ed481d470aaeff591efdc3bd98fe33680d68071193f1ada696",
"path": "houseplan-assets/live-interaction-runtime-Cb8HadJA.js",
"sha256": "ef7c2919eacad557ee0b166edd76c9238b80be3fe0ddf9a3e5346abdd6e87a8e",
"rawBytes": 8216,
"gzipBytes": 3208,
"gzipBytes": 3205,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-h683Fdwh.js",
"sha256": "fe44b0f4a2489fcf952733a22f907f0e008e89a1a583ac71e15abe769c3e2cc8",
"path": "houseplan-assets/pdf-export-CPm3InsE.js",
"sha256": "fd3c3c139bac3b3af19ce97c152e9159a636878aa0b760a99c2dbafd0947cfd9",
"rawBytes": 236244,
"gzipBytes": 109873,
"gzipBytes": 109871,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-TfL8wUev.js",
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/furniture-plan-art.generated-CJ5V9UwX.js",
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-ZO4Lo-8M.js",
"sha256": "76addf1d67dc32ed78caf02b6458a7c595effb4df36aa405a70c6c12fd232493",
"path": "houseplan-assets/summary-panel-editor-DPy3kUWL.js",
"sha256": "f060d64e6d0e90ce15b8e65653823a74188189e196ba2e6f24695fb3b4042c91",
"rawBytes": 14824,
"gzipBytes": 3400,
"gzipBytes": 3395,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js"
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-Bp-0cVwy.js",
"sha256": "6e28158f358b94572b2dba002ed9af3bfb0d1d728da28b327a960432ef782ec1",
"path": "houseplan-assets/summary-panel-metrics-BM7Nf-ck.js",
"sha256": "86c9a0d9fd7944346e9dd035e28a58269d35b3e75a6460d9465aadab703b3bbb",
"rawBytes": 2610,
"gzipBytes": 1305,
"gzipBytes": 1304,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-BEyqCaYJ.js",
"sha256": "a68321d364e54320c7deaf76b28acef79c43db39df34a33d2812911a5265ab8e",
"path": "houseplan-assets/summary-panel-runtime-loaded-pv46h96I.js",
"sha256": "beaa2ca1b4d7652fb9d92f57459590bc6d81031cc199c0c24d32595fbb16eae2",
"rawBytes": 73366,
"gzipBytes": 20087,
"gzipBytes": 20088,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-ZO4Lo-8M.js",
"houseplan-assets/summary-panel-metrics-Bp-0cVwy.js"
"houseplan-assets/summary-panel-editor-DPy3kUWL.js",
"houseplan-assets/summary-panel-metrics-BM7Nf-ck.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-D6AD-V2V.js",
"sha256": "eedb0ca1bcbf69141534048c9dee3ef0582804a5309f3666fc088220b8913d30",
"path": "houseplan-assets/zigbee-topology-DbRQ578B.js",
"sha256": "d67cca713df19678386a861a19fa956545b12177cb25141553f5094f8e23e3ff",
"rawBytes": 18961,
"gzipBytes": 7428,
"gzipBytes": 7421,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-Dt4pY-kU.js",
"sha256": "ef15a3d99da69565b0d24bf7596b45860b34de7ba58ab261b8dd1f1926e5a12a",
"path": "houseplan-assets/zigbee-topology-runtime-jnLuTzKT.js",
"sha256": "d28e1e61ef689031bb03a7e00811cd8a513c0b7de722071ce1023c383d2edce4",
"rawBytes": 3941,
"gzipBytes": 1764,
"gzipBytes": 1762,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js",
"houseplan-assets/zigbee-topology-D6AD-V2V.js"
"houseplan-assets/houseplan-card-BQvA-dac.js",
"houseplan-assets/zigbee-topology-DbRQ578B.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "6fe438ef7ae7234c51f0deed80157a40801b1070cdd638c3ffe3cceda245b146",
"sha256": "371f0c4f44a6afd94f1c5da76a882a83ab5c9b211b2f2a4bcddc6138178994f9",
"rawBytes": 1205,
"gzipBytes": 802,
"gzipBytes": 800,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "a972881d658bc7d0af76c2cf94388547580dc4ad0fc3ae385b3e16ca063e067d",
"sha256": "ad4b606eeedcceda0502abc9601abb753f22fea1b08115eea5f00b82650fffd8",
"rawBytes": 6165,
"gzipBytes": 2325,
"gzipBytes": 2322,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-B4aZmrg_.js"
"houseplan-assets/houseplan-card-BQvA-dac.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,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{q as e,l as o,v as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,E as r,c}from"./houseplan-card-B4aZmrg_.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
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{q as e,l as o,v as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,E as r,c}from"./houseplan-card-BQvA-dac.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}
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
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__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{c as a,A as e}from"./houseplan-card-B4aZmrg_.js";import{s,n as t,a as l,m as r,b as o,c as i,d as u}from"./summary-panel-runtime-loaded-BEyqCaYJ.js";const m=m=>{const{host:c,dialog:d,problems:n,t:b}=m,y=n.find(a=>"error"===a.kind),$=d.localShow!==d.baseLocalShow||!d.localOnly&&!s(t(d.draft),d.base),p=$&&!d.busy&&!y,v=a=>n.find(e=>e.path===a),h=a=>a?b(`summary.problem.${a.code}`):"",k=()=>m.close(),g=a`<label class="summary-switch" for="summary-local-show">
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{c as a,A as e}from"./houseplan-card-BQvA-dac.js";import{s,n as t,a as l,m as r,b as o,c as i,d as u}from"./summary-panel-runtime-loaded-pv46h96I.js";const m=m=>{const{host:c,dialog:d,problems:n,t:b}=m,y=n.find(a=>"error"===a.kind),$=d.localShow!==d.baseLocalShow||!d.localOnly&&!s(t(d.draft),d.base),p=$&&!d.busy&&!y,v=a=>n.find(e=>e.path===a),h=a=>a?b(`summary.problem.${a.code}`):"",k=()=>m.close(),g=a`<label class="summary-switch" for="summary-local-show">
<span class="summary-switch-caption"><strong>${b("summary.show_local")}</strong>
<small id="summary-local-show-hint">${b("summary.show_local_hint")}</small></span>
<input id="summary-local-show" data-summary-local-show type="checkbox"
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{ea as e,P as t,a5 as n,M as i,aq as r,N as o,bs as s,br as a,a4 as c,a3 as l,aA as d,eb as u,ec as f,bu as m,ed as g}from"./houseplan-card-B4aZmrg_.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const r=String(i.binding||"").indexOf(":");if(r<1)continue;const o=i.binding.slice(0,r),s=i.binding.slice(r+1),a="device"===o?e.registry.devices?.[s]:null,c="entity"===o?e.registry.entities?.[s]:null,l="device"===o?s:c?.device_id,d="device"===o?a?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===o&&n.liveEntities.has(s))&&t.add(l)}return t}function y(e,t){return e?.length?t?.length?g(e,t):e:t}function _(e,t){const n=c(e.rooms,t.walls,t.openCuts,[],i,t.cellCm,r,o);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:l(e.rooms,t.walls,t.openCuts,i,t.cellCm,r,o)}}function*h(c,l,d=_){try{let u=0;for(const f of l){const l=c.spaces.find(e=>String(e?.id)===f.id);if(!l)continue;const m=e(l,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const a=t(e);if(!a)continue;const c=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,r,o,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(c,m.physicalBodies)),yield}const _=m.cellCm/r;u+=a(v)*_*_/1e4}return u}catch{return null}}function p(e,t,n=_){const i=h(e,t,n);let r=i.next();for(;!r.done;)r=i.next();return r.value}function b(e,t,n,i){if("system"!==e.type)return null;if("device_count"===e.key)return null===t.deviceCount?null:String(t.deviceCount);if("total_area"===e.key)return null===t.areaM2?null:m(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(i||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function S(e,t){const n=e?.states?.[t];if(!n)return null;const i=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{h as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,b as summarySystemValue,p as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{ea as e,P as t,a5 as n,M as i,aq as r,N as o,bs as a,br as s,a4 as l,a3 as c,aA as d,eb as u,ec as f,bu as m,ed as g}from"./houseplan-card-BQvA-dac.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const r=String(i.binding||"").indexOf(":");if(r<1)continue;const o=i.binding.slice(0,r),a=i.binding.slice(r+1),s="device"===o?e.registry.devices?.[a]:null,l="entity"===o?e.registry.entities?.[a]:null,c="device"===o?a:l?.device_id,d="device"===o?s?.area_id:l?.area_id||c&&e.registry.devices?.[c]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;c&&e.registry.devices?.[c]&&e.spaceIds.has(f)&&(!n.devices.has(c)||"entity"===o&&n.liveEntities.has(a))&&t.add(c)}return t}function y(e,t){return e?.length?t?.length?g(e,t):e:t}function _(e,t){const n=l(e.rooms,t.walls,t.openCuts,[],i,t.cellCm,r,o);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:c(e.rooms,t.walls,t.openCuts,i,t.cellCm,r,o)}}function*h(l,c,d=_){try{let u=0;for(const f of c){const c=l.spaces.find(e=>String(e?.id)===f.id);if(!c)continue;const m=e(c,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const s=t(e);if(!s)continue;const l=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,r,o,g.roomGeom,g.multiWallNodes)||s;v=y(v,a(l,m.physicalBodies)),yield}const _=m.cellCm/r;u+=s(v)*_*_/1e4}return u}catch{return null}}function p(e,t,n=_){const i=h(e,t,n);let r=i.next();for(;!r.done;)r=i.next();return r.value}function b(e,t,n,i){if("system"!==e.type)return null;if("device_count"===e.key)return null===t.deviceCount?null:String(t.deviceCount);if("total_area"===e.key)return null===t.areaM2?null:m(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(i||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function S(e,t){const n=e?.states?.[t];if(!n)return null;const i=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{h as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,b as summarySystemValue,p as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";import{n as t,b as n}from"./zigbee-topology-D6AD-V2V.js";import{F as e}from"./houseplan-card-B4aZmrg_.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};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";import{n as t,b as n}from"./zigbee-topology-DbRQ578B.js";import{F as e}from"./houseplan-card-BQvA-dac.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};
+1 -1
View File
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="11c4ed58118be24367efc8cfd64c8d67289aa5de6424cde79801b8796d1d3855";try{await import("./houseplan-assets/houseplan-card-B4aZmrg_.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 houseplan-card.js: the implementation chunk is unavailable",e)}
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="fbd3ec3bd1ad558392f23a3751afd5e2d7d7c5dd34b364e1aa8aeb9f7ed718f5";try{await import("./houseplan-assets/houseplan-card-BQvA-dac.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 houseplan-card.js: the implementation chunk is unavailable",e)}
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -6
View File
@@ -2016,16 +2016,18 @@ state. The coverage contract also holds when a pointer is held still between
frames: the fast frame must contain every scene pixel that a forced target
`viewBox` would contain inside `.stage`.
After the first camera movement, the day-cycle paper outline is one of those
scene SVGs (#582). Its root CSS box is stage-sized and owns the triple
Before the first direct or animated camera movement, the full card activates
the safe day-cycle paper outline as one of those scene SVGs (#582). Its root
CSS box is stage-sized and owns the triple
drop-shadow and `will-change: filter`; its child is only an exact paper alpha
silhouette. The visible paper loses its filter and the plan root receives an
explicit stage-sized transform layer, so Chromium never rediscovers it as an
implicit overlap layer. During a gesture the same floor/camera projection and
budgeted `viewBox` updates are applied to both roots. A fresh idle card keeps
the historical inner outline for exact reviewed pixels; the static space card,
which has no camera gesture, never enters the fallback. This keeps #532's
isolated raster path without moving a 4700×4200-style filtered footprint.
budgeted `viewBox` updates are applied to both roots. A fresh idle full card
keeps the historical inner outline for exact reviewed pixels. The static space
card has no camera lifecycle, so it uses the stage-sized sibling from its first
frame and never creates a coordinate-sized filtered paper group. This keeps
#532's isolated raster path without moving a 4700×4200-style footprint.
Neither the attribute nor an equal style property is written when its value is
unchanged: an idle frame must leave the DOM byte-identical, or the settled raster
+3 -2
View File
@@ -90,8 +90,9 @@ The public setting remains a two-value selector. `static` uses `bg_color`.
Firefox profile that opened #532 showed the same cause as 23 MB of texture
uploads per frame and about nine frames per second, without a comparable
ratio of its own. A static background creates no outline sibling and carries
neither the filter nor the hint; the non-interactive static space card keeps
its historical inner outline because it has no camera gesture (#582).
neither the filter nor the hint. The non-interactive static space card uses
the same stage-sized day-cycle outline from its first frame because it has no
camera gesture that could activate a fallback later (#582).
- Only the environment and the zero-offset alpha-aware outline outside the
grouped plan-paper footprint change. The plan, paper, floors, room fills,
Glow/spill, devices, labels, decor/backdrop, vacuum, hover, and window rays
+5 -3
View File
@@ -2832,15 +2832,17 @@ require hands on real hardware — they remain for the human pass.
[auto: `smoke_sun_live_bg`, golden `day-cycle-*`]
- [ ] A physically ordinary day-cycle plan stored at 1 cm/grid-point keeps the
outline compositor surface bounded by the visible stage during pinch.
Camera movement activates the fallback, the inner paper group becomes
unfiltered, the plan layer is explicit rather than overlap-promoted, no
Direct gestures and animated camera commands activate the fallback, the
inner paper group becomes unfiltered, the plan layer is explicit rather
than overlap-promoted, no
content layer exceeds 4096 in either dimension, and sampled presented
frames contain no white tile. Before input the historical inner outline
remains byte-identical to the accepted `day-cycle-*` goldens.
The same isolated outline still satisfies the #532 relative raster
budget; its smoke compares the median of three paired, closed-path
static/day-cycle pans so one shared-runner spike cannot replace the A/B
signal
signal. The static space card uses one filtered stage-sized outline from
its first frame and leaves its inner paper group unfiltered
[auto: `smoke_daycycle_layer_budget`, `smoke_daycycle_raster`,
`smoke_live_pan_coverage`]
- [ ] Opaque plan paper (2026-08-03, owner): the scene background —
+12 -12
View File
@@ -3,7 +3,7 @@
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"oxipng": "oxipng 10.2.0",
"sourceFingerprint": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceFingerprint": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"captureScriptSha256": "9e4b0ae533407fe003a129078aec020f2c83d67cdb6fc6da696ce3d829beaeb5",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -15,7 +15,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "76c35a87810e3dc6890bda7b43da133f57d8860031204a62cda7115c15950090"
},
"view-touch": {
@@ -26,7 +26,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "795585acb09488236ebb8028a7fcbd918404c5fe01560bb9b4559de13d441625"
},
"space-create": {
@@ -37,7 +37,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "9f0970de09772674c3156b9fc5b2d49de0ceb22be11ecf8b136047d37d100a84"
},
"room-contour-close": {
@@ -48,7 +48,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "0c354a79f9c3660788b6c5e889a27b6bd78b1f209dc0eef6bb43e2c1344028c4"
},
"plan-context-tray": {
@@ -59,7 +59,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "64169c543291bc4df806dcf8ff484b42c8ea55eb343323d945344e0e28f2ce97"
},
"device-editor": {
@@ -70,7 +70,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "3c8703175605fcf0387d654cd30783ecfd33e21743e70b45190a5ae1a8d355c2"
},
"device-display-preview": {
@@ -81,7 +81,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "5d6193202102f5e6d85567f1111fa105895b933979fbf369c6ba0b1029deb823"
},
"background-editor": {
@@ -92,7 +92,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "375900a29aa62632883ede6727b7dbb8b48cabe9d7d0e16425f9779c837f3dd9"
},
"room-card": {
@@ -103,7 +103,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "3d85424676c823ddca3fa7dab3cce089b6030e48c05d16d2d48d922c66c0cbd2"
},
"device-info": {
@@ -114,7 +114,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "ac962820f8e1c5cb5b042d39b18dc95905fa840cb2d4749060d991be4f6977c2"
},
"pdf-export": {
@@ -125,7 +125,7 @@
},
"theme": "light",
"language": "en",
"sourceSha256": "a389a49673d3ae781201b0738e46645413a978068d39e8c0e93bfae6e8474eaf",
"sourceSha256": "e01fe73cfc9845505a34e56dd12069fb4adeb2cd98f1831c70998034141773e9",
"imageSha256": "4537692fd57a3ed95528eddd748eee5cb6e456ffab7cc49169853d62459252cd"
}
},
+27
View File
@@ -2624,6 +2624,33 @@ const MUTANT_DEFINITIONS = [
+ ' will-change: filter;\n',
}],
},
{
id: 'daycycle-static-outline-promoted-on-inner-paper',
guard: 'node demo/smoke_daycycle_layer_budget.mjs',
because: '#582 contract item 6: the static card has no gesture that could later demote '
+ 'a coordinate-sized filtered paper group, so it must start with the bounded sibling',
patches: [{
file: 'src/styles/plan.styles.ts',
find: ' .hp-static-stage.daycycle .hp-paperg {\n'
+ ' filter: none;\n'
+ ' will-change: auto;\n'
+ ' transition: none;\n',
replace: ' .hp-static-stage.daycycle .hp-paperg {\n'
+ ' will-change: filter;\n',
}],
},
{
id: 'daycycle-programmatic-camera-skips-safe-outline',
guard: 'node demo/smoke_smooth_zoom.mjs',
because: '#582: double-tap, fit, room focus, wheel and button zoom animate the same '
+ 'camera as pinch and must enter the bounded compositor topology before movement',
patches: [{
file: 'src/houseplan-card.ts',
find: ' this._activateSafeDayCycleOutline();\n'
+ ' this._cameraTransitionFit = { ...fit };\n',
replace: ' this._cameraTransitionFit = { ...fit };\n',
}],
},
{
id: 'daycycle-outline-not-promoted',
guard: 'node demo/smoke_daycycle_raster.mjs',
+3 -2
View File
@@ -38,10 +38,11 @@ export const SMOKE_LINKS = [
symbols: ['renderPaperShapes'],
smokes: [
'smoke_daycycle_layer_budget.mjs', 'smoke_daycycle_raster.mjs',
'smoke_live_pan_coverage.mjs', 'smoke_bg_color.mjs',
'smoke_live_pan_coverage.mjs', 'smoke_bg_color.mjs', 'smoke_smooth_zoom.mjs',
],
because: '#582: production-bundle witnesses prove that camera movement activates the '
+ 'stage-bounded day-cycle silhouette at 1 cm/point, keeps the #532 raster budget and '
+ 'stage-bounded day-cycle silhouette for direct and animated camera paths at 1 cm/point, '
+ 'keeps the #532 raster budget and '
+ 'follows the same #579 live viewport as the visible plan; source imports cannot expose '
+ 'CDP layers',
},
+1 -1
View File
@@ -1283,12 +1283,12 @@ export class HouseplanCard extends LitElement {
this._cancelCameraTransition(false);
return false;
}
this._activateSafeDayCycleOutline();
this._cameraTransitionFit = { ...fit };
this._cameraTransition.start(current, target, reason,
this._reducedMotion ? 0 : duration);
return true;
}
private _cssColor(value: string | null | undefined, fallback: string): string {
const text = String(value || '').trim();
if (!text) return fallback;
+4
View File
@@ -957,6 +957,10 @@ class HouseplanSpaceCard extends LitElement {
display: block;
z-index: 1;
}
.hp-static-stage > .hp-paper-outline-svg {
z-index: 0;
overflow: visible;
}
/* Opaque plan paper — the scene bg_color/day-cycle environment shows only AROUND
the plan (owner 2026-08-03). The static card keeps its historical
canvas colour: the theme card background. Drawn plans paper the room
+5
View File
@@ -899,6 +899,11 @@ export function renderSpaceStatic(o: StaticRenderOpts): TemplateResult | null {
?inert=${!!o.inert}
style="aspect-ratio:${vb[2]}/${vb[3]}${stageBg ? ';background:' + stageBg : ''};--hp-cell-visual-scale:${gridVisualScale(cellCm)};--wall-fill:${colors.wall_fill.c};--wall-fill-op:${colors.wall_fill.a}${dayCycle ? `;${dayCycleStageVars(dayCycle)}` : ''}">
${renderDayCycleEnvironment(dayCycle)}
${dayCycle && paperShapes.length ? svg`<svg class="hp-paper-outline-svg"
viewBox="${vb[0]} ${vb[1]} ${vb[2]} ${vb[3]}"
preserveAspectRatio="xMidYMid meet" aria-hidden="true" pointer-events="none">
${renderPaperShapes(paperShapes, 'hp-paper-outline-shapes')}
</svg>` : nothing}
<svg class="hp-static-plan-svg" viewBox="${vb[0]} ${vb[1]} ${vb[2]} ${vb[3]}" preserveAspectRatio="xMidYMid meet">
${wallUnion ? svg`<defs>
<pattern id="hp-wall-hatch" patternUnits="userSpaceOnUse"
+10 -4
View File
@@ -91,8 +91,8 @@ export const planStyles = css`
remaining lifetime to the stage-sized sibling: the inner 4700×4200
group is demoted before HA Companion can lose compositor tiles. */
.stage.daycycle .hp-paperg,
.hp-static-stage.daycycle .hp-paperg,
.stage.daycycle.hp-safe-daycycle-outline .hp-paper-outline-svg {
.stage.daycycle.hp-safe-daycycle-outline .hp-paper-outline-svg,
.hp-static-stage.daycycle .hp-paper-outline-svg {
filter:
drop-shadow(0 0 1px var(--hp-day-cycle-outline-near))
drop-shadow(0 0 5px var(--hp-day-cycle-outline-mid))
@@ -105,6 +105,11 @@ export const planStyles = css`
will-change: auto;
transition: none;
}
.hp-static-stage.daycycle .hp-paperg {
filter: none;
will-change: auto;
transition: none;
}
.stage.daycycle.hp-safe-daycycle-outline .hp-paper-outline-svg {
transition: none;
}
@@ -115,8 +120,8 @@ export const planStyles = css`
.hp-day-cycle-bg,
.hp-day-cycle-sun,
.stage.daycycle .hp-paperg,
.hp-static-stage.daycycle .hp-paperg,
.stage.daycycle.hp-safe-daycycle-outline .hp-paper-outline-svg {
.stage.daycycle.hp-safe-daycycle-outline .hp-paper-outline-svg,
.hp-static-stage.daycycle .hp-paper-outline-svg {
transition: none;
}
}
@@ -268,6 +273,7 @@ export const planStyles = css`
visibility: hidden;
}
.stage.hp-safe-daycycle-outline .hp-paper-outline-svg { visibility: visible; }
.hp-static-stage .hp-paper-outline-svg { visibility: visible; }
.iso-underlay-svg { z-index: 0; overflow: visible; }
.iso-shadows-svg { z-index: 3; overflow: visible; }
.iso-walls-svg {
+5 -2
View File
@@ -14,11 +14,12 @@ test('#582 camera movement switches the day-cycle shadow to a stage-bounded scen
assert.match(helper, /pointer-events="none"/);
assert.match(card, /dayCycle && paperShapes\.length \? svg`<svg class="hp-paper-outline-svg"/);
assert.match(card, /data-hp-live-viewbox=\$\{iso \? 'camera' : 'floor'\}/);
assert.doesNotMatch(staticRender, /class="hp-paper-outline-svg"/);
assert.match(card, /renderPaperShapes\(paperShapes\)/);
assert.match(staticRender, /renderPaperShapes\(paperShapes\)/);
assert.match(staticRender, /dayCycle && paperShapes\.length \? svg`<svg class="hp-paper-outline-svg"/);
assert.match(card, /private _activateSafeDayCycleOutline\(\)/);
assert.match(card, /hp-safe-daycycle-outline/);
assert.match(card, /private _startCameraTransition\([\s\S]*?this\._activateSafeDayCycleOutline\(\);[\s\S]*?this\._cameraTransition\.start/);
assert.match(styles, /\.stage\.daycycle \.hp-paperg/);
assert.match(styles, /\.stage\.daycycle\.hp-safe-daycycle-outline \.hp-paper-outline-svg/);
assert.match(styles, /\.stage\.daycycle\.hp-safe-daycycle-outline \.hp-paperg \{[\s\S]*?filter:\s*none;[\s\S]*?will-change:\s*auto;/);
@@ -33,5 +34,7 @@ test('#582 safe camera scene uses explicit bounded plan and outline layers', ()
assert.match(styles, /\.plan-svg \{ z-index: 1; \}/);
assert.match(styles, /\.hp-paper-outline-svg \{[\s\S]*?z-index: 0;/);
assert.match(styles, /\.stage\.daycycle\.hp-safe-daycycle-outline \.plan-svg \{[\s\S]*?will-change:\s*transform;/);
assert.doesNotMatch(staticCard, /\.hp-static-stage \.hp-paper-outline-svg/);
assert.match(staticCard, /\.hp-static-stage > \.hp-paper-outline-svg \{[\s\S]*?z-index:\s*0;/);
assert.match(styles, /\.hp-static-stage\.daycycle \.hp-paper-outline-svg/);
assert.match(styles, /\.hp-static-stage\.daycycle \.hp-paperg \{[\s\S]*?filter:\s*none;[\s\S]*?will-change:\s*auto;/);
});