Prepare v1.74.0

Seven version sources move together to 1.74.0; both changelogs gain the
stable section aggregated from the previous stable v1.73.0, the release
notes carry three itemised bullets on each side plus the grouped
small-fixes bullet, and STATUS says what this release is.

What the user gets since v1.73.0: the plan is noticeably smoother and in
Firefox dramatically so — a pan frame now moves what is already drawn by
a composited transform with the scene re-rasterizing on a budget (#531),
and a marker shadow sized in container units no longer restarts a
non-composited animation on every marker at once (#524); the printed plan
is about a third larger, because the in-plan dimension labels shrank and
the separate column of external dimensions is gone (#530); a plan left
over from the era of rooms without walls can be edited again, the
leftover cleaned up on the first save instead of refusing every change
(#529, reported in #527). Grouped under small fixes: alignment guides
follow the gesture again (#521), the summary panel neither freezes the
first frame nor claims an unavailable source (#509) and its settings
dialog scrolls again (#508), a space switch no longer replays a
neighbouring door's leaf (#525), and the card downloads 12.8 KB less on a
cold start (#526).

The speed verdict for #531 is deliberately not claimed here: headless
Firefox and Chromium hold 60 fps on both the old and the new path, so it
is owed by a profile from the owner's machine on the same pan.

`npm test` 2528/0/1 skip, `pytest tests_backend` 467 passed, release
notes pass the #328 verifier against v1.73.0..HEAD, bundle 287 242 B gzip
inside the ceiling, docs strict green.

Issue: #531
User-Visible: yes
Release: v1.74.0
This commit is contained in:
Codex
2026-09-11 17:25:52 +03:00
parent f65d07e3ea
commit 116cfd5fef
54 changed files with 558 additions and 478 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.74.0-beta.3"
VERSION = "1.74.0"
DECOR_ASSETS_API_VERSION = 1
SUMMARY_PANEL_API_VERSION = 1
@@ -1,309 +1,309 @@
{
"schema": 1,
"fingerprint": "8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411",
"fingerprint": "dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 287238,
"initialViewGzipBytes": 287242,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-card.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 289543,
"initialPanelGzipBytes": 289548,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2305,
"initialPanelOnlyGzipBytes": 2306,
"lazyFiles": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/de-cN1xqNBp.js",
"houseplan-assets/editor-0nebFM1R.js",
"houseplan-assets/fr-BRAnWlY7.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js",
"houseplan-assets/hp-zigbee-topology-overlay-CuQFr6YO.js",
"houseplan-assets/iso-scene-render-D4T5Ln9m.js",
"houseplan-assets/live-interaction-runtime-DGaswi_s.js",
"houseplan-assets/pdf-export-DbJx2J0X.js",
"houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js",
"houseplan-assets/zigbee-topology-runtime-6YToHmGp.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/de-BAfQ3noX.js",
"houseplan-assets/editor-Ca9vnH-K.js",
"houseplan-assets/fr-a4v8Ohtu.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js",
"houseplan-assets/hp-zigbee-topology-overlay-B_T0ilCj.js",
"houseplan-assets/iso-scene-render-DtlvcvOT.js",
"houseplan-assets/live-interaction-runtime-CjYDG1SP.js",
"houseplan-assets/pdf-export-CY9TOlZ5.js",
"houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js",
"houseplan-assets/zigbee-topology-runtime-Cez46hoy.js"
],
"lazyGzipBytes": 417407,
"lazyGzipBytes": 417431,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/editor-0nebFM1R.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/editor-Ca9vnH-K.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"houseplan-assets/zigbee-topology-DitREaKv.js"
],
"lazyEditorGzipBytes": 204995,
"lazyEditorGzipBytes": 204999,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js"
],
"lazyOnboardingGzipBytes": 13915,
"lazyOnboardingGzipBytes": 13916,
"lazyLocaleFiles": [
"houseplan-assets/de-cN1xqNBp.js",
"houseplan-assets/fr-BRAnWlY7.js"
"houseplan-assets/de-BAfQ3noX.js",
"houseplan-assets/fr-a4v8Ohtu.js"
],
"lazyLocaleGzipBytes": 54817,
"lazyLocaleGzipBytes": 54820,
"lazyIsometricFiles": [
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/iso-scene-render-D4T5Ln9m.js"
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/iso-scene-render-DtlvcvOT.js"
],
"lazyIsometricGzipBytes": 13454,
"lazyIsometricGzipBytes": 13460,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js"
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js"
],
"lazyFurnitureArtGzipBytes": 10253,
"lazyFurnitureArtGzipBytes": 10254,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/pdf-export-DbJx2J0X.js"
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/pdf-export-CY9TOlZ5.js"
],
"lazyPdfGzipBytes": 120125,
"lazyPdfGzipBytes": 120128,
"files": [
{
"path": "houseplan-assets/backdrop-pick-OHGSyjPR.js",
"sha256": "e716ea6112b5c5cf5a4d3220db15951ec75488149315dd79f47ee7682cbb4ed6",
"path": "houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"sha256": "ce22e7599ea095db52bf13da52204107ed2d535fb57f69766e3669dfea1c9ef2",
"rawBytes": 19956,
"gzipBytes": 6878,
"gzipBytes": 6879,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-cN1xqNBp.js",
"sha256": "b7817dd16e7e96fc770cc3b42f6f0a06c22220fbd44114592b3d3179daf97d81",
"path": "houseplan-assets/de-BAfQ3noX.js",
"sha256": "38d0ffe6551c85bc7a5686943679357a726928644136850dc646e0cdd5713bab",
"rawBytes": 91402,
"gzipBytes": 27693,
"gzipBytes": 27694,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-0nebFM1R.js",
"sha256": "ce59bd2090fbded6cc7f91fcb7fe17efe44e23700001ca5e6052f5467e3a130b",
"path": "houseplan-assets/editor-Ca9vnH-K.js",
"sha256": "fd8b9731bc4a417cb0545e06677c836e98fa59a7b28e7cf0345d87c25f4aaed7",
"rawBytes": 3832,
"gzipBytes": 1584,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-BRAnWlY7.js",
"sha256": "f34882262d46c3320f367e6b7145d668ed54245d634b0f2c655d9e462963e21a",
"path": "houseplan-assets/fr-a4v8Ohtu.js",
"sha256": "ccc6ccd7d3736f7567080f000de2dd04ecf60989163720e46d11063cd3ace9ee",
"rawBytes": 93667,
"gzipBytes": 27124,
"gzipBytes": 27126,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"sha256": "a8ebb3ee75656585a33daf0f5e691c34e33a550c9cf1c8c6ceaebaca567e1eec",
"path": "houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"sha256": "d8e59b11da6c8f4a665b33cc6d92e9eb9e2e9ef94fed1071ba5988ce5c98e438",
"rawBytes": 33655,
"gzipBytes": 10253,
"gzipBytes": 10254,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/guard-DJVRnI8K.js",
"sha256": "92414fc45a1d97a94ac958c2fd59798d577c64b200f356f9196078775e40fb54",
"path": "houseplan-assets/guard-BYWHhzjw.js",
"sha256": "b81804f104d25d22dbc909341c48821dbe950aad94054b9512f5322a04fdfc8b",
"rawBytes": 518,
"gzipBytes": 369,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"sha256": "0015e7eead83e70e39e2d8111ac1d88bb2beb47087392dcb62afde9db6613bd1",
"rawBytes": 1021003,
"gzipBytes": 286436,
"path": "houseplan-assets/houseplan-card-DEVy5dLN.js",
"sha256": "d8cf65be7367f51ed4c8069825965c002036ec16321e3dc83dce1638ec7d2565",
"rawBytes": 1020996,
"gzipBytes": 286437,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-cN1xqNBp.js",
"houseplan-assets/editor-0nebFM1R.js",
"houseplan-assets/fr-BRAnWlY7.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js",
"houseplan-assets/hp-zigbee-topology-overlay-CuQFr6YO.js",
"houseplan-assets/iso-scene-render-D4T5Ln9m.js",
"houseplan-assets/live-interaction-runtime-DGaswi_s.js",
"houseplan-assets/pdf-export-DbJx2J0X.js",
"houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js"
"houseplan-assets/de-BAfQ3noX.js",
"houseplan-assets/editor-Ca9vnH-K.js",
"houseplan-assets/fr-a4v8Ohtu.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js",
"houseplan-assets/hp-zigbee-topology-overlay-B_T0ilCj.js",
"houseplan-assets/iso-scene-render-DtlvcvOT.js",
"houseplan-assets/live-interaction-runtime-CjYDG1SP.js",
"houseplan-assets/pdf-export-CY9TOlZ5.js",
"houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"sha256": "bc95d18b7fdfb05ae87e7b165ee5db032afbeddd9053362b1eea5191cda668ac",
"rawBytes": 668820,
"gzipBytes": 178486,
"path": "houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"sha256": "b26691e5ac6338578a23ab3d6c0a774e36c4e708f2bb4a48894ab7e4b0ca7c96",
"rawBytes": 668813,
"gzipBytes": 178484,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-6YToHmGp.js"
"houseplan-assets/zigbee-topology-runtime-Cez46hoy.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js",
"sha256": "ea396e8dfac0eee38bc0b4075e59ced542b4ba497958f61d128ddc7eaefeaabb",
"path": "houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js",
"sha256": "e1fc28837937564eee4a602230cdaf3fbabe35703a7ecda43ce74def1159d0b7",
"rawBytes": 28287,
"gzipBytes": 7037,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-CuQFr6YO.js",
"sha256": "e0308e2eefcfd0b70e451f450292526feb882e29ea4184689c2d2fc00b1d8aee",
"path": "houseplan-assets/hp-zigbee-topology-overlay-B_T0ilCj.js",
"sha256": "d9f0676bc0034a3baed8c9108f8799aa261cbabbef86929ef812cd90e0e9e302",
"rawBytes": 10756,
"gzipBytes": 3679,
"gzipBytes": 3684,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js",
"houseplan-assets/zigbee-topology-runtime-6YToHmGp.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js",
"houseplan-assets/zigbee-topology-runtime-Cez46hoy.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-D4T5Ln9m.js",
"sha256": "52cc7d58f5fe2daef6dcb8366698979054905547912a8320697c6b121ce9e085",
"path": "houseplan-assets/iso-scene-render-DtlvcvOT.js",
"sha256": "ad3e8c6b41caf6edc5e3b259dcffa3bff98c0110ae80cbd3bf736d5eccfb7d0f",
"rawBytes": 38562,
"gzipBytes": 13085,
"gzipBytes": 13091,
"isEntry": false,
"imports": [
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-DGaswi_s.js",
"sha256": "dd127e9bbd04c2bf50cbe13e50e170b6639c7a35940ba8ddc08a15e9469ecb07",
"path": "houseplan-assets/live-interaction-runtime-CjYDG1SP.js",
"sha256": "886197ec8207c347463a743dd3a7a2f95bb05efbe4545332a41c12891cc3242e",
"rawBytes": 6032,
"gzipBytes": 2432,
"gzipBytes": 2433,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-DbJx2J0X.js",
"sha256": "fa45e36f2144f5468ae9ba2399b78a1c1930bc691aab4649c70f53a42d3472c8",
"path": "houseplan-assets/pdf-export-CY9TOlZ5.js",
"sha256": "0fa7863db13ffe8d654f35cf25222639be2f6c4ed018941feffde0503da2b425",
"rawBytes": 236244,
"gzipBytes": 109872,
"gzipBytes": 109874,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-BcBlZ6fP.js",
"sha256": "90e40e21948fbc8ca5ae035906a61be4a30ae1ae4881f761aa5ba215ced34648",
"path": "houseplan-assets/summary-panel-editor-DeBQ1tcV.js",
"sha256": "b1bbc6089d46f90c81c295e0305374ca2f2c5fca0322f27d4e9ecb9bb76ead28",
"rawBytes": 14824,
"gzipBytes": 3399,
"gzipBytes": 3401,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-mbpbrsQj.js",
"sha256": "c87231bdf3cb00f8d33c91b39fbd5493fb86e0d5dcc8a7f3bad33b034e63b6ea",
"path": "houseplan-assets/summary-panel-metrics-B3ruGJoU.js",
"sha256": "d68458815e4a7772cd87bf55f1448ba1794c54b1e6c749825f0672952051a93c",
"rawBytes": 2610,
"gzipBytes": 1306,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js",
"sha256": "61d8f0702e62190e87df492887b6b5626b001c508ef81b2292f1cf2f89c5bf5a",
"path": "houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js",
"sha256": "d7d78a52ff91ce0dd1d07eb8e670e931814ef71c969f67069485d1313adeafe4",
"rawBytes": 72272,
"gzipBytes": 19727,
"gzipBytes": 19728,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-BcBlZ6fP.js",
"houseplan-assets/summary-panel-metrics-mbpbrsQj.js"
"houseplan-assets/summary-panel-editor-DeBQ1tcV.js",
"houseplan-assets/summary-panel-metrics-B3ruGJoU.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-P6rW9Go5.js",
"sha256": "3876642f3ae782741851ca2d376db9211eba2ebb2b56ef25bc6af76998ea19df",
"path": "houseplan-assets/zigbee-topology-DitREaKv.js",
"sha256": "d29bb086e6862441a6115d431ed71e4ee0b96201a10bdfedb93d3f11280264ca",
"rawBytes": 18961,
"gzipBytes": 7425,
"gzipBytes": 7430,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-6YToHmGp.js",
"sha256": "a4e36ff3d1a0a8173d90eb40f1beea623824bf997348bcff9dfcfed66cde7d3a",
"path": "houseplan-assets/zigbee-topology-runtime-Cez46hoy.js",
"sha256": "5bb047f1c003a211e0a57f2fa03d37e968144ca741d99b2f3e486ee70e4aa130",
"rawBytes": 3941,
"gzipBytes": 1763,
"gzipBytes": 1765,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "025ac2c351bb0f918ad4a8055b2fc1fe88d87459f965a5b8f435487233286656",
"sha256": "2cf259caacb83ef37c3e5e743f88bcd61a6f48131af71fa565528f409b2f1f82",
"rawBytes": 1205,
"gzipBytes": 802,
"gzipBytes": 805,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "728534e2a8812a41d02b36b7b80365270e9c4d55474aa40426e69294c05e6f00",
"sha256": "02fa46808fbf68c9245ec2b518ec2047953678b13b054a923259f1a8d9e9cb9a",
"rawBytes": 6124,
"gzipBytes": 2305,
"gzipBytes": 2306,
"isEntry": true,
"imports": [
"houseplan-card.js"
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";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-Ctv7H3Ko.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";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-DEVy5dLN.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
.hass=${this.hass}
.data=${this._formData}
.schema=${e}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";import{dS as r,dT as t,dU as s}from"./houseplan-card-DEVy5dLN.js";const e={},a=r(class extends t{constructor(){super(...arguments),this.ot=e}render(r,t){return t()}update(r,[t,e]){if(Array.isArray(t)){if(Array.isArray(this.ot)&&this.ot.length===t.length&&t.every((r,t)=>r===this.ot[t]))return s}else if(this.ot===t)return s;return this.ot=Array.isArray(t)?Array.from(t):t,this.render(t,e)}});export{a as i};
@@ -1 +0,0 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{dS as r,dT as t,dU as e}from"./houseplan-card-Ctv7H3Ko.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__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{b as a,A as e}from"./houseplan-card-Ctv7H3Ko.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-tPVchSOW.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__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";import{b as a,A as e}from"./houseplan-card-DEVy5dLN.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-CB4AHgRN.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__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{e9 as e,L as t,a2 as n,J as i,an as o,N as r,bo as a,bn as s,a1 as c,a0 as l,ax as d,ea as u,eb as f,bq as m,ec as g}from"./houseplan-card-Ctv7H3Ko.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const o=String(i.binding||"").indexOf(":");if(o<1)continue;const r=i.binding.slice(0,o),a=i.binding.slice(o+1),s="device"===r?e.registry.devices?.[a]:null,c="entity"===r?e.registry.entities?.[a]:null,l="device"===r?a:c?.device_id,d="device"===r?s?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===r&&n.liveEntities.has(a))&&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*h(c,l,d=_){try{let u=0;for(const f of l){const l=c.spaces.find(e=>String(e?.id)===f.id);if(!l)continue;const m=e(l,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const s=t(e);if(!s)continue;const c=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,o,r,g.roomGeom,g.multiWallNodes)||s;v=y(v,a(c,m.physicalBodies)),yield}const _=m.cellCm/o;u+=s(v)*_*_/1e4}return u}catch{return null}}function p(e,t,n=_){const i=h(e,t,n);let o=i.next();for(;!o.done;)o=i.next();return o.value}function b(e,t,n,i){if("system"!==e.type)return null;if("device_count"===e.key)return null===t.deviceCount?null:String(t.deviceCount);if("total_area"===e.key)return null===t.areaM2?null:m(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(i||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function S(e,t){const n=e?.states?.[t];if(!n)return null;const i=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{h as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,b as summarySystemValue,p as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";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 d,ea as u,eb as f,bq as m,ec as g}from"./houseplan-card-DEVy5dLN.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const 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,d="device"===r?a?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===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 b(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*_(c,l,d=b){try{let u=0;for(const f of l){const l=c.spaces.find(e=>String(e?.id)===f.id);if(!l)continue;const m=e(l,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const a=t(e);if(!a)continue;const c=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,o,r,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(c,m.physicalBodies)),yield}const b=m.cellCm/o;u+=a(v)*b*b/1e4}return u}catch{return null}}function h(e,t,n=b){const i=_(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=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{_ as cleanFloorAreaSteps,v as representedHaDeviceIds,b as spaceWallGeometry,S as summaryEntityValue,p as summarySystemValue,h as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{n as t,b as n}from"./zigbee-topology-P6rW9Go5.js";import{B as e}from"./houseplan-card-Ctv7H3Ko.js";const o=new WeakMap;function i(t){const n=function(t){const n=t?.connection||t;return!n||"object"!=typeof n&&"function"!=typeof n?null:n}(t);if(!n)return null;let e=o.get(n);return e||(e={revision:0,topologies:[],states:{},listeners:new Set,inflight:new Map},o.set(n,e)),e}function r(t,n,e){t.states={...t.states,[n]:e},function(t){t.revision++;for(const n of t.listeners)n()}(t)}function s(t){const n=t?.code;if("permission"===n||"unsupported"===n||"timeout"===n||"invalid_topic"===n||"invalid_payload"===n)return n;const e=String(t?.message||"").toLowerCase();return e.includes("unauthor")||e.includes("permission")?"permission":e.includes("unknown_command")||e.includes("not found")?"unsupported":"provider"}function a(t){return Object.assign(new Error(t),{code:t})}function c(t,n,e){const o=t.inflight.get(n);if(o)return o;r(t,n,{phase:"loading"});const i=e().then(n=>{if(!n.nodes.length&&n.warnings.some(t=>"invalid_payload"===t.code))throw a("invalid_payload");!function(t,n){t.topologies=[...t.topologies.filter(t=>!(t.provider===n.provider&&t.instanceId===n.instanceId)),n],r(t,"zha"===n.provider?"zha":`z2m:${n.instanceId}`,{phase:"ready",obtainedAt:n.obtainedAt,partial:n.warnings.length>0})}(t,n)}).catch(e=>{r(t,n,{phase:"error",error:s(e)})}).finally(()=>t.inflight.delete(n));return t.inflight.set(n,i),i}function l(t){const n=i(t);return n?{revision:n.revision,topologies:n.topologies,states:n.states}:{revision:0,topologies:[],states:{}}}function u(t,n){const e=i(t);return e?(e.listeners.add(n),()=>e.listeners.delete(n)):()=>{}}function p(t){if(!0!==t?.user?.is_admin)throw a("permission")}function f(n){const e=i(n);return e?c(e,"zha",async()=>{if(p(n),"function"!=typeof n?.callWS)throw a("unsupported");return t(await n.callWS({type:"zha/devices"}))}):Promise.resolve()}function d(t){return null!==t&&"object"==typeof t?t:null}function h(t){const n=d(t),e=n?.payload??t;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}}async function g(t,n){let e;try{return await Promise.race([t,new Promise((t,o)=>{e=globalThis.setTimeout(()=>o(a("timeout")),Math.max(1,n))})])}finally{void 0!==e&&globalThis.clearTimeout(e)}}function m(t,o,r=15e4){const s=i(t);if(!s)return Promise.resolve();const l=e(o);return c(s,`z2m:${l||String(o)}`,async()=>{if(p(t),!l)throw a("invalid_topic");const e=t.connection,o=e?.subscribeMessage;if("function"!=typeof o||"function"!=typeof t?.callService)throw a("unsupported");const i=function(){const t=globalThis.crypto;return"function"==typeof t?.randomUUID?`houseplan-${t.randomUUID()}`:`houseplan-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}(),s=Date.now()+Math.max(1,r);let c=!1,u=null,f=null,m=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{f=t,m=n}),b=[];try{const r=await o.call(e,t=>{!0===d(t)?.retain&&h(t)&&u?.()},{type:"mqtt/subscribe",topic:`${l}/bridge/info`});"function"==typeof r&&b.push(r);const p=await o.call(e,t=>{if(!0===d(t)?.retain)return;const n=h(t);null!==n?n&&function(t){const n=d(t),e=n?.transaction??d(n?.data)?.transaction;return"string"==typeof e||"number"==typeof e?String(e):null}(n)===i&&f?.(n):c&&m?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof p&&b.push(p),await g(y,Math.min(4e3,Math.max(1,s-Date.now()))),c=!0,await t.callService("mqtt","publish",{topic:`${l}/bridge/request/networkmap`,payload:JSON.stringify({type:"raw",routes:!1,transaction:i}),qos:0,retain:!1});const v=await g(w,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of b)try{t()}catch{}}})}export{f as readZhaTopology,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";import{n as t,b as n}from"./zigbee-topology-DitREaKv.js";import{B as e}from"./houseplan-card-DEVy5dLN.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}),b=new Promise((t,n)=>{f=t,m=n}),w=[];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&&w.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&&w.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(b,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of w)try{t()}catch{}}})}export{f as readZhaTopology,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";try{await import("./houseplan-assets/houseplan-card-Ctv7H3Ko.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__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";try{await import("./houseplan-assets/houseplan-card-DEVy5dLN.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.74.0-beta.3"
"version": "1.74.0"
}
+140 -140
View File
@@ -1,309 +1,309 @@
{
"schema": 1,
"fingerprint": "8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411",
"fingerprint": "dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039",
"entry": "houseplan-card.js",
"panelEntry": "houseplan-panel.js",
"initialViewFiles": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-card.js"
],
"initialViewGzipBytes": 287238,
"initialViewGzipBytes": 287242,
"initialPanelFiles": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-card.js",
"houseplan-panel.js"
],
"initialPanelGzipBytes": 289543,
"initialPanelGzipBytes": 289548,
"initialPanelOnlyFiles": [
"houseplan-panel.js"
],
"initialPanelOnlyGzipBytes": 2305,
"initialPanelOnlyGzipBytes": 2306,
"lazyFiles": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/de-cN1xqNBp.js",
"houseplan-assets/editor-0nebFM1R.js",
"houseplan-assets/fr-BRAnWlY7.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js",
"houseplan-assets/hp-zigbee-topology-overlay-CuQFr6YO.js",
"houseplan-assets/iso-scene-render-D4T5Ln9m.js",
"houseplan-assets/live-interaction-runtime-DGaswi_s.js",
"houseplan-assets/pdf-export-DbJx2J0X.js",
"houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js",
"houseplan-assets/zigbee-topology-runtime-6YToHmGp.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/de-BAfQ3noX.js",
"houseplan-assets/editor-Ca9vnH-K.js",
"houseplan-assets/fr-a4v8Ohtu.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js",
"houseplan-assets/hp-zigbee-topology-overlay-B_T0ilCj.js",
"houseplan-assets/iso-scene-render-DtlvcvOT.js",
"houseplan-assets/live-interaction-runtime-CjYDG1SP.js",
"houseplan-assets/pdf-export-CY9TOlZ5.js",
"houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js",
"houseplan-assets/zigbee-topology-runtime-Cez46hoy.js"
],
"lazyGzipBytes": 417407,
"lazyGzipBytes": 417431,
"lazyEditorFiles": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/editor-0nebFM1R.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/editor-Ca9vnH-K.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"houseplan-assets/zigbee-topology-DitREaKv.js"
],
"lazyEditorGzipBytes": 204995,
"lazyEditorGzipBytes": 204999,
"lazyOnboardingFiles": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js"
],
"lazyOnboardingGzipBytes": 13915,
"lazyOnboardingGzipBytes": 13916,
"lazyLocaleFiles": [
"houseplan-assets/de-cN1xqNBp.js",
"houseplan-assets/fr-BRAnWlY7.js"
"houseplan-assets/de-BAfQ3noX.js",
"houseplan-assets/fr-a4v8Ohtu.js"
],
"lazyLocaleGzipBytes": 54817,
"lazyLocaleGzipBytes": 54820,
"lazyIsometricFiles": [
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/iso-scene-render-D4T5Ln9m.js"
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/iso-scene-render-DtlvcvOT.js"
],
"lazyIsometricGzipBytes": 13454,
"lazyIsometricGzipBytes": 13460,
"lazyFurnitureArtFiles": [
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js"
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js"
],
"lazyFurnitureArtGzipBytes": 10253,
"lazyFurnitureArtGzipBytes": 10254,
"lazyPdfFiles": [
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/pdf-export-DbJx2J0X.js"
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/pdf-export-CY9TOlZ5.js"
],
"lazyPdfGzipBytes": 120125,
"lazyPdfGzipBytes": 120128,
"files": [
{
"path": "houseplan-assets/backdrop-pick-OHGSyjPR.js",
"sha256": "e716ea6112b5c5cf5a4d3220db15951ec75488149315dd79f47ee7682cbb4ed6",
"path": "houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"sha256": "ce22e7599ea095db52bf13da52204107ed2d535fb57f69766e3669dfea1c9ef2",
"rawBytes": 19956,
"gzipBytes": 6878,
"gzipBytes": 6879,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/de-cN1xqNBp.js",
"sha256": "b7817dd16e7e96fc770cc3b42f6f0a06c22220fbd44114592b3d3179daf97d81",
"path": "houseplan-assets/de-BAfQ3noX.js",
"sha256": "38d0ffe6551c85bc7a5686943679357a726928644136850dc646e0cdd5713bab",
"rawBytes": 91402,
"gzipBytes": 27693,
"gzipBytes": 27694,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/editor-0nebFM1R.js",
"sha256": "ce59bd2090fbded6cc7f91fcb7fe17efe44e23700001ca5e6052f5467e3a130b",
"path": "houseplan-assets/editor-Ca9vnH-K.js",
"sha256": "fd8b9731bc4a417cb0545e06677c836e98fa59a7b28e7cf0345d87c25f4aaed7",
"rawBytes": 3832,
"gzipBytes": 1584,
"gzipBytes": 1583,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/fr-BRAnWlY7.js",
"sha256": "f34882262d46c3320f367e6b7145d668ed54245d634b0f2c655d9e462963e21a",
"path": "houseplan-assets/fr-a4v8Ohtu.js",
"sha256": "ccc6ccd7d3736f7567080f000de2dd04ecf60989163720e46d11063cd3ace9ee",
"rawBytes": 93667,
"gzipBytes": 27124,
"gzipBytes": 27126,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"sha256": "a8ebb3ee75656585a33daf0f5e691c34e33a550c9cf1c8c6ceaebaca567e1eec",
"path": "houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"sha256": "d8e59b11da6c8f4a665b33cc6d92e9eb9e2e9ef94fed1071ba5988ce5c98e438",
"rawBytes": 33655,
"gzipBytes": 10253,
"gzipBytes": 10254,
"isEntry": false,
"imports": [],
"dynamicImports": []
},
{
"path": "houseplan-assets/guard-DJVRnI8K.js",
"sha256": "92414fc45a1d97a94ac958c2fd59798d577c64b200f356f9196078775e40fb54",
"path": "houseplan-assets/guard-BYWHhzjw.js",
"sha256": "b81804f104d25d22dbc909341c48821dbe950aad94054b9512f5322a04fdfc8b",
"rawBytes": 518,
"gzipBytes": 369,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"sha256": "0015e7eead83e70e39e2d8111ac1d88bb2beb47087392dcb62afde9db6613bd1",
"rawBytes": 1021003,
"gzipBytes": 286436,
"path": "houseplan-assets/houseplan-card-DEVy5dLN.js",
"sha256": "d8cf65be7367f51ed4c8069825965c002036ec16321e3dc83dce1638ec7d2565",
"rawBytes": 1020996,
"gzipBytes": 286437,
"isEntry": false,
"imports": [],
"dynamicImports": [
"houseplan-assets/de-cN1xqNBp.js",
"houseplan-assets/editor-0nebFM1R.js",
"houseplan-assets/fr-BRAnWlY7.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js",
"houseplan-assets/hp-zigbee-topology-overlay-CuQFr6YO.js",
"houseplan-assets/iso-scene-render-D4T5Ln9m.js",
"houseplan-assets/live-interaction-runtime-DGaswi_s.js",
"houseplan-assets/pdf-export-DbJx2J0X.js",
"houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js"
"houseplan-assets/de-BAfQ3noX.js",
"houseplan-assets/editor-Ca9vnH-K.js",
"houseplan-assets/fr-a4v8Ohtu.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js",
"houseplan-assets/hp-zigbee-topology-overlay-B_T0ilCj.js",
"houseplan-assets/iso-scene-render-DtlvcvOT.js",
"houseplan-assets/live-interaction-runtime-CjYDG1SP.js",
"houseplan-assets/pdf-export-CY9TOlZ5.js",
"houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js"
]
},
{
"path": "houseplan-assets/houseplan-editor-runtime-DJmuoV3V.js",
"sha256": "bc95d18b7fdfb05ae87e7b165ee5db032afbeddd9053362b1eea5191cda668ac",
"rawBytes": 668820,
"gzipBytes": 178486,
"path": "houseplan-assets/houseplan-editor-runtime-BVcD08Op.js",
"sha256": "b26691e5ac6338578a23ab3d6c0a774e36c4e708f2bb4a48894ab7e4b0ca7c96",
"rawBytes": 668813,
"gzipBytes": 178484,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js"
],
"dynamicImports": [
"houseplan-assets/zigbee-topology-runtime-6YToHmGp.js"
"houseplan-assets/zigbee-topology-runtime-Cez46hoy.js"
]
},
{
"path": "houseplan-assets/houseplan-onboarding-runtime-Bqmsj5Y2.js",
"sha256": "ea396e8dfac0eee38bc0b4075e59ced542b4ba497958f61d128ddc7eaefeaabb",
"path": "houseplan-assets/houseplan-onboarding-runtime-0ApfaTVi.js",
"sha256": "e1fc28837937564eee4a602230cdaf3fbabe35703a7ecda43ce74def1159d0b7",
"rawBytes": 28287,
"gzipBytes": 7037,
"isEntry": false,
"imports": [
"houseplan-assets/backdrop-pick-OHGSyjPR.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/backdrop-pick-yGeZ_1BL.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/hp-zigbee-topology-overlay-CuQFr6YO.js",
"sha256": "e0308e2eefcfd0b70e451f450292526feb882e29ea4184689c2d2fc00b1d8aee",
"path": "houseplan-assets/hp-zigbee-topology-overlay-B_T0ilCj.js",
"sha256": "d9f0676bc0034a3baed8c9108f8799aa261cbabbef86929ef812cd90e0e9e302",
"rawBytes": 10756,
"gzipBytes": 3679,
"gzipBytes": 3684,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js",
"houseplan-assets/zigbee-topology-runtime-6YToHmGp.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js",
"houseplan-assets/zigbee-topology-runtime-Cez46hoy.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/iso-scene-render-D4T5Ln9m.js",
"sha256": "52cc7d58f5fe2daef6dcb8366698979054905547912a8320697c6b121ce9e085",
"path": "houseplan-assets/iso-scene-render-DtlvcvOT.js",
"sha256": "ad3e8c6b41caf6edc5e3b259dcffa3bff98c0110ae80cbd3bf736d5eccfb7d0f",
"rawBytes": 38562,
"gzipBytes": 13085,
"gzipBytes": 13091,
"isEntry": false,
"imports": [
"houseplan-assets/guard-DJVRnI8K.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/guard-BYWHhzjw.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/live-interaction-runtime-DGaswi_s.js",
"sha256": "dd127e9bbd04c2bf50cbe13e50e170b6639c7a35940ba8ddc08a15e9469ecb07",
"path": "houseplan-assets/live-interaction-runtime-CjYDG1SP.js",
"sha256": "886197ec8207c347463a743dd3a7a2f95bb05efbe4545332a41c12891cc3242e",
"rawBytes": 6032,
"gzipBytes": 2432,
"gzipBytes": 2433,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/pdf-export-DbJx2J0X.js",
"sha256": "fa45e36f2144f5468ae9ba2399b78a1c1930bc691aab4649c70f53a42d3472c8",
"path": "houseplan-assets/pdf-export-CY9TOlZ5.js",
"sha256": "0fa7863db13ffe8d654f35cf25222639be2f6c4ed018941feffde0503da2b425",
"rawBytes": 236244,
"gzipBytes": 109872,
"gzipBytes": 109874,
"isEntry": false,
"imports": [
"houseplan-assets/furniture-plan-art.generated-C1obuP2_.js",
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/furniture-plan-art.generated-CWJaBLIz.js",
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-editor-BcBlZ6fP.js",
"sha256": "90e40e21948fbc8ca5ae035906a61be4a30ae1ae4881f761aa5ba215ced34648",
"path": "houseplan-assets/summary-panel-editor-DeBQ1tcV.js",
"sha256": "b1bbc6089d46f90c81c295e0305374ca2f2c5fca0322f27d4e9ecb9bb76ead28",
"rawBytes": 14824,
"gzipBytes": 3399,
"gzipBytes": 3401,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-metrics-mbpbrsQj.js",
"sha256": "c87231bdf3cb00f8d33c91b39fbd5493fb86e0d5dcc8a7f3bad33b034e63b6ea",
"path": "houseplan-assets/summary-panel-metrics-B3ruGJoU.js",
"sha256": "d68458815e4a7772cd87bf55f1448ba1794c54b1e6c749825f0672952051a93c",
"rawBytes": 2610,
"gzipBytes": 1306,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/summary-panel-runtime-loaded-tPVchSOW.js",
"sha256": "61d8f0702e62190e87df492887b6b5626b001c508ef81b2292f1cf2f89c5bf5a",
"path": "houseplan-assets/summary-panel-runtime-loaded-CB4AHgRN.js",
"sha256": "d7d78a52ff91ce0dd1d07eb8e670e931814ef71c969f67069485d1313adeafe4",
"rawBytes": 72272,
"gzipBytes": 19727,
"gzipBytes": 19728,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": [
"houseplan-assets/summary-panel-editor-BcBlZ6fP.js",
"houseplan-assets/summary-panel-metrics-mbpbrsQj.js"
"houseplan-assets/summary-panel-editor-DeBQ1tcV.js",
"houseplan-assets/summary-panel-metrics-B3ruGJoU.js"
]
},
{
"path": "houseplan-assets/zigbee-topology-P6rW9Go5.js",
"sha256": "3876642f3ae782741851ca2d376db9211eba2ebb2b56ef25bc6af76998ea19df",
"path": "houseplan-assets/zigbee-topology-DitREaKv.js",
"sha256": "d29bb086e6862441a6115d431ed71e4ee0b96201a10bdfedb93d3f11280264ca",
"rawBytes": 18961,
"gzipBytes": 7425,
"gzipBytes": 7430,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-assets/zigbee-topology-runtime-6YToHmGp.js",
"sha256": "a4e36ff3d1a0a8173d90eb40f1beea623824bf997348bcff9dfcfed66cde7d3a",
"path": "houseplan-assets/zigbee-topology-runtime-Cez46hoy.js",
"sha256": "5bb047f1c003a211e0a57f2fa03d37e968144ca741d99b2f3e486ee70e4aa130",
"rawBytes": 3941,
"gzipBytes": 1763,
"gzipBytes": 1765,
"isEntry": false,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js",
"houseplan-assets/zigbee-topology-P6rW9Go5.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js",
"houseplan-assets/zigbee-topology-DitREaKv.js"
],
"dynamicImports": []
},
{
"path": "houseplan-card.js",
"sha256": "025ac2c351bb0f918ad4a8055b2fc1fe88d87459f965a5b8f435487233286656",
"sha256": "2cf259caacb83ef37c3e5e743f88bcd61a6f48131af71fa565528f409b2f1f82",
"rawBytes": 1205,
"gzipBytes": 802,
"gzipBytes": 805,
"isEntry": true,
"imports": [
"houseplan-assets/houseplan-card-Ctv7H3Ko.js"
"houseplan-assets/houseplan-card-DEVy5dLN.js"
],
"dynamicImports": []
},
{
"path": "houseplan-panel.js",
"sha256": "728534e2a8812a41d02b36b7b80365270e9c4d55474aa40426e69294c05e6f00",
"sha256": "02fa46808fbf68c9245ec2b518ec2047953678b13b054a923259f1a8d9e9cb9a",
"rawBytes": 6124,
"gzipBytes": 2305,
"gzipBytes": 2306,
"isEntry": true,
"imports": [
"houseplan-card.js"
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";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-Ctv7H3Ko.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";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-DEVy5dLN.js";class h extends e{constructor(){super(...arguments),this._spaces=null,this._spacesLoading=!1,this._spacesAuthoritative=!1}setConfig(e){this._config=e}async _loadSpaces(){if(!this._spaces&&!this._spacesLoading&&this.hass){this._spacesLoading=!0;try{const e=await this.hass.callWS({type:"houseplan/config/get"});this._spaces=(e?.config?.spaces||[]).map(e=>({value:e.id,label:e.title||e.id})),this._spacesAuthoritative=!0}catch{this._spaces=[],this._spacesAuthoritative=!1}finally{this._spacesLoading=!1}}}get _lang(){return o(this.hass,this._config?.language)}get _floorToken(){const e=this._config?.floor;return"number"==typeof e?`__houseplan_yaml_floor_index__:${String(e)}`:null}get _formData(){const e={...this._config},o=this._floorToken;return o?e.floor=o:Object.prototype.hasOwnProperty.call(e,"floor")||(e.floor=""),e}get _schema(){const e=this._spaces||[],o=this._lang,a=[{value:"",label:t(o,"editor.floor_none")}],i=this._floorToken;i&&a.push({value:i,label:t(o,"editor.floor_index",{index:String(this._config?.floor)})});const l="string"==typeof this._config?.floor?this._config.floor:"";l&&!e.some(e=>e.value===l)&&a.push({value:l,label:l}),a.push(...e);const n="string"==typeof this._config?.default_floor?this._config.default_floor:"",r=[...e];return n&&!e.some(e=>e.value===n)&&r.unshift({value:n,label:n}),[{name:"title",selector:{text:{}}},{name:"floor",selector:{select:{mode:"dropdown",options:a}}},e.length?{name:"default_floor",selector:{select:{mode:"dropdown",options:r}}}:{name:"default_floor",selector:{text:{}}},{name:"language",selector:{select:{mode:"dropdown",options:s(t(o,"editor.lang_auto"),this._config?.language)}}},{name:"icon_size",selector:{number:{min:1,max:6,step:.1,mode:"box"}}},{name:"show_temperature",selector:{boolean:{}}},{name:"live_states",selector:{boolean:{}}},{name:"show_signal",selector:{boolean:{}}},{name:"kiosk",selector:{boolean:{}}},{name:"cycle",selector:{number:{min:0,max:3600,step:5,mode:"box"}}}]}render(){if(!this.hass||!this._config)return a;const e=i(this,l,o(this.hass,this._config.language));if("cold"===e)return n();if("warm"===e)return r;this._loadSpaces();const s=this._lang,h={title:t(s,"editor.title"),floor:t(s,"editor.floor"),default_floor:t(s,"editor.default_floor"),language:t(s,"editor.language"),icon_size:t(s,"editor.icon_size"),show_temperature:t(s,"editor.show_temperature"),live_states:t(s,"editor.live_states"),show_signal:t(s,"editor.show_signal"),kiosk:t(s,"editor.kiosk"),cycle:t(s,"editor.cycle")},f=this._schema,_=function(e,o,t){if(!t||null===o)return null;const s="string"==typeof e?.default_floor?e.default_floor:"";return!s||o.some(e=>e.value===s)?null:s}(this._config,this._spaces,this._spacesAuthoritative),d=e=>c`<ha-form
.hass=${this.hass}
.data=${this._formData}
.schema=${e}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";import{dS as r,dT as t,dU as s}from"./houseplan-card-DEVy5dLN.js";const e={},a=r(class extends t{constructor(){super(...arguments),this.ot=e}render(r,t){return t()}update(r,[t,e]){if(Array.isArray(t)){if(Array.isArray(this.ot)&&this.ot.length===t.length&&t.every((r,t)=>r===this.ot[t]))return s}else if(this.ot===t)return s;return this.ot=Array.isArray(t)?Array.from(t):t,this.render(t,e)}});export{a as i};
-1
View File
@@ -1 +0,0 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{dS as r,dT as t,dU as e}from"./houseplan-card-Ctv7H3Ko.js";const s={},a=r(class extends t{constructor(){super(...arguments),this.ot=s}render(r,t){return t()}update(r,[t,s]){if(Array.isArray(t)){if(Array.isArray(this.ot)&&this.ot.length===t.length&&t.every((r,t)=>r===this.ot[t]))return e}else if(this.ot===t)return e;return this.ot=Array.isArray(t)?Array.from(t):t,this.render(t,s)}});export{a as i};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{b as a,A as e}from"./houseplan-card-Ctv7H3Ko.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-tPVchSOW.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__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";import{b as a,A as e}from"./houseplan-card-DEVy5dLN.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-CB4AHgRN.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__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{e9 as e,L as t,a2 as n,J as i,an as o,N as r,bo as a,bn as s,a1 as c,a0 as l,ax as d,ea as u,eb as f,bq as m,ec as g}from"./houseplan-card-Ctv7H3Ko.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const o=String(i.binding||"").indexOf(":");if(o<1)continue;const r=i.binding.slice(0,o),a=i.binding.slice(o+1),s="device"===r?e.registry.devices?.[a]:null,c="entity"===r?e.registry.entities?.[a]:null,l="device"===r?a:c?.device_id,d="device"===r?s?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===r&&n.liveEntities.has(a))&&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*h(c,l,d=_){try{let u=0;for(const f of l){const l=c.spaces.find(e=>String(e?.id)===f.id);if(!l)continue;const m=e(l,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const s=t(e);if(!s)continue;const c=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,o,r,g.roomGeom,g.multiWallNodes)||s;v=y(v,a(c,m.physicalBodies)),yield}const _=m.cellCm/o;u+=s(v)*_*_/1e4}return u}catch{return null}}function p(e,t,n=_){const i=h(e,t,n);let o=i.next();for(;!o.done;)o=i.next();return o.value}function b(e,t,n,i){if("system"!==e.type)return null;if("device_count"===e.key)return null===t.deviceCount?null:String(t.deviceCount);if("total_area"===e.key)return null===t.areaM2?null:m(t.areaM2,"mi"===n?.config?.unit_system?.length);try{return new Intl.DateTimeFormat(i||void 0,{dateStyle:"short",timeStyle:"short",timeZone:n?.config?.time_zone||void 0}).format(t.now)}catch{return t.now.toLocaleString()}}function S(e,t){const n=e?.states?.[t];if(!n)return null;const i=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{h as cleanFloorAreaSteps,v as representedHaDeviceIds,_ as spaceWallGeometry,S as summaryEntityValue,b as summarySystemValue,p as totalCleanFloorAreaM2};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";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 d,ea as u,eb as f,bq as m,ec as g}from"./houseplan-card-DEVy5dLN.js";function v(e){if(!e.registry.authoritative)return null;const t=new Set,n=d(e.markers);for(const i of Object.values(e.registry.devices||{}))i?.id&&"service"!==i.entry_type&&!n.devices.has(i.id)&&i.area_id&&e.areaToSpace[i.area_id]&&t.add(i.id);for(const i of e.markers||[]){if(i.removed||"virtual"===i.binding)continue;const 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,d="device"===r?a?.area_id:c?.area_id||l&&e.registry.devices?.[l]?.area_id,u="string"==typeof i.room_id&&i.room_id.length>0&&null===i.area?"":i.area||d||"",f=u&&e.areaToSpace[u]||i.space||e.firstSpaceId;l&&e.registry.devices?.[l]&&e.spaceIds.has(f)&&(!n.devices.has(l)||"entity"===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 b(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*_(c,l,d=b){try{let u=0;for(const f of l){const l=c.spaces.find(e=>String(e?.id)===f.id);if(!l)continue;const m=e(l,f),g=d(f,m);let v=null;for(const e of f.rooms){if(!e.id)continue;const a=t(e);if(!a)continue;const c=n(f.rooms,e.id,m.walls,m.openCuts,i,m.cellCm,o,r,g.roomGeom,g.multiWallNodes)||a;v=y(v,s(c,m.physicalBodies)),yield}const b=m.cellCm/o;u+=a(v)*b*b/1e4}return u}catch{return null}}function h(e,t,n=b){const i=_(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=u(e,t);return i?f(i,String(n.attributes?.unit_of_measurement||"")):null}export{_ as cleanFloorAreaSteps,v as representedHaDeviceIds,b as spaceWallGeometry,S as summaryEntityValue,p as summarySystemValue,h as totalCleanFloorAreaM2};
@@ -1 +1 @@
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";import{n as t,b as n}from"./zigbee-topology-P6rW9Go5.js";import{B as e}from"./houseplan-card-Ctv7H3Ko.js";const o=new WeakMap;function i(t){const n=function(t){const n=t?.connection||t;return!n||"object"!=typeof n&&"function"!=typeof n?null:n}(t);if(!n)return null;let e=o.get(n);return e||(e={revision:0,topologies:[],states:{},listeners:new Set,inflight:new Map},o.set(n,e)),e}function r(t,n,e){t.states={...t.states,[n]:e},function(t){t.revision++;for(const n of t.listeners)n()}(t)}function s(t){const n=t?.code;if("permission"===n||"unsupported"===n||"timeout"===n||"invalid_topic"===n||"invalid_payload"===n)return n;const e=String(t?.message||"").toLowerCase();return e.includes("unauthor")||e.includes("permission")?"permission":e.includes("unknown_command")||e.includes("not found")?"unsupported":"provider"}function a(t){return Object.assign(new Error(t),{code:t})}function c(t,n,e){const o=t.inflight.get(n);if(o)return o;r(t,n,{phase:"loading"});const i=e().then(n=>{if(!n.nodes.length&&n.warnings.some(t=>"invalid_payload"===t.code))throw a("invalid_payload");!function(t,n){t.topologies=[...t.topologies.filter(t=>!(t.provider===n.provider&&t.instanceId===n.instanceId)),n],r(t,"zha"===n.provider?"zha":`z2m:${n.instanceId}`,{phase:"ready",obtainedAt:n.obtainedAt,partial:n.warnings.length>0})}(t,n)}).catch(e=>{r(t,n,{phase:"error",error:s(e)})}).finally(()=>t.inflight.delete(n));return t.inflight.set(n,i),i}function l(t){const n=i(t);return n?{revision:n.revision,topologies:n.topologies,states:n.states}:{revision:0,topologies:[],states:{}}}function u(t,n){const e=i(t);return e?(e.listeners.add(n),()=>e.listeners.delete(n)):()=>{}}function p(t){if(!0!==t?.user?.is_admin)throw a("permission")}function f(n){const e=i(n);return e?c(e,"zha",async()=>{if(p(n),"function"!=typeof n?.callWS)throw a("unsupported");return t(await n.callWS({type:"zha/devices"}))}):Promise.resolve()}function d(t){return null!==t&&"object"==typeof t?t:null}function h(t){const n=d(t),e=n?.payload??t;if("string"!=typeof e)return e;try{return JSON.parse(e)}catch{return null}}async function g(t,n){let e;try{return await Promise.race([t,new Promise((t,o)=>{e=globalThis.setTimeout(()=>o(a("timeout")),Math.max(1,n))})])}finally{void 0!==e&&globalThis.clearTimeout(e)}}function m(t,o,r=15e4){const s=i(t);if(!s)return Promise.resolve();const l=e(o);return c(s,`z2m:${l||String(o)}`,async()=>{if(p(t),!l)throw a("invalid_topic");const e=t.connection,o=e?.subscribeMessage;if("function"!=typeof o||"function"!=typeof t?.callService)throw a("unsupported");const i=function(){const t=globalThis.crypto;return"function"==typeof t?.randomUUID?`houseplan-${t.randomUUID()}`:`houseplan-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}(),s=Date.now()+Math.max(1,r);let c=!1,u=null,f=null,m=null;const y=new Promise(t=>{u=t}),w=new Promise((t,n)=>{f=t,m=n}),b=[];try{const r=await o.call(e,t=>{!0===d(t)?.retain&&h(t)&&u?.()},{type:"mqtt/subscribe",topic:`${l}/bridge/info`});"function"==typeof r&&b.push(r);const p=await o.call(e,t=>{if(!0===d(t)?.retain)return;const n=h(t);null!==n?n&&function(t){const n=d(t),e=n?.transaction??d(n?.data)?.transaction;return"string"==typeof e||"number"==typeof e?String(e):null}(n)===i&&f?.(n):c&&m?.(a("invalid_payload"))},{type:"mqtt/subscribe",topic:`${l}/bridge/response/networkmap`});"function"==typeof p&&b.push(p),await g(y,Math.min(4e3,Math.max(1,s-Date.now()))),c=!0,await t.callService("mqtt","publish",{topic:`${l}/bridge/request/networkmap`,payload:JSON.stringify({type:"raw",routes:!1,transaction:i}),qos:0,retain:!1});const v=await g(w,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of b)try{t()}catch{}}})}export{f as readZhaTopology,m as refreshZ2mTopology,u as subscribeZigbeeTopology,l as zigbeeTopologyRuntimeSnapshot};
globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";import{n as t,b as n}from"./zigbee-topology-DitREaKv.js";import{B as e}from"./houseplan-card-DEVy5dLN.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}),b=new Promise((t,n)=>{f=t,m=n}),w=[];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&&w.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&&w.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(b,s-Date.now()),_=d(v)?.status;if(_&&"ok"!==_)throw a("provider");return n(v,l)}finally{for(const t of w)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__="8c2272f0c2abd6db38c759ea65f8aa1c8b93e4596d37c53cce6da796096cb411";try{await import("./houseplan-assets/houseplan-card-Ctv7H3Ko.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__="dfcbb1b71778cc7ba07be84f07b876575d5c63600838b93cdb2db147b99ec039";try{await import("./houseplan-assets/houseplan-card-DEVy5dLN.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
+39
View File
@@ -2,6 +2,45 @@
## Unreleased
## v1.74.0 — 2026-09-11
- The plan is noticeably smoother, and in Firefox the difference is dramatic.
Dragging the plan used to redraw it from scratch on every frame instead of
moving what was already drawn, and a device marker's shadow restarted an
animation on every marker at once whenever the container width changed —
sixty-one of them dropped Firefox to nine frames per second. Both are gone;
the picture is exactly the same
([#531](https://github.com/Matysh/houseplan-card/issues/531),
[#524](https://github.com/Matysh/houseplan-card/issues/524)).
- The printed plan is about a third larger: in-plan labels are a quarter
smaller and the separate list of internal dimensions is gone — the numbers
now sit on the drawing itself. Short dimensions that do not fit inside a room
are no longer printed
([#530](https://github.com/Matysh/houseplan-card/issues/530)).
- A plan left over from the era of “rooms without walls” can be edited again.
Such a plan could refuse every change with “conflicting wall identifiers”,
send you to “Optimize plans”, which then reported that everything was already
optimal, and refuse to export as well — leaving no way out at all. The
leftover is now cleaned up on the first save, and a genuinely outdated card is
told to update and reload instead
([#529](https://github.com/Matysh/houseplan-card/issues/529),
reported in [#527](https://github.com/Matysh/houseplan-card/issues/527)).
- Alignment guides follow the object again while you drag it, and the summary
panel no longer freezes the first frame on a large plan or says “Source
unavailable” while its values are still being computed; its settings dialog
scrolls again in Home Assistant. Switching between spaces no longer replays a
neighbouring door's leaf movement, and the card downloads 12.8 KB less on a
cold start
([#521](https://github.com/Matysh/houseplan-card/issues/521),
[#509](https://github.com/Matysh/houseplan-card/issues/509),
[#508](https://github.com/Matysh/houseplan-card/issues/508),
[#525](https://github.com/Matysh/houseplan-card/issues/525),
[#526](https://github.com/Matysh/houseplan-card/issues/526)).
## v1.74.0-beta.3 — 2026-09-11
- The printed plan is about a third larger: in-plan labels are a quarter
+39
View File
@@ -8,6 +8,45 @@
## Не выпущено
## v1.74.0 — 2026-09-11
- План стал заметно плавнее, а в Firefox разница разительная. Перетаскивание
каждый кадр рисовало весь план заново вместо того, чтобы сдвинуть уже
нарисованное, а тень маркера устройства заново запускала анимацию сразу у
всех значков при любом изменении ширины контейнера — шестьдесят одна такая
анимация роняла Firefox до девяти кадров в секунду. Обоих поводов больше нет,
картинка при этом ровно та же
([#531](https://github.com/Matysh/houseplan-card/issues/531),
[#524](https://github.com/Matysh/houseplan-card/issues/524)).
- Печатный план стал крупнее примерно на треть: подписи размеров внутри плана
уменьшены на четверть, а столбец вынесенных размеров сбоку убран — числа
теперь стоят на самом чертеже. Короткие размеры, которым не хватает места
внутри комнаты, больше не печатаются
([#530](https://github.com/Matysh/houseplan-card/issues/530)).
- План, доставшийся от времён «комнат без стен», снова редактируется. Такой
план мог отбивать любую правку сообщением про конфликт идентификаторов стен,
отправлять в «Оптимизировать планы», который отвечал, что всё уже оптимально,
и вдобавок отказывался выгружаться — выхода не оставалось вовсе. Наследие
теперь снимается при первом же сохранении, а по-настоящему устаревшей
карточке честно говорят обновиться и перезагрузить страницу
([#529](https://github.com/Matysh/houseplan-card/issues/529),
сообщено в [#527](https://github.com/Matysh/houseplan-card/issues/527)).
- Направляющие выравнивания снова идут за объектом во время жеста; сводная
панель больше не подвешивает первый кадр на большом плане и не пишет
«Источник недоступен», пока считает значения, а её диалог настроек снова
прокручивается в Home Assistant. Переключение между пространствами не
доигрывает движение створки соседней двери, и карточка скачивается на
12,8 КБ меньше при холодном старте
([#521](https://github.com/Matysh/houseplan-card/issues/521),
[#509](https://github.com/Matysh/houseplan-card/issues/509),
[#508](https://github.com/Matysh/houseplan-card/issues/508),
[#525](https://github.com/Matysh/houseplan-card/issues/525),
[#526](https://github.com/Matysh/houseplan-card/issues/526)).
## v1.74.0-beta.3 — 2026-09-11
- Печатный план стал крупнее примерно на треть: подписи размеров внутри плана
+7 -5
View File
@@ -1,18 +1,20 @@
<!-- release: v1.74.0-beta.3 -->
<!-- release: v1.74.0 -->
## Основное
- Перетаскивание плана снова плавное: кадр жеста сдвигает уже нарисованное вместо того, чтобы рисовать весь план заново ([#531](https://github.com/Matysh/houseplan-card/issues/531)).
- План стал заметно плавнее, а в Firefox разница разительная: перетаскивание больше не перерисовывает весь план каждый кадр, а тень маркера не запускает анимацию сразу у всех значков ([#531](https://github.com/Matysh/houseplan-card/issues/531), [#524](https://github.com/Matysh/houseplan-card/issues/524)).
- Печатный план стал крупнее примерно на треть: размеры встали на сам чертёж, а столбец выносов сбоку убран ([#530](https://github.com/Matysh/houseplan-card/issues/530)).
- План, доставшийся от времён «комнат без стен», снова редактируется: наследие снимается при первом сохранении, а не запирает план наглухо ([#529](https://github.com/Matysh/houseplan-card/issues/529)).
- Мелкие исправления и улучшения.
## Highlights
- Dragging the plan around is smooth again: a gesture frame moves what is already drawn instead of redrawing the whole plan ([#531](https://github.com/Matysh/houseplan-card/issues/531)).
- The plan is noticeably smoother, and in Firefox the difference is dramatic: dragging no longer redraws the whole plan on every frame, and a marker's shadow no longer restarts an animation on every marker at once ([#531](https://github.com/Matysh/houseplan-card/issues/531), [#524](https://github.com/Matysh/houseplan-card/issues/524)).
- The printed plan is about a third larger: the dimensions now sit on the drawing itself and the separate column beside it is gone ([#530](https://github.com/Matysh/houseplan-card/issues/530)).
- A plan left over from the era of “rooms without walls” can be edited again: the leftover is cleaned up on the first save instead of locking the plan completely ([#529](https://github.com/Matysh/houseplan-card/issues/529)).
- Small fixes and improvements.
Сообщество / Community: [Telegram](https://t.me/ha_houseplan)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.74.0-beta.3/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.74.0-beta.3/docs/CHANGELOG.md)
[Полный список изменений на русском](https://github.com/Matysh/houseplan-card/blob/v1.74.0/docs/CHANGELOG.ru.md)
· [Full changelog in English](https://github.com/Matysh/houseplan-card/blob/v1.74.0/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.74.0-beta.3** everywhere (manifest, const.py, package.json, CARD_VERSION in the card and the editor runtime) |
| Current local cycle | v1.74.0-beta.3 continues the line after the stable v1.73.0. User-visible in this beta: dragging the plan is smooth again — a gesture frame now moves what is already drawn by a composited transform and the scene re-rasterizes on a budget (100 ms, or a 15 % shift) instead of on every frame, which on the owner’s 144 Hz Firefox cost 200 ms per frame with the refresh driver skipping 124-144 ticks a second waiting for paint (#531); and the printed plan is about a third larger, because the in-plan dimension labels shrank by a quarter and the separate column of external dimensions is gone, so the drawing keeps a whole scale step (#530). Everything from v1.74.0-beta.2 stays in the line: #529, #524, #525, #526, plus internal #528 and #518. The speed verdict for #531 is deliberately NOT claimed by the sandbox — headless Firefox and Chromium hold 60 fps on both the old and the new path; it is owed by a Firefox profile from the owner’s machine on the same pan. Publication requires green Validate on the exact candidate SHA; `main` stays at v1.73.0. |
| Version | **v1.74.0** everywhere (manifest, const.py, package.json, CARD_VERSION in the card and the editor runtime) |
| Current local cycle | **Stable v1.74.0** — `main` is fast-forwarded to the tested `dev` SHA and the GitHub Release is public. The line aggregates from the stable v1.73.0: the plan is noticeably smoother and in Firefox dramatically so — a pan frame now moves what is already drawn by a composited transform with the scene re-rasterizing on a budget (#531), and a marker shadow sized in container units no longer restarts a non-composited animation on every marker at once (#524); the printed plan is about a third larger because the in-plan dimension labels shrank and the separate column of external dimensions is gone (#530); a plan left over from the era of rooms without walls can be edited again, the leftover cleaned up on the first save (#529, reported in #527); plus alignment guides that follow the gesture (#521), a summary panel that neither freezes the first frame nor claims an unavailable source (#509) and whose settings dialog scrolls again (#508), no replayed door leaf on a space switch (#525), and 12.8 KB less on a cold start (#526). Internal in the line: #528, #518, #517, #512, #511, #510. The speed verdict for #531 is deliberately NOT claimed by the sandbox — headless Firefox and Chromium hold 60 fps on both the old and the new path; it is owed by a Firefox profile from the owner's machine on the same pan. |
| 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 GitHub Release uses `prerelease=false`. Release bodies are short and bilingual (Russian first); every bullet links its GitHub issue (#NN) so the #328 rules stay machine-checkable. A STABLE body aggregates the changelog since the PREVIOUS STABLE release (never since the last beta): features/fixes described across the line's beta changelogs must appear, while bugs that were introduced and fixed strictly inside the beta line (never shipped in any stable) are excluded — draft with `npm run release:notes -- <tag>`, curate by hand, then `npm run release:notes -- <tag> --verify` must pass. `Мелкие исправления и улучшения` / `Small fixes and improvements` is allowed only when the range really contains user-visible work not itemised in the body; a single-issue hotfix ships without it (the verifier enforces this). Every body ends with separate links to the Russian and English changelogs. Open or partially delivered issues are never presented as shipped. Telegram announcements are sent only for stable releases; beta and RC publication is silent. `docs/RELEASE-NOTES.md` is the current canonical body instance; `npm run release:prerelease -- <tag> --issues=… --yes` is the primary local publication path and the manual `Publish prerelease` workflow is its GitHub-only equivalent once present on `main`. Nothing is copied to the home instance by hand |
| GitHub | https://github.com/Matysh/houseplan-card — [Issues](https://github.com/Matysh/houseplan-card/issues) are the canonical task records; their labels carry priority and workflow status (`PROCESS.md` §9). GitHub Projects is no longer used. `main` carries stable releases; pre-release tags may point directly at `dev`. Work lands on `dev` and is merged into `main` for a stable release, so `dev` is normally equal to or ahead of `main`, never behind. Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) |
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "houseplan-card",
"version": "1.74.0-beta.3",
"version": "1.74.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "houseplan-card",
"version": "1.74.0-beta.3",
"version": "1.74.0",
"license": "MIT",
"dependencies": {
"lit": "^3.1.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "houseplan-card",
"version": "1.74.0-beta.3",
"version": "1.74.0",
"description": "Interactive house plan Lovelace card for Home Assistant",
"license": "MIT",
"type": "module",
+1 -1
View File
@@ -416,7 +416,7 @@ import type { MarkerRoomReferenceSnapshot } from './room-reference-transaction';
import { SummaryRuntimeSlot, summaryRuntimeLoader } from './summary-runtime-loader';
import { displayVersion } from './card-version';
const CARD_VERSION = '1.74.0-beta.3';
const CARD_VERSION = '1.74.0';
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.74.0-beta.3';
const CARD_VERSION = '1.74.0';
// #474: the editor imports the furniture artwork statically and hands it to
// the page runtime the moment this chunk evaluates — before the loader's