Prepare v1.76.0-beta.1

Prepare the first beta after stable v1.75.0 from the exact integrated dev
tree. Version sources, bilingual changelogs, release notes, status and both
committed bundle snapshots move together.

Pinned local proof: Node 22.23.2 and Python 3.14.7; npm test 2618 passed,
0 failed, 1 skipped; production bundle sync and budget passed; config reload,
pan coverage, post-write adoption and summary-panel browser smokes passed;
targeted pure backend 197 passed. Bundle headroom is 12,830 B, below the
warning threshold but inside the enforced ceiling.

Issue: #541
Issue: #542
Issue: #543
Issue: #544
Issue: #545
Issue: #546
Issue: #547
Issue: #548
Issue: #549
Issue: #550
Issue: #551
Issue: #553
Issue: #554
Issue: #555
Issue: #557
Issue: #561
Issue: #562
User-Visible: yes
Release: v1.76.0-beta.1
This commit is contained in:
Sergey Matyunin
2026-09-13 16:15:37 +03:00
parent d5e0c49198
commit 66bf277da2
52 changed files with 384 additions and 378 deletions
+1 -1
View File
@@ -57,7 +57,7 @@ SCHEDULED_GRACE_S = 30 * 24 * 3600
FILES_DIR = "houseplan/files"
ASSETS_DIR = "houseplan/assets"
CONF_ADMIN_ONLY = "admin_only"
VERSION = "1.75.0"
VERSION = "1.76.0-beta.1"
DECOR_ASSETS_API_VERSION = 1
SUMMARY_PANEL_API_VERSION = 1
@@ -1,311 +1,311 @@
{
"schema": 1,
"fingerprint": "7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403",
"fingerprint": "293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 288240,
"initialViewGzipBytes": 288236,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 289763,
"initialPanelGzipBytes": 289758,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2328,
"initialPanelOnlyGzipBytes": 2326,
"lazyFiles": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/de-PVicgu8H.js",
"houseplan-assets/editor-KW_7e0X6.js",
"houseplan-assets/fr-Bcbp4NLX.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js",
"houseplan-assets/hp-zigbee-topology-overlay-C7sDjKUn.js",
"houseplan-assets/iso-scene-render-BPDEp3nh.js",
"houseplan-assets/live-interaction-runtime-BBPN6W4s.js",
"houseplan-assets/pdf-export-tbCdeZ1O.js",
"houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js",
"houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/de-Diw0u3Rp.js",
"houseplan-assets/editor-CfWb1PrW.js",
"houseplan-assets/fr-CPQOeFpN.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js",
"houseplan-assets/hp-zigbee-topology-overlay-BvLrNA1u.js",
"houseplan-assets/iso-scene-render-B9hu-vxe.js",
"houseplan-assets/live-interaction-runtime-CeR3xrjm.js",
"houseplan-assets/pdf-export-BX8qvQmp.js",
"houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js",
"houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js"
],
"lazyGzipBytes": 417855,
"lazyGzipBytes": 417840,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/editor-KW_7e0X6.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/editor-CfWb1PrW.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js"
],
"lazyEditorGzipBytes": 204999,
"lazyEditorGzipBytes": 204997,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js"
],
"lazyOnboardingGzipBytes": 13920,
"lazyOnboardingGzipBytes": 13914,
"lazyLocaleFiles": [
"houseplan-assets/de-PVicgu8H.js",
"houseplan-assets/fr-Bcbp4NLX.js"
"houseplan-assets/de-Diw0u3Rp.js",
"houseplan-assets/fr-CPQOeFpN.js"
],
"lazyLocaleGzipBytes": 54821,
"lazyIsometricFiles": [
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/iso-scene-render-BPDEp3nh.js"
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/iso-scene-render-B9hu-vxe.js"
],
"lazyIsometricGzipBytes": 13458,
"lazyIsometricGzipBytes": 13456,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js"
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js"
],
"lazyFurnitureArtGzipBytes": 10254,
"lazyFurnitureArtGzipBytes": 10252,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/pdf-export-tbCdeZ1O.js"
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/pdf-export-BX8qvQmp.js"
],
"lazyPdfGzipBytes": 120127,
"lazyPdfGzipBytes": 120123,
"files": [
{
"path": "houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"sha256": "5ac69178ff558d5a286e430377719eab9da5570847138e6bc7918deaec9347b6",
"path": "houseplan-assets/backdrop-pick-CQxoq0qA.js",
"sha256": "60188764f7c24223f093735fe044efb2b41f611cb43dfb5e7028e2bcef498ea9",
"rawBytes": 19956,
"gzipBytes": 6881,
"gzipBytes": 6877,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-PVicgu8H.js",
"sha256": "39d8cd23996b09192ed23da739726abd57c8c1607aeceecc9b262884c1559422",
"path": "houseplan-assets/de-Diw0u3Rp.js",
"sha256": "aea3509180766d54513003a7d6d18d3aefde2d00247445af099bcb8026c9871a",
"rawBytes": 91402,
"gzipBytes": 27693,
"gzipBytes": 27695,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-KW_7e0X6.js",
"sha256": "3bc6b0af0176df4a0b3ffb42c775ee4faacb77177ea90278662554adfcfbb3b1",
"path": "houseplan-assets/editor-CfWb1PrW.js",
"sha256": "d5787981b891853920144395ecb2d9dc31f354325027853a8f58c58c866f15d9",
"rawBytes": 3832,
"gzipBytes": 1585,
"gzipBytes": 1584,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-Bcbp4NLX.js",
"sha256": "a91918ed8aa499ae784703c8fb621f20945302635d3a6083809522b13ca315ed",
"path": "houseplan-assets/fr-CPQOeFpN.js",
"sha256": "e2b231c25e391fb270ac1f3ddbee16f588b9c60515337289ec8688ca70370d61",
"rawBytes": 93667,
"gzipBytes": 27128,
"gzipBytes": 27126,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"sha256": "e4cf879989b7bb1bdb9398c5a12a4d0d226dcc3fe8280cb0e0669ac85e8ba470",
"path": "houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"sha256": "1197227bfce78dda577f6b7eb3b4eb252d54a4c2f33c6c26b471b629cb6d4d38",
"rawBytes": 33655,
"gzipBytes": 10254,
"gzipBytes": 10252,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/guard-Bu7iGCp-.js",
"sha256": "b5fc40aadd99b49a4e6186bca658ea0a62f3a65d0b387e50ffc7a4c9c368bc05",
"path": "houseplan-assets/guard-C0tnMJTa.js",
"sha256": "6640d5133c05975567da91d7f9f499b6347238e0acaf0e5b5a35d89b4818a1ee",
"rawBytes": 518,
"gzipBytes": 370,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-D5-gQL2X.js",
"sha256": "6fba78b33c6aac2c0fda8ed387cc5b3b4f67c576963e03b5afdb092d3d61b250",
"rawBytes": 1023948,
"gzipBytes": 287435,
"path": "houseplan-assets/houseplan-card-B3XEsyr7.js",
"sha256": "8d4de802d98eaed758c85e9bdd64ea2baab826257f87d32bf0127134e807bd2d",
"rawBytes": 1023955,
"gzipBytes": 287432,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-PVicgu8H.js",
"houseplan-assets/editor-KW_7e0X6.js",
"houseplan-assets/fr-Bcbp4NLX.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js",
"houseplan-assets/hp-zigbee-topology-overlay-C7sDjKUn.js",
"houseplan-assets/iso-scene-render-BPDEp3nh.js",
"houseplan-assets/live-interaction-runtime-BBPN6W4s.js",
"houseplan-assets/pdf-export-tbCdeZ1O.js",
"houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js"
"houseplan-assets/de-Diw0u3Rp.js",
"houseplan-assets/editor-CfWb1PrW.js",
"houseplan-assets/fr-CPQOeFpN.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js",
"houseplan-assets/hp-zigbee-topology-overlay-BvLrNA1u.js",
"houseplan-assets/iso-scene-render-B9hu-vxe.js",
"houseplan-assets/live-interaction-runtime-CeR3xrjm.js",
"houseplan-assets/pdf-export-BX8qvQmp.js",
"houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"sha256": "38fcba7002edf0af1e183f70fdf32477156ffd617d63abb90c5cbf2a11666e21",
"rawBytes": 668813,
"gzipBytes": 178482,
"path": "houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"sha256": "481456d973fb15f03bd784bde71e243fe765b4867f08260e179e9a98f7932273",
"rawBytes": 668820,
"gzipBytes": 178485,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js"
"houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js",
"sha256": "e39fdfe6b9d5d9cbb11f900f3d6a67f7d6bec386f57c6c1d99196fb828c9db24",
"path": "houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js",
"sha256": "b8467cd54a8a91e5c4f421375404dbfd1eee08bfc15cadf7b65358218b42edfe",
"rawBytes": 28287,
"gzipBytes": 7039,
"gzipBytes": 7037,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-C7sDjKUn.js",
"sha256": "3db5de67d73b499285bc7370d8f75e7f7fb796303baeca4fb6ec79a0a56f9f13",
"path": "houseplan-assets/hp-zigbee-topology-overlay-BvLrNA1u.js",
"sha256": "932fb91fc3dee03cadc42e86eaece3b30302b5281221d1510ceb35eb055c5db3",
"rawBytes": 10756,
"gzipBytes": 3682,
"gzipBytes": 3681,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js",
"houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js",
"houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-BPDEp3nh.js",
"sha256": "1217006c56d568aa7a25874b800863c8dfb22445a5aa44d1aa12c99b096725a1",
"path": "houseplan-assets/iso-scene-render-B9hu-vxe.js",
"sha256": "c9ac4db92b7c5e841f6e69413ddee4f67c7428f2965dae11b573007c0f9ec1ff",
"rawBytes": 38562,
"gzipBytes": 13088,
"gzipBytes": 13086,
"isEntry": false,
"imports": [
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-BBPN6W4s.js",
"sha256": "96875d5266d519e27ec7d6c86a14f3fb97002e6e0e40f02ad2cdd2f1e5223814",
"path": "houseplan-assets/live-interaction-runtime-CeR3xrjm.js",
"sha256": "e4f3b624fcddf88527cc8ada3c26dd998083e5988466eed34756e52de4495743",
"rawBytes": 6233,
"gzipBytes": 2498,
"gzipBytes": 2497,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-tbCdeZ1O.js",
"sha256": "9db8fd5014d17a2e56bd5eede91f31ad70884f2c598bbac3c0462fd35887a9a5",
"path": "houseplan-assets/pdf-export-BX8qvQmp.js",
"sha256": "4ae62389b3be7663a4802f238dd112f40bddb1fe8d771c4ff7360448dd7de523",
"rawBytes": 236244,
"gzipBytes": 109873,
"gzipBytes": 109871,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-BST7KUGK.js",
"sha256": "475289de9cff31d1c6e619a06a19031c4a54c1e32d74545e650c0254e6aae160",
"path": "houseplan-assets/summary-panel-editor-DD0wPqdJ.js",
"sha256": "d8e54137ebe776944b721a5013cf9bd2dc3b8b13d362caedcff1b85fd5297a65",
"rawBytes": 14824,
"gzipBytes": 3401,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-Dzc2iD0Z.js",
"sha256": "3f09e0e8e033329f8cdeb5f31b185e7fa736724dbb77fb4a53cf1d673bbe3700",
"path": "houseplan-assets/summary-panel-metrics-BrUz5zW0.js",
"sha256": "15bfb467d54c95d9b657ba88868a4136f961b9469de824355bcbda5cb6a575a5",
"rawBytes": 2610,
"gzipBytes": 1308,
"gzipBytes": 1306,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js",
"sha256": "a5dcac0399a9162f21cc57336e9752368e69262e2bab8cdae2fdeac6900a5252",
"path": "houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js",
"sha256": "4cb95e9082b1190fb9f0fbb735615fd779d76264f68792185038ac376d37b4ad",
"rawBytes": 73366,
"gzipBytes": 20090,
"gzipBytes": 20087,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-BST7KUGK.js",
"houseplan-assets/summary-panel-metrics-Dzc2iD0Z.js"
"houseplan-assets/summary-panel-editor-DD0wPqdJ.js",
"houseplan-assets/summary-panel-metrics-BrUz5zW0.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-fKHn1P2M.js",
"sha256": "bf0c9cd5abce367727baa339909de64245f9e27ae6c1a65139a45d95242953aa",
"path": "houseplan-assets/zigbee-topology-CfTA4hD2.js",
"sha256": "46ac22029841797cb019f1dfc825b3f2c9e941a8426d0061add1479fcae0d0f3",
"rawBytes": 18961,
"gzipBytes": 7427,
"gzipBytes": 7429,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js",
"sha256": "8de9bd6b736a02a162e4653b1903dd15afa8f1cec14b378d6c0d59d6ab782448",
"path": "houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js",
"sha256": "92da75128f25ec34e0de3ac0e734aeed00f4a22e6ec0a3234c75ddd868ef9e36",
"rawBytes": 3941,
"gzipBytes": 1765,
"gzipBytes": 1763,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "92b18eb40d7bd7bca662dfa50a0b71c2724bc638ab4950564e65b7141897acfe",
"sha256": "fff30e508787dc5b04e8687b19e8ac5dda96d47e30f3a4f3fdc822743594afee",
"rawBytes": 1205,
"gzipBytes": 805,
"gzipBytes": 804,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "0b030b81fa969889d7bdcca00711c8c712766b0abddca8338cacb31426d44733",
"sha256": "51b08a92f4980d86a1b5d6318e560310df5aad5fa8cba4425c02db4753501172",
"rawBytes": 6165,
"gzipBytes": 2328,
"gzipBytes": 2326,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
}
@@ -1,14 +1,14 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{m as e,l as o,t,e3 as s,A as a,e4 as i,e5 as l,e6 as n,dU as r,b as c}from"./houseplan-card-D5-gQL2X.js";class f extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,f={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},h=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{m as e,l as o,t,e3 as s,A as a,e4 as i,e5 as l,e6 as n,dU as r,b as c}from"./houseplan-card-B3XEsyr7.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
.hass=${this.hass}
.data=${this._formData}
.schema=${e}
.computeLabel=${e=>f[e.name]||e.name}
.computeLabel=${e=>h[e.name]||e.name}
@value-changed=${this._valueChanged}
></ha-form>`;return c`
${d(h.slice(0,3))}
${d(f.slice(0,3))}
${_?c`<div class="default-floor-error" role="alert"
style="color:var(--error-color,#db4437);margin:-4px 0 12px;overflow-wrap:anywhere">
${t(s,"editor.default_floor_missing",{id:_})}
</div>`:a}
${d(h.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}f.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",f);
${d(f.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}h.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",h);
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{dS as r,dT as t,dU as e}from"./houseplan-card-D5-gQL2X.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};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{dS as r,dT as t,dU as e}from"./houseplan-card-B3XEsyr7.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__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{l as t,b0 as s,A as e,t as a,b as o,cj as l,ck as i,cl as h,cm as c,aZ as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,ct as m,cu as b,dp as $,dq as f,dr as v,aY as y,a_ as w,ds as D}from"./houseplan-card-D5-gQL2X.js";import{c as k,e as S,r as C,a as M}from"./backdrop-pick-Cx1rzHVm.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?o`<hp-help data-help-key=${l}
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{l as t,b0 as s,A as e,t as a,b as o,cj as l,ck as i,cl as h,cm as c,aZ as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,ct as m,cu as b,dp as $,dq as v,dr as f,aY as y,a_ as w,ds as D}from"./houseplan-card-B3XEsyr7.js";import{c as k,e as S,r as C,a as M}from"./backdrop-pick-CQxoq0qA.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?o`<hp-help data-help-key=${l}
.text=${a(h,l)} .ariaLabel=${a(h,i)}></hp-help>`:e}_openSpaceDialog(t,s){if(!this.host._serverStorage||!this.host._serverCfg)return void this.host._showToast(this.host._t("toast.integration_missing"));if("edit"===t){const e=this.host._serverCfg.spaces.find(t=>t.id===s);if(!e)return;const a=l(e),o=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===a.fill?{...o||h,a:0}:o;return void(this.host._spaceDialog={mode:t,spaceId:s,title:e.title,planUrl:e.plan_url||null,planFile:null,source:e.plan_url?"file":"draw",showBorders:a.showBorders,showNames:a.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:a.hideDecor,hideOpenings:a.hideOpenings,roomColor:a.color,roomOpacity:a.opacity,fillMode:"none"===a.fill?"custom":a.fill,customFill:p,glowEnabled:a.glow,bgColor:a.bgColor,bgMode:"static"===e.settings?.bg_mode||"daynight"===e.settings?.bg_mode?e.settings.bg_mode:null,northDeg:n({},e.settings),sunRays:"boolean"==typeof e.settings?.sun_rays?e.settings.sun_rays:null,tempMin:a.tempMin,tempMax:a.tempMax,showLqi:a.showLqi??this.host._config?.show_signal??!0,cardFontScale:a.cardFontScale,labelTemp:a.labelTemp,labelHum:a.labelHum,labelLqi:a.labelLqi,labelLight:a.labelLight,cellCm:Number(e.cell_cm)>0?Number(e.cell_cm):5,cellCmInput:c(Number(e.cell_cm)>0?Number(e.cell_cm):5,this.host._imperial),cellCmTouched:!1,busy:!1})}const e=p(this.host._imperial);this.host._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...m(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:{...h,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:_,tempMax:d,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:e,cellCmInput:c(e,this.host._imperial),cellCmTouched:!1,busy:!1}}async _pickPlanFile(t){const s=t.target,e=s.files?.[0];if(!e||!this.host._spaceDialog)return;s.value="";const a=await k(e);if("reject"===a.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===a.kind)return void(this.host._backdropGuard=a.state);const o=await S(e,a.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:o})}_renderBackdropGuard(){return C(this.host,t=>{this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:t})},()=>{this.host._backdropGuard=null},this.host.hass)??e}_useServerPlan(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this.host._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let s=0;s<40;s++){const s=this.host._display(t);if(s){const e=await new Promise(t=>{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:0),e.onerror=()=>t(0),e.src=s}),a=this.host._spaceDialog;return a&&a.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...a,savedAspect:e},e):0}if(await new Promise(t=>setTimeout(t,150)),this.host._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){const s=this.host._spaceDialog,e=s?.saved?.find(s=>s.name===t);if(!s||!e||e.used_by.length||e.url===s.planUrl)return;const a=await this.host._confirmDanger({key:"delete-plan",kind:"destructive",title:this.host._t("confirm.delete_plan_title"),message:this.host._t("confirm.delete_plan_body"),objectName:t,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),o=this.host._spaceDialog,l=o?.saved?.find(s=>s.name===t);if(a&&o&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==o.planUrl)try{await this.host.hass.callWS({type:"houseplan/plans/delete",name:t});const s=this.host._spaceDialog;s?.saved&&(this.host._spaceDialog={...s,saved:s.saved.filter(s=>s.name!==t)})}catch(t){this.host._showToast(this.host._t("toast.plan_delete_failed",{err:this.host._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return o`<div class="savedplans muted">${this.host._t("space.loading")}</div>`;const s=t.saved||[];if(!s.length)return o`<div class="savedplans muted">${this.host._t("space.no_saved")}</div>`;return o`<div class="savedplans">
${s.map(s=>{return o`
<div class="savedplan ${s.url===t.planUrl?"cur":""}">
@@ -85,13 +85,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc7
max=${c(F,this.host._imperial)}
step="0.1"
.value=${t.cellCmInput??c(t.cellCm,this.host._imperial)}
@input=${s=>{const e=s.target.value,a=x(e),o=null==a?null:f(a,this.host._imperial);this.host._spaceDialog={...t,cellCmInput:e,cellCmTouched:!0,cellCm:null!=o&&o>0?Math.max(.1,Math.min(F,o)):t.cellCm}}} />
@input=${s=>{const e=s.target.value,a=x(e),o=null==a?null:v(a,this.host._imperial);this.host._spaceDialog={...t,cellCmInput:e,cellCmTouched:!0,cellCm:null!=o&&o>0?Math.max(.1,Math.min(F,o)):t.cellCm}}} />
<span class="opl">${this.host._t(this.host._imperial?"space.scale_unit_imperial":"space.scale_unit")}</span>
</div>
<label class="dispsection">${this.host._t("space.display_section")}</label>
<label class="srcrow">
${this._boolInput(t.showBorders,s=>{this.host._spaceDialog=v(t,"showBorders",s)})}
${this._boolInput(t.showBorders,s=>{this.host._spaceDialog=f(t,"showBorders",s)})}
<span>${this.host._t("space.show_borders")}</span>
</label>
<div class="helpfieldlabel">
@@ -107,7 +107,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc7
</option>
</select>
<label class="srcrow">
${this._boolInput(t.showNames,s=>{this.host._spaceDialog=v(t,"showNames",s)})}
${this._boolInput(t.showNames,s=>{this.host._spaceDialog=f(t,"showNames",s)})}
<span>${this.host._t("space.show_names")}</span>
</label>
<label class="srcrow">
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{b as a,A as e}from"./houseplan-card-D5-gQL2X.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-BDfwbReH.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__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{b as a,A as e}from"./houseplan-card-B3XEsyr7.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-CmbY2LK7.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__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{e9 as e,L as t,a2 as n,J as i,an as o,N as r,bo as s,bn as a,a1 as l,a0 as c,ax as u,ea as d,eb as f,bq as m,ec as g}from"./houseplan-card-D5-gQL2X.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=u(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 o=String(i.binding||"").indexOf(":");if(o<1)continue;const r=i.binding.slice(0,o),s=i.binding.slice(o+1),a="device"===r?e.registry.devices?.[s]:null,l="entity"===r?e.registry.entities?.[s]:null,c="device"===r?s:l?.device_id,u="device"===r?a?.area_id:l?.area_id||c&&e.registry.devices?.[c]?.area_id,d="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||u||"",f=d&&e.areaToSpace[d]||i.space||e.firstSpaceId;c&&e.registry.devices?.[c]&&e.spaceIds.has(f)&&(!n.devices.has(c)||"entity"===r&&n.liveEntities.has(s))&&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,o,r);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:c(e.rooms,t.walls,t.openCuts,i,t.cellCm,o,r)}}function*b(l,c,u=_){try{let d=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=u(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const a=t(e);if(!a)continue;const l=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,o,r,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(l,m.physicalBodies)),yield}const _=m.cellCm/o;d+=a(v)*_*_/1e4}return d}catch{return null}}function h(e,t,n=_){const i=b(e,t,n);let o=i.next();for(;!o.done;)o=i.next();return o.value}function p(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=d(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{b as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,p as summarySystemValue,h as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{e9 as e,L as t,a2 as n,J as i,an as o,N as r,bo as s,bn as a,a1 as c,a0 as l,ax as u,ea as d,eb as f,bq as m,ec as g}from"./houseplan-card-B3XEsyr7.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=u(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 o=String(i.binding||"").indexOf(":");if(o<1)continue;const r=i.binding.slice(0,o),s=i.binding.slice(o+1),a="device"===r?e.registry.devices?.[s]:null,c="entity"===r?e.registry.entities?.[s]:null,l="device"===r?s:c?.device_id,u="device"===r?a?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,d="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||u||"",f=d&&e.areaToSpace[d]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===r&&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,o,r);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:l(e.rooms,t.walls,t.openCuts,i,t.cellCm,o,r)}}function*b(c,l,u=_){try{let d=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=u(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,o,r,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(c,m.physicalBodies)),yield}const _=m.cellCm/o;d+=a(v)*_*_/1e4}return d}catch{return null}}function h(e,t,n=_){const i=b(e,t,n);let o=i.next();for(;!o.done;)o=i.next();return o.value}function p(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=d(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{b as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,p as summarySystemValue,h as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{n as t,b as n}from"./zigbee-topology-fKHn1P2M.js";import{B as e}from"./houseplan-card-D5-gQL2X.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};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{n as t,b as n}from"./zigbee-topology-CfTA4hD2.js";import{B as e}from"./houseplan-card-B3XEsyr7.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};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";try{await import("./houseplan-assets/houseplan-card-D5-gQL2X.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__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";try{await import("./houseplan-assets/houseplan-card-B3XEsyr7.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
+1 -1
View File
@@ -20,5 +20,5 @@
"issue_tracker": "https://github.com/Matysh/houseplan-card/issues",
"requirements": [],
"single_config_entry": true,
"version": "1.75.0"
"version": "1.76.0-beta.1"
}
+141 -141
View File
@@ -1,311 +1,311 @@
{
"schema": 1,
"fingerprint": "7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403",
"fingerprint": "293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 288240,
"initialViewGzipBytes": 288236,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 289763,
"initialPanelGzipBytes": 289758,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2328,
"initialPanelOnlyGzipBytes": 2326,
"lazyFiles": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/de-PVicgu8H.js",
"houseplan-assets/editor-KW_7e0X6.js",
"houseplan-assets/fr-Bcbp4NLX.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js",
"houseplan-assets/hp-zigbee-topology-overlay-C7sDjKUn.js",
"houseplan-assets/iso-scene-render-BPDEp3nh.js",
"houseplan-assets/live-interaction-runtime-BBPN6W4s.js",
"houseplan-assets/pdf-export-tbCdeZ1O.js",
"houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js",
"houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/de-Diw0u3Rp.js",
"houseplan-assets/editor-CfWb1PrW.js",
"houseplan-assets/fr-CPQOeFpN.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js",
"houseplan-assets/hp-zigbee-topology-overlay-BvLrNA1u.js",
"houseplan-assets/iso-scene-render-B9hu-vxe.js",
"houseplan-assets/live-interaction-runtime-CeR3xrjm.js",
"houseplan-assets/pdf-export-BX8qvQmp.js",
"houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js",
"houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js"
],
"lazyGzipBytes": 417855,
"lazyGzipBytes": 417840,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/editor-KW_7e0X6.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/editor-CfWb1PrW.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js"
],
"lazyEditorGzipBytes": 204999,
"lazyEditorGzipBytes": 204997,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js"
],
"lazyOnboardingGzipBytes": 13920,
"lazyOnboardingGzipBytes": 13914,
"lazyLocaleFiles": [
"houseplan-assets/de-PVicgu8H.js",
"houseplan-assets/fr-Bcbp4NLX.js"
"houseplan-assets/de-Diw0u3Rp.js",
"houseplan-assets/fr-CPQOeFpN.js"
],
"lazyLocaleGzipBytes": 54821,
"lazyIsometricFiles": [
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/iso-scene-render-BPDEp3nh.js"
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/iso-scene-render-B9hu-vxe.js"
],
"lazyIsometricGzipBytes": 13458,
"lazyIsometricGzipBytes": 13456,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js"
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js"
],
"lazyFurnitureArtGzipBytes": 10254,
"lazyFurnitureArtGzipBytes": 10252,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/pdf-export-tbCdeZ1O.js"
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/pdf-export-BX8qvQmp.js"
],
"lazyPdfGzipBytes": 120127,
"lazyPdfGzipBytes": 120123,
"files": [
{
"path": "houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"sha256": "5ac69178ff558d5a286e430377719eab9da5570847138e6bc7918deaec9347b6",
"path": "houseplan-assets/backdrop-pick-CQxoq0qA.js",
"sha256": "60188764f7c24223f093735fe044efb2b41f611cb43dfb5e7028e2bcef498ea9",
"rawBytes": 19956,
"gzipBytes": 6881,
"gzipBytes": 6877,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-PVicgu8H.js",
"sha256": "39d8cd23996b09192ed23da739726abd57c8c1607aeceecc9b262884c1559422",
"path": "houseplan-assets/de-Diw0u3Rp.js",
"sha256": "aea3509180766d54513003a7d6d18d3aefde2d00247445af099bcb8026c9871a",
"rawBytes": 91402,
"gzipBytes": 27693,
"gzipBytes": 27695,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-KW_7e0X6.js",
"sha256": "3bc6b0af0176df4a0b3ffb42c775ee4faacb77177ea90278662554adfcfbb3b1",
"path": "houseplan-assets/editor-CfWb1PrW.js",
"sha256": "d5787981b891853920144395ecb2d9dc31f354325027853a8f58c58c866f15d9",
"rawBytes": 3832,
"gzipBytes": 1585,
"gzipBytes": 1584,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-Bcbp4NLX.js",
"sha256": "a91918ed8aa499ae784703c8fb621f20945302635d3a6083809522b13ca315ed",
"path": "houseplan-assets/fr-CPQOeFpN.js",
"sha256": "e2b231c25e391fb270ac1f3ddbee16f588b9c60515337289ec8688ca70370d61",
"rawBytes": 93667,
"gzipBytes": 27128,
"gzipBytes": 27126,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"sha256": "e4cf879989b7bb1bdb9398c5a12a4d0d226dcc3fe8280cb0e0669ac85e8ba470",
"path": "houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"sha256": "1197227bfce78dda577f6b7eb3b4eb252d54a4c2f33c6c26b471b629cb6d4d38",
"rawBytes": 33655,
"gzipBytes": 10254,
"gzipBytes": 10252,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/guard-Bu7iGCp-.js",
"sha256": "b5fc40aadd99b49a4e6186bca658ea0a62f3a65d0b387e50ffc7a4c9c368bc05",
"path": "houseplan-assets/guard-C0tnMJTa.js",
"sha256": "6640d5133c05975567da91d7f9f499b6347238e0acaf0e5b5a35d89b4818a1ee",
"rawBytes": 518,
"gzipBytes": 370,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-D5-gQL2X.js",
"sha256": "6fba78b33c6aac2c0fda8ed387cc5b3b4f67c576963e03b5afdb092d3d61b250",
"rawBytes": 1023948,
"gzipBytes": 287435,
"path": "houseplan-assets/houseplan-card-B3XEsyr7.js",
"sha256": "8d4de802d98eaed758c85e9bdd64ea2baab826257f87d32bf0127134e807bd2d",
"rawBytes": 1023955,
"gzipBytes": 287432,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-PVicgu8H.js",
"houseplan-assets/editor-KW_7e0X6.js",
"houseplan-assets/fr-Bcbp4NLX.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js",
"houseplan-assets/hp-zigbee-topology-overlay-C7sDjKUn.js",
"houseplan-assets/iso-scene-render-BPDEp3nh.js",
"houseplan-assets/live-interaction-runtime-BBPN6W4s.js",
"houseplan-assets/pdf-export-tbCdeZ1O.js",
"houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js"
"houseplan-assets/de-Diw0u3Rp.js",
"houseplan-assets/editor-CfWb1PrW.js",
"houseplan-assets/fr-CPQOeFpN.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js",
"houseplan-assets/hp-zigbee-topology-overlay-BvLrNA1u.js",
"houseplan-assets/iso-scene-render-B9hu-vxe.js",
"houseplan-assets/live-interaction-runtime-CeR3xrjm.js",
"houseplan-assets/pdf-export-BX8qvQmp.js",
"houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-BopXHnLy.js",
"sha256": "38fcba7002edf0af1e183f70fdf32477156ffd617d63abb90c5cbf2a11666e21",
"rawBytes": 668813,
"gzipBytes": 178482,
"path": "houseplan-assets/houseplan-editor-runtime-EMzdfb0p.js",
"sha256": "481456d973fb15f03bd784bde71e243fe765b4867f08260e179e9a98f7932273",
"rawBytes": 668820,
"gzipBytes": 178485,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js"
"houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-B1rwTEl5.js",
"sha256": "e39fdfe6b9d5d9cbb11f900f3d6a67f7d6bec386f57c6c1d99196fb828c9db24",
"path": "houseplan-assets/houseplan-onboarding-runtime-BWzpAk8U.js",
"sha256": "b8467cd54a8a91e5c4f421375404dbfd1eee08bfc15cadf7b65358218b42edfe",
"rawBytes": 28287,
"gzipBytes": 7039,
"gzipBytes": 7037,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-Cx1rzHVm.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/backdrop-pick-CQxoq0qA.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-C7sDjKUn.js",
"sha256": "3db5de67d73b499285bc7370d8f75e7f7fb796303baeca4fb6ec79a0a56f9f13",
"path": "houseplan-assets/hp-zigbee-topology-overlay-BvLrNA1u.js",
"sha256": "932fb91fc3dee03cadc42e86eaece3b30302b5281221d1510ceb35eb055c5db3",
"rawBytes": 10756,
"gzipBytes": 3682,
"gzipBytes": 3681,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js",
"houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js",
"houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-BPDEp3nh.js",
"sha256": "1217006c56d568aa7a25874b800863c8dfb22445a5aa44d1aa12c99b096725a1",
"path": "houseplan-assets/iso-scene-render-B9hu-vxe.js",
"sha256": "c9ac4db92b7c5e841f6e69413ddee4f67c7428f2965dae11b573007c0f9ec1ff",
"rawBytes": 38562,
"gzipBytes": 13088,
"gzipBytes": 13086,
"isEntry": false,
"imports": [
"houseplan-assets/guard-Bu7iGCp-.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/guard-C0tnMJTa.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-BBPN6W4s.js",
"sha256": "96875d5266d519e27ec7d6c86a14f3fb97002e6e0e40f02ad2cdd2f1e5223814",
"path": "houseplan-assets/live-interaction-runtime-CeR3xrjm.js",
"sha256": "e4f3b624fcddf88527cc8ada3c26dd998083e5988466eed34756e52de4495743",
"rawBytes": 6233,
"gzipBytes": 2498,
"gzipBytes": 2497,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-tbCdeZ1O.js",
"sha256": "9db8fd5014d17a2e56bd5eede91f31ad70884f2c598bbac3c0462fd35887a9a5",
"path": "houseplan-assets/pdf-export-BX8qvQmp.js",
"sha256": "4ae62389b3be7663a4802f238dd112f40bddb1fe8d771c4ff7360448dd7de523",
"rawBytes": 236244,
"gzipBytes": 109873,
"gzipBytes": 109871,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-DMUROwB0.js",
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/furniture-plan-art.generated-GQ00oM_7.js",
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-BST7KUGK.js",
"sha256": "475289de9cff31d1c6e619a06a19031c4a54c1e32d74545e650c0254e6aae160",
"path": "houseplan-assets/summary-panel-editor-DD0wPqdJ.js",
"sha256": "d8e54137ebe776944b721a5013cf9bd2dc3b8b13d362caedcff1b85fd5297a65",
"rawBytes": 14824,
"gzipBytes": 3401,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-Dzc2iD0Z.js",
"sha256": "3f09e0e8e033329f8cdeb5f31b185e7fa736724dbb77fb4a53cf1d673bbe3700",
"path": "houseplan-assets/summary-panel-metrics-BrUz5zW0.js",
"sha256": "15bfb467d54c95d9b657ba88868a4136f961b9469de824355bcbda5cb6a575a5",
"rawBytes": 2610,
"gzipBytes": 1308,
"gzipBytes": 1306,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-BDfwbReH.js",
"sha256": "a5dcac0399a9162f21cc57336e9752368e69262e2bab8cdae2fdeac6900a5252",
"path": "houseplan-assets/summary-panel-runtime-loaded-CmbY2LK7.js",
"sha256": "4cb95e9082b1190fb9f0fbb735615fd779d76264f68792185038ac376d37b4ad",
"rawBytes": 73366,
"gzipBytes": 20090,
"gzipBytes": 20087,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-BST7KUGK.js",
"houseplan-assets/summary-panel-metrics-Dzc2iD0Z.js"
"houseplan-assets/summary-panel-editor-DD0wPqdJ.js",
"houseplan-assets/summary-panel-metrics-BrUz5zW0.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-fKHn1P2M.js",
"sha256": "bf0c9cd5abce367727baa339909de64245f9e27ae6c1a65139a45d95242953aa",
"path": "houseplan-assets/zigbee-topology-CfTA4hD2.js",
"sha256": "46ac22029841797cb019f1dfc825b3f2c9e941a8426d0061add1479fcae0d0f3",
"rawBytes": 18961,
"gzipBytes": 7427,
"gzipBytes": 7429,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-SCMmk9F0.js",
"sha256": "8de9bd6b736a02a162e4653b1903dd15afa8f1cec14b378d6c0d59d6ab782448",
"path": "houseplan-assets/zigbee-topology-runtime-DmT0AkWm.js",
"sha256": "92da75128f25ec34e0de3ac0e734aeed00f4a22e6ec0a3234c75ddd868ef9e36",
"rawBytes": 3941,
"gzipBytes": 1765,
"gzipBytes": 1763,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js",
"houseplan-assets/zigbee-topology-fKHn1P2M.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js",
"houseplan-assets/zigbee-topology-CfTA4hD2.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "92b18eb40d7bd7bca662dfa50a0b71c2724bc638ab4950564e65b7141897acfe",
"sha256": "fff30e508787dc5b04e8687b19e8ac5dda96d47e30f3a4f3fdc822743594afee",
"rawBytes": 1205,
"gzipBytes": 805,
"gzipBytes": 804,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "0b030b81fa969889d7bdcca00711c8c712766b0abddca8338cacb31426d44733",
"sha256": "51b08a92f4980d86a1b5d6318e560310df5aad5fa8cba4425c02db4753501172",
"rawBytes": 6165,
"gzipBytes": 2328,
"gzipBytes": 2326,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-D5-gQL2X.js"
"houseplan-assets/houseplan-card-B3XEsyr7.js"
],
"dynamicImports": []
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,14 +1,14 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{m as e,l as o,t,e3 as s,A as a,e4 as i,e5 as l,e6 as n,dU as r,b as c}from"./houseplan-card-D5-gQL2X.js";class f extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,f={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},h=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{m as e,l as o,t,e3 as s,A as a,e4 as i,e5 as l,e6 as n,dU as r,b as c}from"./houseplan-card-B3XEsyr7.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
.hass=${this.hass}
.data=${this._formData}
.schema=${e}
.computeLabel=${e=>f[e.name]||e.name}
.computeLabel=${e=>h[e.name]||e.name}
@value-changed=${this._valueChanged}
></ha-form>`;return c`
${d(h.slice(0,3))}
${d(f.slice(0,3))}
${_?c`<div class="default-floor-error" role="alert"
style="color:var(--error-color,#db4437);margin:-4px 0 12px;overflow-wrap:anywhere">
${t(s,"editor.default_floor_missing",{id:_})}
</div>`:a}
${d(h.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}f.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",f);
${d(f.slice(3))}
`}_valueChanged(e){const o={...this._config,...e.detail.value};""===o.floor?delete o.floor:o.floor===this._floorToken&&(o.floor=this._config?.floor);const t=new Event("config-changed",{bubbles:!0,composed:!0});t.detail={config:o},this.dispatchEvent(t)}}h.properties={hass:{attribute:!1},_config:{state:!0},_spaces:{state:!0}},customElements.get("houseplan-card-editor")||customElements.define("houseplan-card-editor",h);
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{dS as r,dT as t,dU as e}from"./houseplan-card-D5-gQL2X.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};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{dS as r,dT as t,dU as e}from"./houseplan-card-B3XEsyr7.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
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{l as t,b0 as s,A as e,t as a,b as o,cj as l,ck as i,cl as h,cm as c,aZ as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,ct as m,cu as b,dp as $,dq as f,dr as v,aY as y,a_ as w,ds as D}from"./houseplan-card-D5-gQL2X.js";import{c as k,e as S,r as C,a as M}from"./backdrop-pick-Cx1rzHVm.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?o`<hp-help data-help-key=${l}
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{l as t,b0 as s,A as e,t as a,b as o,cj as l,ck as i,cl as h,cm as c,aZ as n,cn as r,cs as p,co as d,cp as _,cq as u,cr as g,ct as m,cu as b,dp as $,dq as v,dr as f,aY as y,a_ as w,ds as D}from"./houseplan-card-B3XEsyr7.js";import{c as k,e as S,r as C,a as M}from"./backdrop-pick-CQxoq0qA.js";const F=1e3,x=t=>{if(!t.trim())return null;const s=Number(t.replace(",","."));return Number.isFinite(s)?s:null},T="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";class L{constructor(t){this.host=t,this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:t?.plans||[],savedBusy:!1})}catch(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}}}_help(l){const i=`${l}.aria`,h=t(this.host.hass,this.host._config?.language);return s(h,l)&&s(h,i)?o`<hp-help data-help-key=${l}
.text=${a(h,l)} .ariaLabel=${a(h,i)}></hp-help>`:e}_openSpaceDialog(t,s){if(!this.host._serverStorage||!this.host._serverCfg)return void this.host._showToast(this.host._t("toast.integration_missing"));if("edit"===t){const e=this.host._serverCfg.spaces.find(t=>t.id===s);if(!e)return;const a=l(e),o=e.settings?.custom_fill&&"object"==typeof e.settings.custom_fill?i(e.settings.custom_fill):null,p="none"===a.fill?{...o||h,a:0}:o;return void(this.host._spaceDialog={mode:t,spaceId:s,title:e.title,planUrl:e.plan_url||null,planFile:null,source:e.plan_url?"file":"draw",showBorders:a.showBorders,showNames:a.showNames,zeroWallStyle:r(e),displayTouched:!0,hideDecor:a.hideDecor,hideOpenings:a.hideOpenings,roomColor:a.color,roomOpacity:a.opacity,fillMode:"none"===a.fill?"custom":a.fill,customFill:p,glowEnabled:a.glow,bgColor:a.bgColor,bgMode:"static"===e.settings?.bg_mode||"daynight"===e.settings?.bg_mode?e.settings.bg_mode:null,northDeg:n({},e.settings),sunRays:"boolean"==typeof e.settings?.sun_rays?e.settings.sun_rays:null,tempMin:a.tempMin,tempMax:a.tempMax,showLqi:a.showLqi??this.host._config?.show_signal??!0,cardFontScale:a.cardFontScale,labelTemp:a.labelTemp,labelHum:a.labelHum,labelLqi:a.labelLqi,labelLight:a.labelLight,cellCm:Number(e.cell_cm)>0?Number(e.cell_cm):5,cellCmInput:c(Number(e.cell_cm)>0?Number(e.cell_cm):5,this.host._imperial),cellCmTouched:!1,busy:!1})}const e=p(this.host._imperial);this.host._spaceDialog={mode:t,title:"",planUrl:null,planFile:null,...m(),hideDecor:!1,hideOpenings:!1,zeroWallStyle:"dashed",roomColor:g,roomOpacity:u,fillMode:"custom",customFill:{...h,a:0},glowEnabled:!0,bgColor:null,bgMode:"daynight",northDeg:null,sunRays:null,tempMin:_,tempMax:d,showLqi:this.host._config?.show_signal??!0,cardFontScale:1,labelTemp:!1,labelHum:!1,labelLqi:!1,labelLight:!1,cellCm:e,cellCmInput:c(e,this.host._imperial),cellCmTouched:!1,busy:!1}}async _pickPlanFile(t){const s=t.target,e=s.files?.[0];if(!e||!this.host._spaceDialog)return;s.value="";const a=await k(e);if("reject"===a.kind)return void this.host._showToast(this.host._t("toast.plan_formats"));if("guard"===a.kind)return void(this.host._backdropGuard=a.state);const o=await S(e,a.ext,e.name);this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:o})}_renderBackdropGuard(){return C(this.host,t=>{this.host._spaceDialog&&(this.host._spaceDialog={...this.host._spaceDialog,planFile:t})},()=>{this.host._backdropGuard=null},this.host.hass)??e}_useServerPlan(t){const s=this.host._spaceDialog;s&&(this.host._spaceDialog={...s,planUrl:t,planFile:null,pickSaved:!1,savedAspect:void 0},this.host._aspectJob=this._readPlanAspect(t))}async _readPlanAspect(t){for(let s=0;s<40;s++){const s=this.host._display(t);if(s){const e=await new Promise(t=>{const e=new Image;e.onload=()=>t(e.naturalWidth&&e.naturalHeight?e.naturalWidth/e.naturalHeight:0),e.onerror=()=>t(0),e.src=s}),a=this.host._spaceDialog;return a&&a.planUrl===t&&Number.isFinite(e)&&e>0?(this.host._spaceDialog={...a,savedAspect:e},e):0}if(await new Promise(t=>setTimeout(t,150)),this.host._spaceDialog?.planUrl!==t)return 0}return 0}async _deleteServerPlan(t){const s=this.host._spaceDialog,e=s?.saved?.find(s=>s.name===t);if(!s||!e||e.used_by.length||e.url===s.planUrl)return;const a=await this.host._confirmDanger({key:"delete-plan",kind:"destructive",title:this.host._t("confirm.delete_plan_title"),message:this.host._t("confirm.delete_plan_body"),objectName:t,confirmLabel:this.host._t("btn.delete"),cancelLabel:this.host._t("btn.cancel")}),o=this.host._spaceDialog,l=o?.saved?.find(s=>s.name===t);if(a&&o&&l&&l.url===e.url&&l.modified===e.modified&&!l.used_by.length&&l.url!==o.planUrl)try{await this.host.hass.callWS({type:"houseplan/plans/delete",name:t});const s=this.host._spaceDialog;s?.saved&&(this.host._spaceDialog={...s,saved:s.saved.filter(s=>s.name!==t)})}catch(t){this.host._showToast(this.host._t("toast.plan_delete_failed",{err:this.host._errText(t)}))}}_renderServerPlans(t){if(t.savedBusy)return o`<div class="savedplans muted">${this.host._t("space.loading")}</div>`;const s=t.saved||[];if(!s.length)return o`<div class="savedplans muted">${this.host._t("space.no_saved")}</div>`;return o`<div class="savedplans">
${s.map(s=>{return o`
<div class="savedplan ${s.url===t.planUrl?"cur":""}">
@@ -85,13 +85,13 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc7
max=${c(F,this.host._imperial)}
step="0.1"
.value=${t.cellCmInput??c(t.cellCm,this.host._imperial)}
@input=${s=>{const e=s.target.value,a=x(e),o=null==a?null:f(a,this.host._imperial);this.host._spaceDialog={...t,cellCmInput:e,cellCmTouched:!0,cellCm:null!=o&&o>0?Math.max(.1,Math.min(F,o)):t.cellCm}}} />
@input=${s=>{const e=s.target.value,a=x(e),o=null==a?null:v(a,this.host._imperial);this.host._spaceDialog={...t,cellCmInput:e,cellCmTouched:!0,cellCm:null!=o&&o>0?Math.max(.1,Math.min(F,o)):t.cellCm}}} />
<span class="opl">${this.host._t(this.host._imperial?"space.scale_unit_imperial":"space.scale_unit")}</span>
</div>
<label class="dispsection">${this.host._t("space.display_section")}</label>
<label class="srcrow">
${this._boolInput(t.showBorders,s=>{this.host._spaceDialog=v(t,"showBorders",s)})}
${this._boolInput(t.showBorders,s=>{this.host._spaceDialog=f(t,"showBorders",s)})}
<span>${this.host._t("space.show_borders")}</span>
</label>
<div class="helpfieldlabel">
@@ -107,7 +107,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc7
</option>
</select>
<label class="srcrow">
${this._boolInput(t.showNames,s=>{this.host._spaceDialog=v(t,"showNames",s)})}
${this._boolInput(t.showNames,s=>{this.host._spaceDialog=f(t,"showNames",s)})}
<span>${this.host._t("space.show_names")}</span>
</label>
<label class="srcrow">
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__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{b as a,A as e}from"./houseplan-card-D5-gQL2X.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-BDfwbReH.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__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{b as a,A as e}from"./houseplan-card-B3XEsyr7.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-CmbY2LK7.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__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{e9 as e,L as t,a2 as n,J as i,an as o,N as r,bo as s,bn as a,a1 as l,a0 as c,ax as u,ea as d,eb as f,bq as m,ec as g}from"./houseplan-card-D5-gQL2X.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=u(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 o=String(i.binding||"").indexOf(":");if(o<1)continue;const r=i.binding.slice(0,o),s=i.binding.slice(o+1),a="device"===r?e.registry.devices?.[s]:null,l="entity"===r?e.registry.entities?.[s]:null,c="device"===r?s:l?.device_id,u="device"===r?a?.area_id:l?.area_id||c&&e.registry.devices?.[c]?.area_id,d="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||u||"",f=d&&e.areaToSpace[d]||i.space||e.firstSpaceId;c&&e.registry.devices?.[c]&&e.spaceIds.has(f)&&(!n.devices.has(c)||"entity"===r&&n.liveEntities.has(s))&&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,o,r);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:c(e.rooms,t.walls,t.openCuts,i,t.cellCm,o,r)}}function*b(l,c,u=_){try{let d=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=u(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const a=t(e);if(!a)continue;const l=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,o,r,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(l,m.physicalBodies)),yield}const _=m.cellCm/o;d+=a(v)*_*_/1e4}return d}catch{return null}}function h(e,t,n=_){const i=b(e,t,n);let o=i.next();for(;!o.done;)o=i.next();return o.value}function p(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=d(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{b as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,p as summarySystemValue,h as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{e9 as e,L as t,a2 as n,J as i,an as o,N as r,bo as s,bn as a,a1 as c,a0 as l,ax as u,ea as d,eb as f,bq as m,ec as g}from"./houseplan-card-B3XEsyr7.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=u(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 o=String(i.binding||"").indexOf(":");if(o<1)continue;const r=i.binding.slice(0,o),s=i.binding.slice(o+1),a="device"===r?e.registry.devices?.[s]:null,c="entity"===r?e.registry.entities?.[s]:null,l="device"===r?s:c?.device_id,u="device"===r?a?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,d="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||u||"",f=d&&e.areaToSpace[d]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===r&&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,o,r);return{roomGeom:"ok"===n.status||"degraded-extra"===n.status?n.roomGeom:void 0,multiWallNodes:l(e.rooms,t.walls,t.openCuts,i,t.cellCm,o,r)}}function*b(c,l,u=_){try{let d=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=u(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,o,r,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(c,m.physicalBodies)),yield}const _=m.cellCm/o;d+=a(v)*_*_/1e4}return d}catch{return null}}function h(e,t,n=_){const i=b(e,t,n);let o=i.next();for(;!o.done;)o=i.next();return o.value}function p(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=d(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{b as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,p as summarySystemValue,h as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";import{n as t,b as n}from"./zigbee-topology-fKHn1P2M.js";import{B as e}from"./houseplan-card-D5-gQL2X.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};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";import{n as t,b as n}from"./zigbee-topology-CfTA4hD2.js";import{B as e}from"./houseplan-card-B3XEsyr7.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};
+1 -1
View File
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="7f691ad2ff5e047357a9b8fe67f0b6b29bc78a50cf6ba022564655ed43f9b403";try{await import("./houseplan-assets/houseplan-card-D5-gQL2X.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__="293f2f5c2037e02cc88485ababe84a1c82f0134f9ded671bb6324e000218c7b6";try{await import("./houseplan-assets/houseplan-card-B3XEsyr7.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
+2
View File
@@ -2,6 +2,8 @@
## Unreleased
## v1.76.0-beta.1 — 2026-09-13
- Summary-panel visibility and size preferences no longer move between House
Plan cards after a full Masonry reload at another width. Masonry cards now
use their logical dashboard order instead of visual columns; because the old
+2
View File
@@ -8,6 +8,8 @@
## Не выпущено
## v1.76.0-beta.1 — 2026-09-13
- Видимость и размеры сводной панели больше не переходят между карточками
House Plan после полной перезагрузки Masonry на другой ширине. Теперь
карточки различаются по логическому порядку в дашборде, а не по визуальным
+7 -5
View File
@@ -1,16 +1,18 @@
<!-- release: v1.75.0 -->
<!-- release: v1.76.0-beta.1 -->
## Основное
- Пункт меню House Plan больше не застревает на прошлой версии карточки: он тянул её по единственному адресу без версии, и браузер был вправе часами отдавать копию из кэша ([#535](https://github.com/Matysh/houseplan-card/issues/535)).
- План больше не откатывается к старой версии из-за запоздавшей загрузки подложки и не показывает пустую полосу у входящего края при перетаскивании и масштабировании ([#543](https://github.com/Matysh/houseplan-card/issues/543), [#544](https://github.com/Matysh/houseplan-card/issues/544)).
- Настройки видимости и размера сводной панели больше не переходят между карточками House Plan после полной перезагрузки Masonry ([#561](https://github.com/Matysh/houseplan-card/issues/561)).
- Мелкие исправления и улучшения.
## Highlights
- The House Plan sidebar page no longer gets stuck on a previous version of the card: it fetched the card through the one address that carries no version, and a browser was free to serve a cached copy for hours ([#535](https://github.com/Matysh/houseplan-card/issues/535)).
- The plan no longer rolls back to an older version because a background image loaded late, and dragging or pinching no longer reveals a blank strip along the incoming edge ([#543](https://github.com/Matysh/houseplan-card/issues/543), [#544](https://github.com/Matysh/houseplan-card/issues/544)).
- Summary-panel visibility and size preferences no longer move between House Plan cards after a full Masonry reload ([#561](https://github.com/Matysh/houseplan-card/issues/561)).
- Small fixes and improvements.
Сообщество / Community: [Telegram](https://t.me/ha_houseplan)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.75.0/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.75.0/docs/CHANGELOG.md)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.76.0-beta.1/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.76.0-beta.1/docs/CHANGELOG.md)
+2 -2
View File
@@ -21,8 +21,8 @@ metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
| Item | State |
|---|---|
| Version | **v1.75.0** everywhere (manifest, const.py, package.json, package-lock in both places, CARD_VERSION in the card and the editor runtime) |
| Current local cycle | **Stable v1.75.0** — `main` is fast-forwarded to the tested `dev` SHA and the GitHub Release is public. The line aggregates from the stable v1.74.0 and carries one user-visible fix: the House Plan sidebar page could serve a previous version of the card for hours, because the panel entry fetched it through `./houseplan-card.js` — a relative specifier, and relative resolution does not inherit the `?v=` a dashboard gets from its Lovelace resource, while the entry files carry no `Cache-Control` at all. The panel now imports the implementation by its content-hashed name, so either the matching card arrives or the panel says out loud that the page is stale (#535). Internal in the line: #536 — the version banner asks the host to repaint when it drops the notice on disconnect, instead of relying on an unrelated update. Shipped as v1.75.0-beta.1 the same day; the stable is promotion-only on top of it. Known contradiction found while publishing: `scripts/release-contract.mjs` requires the grouped "small fixes" bullet unconditionally, while `npm run release:notes -- <tag> --verify` rejects it when every user-visible issue of the range is already itemised — the two rules deadlock any stable with a single user-visible issue. The contract won here because it is the automated gate; the verifier was run and its objection recorded rather than silenced. The banner still offers only "reload the page", which cannot help when the frontend is newer than the backend (files updated, Home Assistant not restarted) — not yet an issue. **Known gap of the public v1.75.0:** it carries `houseplan.zip` only — `release-zip.yml` uploaded the ZIP the moment the release was published, while `release.yml` withheld `houseplan-card.js` because Full Performance was red on that SHA (#537). The next patch release delivers the card asset and is the first live run of the single publisher from #540; a repair of v1.75.0 itself is impossible by design — the gates on `2c6410bb` stay red. |
| Version | **v1.76.0-beta.1** everywhere (manifest, const.py, package.json, package-lock in both places, CARD_VERSION in the card and the editor runtime) |
| Current local cycle | **Beta v1.76.0-beta.1 candidate** — the first beta after stable v1.75.0 is prepared from `dev`; `main` remains on v1.75.0. User-visible fixes keep the newest accepted plan and its instant-start cache together during overlapping reloads (#543), keep the already rendered scene covering the card throughout pan and pinch gestures (#544), restore the complete radar source inventory in preview and permission checks (#545), avoid double-counting a staged attachment against the disk reserve (#554), and give Masonry cards stable summary-panel preference identities across reloads (#561). Internal work in the candidate unifies exact-SHA CI proof and its inputs (#541, #542, #548), hardens mutation and nightly execution (#549, #550), makes review waits, stages, reconciliation and process documentation deterministic (#546, #551, #553, #555, #562), binds beta bookkeeping to immutable candidate membership (#547), and pins reproducible local Windows/WSL toolchains (#557). |
| Hidden Alpha Stage | #89 Stage 1 ships in v1.63.0-beta.1, #122 Stage 2 in v1.64.0 and #160 Stage 3 in v1.73.0-beta.1. The same hidden `iso` view uses the fixed 4° camera, raised/tethered device-room-lock overlays, deeper openings and bounded theme materials; #471 removes the overlay plates from paint while retaining their safety geometry. Since #448 the experiment is enabled only through the single indefinite browser-local `hp_alpha` gate; it is not expiring and has no per-stage key. Flat remains default; editors, `houseplan-space-card`, floor effects, stored coordinates and HA actions remain unchanged. Stage 3 stays internal and is absent from public changelog/user documentation. |
| Workflow | Superseded 2026-08-12: the pre-1.62 rule of "local edits without tests or commits" is **dead** — since release 1.62 every product change follows `PROCESS.md` (issue in `S5-ready`+, branch `issue/<NN>-slug`, trailers on every commit, review pipeline; `AGENTS.md` is the summary). Release mechanics below remain current. A requested pre-release gets a production build plus the smallest targeted unit/smoke set covering the changed surfaces, one tested `dev` commit/tag and a GitHub Release with `prerelease=true`; `main` stays untouched. The complete local frontend/backend/smoke gate runs only before a stable release, after which `main` is fast-forwarded to the exact tested `dev` SHA and the stable release is produced by `release.yml` (`workflow_dispatch` on `main` with the tag) — the only publisher of installable assets since #540: gates on the exact SHA (Validate, Full Performance, E2E on the candidate commit), one build, `houseplan.zip` archived from the committed tree, `SHA256SUMS`, draft → publish → read-back verification; a release published by hand in the GitHub form is turned back into a draft and walked through the same path, and a re-dispatch on a public tag is a repair that adds only missing assets. Release bodies are short and bilingual (Russian first); every bullet links its GitHub issue (#NN) so the #328 rules stay machine-checkable. A STABLE body aggregates the changelog since the PREVIOUS STABLE release (never since the last beta): features/fixes described across the line's beta changelogs must appear, while bugs that were introduced and fixed strictly inside the beta line (never shipped in any stable) are excluded — draft with `npm run release:notes -- <tag>`, curate by hand, then `npm run release:notes -- <tag> --verify` must pass. `Мелкие исправления и улучшения` / `Small fixes and improvements` is allowed only when the range really contains user-visible work not itemised in the body; a single-issue hotfix ships without it (the verifier enforces this). Every body ends with separate links to the Russian and English changelogs. Open or partially delivered issues are never presented as shipped. Telegram announcements are sent only for stable releases; beta and RC publication is silent. `docs/RELEASE-NOTES.md` is the current canonical body instance; `npm run release:prerelease -- <tag> --issues=… --yes` is the primary local publication path and the manual `Publish prerelease` workflow is its GitHub-only equivalent once present on `main`. Nothing is copied to the home instance by hand |
| GitHub | https://github.com/Matysh/houseplan-card — [Issues](https://github.com/Matysh/houseplan-card/issues) are the canonical task records; their labels carry priority and workflow status (`PROCESS.md` §9). GitHub Projects is no longer used. `main` carries stable releases; pre-release tags may point directly at `dev`. Work lands on `dev` and is merged into `main` for a stable release, so `dev` is normally equal to or ahead of `main`, never behind. Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) |
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "houseplan-card",
"version": "1.75.0",
"version": "1.76.0-beta.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "houseplan-card",
"version": "1.75.0",
"version": "1.76.0-beta.1",
"license": "MIT",
"dependencies": {
"lit": "^3.1.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "houseplan-card",
"version": "1.75.0",
"version": "1.76.0-beta.1",
"description": "Interactive house plan Lovelace card for Home Assistant",
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -423,7 +423,7 @@ import type { MarkerRoomReferenceSnapshot } from './room-reference-transaction';
import { SummaryRuntimeSlot, summaryRuntimeLoader } from './summary-runtime-loader';
import { displayVersion } from './card-version';
const CARD_VERSION = '1.75.0';
const CARD_VERSION = '1.76.0-beta.1';
const ENTRY_BUILD_FINGERPRINT = '__HOUSEPLAN_SOURCE_FINGERPRINT__';
const EDITOR_RETRY_ASSET = '__HOUSEPLAN_EDITOR_RETRY_ASSET__';
const ISO_RETRY_ASSET = '__HOUSEPLAN_ISO_RETRY_ASSET__';
+1 -1
View File
@@ -388,7 +388,7 @@ import {
rewriteMarkerRoomReferences, type MarkerRoomReferenceSnapshot,
} from './room-reference-transaction';
const CARD_VERSION = '1.75.0';
const CARD_VERSION = '1.76.0-beta.1';
// #474: the editor imports the furniture artwork statically and hands it to
// the page runtime the moment this chunk evaluates — before the loader's