fix: settle first camera action after summary layout (#437)

Issue: #437
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-09-08 19:51:04 +03:00
parent 336d8f30ba
commit 89976c85ed
50 changed files with 551 additions and 457 deletions
@@ -1,309 +1,309 @@
{
"schema": 1,
"fingerprint": "7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65",
"fingerprint": "54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 291233,
"initialViewGzipBytes": 291481,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-card.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 293521,
"initialPanelGzipBytes": 293764,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2288,
"initialPanelOnlyGzipBytes": 2283,
"lazyFiles": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/de-BM6m1opK.js",
"houseplan-assets/editor-BEuHtSf6.js",
"houseplan-assets/fr-CZioiym0.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js",
"houseplan-assets/hp-zigbee-topology-overlay-CfzLVB_P.js",
"houseplan-assets/iso-scene-render-BN1QOGlt.js",
"houseplan-assets/live-interaction-runtime-U2ZwnKXN.js",
"houseplan-assets/pdf-export-DkQRI1m7.js",
"houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js",
"houseplan-assets/zigbee-topology-runtime-BmE9yJae.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/de-DatVnXhk.js",
"houseplan-assets/editor-MJ21Ekj0.js",
"houseplan-assets/fr-B19DnsFs.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js",
"houseplan-assets/hp-zigbee-topology-overlay-D7AQ52tS.js",
"houseplan-assets/iso-scene-render-rMbCUAtD.js",
"houseplan-assets/live-interaction-runtime-CN0nTK3E.js",
"houseplan-assets/pdf-export-lE-y91Ij.js",
"houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js",
"houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js"
],
"lazyGzipBytes": 396986,
"lazyGzipBytes": 396913,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/editor-BEuHtSf6.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/editor-MJ21Ekj0.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js"
],
"lazyEditorGzipBytes": 195414,
"lazyEditorGzipBytes": 195394,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js"
],
"lazyOnboardingGzipBytes": 14084,
"lazyOnboardingGzipBytes": 14074,
"lazyLocaleFiles": [
"houseplan-assets/de-BM6m1opK.js",
"houseplan-assets/fr-CZioiym0.js"
"houseplan-assets/de-DatVnXhk.js",
"houseplan-assets/fr-B19DnsFs.js"
],
"lazyLocaleGzipBytes": 50580,
"lazyLocaleGzipBytes": 50552,
"lazyIsometricFiles": [
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/iso-scene-render-BN1QOGlt.js"
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/iso-scene-render-rMbCUAtD.js"
],
"lazyIsometricGzipBytes": 13460,
"lazyIsometricGzipBytes": 13454,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js"
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js"
],
"lazyFurnitureArtGzipBytes": 10252,
"lazyFurnitureArtGzipBytes": 10256,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/pdf-export-DkQRI1m7.js"
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/pdf-export-lE-y91Ij.js"
],
"lazyPdfGzipBytes": 120332,
"lazyPdfGzipBytes": 120336,
"files": [
{
"path": "houseplan-assets/backdrop-pick-BRxWHlkA.js",
"sha256": "b6981840ba31d882db691de5a5dfc3ec165c993bdaa66c27d09ef9d8ae4f5db4",
"path": "houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"sha256": "9f193420877adce6929967476567fd15f66227e4e3bd6452c01d39a4bb2e1777",
"rawBytes": 21012,
"gzipBytes": 7112,
"gzipBytes": 7107,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-BM6m1opK.js",
"sha256": "5da37f699f24183fed2daf2e532883b578cceb5fd2cc838be39bb566ea6add01",
"path": "houseplan-assets/de-DatVnXhk.js",
"sha256": "e056cd5f7429c5ee62ae1e2ced318d951694d990158a178bc07f331d5e8d1f7c",
"rawBytes": 84771,
"gzipBytes": 25544,
"gzipBytes": 25530,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-BEuHtSf6.js",
"sha256": "6e4e2ad5508cebc91169d5b16f8ea83e4e8666d3bcedfb534d1ffff9d36acbd0",
"path": "houseplan-assets/editor-MJ21Ekj0.js",
"sha256": "a4d7008e831ef9f9aa57e0372825a857403778f7595f4df72b32c886f0ca53d3",
"rawBytes": 3837,
"gzipBytes": 1586,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-CZioiym0.js",
"sha256": "1aacf38a798fe287018431468b127abb871c3476c363cd9e69ae8172c9cacc03",
"path": "houseplan-assets/fr-B19DnsFs.js",
"sha256": "f8a9283762795b6f5528c3f4d5dbb047a42c13b9235c7283fd4a1cd2464da548",
"rawBytes": 86828,
"gzipBytes": 25036,
"gzipBytes": 25022,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"sha256": "8e5e130497b823f8e04f87debf39ca40e79f5cc396d4ec4fa946aef9f6f398fa",
"path": "houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"sha256": "41fb1c4ed97ffdfa77224b93e9b5f5c8896597a932569ed3ac9abe38729b96cf",
"rawBytes": 33655,
"gzipBytes": 10252,
"gzipBytes": 10256,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/guard-CNHlhiHy.js",
"sha256": "24a9f365f2fb6da24b6868e8498f558c00ec1132da16510c8e19b05008f5fb85",
"path": "houseplan-assets/guard-CLO3KJtv.js",
"sha256": "b2715430c93c3306bc5044beb03ea71d6e0137a831b3624556cff773c4a054a0",
"rawBytes": 518,
"gzipBytes": 371,
"gzipBytes": 369,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-BxnavZkQ.js",
"sha256": "78e1c0a7f9548d6f189a93c7f3df64d5c1d4c2bd1ea649c65cf95d1757fe217f",
"rawBytes": 1046864,
"gzipBytes": 290428,
"path": "houseplan-assets/houseplan-card-jJRlquiU.js",
"sha256": "ff9b473c3eb23889cdd3f54c7aa94c39307d1ec3ce57e2ecdc718a83cce1acfd",
"rawBytes": 1047613,
"gzipBytes": 290681,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-BM6m1opK.js",
"houseplan-assets/editor-BEuHtSf6.js",
"houseplan-assets/fr-CZioiym0.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js",
"houseplan-assets/hp-zigbee-topology-overlay-CfzLVB_P.js",
"houseplan-assets/iso-scene-render-BN1QOGlt.js",
"houseplan-assets/live-interaction-runtime-U2ZwnKXN.js",
"houseplan-assets/pdf-export-DkQRI1m7.js",
"houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js"
"houseplan-assets/de-DatVnXhk.js",
"houseplan-assets/editor-MJ21Ekj0.js",
"houseplan-assets/fr-B19DnsFs.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js",
"houseplan-assets/hp-zigbee-topology-overlay-D7AQ52tS.js",
"houseplan-assets/iso-scene-render-rMbCUAtD.js",
"houseplan-assets/live-interaction-runtime-CN0nTK3E.js",
"houseplan-assets/pdf-export-lE-y91Ij.js",
"houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"sha256": "4deca87cfdf655580801b2e23ad8b21cd0fe2c9276fd70c4d0eddd10931b58b3",
"path": "houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"sha256": "f53e5cfdfe5434f6fa1efb955f5821df2b2cde1dce16a809cae979a7c693ff60",
"rawBytes": 633719,
"gzipBytes": 168666,
"gzipBytes": 168657,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-BmE9yJae.js"
"houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js",
"sha256": "d05e2b0f9bdbfeabc8a0591f0f5e390fd555c38629a8ab956205c948fa164e1f",
"path": "houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js",
"sha256": "a781944001984e253e331d4833e28ec70a8bd4a80e458936117bd5e3060714f0",
"rawBytes": 28075,
"gzipBytes": 6972,
"gzipBytes": 6967,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-CfzLVB_P.js",
"sha256": "2608a36453c6d15b02618ff56b4d97c4eec849473abcd6fa3f0bffdd8711abbd",
"path": "houseplan-assets/hp-zigbee-topology-overlay-D7AQ52tS.js",
"sha256": "b833ca45c3ab3eef44a90f1445ed80c136f93b39c01eef45cef161852186b2b2",
"rawBytes": 11034,
"gzipBytes": 3732,
"gzipBytes": 3730,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js",
"houseplan-assets/zigbee-topology-runtime-BmE9yJae.js"
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js",
"houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-BN1QOGlt.js",
"sha256": "87658f2e672efb17678353325c3b603f3b5d97bb3146a1324d6f93fa548f5e07",
"path": "houseplan-assets/iso-scene-render-rMbCUAtD.js",
"sha256": "3ffbe5a7170fe1a95f269c352bcc0d9169800378275881d6d7d2a6c79c7a5309",
"rawBytes": 38562,
"gzipBytes": 13089,
"gzipBytes": 13085,
"isEntry": false,
"imports": [
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-U2ZwnKXN.js",
"sha256": "9eed089f29c467c1433601aec58258dcaf132e7a83c6d6a4d19c71570a3d75a9",
"path": "houseplan-assets/live-interaction-runtime-CN0nTK3E.js",
"sha256": "880fe2899ef5f2d0b043f37aaae6894fb916dfb52a9d77f756d11958f375a125",
"rawBytes": 5196,
"gzipBytes": 2128,
"gzipBytes": 2125,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-DkQRI1m7.js",
"sha256": "6b3e6e2400afb9f03d9e39344c870d9f5b4a300609893dc3b4937e03e11bf621",
"path": "houseplan-assets/pdf-export-lE-y91Ij.js",
"sha256": "29f1edddf71b6c25016e6d135d02fd4cba300baa6ccb96096c13834941b4f2a2",
"rawBytes": 237163,
"gzipBytes": 110080,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-maMcJbPs.js",
"sha256": "a0991dc7bc9a2e667d7eac6cef7cbd554c09c4aa1db2e8037b89e9f9f5b49a5f",
"path": "houseplan-assets/summary-panel-editor-eiGjAHG0.js",
"sha256": "b33a90c237a4c79f42b60d067cb244c4012eac6d2f52ad60994e625232d3d9d9",
"rawBytes": 10904,
"gzipBytes": 2841,
"gzipBytes": 2834,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js"
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-CImxYk0n.js",
"sha256": "71488cfdf3c8c596ba8049d124e3586d19a7078807511a5bdfb6422028789484",
"path": "houseplan-assets/summary-panel-metrics-w6RI0eXy.js",
"sha256": "93373341a0497fc2292ba3c232a09472265099e78ef9bc1b517125f9d1e7ffd9",
"rawBytes": 2195,
"gzipBytes": 1124,
"gzipBytes": 1120,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js",
"sha256": "1b624c29ecce15ed6f5625b0a6af5bbb43f6350c06fada900d66dcaa2d6f5335",
"path": "houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js",
"sha256": "ce37fbbf7f21f3b3b8c280c390634985a20b2480aba181d131a077abc91d5fa9",
"rawBytes": 43236,
"gzipBytes": 13225,
"gzipBytes": 13220,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-maMcJbPs.js",
"houseplan-assets/summary-panel-metrics-CImxYk0n.js"
"houseplan-assets/summary-panel-editor-eiGjAHG0.js",
"houseplan-assets/summary-panel-metrics-w6RI0eXy.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-DlaHYqmK.js",
"sha256": "67282ce4951a56a039ce8df24702bda4fe1c621c41518559baf3c6b2d55c20c6",
"path": "houseplan-assets/zigbee-topology-DlCMcJoR.js",
"sha256": "7e9f515c2b644da78d194ad43ee179bc805aea3f7ceec1692c0bb72be599b40a",
"rawBytes": 18961,
"gzipBytes": 7427,
"gzipBytes": 7422,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-BmE9yJae.js",
"sha256": "efbecc890bf33b6edaeceebb5e9ca4b14c7e1266e0d3b8a373b311e40faeda90",
"path": "houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js",
"sha256": "da45c02e29a4666e3618731b89d41489079d2b8a1c33e4ff1b3da010e2a8650f",
"rawBytes": 3941,
"gzipBytes": 1766,
"gzipBytes": 1760,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js"
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "6f59aa7579cd0eaff7301c0163e9148dbb62d2e0a88811e4eccc42ffb13ddbc0",
"sha256": "7bf6849848917f0e46f2f6a957b38fd0172ff8921e6e66940671516a1ce30fea",
"rawBytes": 1205,
"gzipBytes": 805,
"gzipBytes": 800,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "9d67f752cd8560244a904cfa2c1824675f2d1ef6e807552cdd5cc34894a084eb",
"sha256": "2bdc1519b292501730737f7d321a4ef477e4b9ec26b6f093978b249967d3865f",
"rawBytes": 6071,
"gzipBytes": 2288,
"gzipBytes": 2283,
"isEntry": true,
"imports": [
"houseplan-card.js"
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{t as e,l as o,x as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,dU as r,b as c}from"./houseplan-card-BxnavZkQ.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__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{t as e,l as o,x as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,dU as r,b as c}from"./houseplan-card-jJRlquiU.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
@@ -0,0 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{dS as r,dT as e,dU as t}from"./houseplan-card-jJRlquiU.js";const a={},s=r(class extends e{constructor(){super(...arguments),this.ot=a}render(r,e){return e()}update(r,[e,a]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((r,e)=>r===this.ot[e]))return t}else if(this.ot===e)return t;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,a)}});export{s as i};
@@ -1 +0,0 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{dS as r,dT as t,dU as e}from"./houseplan-card-BxnavZkQ.js";const s={},a=r(class extends t{constructor(){super(...arguments),this.ot=s}render(r,t){return t()}update(r,[t,s]){if(Array.isArray(t)){if(Array.isArray(this.ot)&&this.ot.length===t.length&&t.every((r,t)=>r===this.ot[t]))return e}else if(this.ot===t)return e;return this.ot=Array.isArray(t)?Array.from(t):t,this.render(t,s)}});export{a as i};
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{b as e,A as t}from"./houseplan-card-BxnavZkQ.js";import{s as a,n as s,m as l,a as o,b as i}from"./summary-panel-runtime-loaded-CtMn3WiI.js";const r=r=>{const{host:c,dialog:u,local:n,problems:m,t:d}=r,p=m.find(e=>"error"===e.kind),$=u.localShow!==u.baseLocalShow||!u.localOnly&&!a(s(u.draft),u.base),b=$&&!u.busy&&!p,y=e=>m.find(t=>t.path===e),v=e=>e?d(`summary.problem.${e.code}`):"",h=Object.entries(c.hass?.states||{}).sort((e,t)=>{const a=String(e[1]?.attributes?.friendly_name||e[0]),s=String(t[1]?.attributes?.friendly_name||t[0]);return a.localeCompare(s)}),g=u.entityFilter.trim().toLocaleLowerCase(),_=g?h.filter(([e,t])=>`${e} ${t.attributes?.friendly_name||""}`.toLocaleLowerCase().includes(g)):h,k=()=>r.close(),f=e`<label class="summary-switch"><input type="checkbox"
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{b as e,A as t}from"./houseplan-card-jJRlquiU.js";import{s as a,n as s,m as l,a as o,b as i}from"./summary-panel-runtime-loaded-CdKKnTRi.js";const r=r=>{const{host:c,dialog:u,local:n,problems:m,t:d}=r,p=m.find(e=>"error"===e.kind),$=u.localShow!==u.baseLocalShow||!u.localOnly&&!a(s(u.draft),u.base),b=$&&!u.busy&&!p,y=e=>m.find(t=>t.path===e),v=e=>e?d(`summary.problem.${e.code}`):"",h=Object.entries(c.hass?.states||{}).sort((e,t)=>{const a=String(e[1]?.attributes?.friendly_name||e[0]),s=String(t[1]?.attributes?.friendly_name||t[0]);return a.localeCompare(s)}),g=u.entityFilter.trim().toLocaleLowerCase(),_=g?h.filter(([e,t])=>`${e} ${t.attributes?.friendly_name||""}`.toLocaleLowerCase().includes(g)):h,k=()=>r.close(),f=e`<label class="summary-switch"><input type="checkbox"
.checked=${u.localShow}
@change=${e=>r.setDialog({...u,localShow:e.target.checked})} />
<span>${d("summary.show_local")}</span></label>`,w=e`<h3 class="summary-sizes-title">${d("summary.sizes_title")}</h3>
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{az as e,e9 as t,ea as n,br as i,eb as r,P as a,a5 as s,M as o,aq as c,N as l,bp as d,bo as u,ec as f}from"./houseplan-card-BxnavZkQ.js";function g(t){if(!t.registry.authoritative)return null;const n=new Set,i=e(t.markers);for(const e of Object.values(t.registry.devices||{}))e?.id&&"service"!==e.entry_type&&!i.devices.has(e.id)&&e.area_id&&t.areaToSpace[e.area_id]&&n.add(e.id);for(const e of t.markers||[]){if(e.removed||"virtual"===e.binding)continue;const r=String(e.binding||"").indexOf(":");if(r<1)continue;const a=e.binding.slice(0,r),s=e.binding.slice(r+1),o="device"===a?t.registry.devices?.[s]:null,c="entity"===a?t.registry.entities?.[s]:null,l="device"===a?s:c?.device_id,d="device"===a?o?.area_id:c?.area_id||l&&t.registry.devices?.[l]?.area_id,u="string"==typeof e.room_id&&e.room_id.length>0&&null===e.area?"":e.area||d||"",f=u&&t.areaToSpace[u]||e.space||t.firstSpaceId;l&&t.registry.devices?.[l]&&t.spaceIds.has(f)&&(!i.devices.has(l)||"entity"===a&&i.liveEntities.has(s))&&n.add(l)}return n}function m(e,t){return e?.length?t?.length?f(e,t):e:t}function v(e,t){try{let n=0;for(const i of t){const t=e.spaces.find(e=>String(e?.id)===i.id);if(!t)continue;const f=r(t,i);let g=null;for(const e of i.rooms){if(!e.id)continue;const t=a(e);if(!t)continue;const n=s(i.rooms,e.id,f.walls,f.openCuts,o,f.cellCm,c,l)||t;g=m(g,d(n,f.physicalBodies))}const v=f.cellCm/c;n+=u(g)*v*v/1e4}return n}catch{return null}}function y(e,t,n,r){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:i(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(r||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function _(e,i){const r=e?.states?.[i];if(!r)return null;const a=t(e,i);return a?n(a,String(r.attributes?.unit_of_measurement||"")):null}export{g as representedHaDeviceIds,_ as summaryEntityValue,y as summarySystemValue,v as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{az as e,e9 as t,ea as n,br as i,eb as r,P as a,a5 as s,M as o,aq as c,N as l,bp as d,bo as u,ec as f}from"./houseplan-card-jJRlquiU.js";function g(t){if(!t.registry.authoritative)return null;const n=new Set,i=e(t.markers);for(const e of Object.values(t.registry.devices||{}))e?.id&&"service"!==e.entry_type&&!i.devices.has(e.id)&&e.area_id&&t.areaToSpace[e.area_id]&&n.add(e.id);for(const e of t.markers||[]){if(e.removed||"virtual"===e.binding)continue;const r=String(e.binding||"").indexOf(":");if(r<1)continue;const a=e.binding.slice(0,r),s=e.binding.slice(r+1),o="device"===a?t.registry.devices?.[s]:null,c="entity"===a?t.registry.entities?.[s]:null,l="device"===a?s:c?.device_id,d="device"===a?o?.area_id:c?.area_id||l&&t.registry.devices?.[l]?.area_id,u="string"==typeof e.room_id&&e.room_id.length>0&&null===e.area?"":e.area||d||"",f=u&&t.areaToSpace[u]||e.space||t.firstSpaceId;l&&t.registry.devices?.[l]&&t.spaceIds.has(f)&&(!i.devices.has(l)||"entity"===a&&i.liveEntities.has(s))&&n.add(l)}return n}function m(e,t){return e?.length?t?.length?f(e,t):e:t}function v(e,t){try{let n=0;for(const i of t){const t=e.spaces.find(e=>String(e?.id)===i.id);if(!t)continue;const f=r(t,i);let g=null;for(const e of i.rooms){if(!e.id)continue;const t=a(e);if(!t)continue;const n=s(i.rooms,e.id,f.walls,f.openCuts,o,f.cellCm,c,l)||t;g=m(g,d(n,f.physicalBodies))}const v=f.cellCm/c;n+=u(g)*v*v/1e4}return n}catch{return null}}function y(e,t,n,r){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:i(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(r||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function _(e,i){const r=e?.states?.[i];if(!r)return null;const a=t(e,i);return a?n(a,String(r.attributes?.unit_of_measurement||"")):null}export{g as representedHaDeviceIds,_ as summaryEntityValue,y as summarySystemValue,v as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{n as t,b as n}from"./zigbee-topology-DlaHYqmK.js";import{F as e}from"./houseplan-card-BxnavZkQ.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 g(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 m(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,m=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{f=t,m=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&&m?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof p&&b.push(p),await g(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 g(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,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{n as t,b as n}from"./zigbee-topology-DlCMcJoR.js";import{F as e}from"./houseplan-card-jJRlquiU.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 g(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 m(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,m=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{p=t,m=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&&m?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof f&&b.push(f),await g(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 g(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,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";try{await import("./houseplan-assets/houseplan-card-BxnavZkQ.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__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";try{await import("./houseplan-assets/houseplan-card-jJRlquiU.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
+141 -141
View File
@@ -1,309 +1,309 @@
{
"schema": 1,
"fingerprint": "7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65",
"fingerprint": "54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 291233,
"initialViewGzipBytes": 291481,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-card.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 293521,
"initialPanelGzipBytes": 293764,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2288,
"initialPanelOnlyGzipBytes": 2283,
"lazyFiles": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/de-BM6m1opK.js",
"houseplan-assets/editor-BEuHtSf6.js",
"houseplan-assets/fr-CZioiym0.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js",
"houseplan-assets/hp-zigbee-topology-overlay-CfzLVB_P.js",
"houseplan-assets/iso-scene-render-BN1QOGlt.js",
"houseplan-assets/live-interaction-runtime-U2ZwnKXN.js",
"houseplan-assets/pdf-export-DkQRI1m7.js",
"houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js",
"houseplan-assets/zigbee-topology-runtime-BmE9yJae.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/de-DatVnXhk.js",
"houseplan-assets/editor-MJ21Ekj0.js",
"houseplan-assets/fr-B19DnsFs.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js",
"houseplan-assets/hp-zigbee-topology-overlay-D7AQ52tS.js",
"houseplan-assets/iso-scene-render-rMbCUAtD.js",
"houseplan-assets/live-interaction-runtime-CN0nTK3E.js",
"houseplan-assets/pdf-export-lE-y91Ij.js",
"houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js",
"houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js"
],
"lazyGzipBytes": 396986,
"lazyGzipBytes": 396913,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/editor-BEuHtSf6.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/editor-MJ21Ekj0.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js"
],
"lazyEditorGzipBytes": 195414,
"lazyEditorGzipBytes": 195394,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js"
],
"lazyOnboardingGzipBytes": 14084,
"lazyOnboardingGzipBytes": 14074,
"lazyLocaleFiles": [
"houseplan-assets/de-BM6m1opK.js",
"houseplan-assets/fr-CZioiym0.js"
"houseplan-assets/de-DatVnXhk.js",
"houseplan-assets/fr-B19DnsFs.js"
],
"lazyLocaleGzipBytes": 50580,
"lazyLocaleGzipBytes": 50552,
"lazyIsometricFiles": [
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/iso-scene-render-BN1QOGlt.js"
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/iso-scene-render-rMbCUAtD.js"
],
"lazyIsometricGzipBytes": 13460,
"lazyIsometricGzipBytes": 13454,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js"
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js"
],
"lazyFurnitureArtGzipBytes": 10252,
"lazyFurnitureArtGzipBytes": 10256,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/pdf-export-DkQRI1m7.js"
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/pdf-export-lE-y91Ij.js"
],
"lazyPdfGzipBytes": 120332,
"lazyPdfGzipBytes": 120336,
"files": [
{
"path": "houseplan-assets/backdrop-pick-BRxWHlkA.js",
"sha256": "b6981840ba31d882db691de5a5dfc3ec165c993bdaa66c27d09ef9d8ae4f5db4",
"path": "houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"sha256": "9f193420877adce6929967476567fd15f66227e4e3bd6452c01d39a4bb2e1777",
"rawBytes": 21012,
"gzipBytes": 7112,
"gzipBytes": 7107,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-BM6m1opK.js",
"sha256": "5da37f699f24183fed2daf2e532883b578cceb5fd2cc838be39bb566ea6add01",
"path": "houseplan-assets/de-DatVnXhk.js",
"sha256": "e056cd5f7429c5ee62ae1e2ced318d951694d990158a178bc07f331d5e8d1f7c",
"rawBytes": 84771,
"gzipBytes": 25544,
"gzipBytes": 25530,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-BEuHtSf6.js",
"sha256": "6e4e2ad5508cebc91169d5b16f8ea83e4e8666d3bcedfb534d1ffff9d36acbd0",
"path": "houseplan-assets/editor-MJ21Ekj0.js",
"sha256": "a4d7008e831ef9f9aa57e0372825a857403778f7595f4df72b32c886f0ca53d3",
"rawBytes": 3837,
"gzipBytes": 1586,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-CZioiym0.js",
"sha256": "1aacf38a798fe287018431468b127abb871c3476c363cd9e69ae8172c9cacc03",
"path": "houseplan-assets/fr-B19DnsFs.js",
"sha256": "f8a9283762795b6f5528c3f4d5dbb047a42c13b9235c7283fd4a1cd2464da548",
"rawBytes": 86828,
"gzipBytes": 25036,
"gzipBytes": 25022,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"sha256": "8e5e130497b823f8e04f87debf39ca40e79f5cc396d4ec4fa946aef9f6f398fa",
"path": "houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"sha256": "41fb1c4ed97ffdfa77224b93e9b5f5c8896597a932569ed3ac9abe38729b96cf",
"rawBytes": 33655,
"gzipBytes": 10252,
"gzipBytes": 10256,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/guard-CNHlhiHy.js",
"sha256": "24a9f365f2fb6da24b6868e8498f558c00ec1132da16510c8e19b05008f5fb85",
"path": "houseplan-assets/guard-CLO3KJtv.js",
"sha256": "b2715430c93c3306bc5044beb03ea71d6e0137a831b3624556cff773c4a054a0",
"rawBytes": 518,
"gzipBytes": 371,
"gzipBytes": 369,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-BxnavZkQ.js",
"sha256": "78e1c0a7f9548d6f189a93c7f3df64d5c1d4c2bd1ea649c65cf95d1757fe217f",
"rawBytes": 1046864,
"gzipBytes": 290428,
"path": "houseplan-assets/houseplan-card-jJRlquiU.js",
"sha256": "ff9b473c3eb23889cdd3f54c7aa94c39307d1ec3ce57e2ecdc718a83cce1acfd",
"rawBytes": 1047613,
"gzipBytes": 290681,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-BM6m1opK.js",
"houseplan-assets/editor-BEuHtSf6.js",
"houseplan-assets/fr-CZioiym0.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js",
"houseplan-assets/hp-zigbee-topology-overlay-CfzLVB_P.js",
"houseplan-assets/iso-scene-render-BN1QOGlt.js",
"houseplan-assets/live-interaction-runtime-U2ZwnKXN.js",
"houseplan-assets/pdf-export-DkQRI1m7.js",
"houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js"
"houseplan-assets/de-DatVnXhk.js",
"houseplan-assets/editor-MJ21Ekj0.js",
"houseplan-assets/fr-B19DnsFs.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js",
"houseplan-assets/hp-zigbee-topology-overlay-D7AQ52tS.js",
"houseplan-assets/iso-scene-render-rMbCUAtD.js",
"houseplan-assets/live-interaction-runtime-CN0nTK3E.js",
"houseplan-assets/pdf-export-lE-y91Ij.js",
"houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-CsSNfBdO.js",
"sha256": "4deca87cfdf655580801b2e23ad8b21cd0fe2c9276fd70c4d0eddd10931b58b3",
"path": "houseplan-assets/houseplan-editor-runtime-ZMUXlqXz.js",
"sha256": "f53e5cfdfe5434f6fa1efb955f5821df2b2cde1dce16a809cae979a7c693ff60",
"rawBytes": 633719,
"gzipBytes": 168666,
"gzipBytes": 168657,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-BmE9yJae.js"
"houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-C5-cS_93.js",
"sha256": "d05e2b0f9bdbfeabc8a0591f0f5e390fd555c38629a8ab956205c948fa164e1f",
"path": "houseplan-assets/houseplan-onboarding-runtime-DkQ2cjZm.js",
"sha256": "a781944001984e253e331d4833e28ec70a8bd4a80e458936117bd5e3060714f0",
"rawBytes": 28075,
"gzipBytes": 6972,
"gzipBytes": 6967,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-BRxWHlkA.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/backdrop-pick-CdcFTZ2b.js",
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-CfzLVB_P.js",
"sha256": "2608a36453c6d15b02618ff56b4d97c4eec849473abcd6fa3f0bffdd8711abbd",
"path": "houseplan-assets/hp-zigbee-topology-overlay-D7AQ52tS.js",
"sha256": "b833ca45c3ab3eef44a90f1445ed80c136f93b39c01eef45cef161852186b2b2",
"rawBytes": 11034,
"gzipBytes": 3732,
"gzipBytes": 3730,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js",
"houseplan-assets/zigbee-topology-runtime-BmE9yJae.js"
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js",
"houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-BN1QOGlt.js",
"sha256": "87658f2e672efb17678353325c3b603f3b5d97bb3146a1324d6f93fa548f5e07",
"path": "houseplan-assets/iso-scene-render-rMbCUAtD.js",
"sha256": "3ffbe5a7170fe1a95f269c352bcc0d9169800378275881d6d7d2a6c79c7a5309",
"rawBytes": 38562,
"gzipBytes": 13089,
"gzipBytes": 13085,
"isEntry": false,
"imports": [
"houseplan-assets/guard-CNHlhiHy.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/guard-CLO3KJtv.js",
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-U2ZwnKXN.js",
"sha256": "9eed089f29c467c1433601aec58258dcaf132e7a83c6d6a4d19c71570a3d75a9",
"path": "houseplan-assets/live-interaction-runtime-CN0nTK3E.js",
"sha256": "880fe2899ef5f2d0b043f37aaae6894fb916dfb52a9d77f756d11958f375a125",
"rawBytes": 5196,
"gzipBytes": 2128,
"gzipBytes": 2125,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-DkQRI1m7.js",
"sha256": "6b3e6e2400afb9f03d9e39344c870d9f5b4a300609893dc3b4937e03e11bf621",
"path": "houseplan-assets/pdf-export-lE-y91Ij.js",
"sha256": "29f1edddf71b6c25016e6d135d02fd4cba300baa6ccb96096c13834941b4f2a2",
"rawBytes": 237163,
"gzipBytes": 110080,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-DK144qGt.js",
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/furniture-plan-art.generated-2dFG7h01.js",
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-maMcJbPs.js",
"sha256": "a0991dc7bc9a2e667d7eac6cef7cbd554c09c4aa1db2e8037b89e9f9f5b49a5f",
"path": "houseplan-assets/summary-panel-editor-eiGjAHG0.js",
"sha256": "b33a90c237a4c79f42b60d067cb244c4012eac6d2f52ad60994e625232d3d9d9",
"rawBytes": 10904,
"gzipBytes": 2841,
"gzipBytes": 2834,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js"
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-CImxYk0n.js",
"sha256": "71488cfdf3c8c596ba8049d124e3586d19a7078807511a5bdfb6422028789484",
"path": "houseplan-assets/summary-panel-metrics-w6RI0eXy.js",
"sha256": "93373341a0497fc2292ba3c232a09472265099e78ef9bc1b517125f9d1e7ffd9",
"rawBytes": 2195,
"gzipBytes": 1124,
"gzipBytes": 1120,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-CtMn3WiI.js",
"sha256": "1b624c29ecce15ed6f5625b0a6af5bbb43f6350c06fada900d66dcaa2d6f5335",
"path": "houseplan-assets/summary-panel-runtime-loaded-CdKKnTRi.js",
"sha256": "ce37fbbf7f21f3b3b8c280c390634985a20b2480aba181d131a077abc91d5fa9",
"rawBytes": 43236,
"gzipBytes": 13225,
"gzipBytes": 13220,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-maMcJbPs.js",
"houseplan-assets/summary-panel-metrics-CImxYk0n.js"
"houseplan-assets/summary-panel-editor-eiGjAHG0.js",
"houseplan-assets/summary-panel-metrics-w6RI0eXy.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-DlaHYqmK.js",
"sha256": "67282ce4951a56a039ce8df24702bda4fe1c621c41518559baf3c6b2d55c20c6",
"path": "houseplan-assets/zigbee-topology-DlCMcJoR.js",
"sha256": "7e9f515c2b644da78d194ad43ee179bc805aea3f7ceec1692c0bb72be599b40a",
"rawBytes": 18961,
"gzipBytes": 7427,
"gzipBytes": 7422,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-BmE9yJae.js",
"sha256": "efbecc890bf33b6edaeceebb5e9ca4b14c7e1266e0d3b8a373b311e40faeda90",
"path": "houseplan-assets/zigbee-topology-runtime-BAp-VYUQ.js",
"sha256": "da45c02e29a4666e3618731b89d41489079d2b8a1c33e4ff1b3da010e2a8650f",
"rawBytes": 3941,
"gzipBytes": 1766,
"gzipBytes": 1760,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js",
"houseplan-assets/zigbee-topology-DlaHYqmK.js"
"houseplan-assets/houseplan-card-jJRlquiU.js",
"houseplan-assets/zigbee-topology-DlCMcJoR.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "6f59aa7579cd0eaff7301c0163e9148dbb62d2e0a88811e4eccc42ffb13ddbc0",
"sha256": "7bf6849848917f0e46f2f6a957b38fd0172ff8921e6e66940671516a1ce30fea",
"rawBytes": 1205,
"gzipBytes": 805,
"gzipBytes": 800,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-BxnavZkQ.js"
"houseplan-assets/houseplan-card-jJRlquiU.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "9d67f752cd8560244a904cfa2c1824675f2d1ef6e807552cdd5cc34894a084eb",
"sha256": "2bdc1519b292501730737f7d321a4ef477e4b9ec26b6f093978b249967d3865f",
"rawBytes": 6071,
"gzipBytes": 2288,
"gzipBytes": 2283,
"isEntry": true,
"imports": [
"houseplan-card.js"
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__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{t as e,l as o,x as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,dU as r,b as c}from"./houseplan-card-BxnavZkQ.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__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{t as e,l as o,x as t,e4 as s,A as a,e5 as i,e6 as l,e7 as n,dU as r,b as c}from"./houseplan-card-jJRlquiU.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
View File
@@ -0,0 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{dS as r,dT as e,dU as t}from"./houseplan-card-jJRlquiU.js";const a={},s=r(class extends e{constructor(){super(...arguments),this.ot=a}render(r,e){return e()}update(r,[e,a]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((r,e)=>r===this.ot[e]))return t}else if(this.ot===e)return t;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,a)}});export{s as i};
-1
View File
@@ -1 +0,0 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{dS as r,dT as t,dU as e}from"./houseplan-card-BxnavZkQ.js";const s={},a=r(class extends t{constructor(){super(...arguments),this.ot=s}render(r,t){return t()}update(r,[t,s]){if(Array.isArray(t)){if(Array.isArray(this.ot)&&this.ot.length===t.length&&t.every((r,t)=>r===this.ot[t]))return e}else if(this.ot===t)return e;return this.ot=Array.isArray(t)?Array.from(t):t,this.render(t,s)}});export{a as i};
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__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{b as e,A as t}from"./houseplan-card-BxnavZkQ.js";import{s as a,n as s,m as l,a as o,b as i}from"./summary-panel-runtime-loaded-CtMn3WiI.js";const r=r=>{const{host:c,dialog:u,local:n,problems:m,t:d}=r,p=m.find(e=>"error"===e.kind),$=u.localShow!==u.baseLocalShow||!u.localOnly&&!a(s(u.draft),u.base),b=$&&!u.busy&&!p,y=e=>m.find(t=>t.path===e),v=e=>e?d(`summary.problem.${e.code}`):"",h=Object.entries(c.hass?.states||{}).sort((e,t)=>{const a=String(e[1]?.attributes?.friendly_name||e[0]),s=String(t[1]?.attributes?.friendly_name||t[0]);return a.localeCompare(s)}),g=u.entityFilter.trim().toLocaleLowerCase(),_=g?h.filter(([e,t])=>`${e} ${t.attributes?.friendly_name||""}`.toLocaleLowerCase().includes(g)):h,k=()=>r.close(),f=e`<label class="summary-switch"><input type="checkbox"
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{b as e,A as t}from"./houseplan-card-jJRlquiU.js";import{s as a,n as s,m as l,a as o,b as i}from"./summary-panel-runtime-loaded-CdKKnTRi.js";const r=r=>{const{host:c,dialog:u,local:n,problems:m,t:d}=r,p=m.find(e=>"error"===e.kind),$=u.localShow!==u.baseLocalShow||!u.localOnly&&!a(s(u.draft),u.base),b=$&&!u.busy&&!p,y=e=>m.find(t=>t.path===e),v=e=>e?d(`summary.problem.${e.code}`):"",h=Object.entries(c.hass?.states||{}).sort((e,t)=>{const a=String(e[1]?.attributes?.friendly_name||e[0]),s=String(t[1]?.attributes?.friendly_name||t[0]);return a.localeCompare(s)}),g=u.entityFilter.trim().toLocaleLowerCase(),_=g?h.filter(([e,t])=>`${e} ${t.attributes?.friendly_name||""}`.toLocaleLowerCase().includes(g)):h,k=()=>r.close(),f=e`<label class="summary-switch"><input type="checkbox"
.checked=${u.localShow}
@change=${e=>r.setDialog({...u,localShow:e.target.checked})} />
<span>${d("summary.show_local")}</span></label>`,w=e`<h3 class="summary-sizes-title">${d("summary.sizes_title")}</h3>
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{az as e,e9 as t,ea as n,br as i,eb as r,P as a,a5 as s,M as o,aq as c,N as l,bp as d,bo as u,ec as f}from"./houseplan-card-BxnavZkQ.js";function g(t){if(!t.registry.authoritative)return null;const n=new Set,i=e(t.markers);for(const e of Object.values(t.registry.devices||{}))e?.id&&"service"!==e.entry_type&&!i.devices.has(e.id)&&e.area_id&&t.areaToSpace[e.area_id]&&n.add(e.id);for(const e of t.markers||[]){if(e.removed||"virtual"===e.binding)continue;const r=String(e.binding||"").indexOf(":");if(r<1)continue;const a=e.binding.slice(0,r),s=e.binding.slice(r+1),o="device"===a?t.registry.devices?.[s]:null,c="entity"===a?t.registry.entities?.[s]:null,l="device"===a?s:c?.device_id,d="device"===a?o?.area_id:c?.area_id||l&&t.registry.devices?.[l]?.area_id,u="string"==typeof e.room_id&&e.room_id.length>0&&null===e.area?"":e.area||d||"",f=u&&t.areaToSpace[u]||e.space||t.firstSpaceId;l&&t.registry.devices?.[l]&&t.spaceIds.has(f)&&(!i.devices.has(l)||"entity"===a&&i.liveEntities.has(s))&&n.add(l)}return n}function m(e,t){return e?.length?t?.length?f(e,t):e:t}function v(e,t){try{let n=0;for(const i of t){const t=e.spaces.find(e=>String(e?.id)===i.id);if(!t)continue;const f=r(t,i);let g=null;for(const e of i.rooms){if(!e.id)continue;const t=a(e);if(!t)continue;const n=s(i.rooms,e.id,f.walls,f.openCuts,o,f.cellCm,c,l)||t;g=m(g,d(n,f.physicalBodies))}const v=f.cellCm/c;n+=u(g)*v*v/1e4}return n}catch{return null}}function y(e,t,n,r){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:i(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(r||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function _(e,i){const r=e?.states?.[i];if(!r)return null;const a=t(e,i);return a?n(a,String(r.attributes?.unit_of_measurement||"")):null}export{g as representedHaDeviceIds,_ as summaryEntityValue,y as summarySystemValue,v as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{az as e,e9 as t,ea as n,br as i,eb as r,P as a,a5 as s,M as o,aq as c,N as l,bp as d,bo as u,ec as f}from"./houseplan-card-jJRlquiU.js";function g(t){if(!t.registry.authoritative)return null;const n=new Set,i=e(t.markers);for(const e of Object.values(t.registry.devices||{}))e?.id&&"service"!==e.entry_type&&!i.devices.has(e.id)&&e.area_id&&t.areaToSpace[e.area_id]&&n.add(e.id);for(const e of t.markers||[]){if(e.removed||"virtual"===e.binding)continue;const r=String(e.binding||"").indexOf(":");if(r<1)continue;const a=e.binding.slice(0,r),s=e.binding.slice(r+1),o="device"===a?t.registry.devices?.[s]:null,c="entity"===a?t.registry.entities?.[s]:null,l="device"===a?s:c?.device_id,d="device"===a?o?.area_id:c?.area_id||l&&t.registry.devices?.[l]?.area_id,u="string"==typeof e.room_id&&e.room_id.length>0&&null===e.area?"":e.area||d||"",f=u&&t.areaToSpace[u]||e.space||t.firstSpaceId;l&&t.registry.devices?.[l]&&t.spaceIds.has(f)&&(!i.devices.has(l)||"entity"===a&&i.liveEntities.has(s))&&n.add(l)}return n}function m(e,t){return e?.length?t?.length?f(e,t):e:t}function v(e,t){try{let n=0;for(const i of t){const t=e.spaces.find(e=>String(e?.id)===i.id);if(!t)continue;const f=r(t,i);let g=null;for(const e of i.rooms){if(!e.id)continue;const t=a(e);if(!t)continue;const n=s(i.rooms,e.id,f.walls,f.openCuts,o,f.cellCm,c,l)||t;g=m(g,d(n,f.physicalBodies))}const v=f.cellCm/c;n+=u(g)*v*v/1e4}return n}catch{return null}}function y(e,t,n,r){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:i(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(r||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function _(e,i){const r=e?.states?.[i];if(!r)return null;const a=t(e,i);return a?n(a,String(r.attributes?.unit_of_measurement||"")):null}export{g as representedHaDeviceIds,_ as summaryEntityValue,y as summarySystemValue,v as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";import{n as t,b as n}from"./zigbee-topology-DlaHYqmK.js";import{F as e}from"./houseplan-card-BxnavZkQ.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 g(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 m(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,m=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{f=t,m=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&&m?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof p&&b.push(p),await g(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 g(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,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";import{n as t,b as n}from"./zigbee-topology-DlCMcJoR.js";import{F as e}from"./houseplan-card-jJRlquiU.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 g(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 m(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,m=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{p=t,m=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&&m?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof f&&b.push(f),await g(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 g(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,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
+1 -1
View File
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7c83399f3ae024789fa21e852e679e103d872b8e501bf4c92d851fc2d1448b65";try{await import("./houseplan-assets/houseplan-card-BxnavZkQ.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__="54e279c3b1e84552acd4dea85cabb7a2f98aaebf42f6183f8c90e6a58dfa0ade";try{await import("./houseplan-assets/houseplan-card-jJRlquiU.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
+3 -1
View File
@@ -9,7 +9,9 @@
independently on each card. The panel moves between the right and bottom
edges, respects Home Assistant mobile mode, and hides when the card is too
small. Its settings are touch-friendly and stay attached to the same card
when a dashboard reflows ([#437](https://github.com/Matysh/houseplan-card/issues/437)).
when a dashboard reflows. A first camera action also waits for the final
header geometry instead of drifting while the new control settles
([#437](https://github.com/Matysh/houseplan-card/issues/437)).
## v1.73.0-beta.6 — 2026-09-08
+3 -1
View File
@@ -15,7 +15,9 @@
панель и выбирает размеры значков и текста View для каждой карточки. Панель
располагается справа или снизу, учитывает мобильный режим Home Assistant и
скрывается, если карточка слишком мала. Настройки удобны для касания и
остаются привязаны к той же карточке при перестроении дашборда
остаются привязаны к той же карточке при перестроении дашборда.
Первый жест камеры также применяется уже к итоговой геометрии шапки, поэтому
план не смещается, пока новый контрол завершает компоновку
([#437](https://github.com/Matysh/houseplan-card/issues/437)).
## v1.73.0-beta.6 — 2026-09-08
+41
View File
@@ -0,0 +1,41 @@
export type SettledSoftStage = {
headerHeight: number | null;
size: [number, number];
};
/** Measure the card-owned chrome plus the bounded HA chrome above the card. */
export function measuredCardHeaderHeight(
root: ParentNode,
stage: HTMLElement,
panelHost: boolean,
): number | null {
const card = root.querySelector<HTMLElement>('ha-card');
if (!card) return null;
const cardRect = card.getBoundingClientRect();
const own = stage.getBoundingClientRect().top - cardRect.top;
const above = panelHost ? 0 : Math.min(Math.max(cardRect.top, 0), 120);
const height = Math.round(own + above);
return height >= 0 ? height : null;
}
/**
* Stop the passive post-boot height transition synchronously. Camera commands
* run in the same input event, so they must see the final stage box rather
* than wait for Lit and ResizeObserver to reconcile it on later frames.
*/
export function settleSoftStageLayout(
root: ParentNode,
stage: HTMLElement | null,
panelHost: boolean,
kiosk: boolean,
): SettledSoftStage | null {
if (!stage) return null;
const headerHeight = measuredCardHeaderHeight(root, stage, panelHost);
if (!panelHost && !kiosk && headerHeight !== null) {
stage.style.height = `calc(100dvh - ${headerHeight}px)`;
}
stage.classList.remove('hpsettle');
stage.getBoundingClientRect();
if (stage.clientWidth <= 0 || stage.clientHeight <= 0) return null;
return { headerHeight, size: [stage.clientWidth, stage.clientHeight] };
}
+20 -20
View File
@@ -321,7 +321,7 @@ import {
import {
CameraTransitionController, cameraTargetAtAnchor, sameCameraState,
type CameraState, type CameraTransitionReason, type CameraTransitionState,
} from './viewport-transition';
} from './viewport-transition'; import { measuredCardHeaderHeight, settleSoftStageLayout } from './boot-soft-layout';
import {
acceptedRoomFitGesture, DoubleFitGestureRecognizer, roomFitCameraTarget,
roomFitClampFrame,
@@ -1219,7 +1219,7 @@ export class HouseplanCard extends LitElement {
* short structural transition first so two controllers never write `_view`
* in the same frame. */
private _prepareCameraCommand(): void {
if (this._modeTransitionBusy) this._cancelModeTransition(true);
this._bootSoftCancel(); if (this._modeTransitionBusy) this._cancelModeTransition(true);
if (this._tool === 'opening') {
this._cursorPt = null;
this._clearOpeningPlacement(false);
@@ -4139,12 +4139,7 @@ export class HouseplanCard extends LitElement {
const hdr = this.renderRoot.querySelector('.hdr') as HTMLElement | null;
if (hdr && stage && !this._roHdr) {
const measure = () => {
const card = this.renderRoot.querySelector('ha-card');
if (!card) return;
const own = stage.getBoundingClientRect().top - card.getBoundingClientRect().top;
const above = this.panelHost ? 0
: Math.min(Math.max(card.getBoundingClientRect().top, 0), 120);
const t = Math.round(own + above);
const t = measuredCardHeaderHeight(this.renderRoot, stage, this.panelHost); if (t === null) return;
// `t` is already an integer. Ignoring a one-pixel delta left the View
// stage one pixel shorter after an editor collapse and made the fitted
// viewport drift; changing stage height cannot feed back into its top.
@@ -6558,13 +6553,18 @@ export class HouseplanCard extends LitElement {
this._bootSoftTimer = window.setTimeout(() => { this._bootSoft = false; }, BOOT_SOFT_MS);
}
/** The soft grace only covers PASSIVE late chrome. A user action that
* changes the stage height (entering/leaving an editor) must apply
* instantly — the plan may not drift under the pointer mid-drag. */
/** The soft grace only covers PASSIVE late chrome. A user action must
* consume the final layout instantly — the plan may neither drift under
* the pointer nor derive a camera target from an intermediate height. */
private _bootSoftCancel(): void {
if (!this._bootSoft) return;
clearTimeout(this._bootSoftTimer);
this._bootSoft = false;
const settled = settleSoftStageLayout(this.renderRoot, this._stageEl, this.panelHost, this._kiosk);
if (!settled) return; if (settled.headerHeight !== null) this._hdrH = settled.headerHeight;
if (this._refitRaf) { cancelAnimationFrame(this._refitRaf); this._refitRaf = 0; }
this._pendingRefitSize = null; this._lastValidStageSize = settled.size; const current = this._view;
if (current) this._applyView(this._zoom, current.x + current.w / 2, current.y + current.h / 2);
}
/** Hold the last complete frame after a long sleep; never hide the scene. */
@@ -6585,14 +6585,12 @@ export class HouseplanCard extends LitElement {
/** Recompute the view for a new scene size, preserving zoom and center. */
private _refitView(): void {
if (this._modeTransitionBusy || this._warmModeRequest) return;
// Resize is structural: keep the currently painted camera, cancel its old
// target, then let the existing refit path own the new stage geometry.
this._cancelCameraTransition(false);
const stage = this._stageEl;
// ResizeObserver may deliver a zero/transitional box while a browser tab
// is frozen or while Lovelace replaces the card. Mutating `_view` from
// that box is the scale jump observed on return.
if (!stage || document.visibilityState !== 'visible' || stage.clientWidth <= 0 || stage.clientHeight <= 0) {
this._cancelCameraTransition(false);
if (!this._viewportInvalidAt) this._viewportInvalidAt = Date.now();
return;
}
@@ -6603,6 +6601,13 @@ export class HouseplanCard extends LitElement {
&& Math.abs(previous[1] - size[1]) <= 0.5;
const invalidFor = this._viewportInvalidAt ? Date.now() - this._viewportInvalidAt : 0;
this._viewportInvalidAt = 0;
// A no-op delivery must not cancel a camera command just started by input.
if (sameSize) {
this._pendingRefitSize = null;
return;
}
// A real resize is structural and owns the new stage geometry.
this._cancelCameraTransition(false);
if (!previous) {
this._lastValidStageSize = size;
if (this._roomFocus?.spaceId === this._space) {
@@ -6610,11 +6615,6 @@ export class HouseplanCard extends LitElement {
} else if (!this._view) this._applyView(this._zoom);
return;
}
// 0x0 -> the same positive size is explicitly a no-op.
if (sameSize) {
this._pendingRefitSize = null;
return;
}
this._pendingRefitSize = size;
if (this._refitRaf) return;
this._refitRaf = requestAnimationFrame(() => {
@@ -6788,7 +6788,7 @@ export class HouseplanCard extends LitElement {
}
private _stagePointerDown(ev: PointerEvent): void {
const roomId = ev.isPrimary && ev.button === 0 && this._mode === 'view' ? roomFitOwnerFromPath(ev.composedPath()) : null;
this._bootSoftCancel(); const roomId = ev.isPrimary && ev.button === 0 && this._mode === 'view' ? roomFitOwnerFromPath(ev.composedPath()) : null;
this._roomPointer = roomId
? { pointerId: ev.pointerId, spaceId: this._space, roomId }
: null;
+49
View File
@@ -0,0 +1,49 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import {
measuredCardHeaderHeight,
settleSoftStageLayout,
} from '../test-build/boot-soft-layout.js';
const fixture = ({ width = 780, height = 669 } = {}) => {
const removed = [];
const card = { getBoundingClientRect: () => ({ top: 8 }) };
const stage = {
clientWidth: width,
clientHeight: height,
style: { height: '' },
classList: { remove: (name) => removed.push(name) },
getBoundingClientRect: () => ({ top: 131 }),
};
const root = { querySelector: (selector) => selector === 'ha-card' ? card : null };
return { card, stage, root, removed };
};
test('#437 measures card and bounded dashboard chrome without using stage height', () => {
const { root, stage } = fixture();
assert.equal(measuredCardHeaderHeight(root, stage, false), 131);
assert.equal(measuredCardHeaderHeight(root, stage, true), 123);
});
test('#437 first input synchronously consumes the final soft-layout stage box', () => {
const { root, stage, removed } = fixture();
assert.deepEqual(settleSoftStageLayout(root, stage, false, false), {
headerHeight: 131,
size: [780, 669],
});
assert.equal(stage.style.height, 'calc(100dvh - 131px)');
assert.deepEqual(removed, ['hpsettle']);
});
test('#437 panel, kiosk and invalid boxes never invent a dashboard height', () => {
const panel = fixture();
assert.deepEqual(settleSoftStageLayout(panel.root, panel.stage, true, false)?.size, [780, 669]);
assert.equal(panel.stage.style.height, '');
const kiosk = fixture();
settleSoftStageLayout(kiosk.root, kiosk.stage, false, true);
assert.equal(kiosk.stage.style.height, '');
const invalid = fixture({ width: 0 });
assert.equal(settleSoftStageLayout(invalid.root, invalid.stage, false, false), null);
assert.deepEqual(invalid.removed, ['hpsettle']);
});
+1 -1
View File
@@ -26,7 +26,7 @@
"src/space-geometry.ts", "src/junction-limits.ts",
"src/space-order.ts", "src/card-editor-validation.ts",
"src/signing.ts", "src/initial-load.ts", "src/space-model-selection.ts", "src/space-dialog.ts",
"src/visual-continuity.ts", "src/version-recovery.ts", "src/version-recovery-card.ts", "src/mode-transition.ts", "src/viewport-transition.ts", "src/room-fit.ts", "src/editor-runtime-loader.ts", "src/editor-secondary.ts", "src/pointer-modality.ts",
"src/visual-continuity.ts", "src/version-recovery.ts", "src/version-recovery-card.ts", "src/mode-transition.ts", "src/viewport-transition.ts", "src/boot-soft-layout.ts", "src/room-fit.ts", "src/editor-runtime-loader.ts", "src/editor-secondary.ts", "src/pointer-modality.ts",
"src/render-device-snapshot.ts", "src/render-invalidation.ts", "src/houseplan-render-lifecycle.ts", "src/live-interaction-runtime.ts", "src/live-viewport.ts", "src/live-hover.ts", "src/live-editor.ts", "src/pointer-move-queue.ts",
"src/command-stack.ts", "src/device-position-history.ts",
"src/coordinate-canonicalization.ts",