From d277eeb73b1e0d67b826e15d6701bfc4b789110a Mon Sep 17 00:00:00 2001 From: Matysh Date: Mon, 7 Sep 2026 03:47:57 +0300 Subject: [PATCH] feat: export current space as architectural PDF Issue: #53 User-Visible: yes --- assets/fonts/LICENSE | 201 +++++++ assets/fonts/Roboto-Regular.ttf | Bin 0 -> 515100 bytes .../houseplan/frontend/houseplan-assets.json | 239 ++++---- ...-Dr_sQO9B.js => backdrop-pick-flaNG0_n.js} | 2 +- .../frontend/houseplan-assets/de-Cso9fVIy.js | 1 - .../frontend/houseplan-assets/de-D3py1G7D.js | 1 + .../houseplan-assets/editor-BnofZxOF.js | 2 +- .../frontend/houseplan-assets/fr-D24D6IzR.js | 1 - .../frontend/houseplan-assets/fr-L4xgx5pL.js | 1 + ... furniture-plan-art.generated-CiVCUNvm.js} | 2 +- .../houseplan-assets/guard-BQbM7Hae.js | 1 - .../houseplan-assets/guard-eiu_tbpd.js | 1 + ...DPsHeJqW.js => houseplan-card-BCodcbie.js} | 547 +++++++++--------- ...s => houseplan-editor-runtime-BH5YaEYG.js} | 6 +- ... houseplan-onboarding-runtime-85cI-2kH.js} | 6 +- ...=> hp-zigbee-topology-overlay-DMrX_wpv.js} | 14 +- .../iso-scene-render-CuYsIodT.js | 16 +- ...s => live-interaction-runtime-CH6eiF-a.js} | 2 +- .../houseplan-assets/pdf-export-COKn8jYQ.js | 33 ++ .../zigbee-topology-CQqDGRbo.js | 2 +- ...js => zigbee-topology-runtime-Dpiom0TO.js} | 2 +- .../houseplan/frontend/houseplan-card.js | 2 +- demo/docs/capture.mjs | 6 + demo/docs/screenshots.mjs | 8 +- demo/golden/harness.mjs | 1 + demo/golden/matrix.mjs | 4 +- demo/golden/run.mjs | 66 +++ demo/smoke_pdf_export.mjs | 126 ++++ dist/houseplan-assets.json | 239 ++++---- ...-Dr_sQO9B.js => backdrop-pick-flaNG0_n.js} | 2 +- dist/houseplan-assets/de-Cso9fVIy.js | 1 - dist/houseplan-assets/de-D3py1G7D.js | 1 + .../houseplan-assets/editor-BnofZxOF.js | 2 +- dist/houseplan-assets/fr-D24D6IzR.js | 1 - dist/houseplan-assets/fr-L4xgx5pL.js | 1 + ... furniture-plan-art.generated-CiVCUNvm.js} | 2 +- dist/houseplan-assets/guard-BQbM7Hae.js | 1 - dist/houseplan-assets/guard-eiu_tbpd.js | 1 + ...DPsHeJqW.js => houseplan-card-BCodcbie.js} | 547 +++++++++--------- ...s => houseplan-editor-runtime-BH5YaEYG.js} | 6 +- ... houseplan-onboarding-runtime-85cI-2kH.js} | 6 +- ...=> hp-zigbee-topology-overlay-DMrX_wpv.js} | 14 +- .../iso-scene-render-CuYsIodT.js | 16 +- ...s => live-interaction-runtime-CH6eiF-a.js} | 2 +- dist/houseplan-assets/pdf-export-COKn8jYQ.js | 33 ++ .../zigbee-topology-CQqDGRbo.js | 2 +- ...js => zigbee-topology-runtime-Dpiom0TO.js} | 2 +- dist/houseplan-card.js | 2 +- docs/ARCHITECTURE.md | 10 + docs/CHANGELOG.md | 5 + docs/CHANGELOG.ru.md | 6 + docs/PDF-EXPORT.md | 51 ++ docs/USER-GUIDE.md | 16 + docs/USER-GUIDE.ru.md | 17 + docs/specs/053-pdf-export.md | 16 +- package-lock.json | 406 +++++++++++++ package.json | 7 +- scripts/bundle-budget.mjs | 16 +- scripts/bundle-manifest.mjs | 23 +- scripts/generate-pdf-font.mjs | 56 ++ scripts/mutation-gate.mjs | 130 +++++ scripts/smoke-links.mjs | 10 + src/houseplan-card.ts | 80 +++ src/i18n/de.json | 20 + src/i18n/en.json | 20 + src/i18n/fr.json | 20 + src/i18n/ru.json | 20 + src/pdf/hp-pdf-dialog.ts | 123 ++++ src/pdf/pdf-date.ts | 8 + src/pdf/pdf-dimensions.ts | 138 +++++ src/pdf/pdf-export.ts | 105 ++++ src/pdf/pdf-font.generated.ts | 8 + src/pdf/pdf-raster.ts | 10 + src/pdf/pdf-scene.ts | 531 +++++++++++++++++ src/pdf/pdf-writer.ts | 236 ++++++++ src/pdf/svg-path.ts | 152 +++++ test/bundle-assets.test.mjs | 21 +- test/editor-runtime-loader.test.mjs | 10 +- test/golden-matrix.test.mjs | 2 +- test/pdf-dimensions.test.mjs | 40 ++ test/pdf-font-assets.test.mjs | 15 + test/pdf-raster.test.mjs | 12 + test/pdf-scene.test.mjs | 211 +++++++ test/pdf-svg-path.test.mjs | 30 + test/pdf-writer.test.mjs | 50 ++ test/support-feedback.test.mjs | 4 +- tsconfig.test.json | 5 +- 87 files changed, 3965 insertions(+), 849 deletions(-) create mode 100644 assets/fonts/LICENSE create mode 100644 assets/fonts/Roboto-Regular.ttf rename custom_components/houseplan/frontend/houseplan-assets/{backdrop-pick-Dr_sQO9B.js => backdrop-pick-flaNG0_n.js} (99%) delete mode 100644 custom_components/houseplan/frontend/houseplan-assets/de-Cso9fVIy.js create mode 100644 custom_components/houseplan/frontend/houseplan-assets/de-D3py1G7D.js rename dist/houseplan-assets/editor-DiTpv53t.js => custom_components/houseplan/frontend/houseplan-assets/editor-BnofZxOF.js (93%) delete mode 100644 custom_components/houseplan/frontend/houseplan-assets/fr-D24D6IzR.js create mode 100644 custom_components/houseplan/frontend/houseplan-assets/fr-L4xgx5pL.js rename custom_components/houseplan/frontend/houseplan-assets/{furniture-plan-art.generated-DCcpljFT.js => furniture-plan-art.generated-CiVCUNvm.js} (99%) delete mode 100644 custom_components/houseplan/frontend/houseplan-assets/guard-BQbM7Hae.js create mode 100644 custom_components/houseplan/frontend/houseplan-assets/guard-eiu_tbpd.js rename custom_components/houseplan/frontend/houseplan-assets/{houseplan-card-DPsHeJqW.js => houseplan-card-BCodcbie.js} (60%) rename custom_components/houseplan/frontend/houseplan-assets/{houseplan-editor-runtime-BY9_H46m.js => houseplan-editor-runtime-BH5YaEYG.js} (99%) rename custom_components/houseplan/frontend/houseplan-assets/{houseplan-onboarding-runtime-suTIxM0T.js => houseplan-onboarding-runtime-85cI-2kH.js} (97%) rename custom_components/houseplan/frontend/houseplan-assets/{hp-zigbee-topology-overlay-D_uDeHju.js => hp-zigbee-topology-overlay-DMrX_wpv.js} (87%) rename dist/houseplan-assets/iso-scene-render-gvfCh2yu.js => custom_components/houseplan/frontend/houseplan-assets/iso-scene-render-CuYsIodT.js (61%) rename custom_components/houseplan/frontend/houseplan-assets/{live-interaction-runtime-Bj9ohcw0.js => live-interaction-runtime-CH6eiF-a.js} (80%) create mode 100644 custom_components/houseplan/frontend/houseplan-assets/pdf-export-COKn8jYQ.js rename dist/houseplan-assets/zigbee-topology-5lWJidfb.js => custom_components/houseplan/frontend/houseplan-assets/zigbee-topology-CQqDGRbo.js (95%) rename custom_components/houseplan/frontend/houseplan-assets/{zigbee-topology-runtime-D_luJHXO.js => zigbee-topology-runtime-Dpiom0TO.js} (77%) create mode 100644 demo/smoke_pdf_export.mjs rename dist/houseplan-assets/{backdrop-pick-Dr_sQO9B.js => backdrop-pick-flaNG0_n.js} (99%) delete mode 100644 dist/houseplan-assets/de-Cso9fVIy.js create mode 100644 dist/houseplan-assets/de-D3py1G7D.js rename custom_components/houseplan/frontend/houseplan-assets/editor-DiTpv53t.js => dist/houseplan-assets/editor-BnofZxOF.js (93%) delete mode 100644 dist/houseplan-assets/fr-D24D6IzR.js create mode 100644 dist/houseplan-assets/fr-L4xgx5pL.js rename dist/houseplan-assets/{furniture-plan-art.generated-DCcpljFT.js => furniture-plan-art.generated-CiVCUNvm.js} (99%) delete mode 100644 dist/houseplan-assets/guard-BQbM7Hae.js create mode 100644 dist/houseplan-assets/guard-eiu_tbpd.js rename dist/houseplan-assets/{houseplan-card-DPsHeJqW.js => houseplan-card-BCodcbie.js} (60%) rename dist/houseplan-assets/{houseplan-editor-runtime-BY9_H46m.js => houseplan-editor-runtime-BH5YaEYG.js} (99%) rename dist/houseplan-assets/{houseplan-onboarding-runtime-suTIxM0T.js => houseplan-onboarding-runtime-85cI-2kH.js} (97%) rename dist/houseplan-assets/{hp-zigbee-topology-overlay-D_uDeHju.js => hp-zigbee-topology-overlay-DMrX_wpv.js} (87%) rename custom_components/houseplan/frontend/houseplan-assets/iso-scene-render-gvfCh2yu.js => dist/houseplan-assets/iso-scene-render-CuYsIodT.js (61%) rename dist/houseplan-assets/{live-interaction-runtime-Bj9ohcw0.js => live-interaction-runtime-CH6eiF-a.js} (80%) create mode 100644 dist/houseplan-assets/pdf-export-COKn8jYQ.js rename custom_components/houseplan/frontend/houseplan-assets/zigbee-topology-5lWJidfb.js => dist/houseplan-assets/zigbee-topology-CQqDGRbo.js (95%) rename dist/houseplan-assets/{zigbee-topology-runtime-D_luJHXO.js => zigbee-topology-runtime-Dpiom0TO.js} (77%) create mode 100644 docs/PDF-EXPORT.md create mode 100644 scripts/generate-pdf-font.mjs create mode 100644 src/pdf/hp-pdf-dialog.ts create mode 100644 src/pdf/pdf-date.ts create mode 100644 src/pdf/pdf-dimensions.ts create mode 100644 src/pdf/pdf-export.ts create mode 100644 src/pdf/pdf-font.generated.ts create mode 100644 src/pdf/pdf-raster.ts create mode 100644 src/pdf/pdf-scene.ts create mode 100644 src/pdf/pdf-writer.ts create mode 100644 src/pdf/svg-path.ts create mode 100644 test/pdf-dimensions.test.mjs create mode 100644 test/pdf-font-assets.test.mjs create mode 100644 test/pdf-raster.test.mjs create mode 100644 test/pdf-scene.test.mjs create mode 100644 test/pdf-svg-path.test.mjs create mode 100644 test/pdf-writer.test.mjs diff --git a/assets/fonts/LICENSE b/assets/fonts/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/assets/fonts/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/assets/fonts/Roboto-Regular.ttf b/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddee473e02035bfce6244746d5d2a281616f7ff8 GIT binary patch literal 515100 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 z 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
mu2rPCfyzpnd_56mlTM8BofRO=&{OOj)sMp!DFP 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

tn_OM$3a5p9KO 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 G(WQ!j;`E@ht~h$Q=Ys6(9N2FgaRcmQu6?XN?)= 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 XwkE6s{u4>Ex2wa?N-FMLe0cu@Z#UM5 literal 0 HcmV?d00001 diff --git a/custom_components/houseplan/frontend/houseplan-assets.json b/custom_components/houseplan/frontend/houseplan-assets.json index 721c7e8a..08373c6f 100644 --- a/custom_components/houseplan/frontend/houseplan-assets.json +++ b/custom_components/houseplan/frontend/houseplan-assets.json @@ -1,100 +1,106 @@ { "schema": 1, - "fingerprint": "6aa7e85aead059c4d286b3b943bfaf6a4b128ecf5e0a3be2860b34e0069d829a", + "fingerprint": "6412fad64699400d6b77fdda3cf1ecebe27c1dc2134d0e63e34fc7ef196a99a0", "entry": "houseplan-card.js", "initialViewFiles": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js", + "houseplan-assets/houseplan-card-BCodcbie.js", "houseplan-card.js" ], - "initialViewGzipBytes": 288573, + "initialViewGzipBytes": 289556, "lazyFiles": [ - "houseplan-assets/backdrop-pick-Dr_sQO9B.js", - "houseplan-assets/de-Cso9fVIy.js", - "houseplan-assets/editor-DiTpv53t.js", - "houseplan-assets/fr-D24D6IzR.js", - "houseplan-assets/furniture-plan-art.generated-DCcpljFT.js", - "houseplan-assets/guard-BQbM7Hae.js", - "houseplan-assets/houseplan-editor-runtime-BY9_H46m.js", - "houseplan-assets/houseplan-onboarding-runtime-suTIxM0T.js", - "houseplan-assets/hp-zigbee-topology-overlay-D_uDeHju.js", - "houseplan-assets/iso-scene-render-gvfCh2yu.js", - "houseplan-assets/live-interaction-runtime-Bj9ohcw0.js", - "houseplan-assets/zigbee-topology-5lWJidfb.js", - "houseplan-assets/zigbee-topology-runtime-D_luJHXO.js" + "houseplan-assets/backdrop-pick-flaNG0_n.js", + "houseplan-assets/de-D3py1G7D.js", + "houseplan-assets/editor-BnofZxOF.js", + "houseplan-assets/fr-L4xgx5pL.js", + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "houseplan-assets/guard-eiu_tbpd.js", + "houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js", + "houseplan-assets/houseplan-onboarding-runtime-85cI-2kH.js", + "houseplan-assets/hp-zigbee-topology-overlay-DMrX_wpv.js", + "houseplan-assets/iso-scene-render-CuYsIodT.js", + "houseplan-assets/live-interaction-runtime-CH6eiF-a.js", + "houseplan-assets/pdf-export-COKn8jYQ.js", + "houseplan-assets/zigbee-topology-CQqDGRbo.js", + "houseplan-assets/zigbee-topology-runtime-Dpiom0TO.js" ], - "lazyGzipBytes": 272628, + "lazyGzipBytes": 377345, "lazyEditorFiles": [ - "houseplan-assets/backdrop-pick-Dr_sQO9B.js", - "houseplan-assets/editor-DiTpv53t.js", - "houseplan-assets/furniture-plan-art.generated-DCcpljFT.js", - "houseplan-assets/guard-BQbM7Hae.js", - "houseplan-assets/houseplan-editor-runtime-BY9_H46m.js", - "houseplan-assets/zigbee-topology-5lWJidfb.js" + "houseplan-assets/backdrop-pick-flaNG0_n.js", + "houseplan-assets/editor-BnofZxOF.js", + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "houseplan-assets/guard-eiu_tbpd.js", + "houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js", + "houseplan-assets/zigbee-topology-CQqDGRbo.js" ], - "lazyEditorGzipBytes": 195224, + "lazyEditorGzipBytes": 195204, "lazyOnboardingFiles": [ - "houseplan-assets/backdrop-pick-Dr_sQO9B.js", - "houseplan-assets/houseplan-onboarding-runtime-suTIxM0T.js" + "houseplan-assets/backdrop-pick-flaNG0_n.js", + "houseplan-assets/houseplan-onboarding-runtime-85cI-2kH.js" ], - "lazyOnboardingGzipBytes": 14323, + "lazyOnboardingGzipBytes": 14317, "lazyLocaleFiles": [ - "houseplan-assets/de-Cso9fVIy.js", - "houseplan-assets/fr-D24D6IzR.js" + "houseplan-assets/de-D3py1G7D.js", + "houseplan-assets/fr-L4xgx5pL.js" ], - "lazyLocaleGzipBytes": 49743, + "lazyLocaleGzipBytes": 50257, "lazyIsometricFiles": [ - "houseplan-assets/guard-BQbM7Hae.js", - "houseplan-assets/iso-scene-render-gvfCh2yu.js" + "houseplan-assets/guard-eiu_tbpd.js", + "houseplan-assets/iso-scene-render-CuYsIodT.js" ], - "lazyIsometricGzipBytes": 13455, + "lazyIsometricGzipBytes": 13446, "lazyFurnitureArtFiles": [ - "houseplan-assets/furniture-plan-art.generated-DCcpljFT.js" + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js" ], "lazyFurnitureArtGzipBytes": 10255, + "lazyPdfFiles": [ + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "houseplan-assets/pdf-export-COKn8jYQ.js" + ], + "lazyPdfGzipBytes": 114486, "files": [ { - "path": "houseplan-assets/backdrop-pick-Dr_sQO9B.js", - "sha256": "dbd895d0e439080d0f4989e1b440053183aff8d4f1544c276ac505d873ac6913", + "path": "houseplan-assets/backdrop-pick-flaNG0_n.js", + "sha256": "04e8745a797c6f976ec5f87f9c0a5bc18653f1028275861044263a2daf22969b", "rawBytes": 21592, - "gzipBytes": 7358, + "gzipBytes": 7355, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/de-Cso9fVIy.js", - "sha256": "4e259f68243600d5748ff5554116647022cc4c1c67b328503a71c3f2c05c443e", - "rawBytes": 83541, - "gzipBytes": 25120, + "path": "houseplan-assets/de-D3py1G7D.js", + "sha256": "20652fe56057977dae0187378dbc3c67a0ce311e12ba8838e5c1d54ffcd1cd93", + "rawBytes": 84320, + "gzipBytes": 25372, "isEntry": false, "imports": [], "dynamicImports": [] }, { - "path": "houseplan-assets/editor-DiTpv53t.js", - "sha256": "6f4ac5ad3afce4d7bb23201c427225cc1776b1d8c2baae080cbd8888461f1469", + "path": "houseplan-assets/editor-BnofZxOF.js", + "sha256": "51746cf20edd2be956863470de80b3fbe7ece5d9fe9e65ba5a52dfafffa53f8e", "rawBytes": 3837, - "gzipBytes": 1587, + "gzipBytes": 1584, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/fr-D24D6IzR.js", - "sha256": "6b0446546b25e5a3b2b39342190fa5c8af56ade3ddd34613d033dc5eddf1cb99", - "rawBytes": 85540, - "gzipBytes": 24623, + "path": "houseplan-assets/fr-L4xgx5pL.js", + "sha256": "b8d5a14bde89f9e07b0c7ab70f08c5099237ffaa5759081d3e1e3f8c18b0cc98", + "rawBytes": 86352, + "gzipBytes": 24885, "isEntry": false, "imports": [], "dynamicImports": [] }, { - "path": "houseplan-assets/furniture-plan-art.generated-DCcpljFT.js", - "sha256": "59591db67b6f95564927625a3172fdf3c6c166941ac884e4f04c963ed1dd53d0", + "path": "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "sha256": "6081dc4efb3668d809bb82dec2621dd3f70ad405188aba7e24479d6ad69c28ea", "rawBytes": 33655, "gzipBytes": 10255, "isEntry": false, @@ -102,131 +108,144 @@ "dynamicImports": [] }, { - "path": "houseplan-assets/guard-BQbM7Hae.js", - "sha256": "63d8b7722199e6f8617ac1c4d95a9b0e28d94a13b41868409e23a6494edaad08", + "path": "houseplan-assets/guard-eiu_tbpd.js", + "sha256": "1ee2be96bf2ce1d4685dd7c3d5de794447ba876ff05d536bb58adea654c056e7", "rawBytes": 518, - "gzipBytes": 372, + "gzipBytes": 365, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/houseplan-card-DPsHeJqW.js", - "sha256": "0ebc811e3b01cde19ac484003c51812530b5f5c061310a37cc4ae88fef4cebea", - "rawBytes": 1037072, - "gzipBytes": 287778, + "path": "houseplan-assets/houseplan-card-BCodcbie.js", + "sha256": "b40defc0d09d30394c8b88f2a8df835b5cf014df27c7ab093257d02fa080edc5", + "rawBytes": 1040882, + "gzipBytes": 288764, "isEntry": false, "imports": [], "dynamicImports": [ - "houseplan-assets/de-Cso9fVIy.js", - "houseplan-assets/editor-DiTpv53t.js", - "houseplan-assets/fr-D24D6IzR.js", - "houseplan-assets/furniture-plan-art.generated-DCcpljFT.js", - "houseplan-assets/houseplan-editor-runtime-BY9_H46m.js", - "houseplan-assets/houseplan-onboarding-runtime-suTIxM0T.js", - "houseplan-assets/hp-zigbee-topology-overlay-D_uDeHju.js", - "houseplan-assets/iso-scene-render-gvfCh2yu.js", - "houseplan-assets/live-interaction-runtime-Bj9ohcw0.js" + "houseplan-assets/de-D3py1G7D.js", + "houseplan-assets/editor-BnofZxOF.js", + "houseplan-assets/fr-L4xgx5pL.js", + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js", + "houseplan-assets/houseplan-onboarding-runtime-85cI-2kH.js", + "houseplan-assets/hp-zigbee-topology-overlay-DMrX_wpv.js", + "houseplan-assets/iso-scene-render-CuYsIodT.js", + "houseplan-assets/live-interaction-runtime-CH6eiF-a.js", + "houseplan-assets/pdf-export-COKn8jYQ.js" ] }, { - "path": "houseplan-assets/houseplan-editor-runtime-BY9_H46m.js", - "sha256": "1b719aa9ef49aa3f8eb73780c82f3837c988cbdf9dbf5f497d04d1fbae0c8c58", + "path": "houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js", + "sha256": "6bd2e8c672fe3bf779c829a4b111752a1d53233ca75b77ec0cc9e92ea26d3ef3", "rawBytes": 631884, - "gzipBytes": 168225, + "gzipBytes": 168220, "isEntry": false, "imports": [ - "houseplan-assets/backdrop-pick-Dr_sQO9B.js", - "houseplan-assets/furniture-plan-art.generated-DCcpljFT.js", - "houseplan-assets/guard-BQbM7Hae.js", - "houseplan-assets/houseplan-card-DPsHeJqW.js", - "houseplan-assets/zigbee-topology-5lWJidfb.js" + "houseplan-assets/backdrop-pick-flaNG0_n.js", + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "houseplan-assets/guard-eiu_tbpd.js", + "houseplan-assets/houseplan-card-BCodcbie.js", + "houseplan-assets/zigbee-topology-CQqDGRbo.js" ], "dynamicImports": [ - "houseplan-assets/zigbee-topology-runtime-D_luJHXO.js" + "houseplan-assets/zigbee-topology-runtime-Dpiom0TO.js" ] }, { - "path": "houseplan-assets/houseplan-onboarding-runtime-suTIxM0T.js", - "sha256": "ad6e3c7de56475c5089488832646978867af15e30a3681ce3f4eb1c7ba74012d", + "path": "houseplan-assets/houseplan-onboarding-runtime-85cI-2kH.js", + "sha256": "3f1ebc1a94c0d80789d80ac38f504aa835834c55d2d957b5d5e5e90fef100007", "rawBytes": 28071, - "gzipBytes": 6965, + "gzipBytes": 6962, "isEntry": false, "imports": [ - "houseplan-assets/backdrop-pick-Dr_sQO9B.js", - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/backdrop-pick-flaNG0_n.js", + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/hp-zigbee-topology-overlay-D_uDeHju.js", - "sha256": "ba30583fb3436c5ffe05634a63f02ae242c47bb9fbb13aab727d92f55544c4ec", + "path": "houseplan-assets/hp-zigbee-topology-overlay-DMrX_wpv.js", + "sha256": "688fdbdaf6d7c76cf81fe8b9068c75a71d73ac12ce59bb6bf79b4c734aba05ac", "rawBytes": 11034, - "gzipBytes": 3729, + "gzipBytes": 3728, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js", - "houseplan-assets/zigbee-topology-5lWJidfb.js", - "houseplan-assets/zigbee-topology-runtime-D_luJHXO.js" + "houseplan-assets/houseplan-card-BCodcbie.js", + "houseplan-assets/zigbee-topology-CQqDGRbo.js", + "houseplan-assets/zigbee-topology-runtime-Dpiom0TO.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/iso-scene-render-gvfCh2yu.js", - "sha256": "bbe97e455d58c88c16f361368253df4ca39e7424e72ad25cd8161519a4560c97", + "path": "houseplan-assets/iso-scene-render-CuYsIodT.js", + "sha256": "67856018777fa49b14a323beb24c0b416738f1a62399ab00e0d0f1d62bd14aaa", "rawBytes": 38562, - "gzipBytes": 13083, + "gzipBytes": 13081, "isEntry": false, "imports": [ - "houseplan-assets/guard-BQbM7Hae.js", - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/guard-eiu_tbpd.js", + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/live-interaction-runtime-Bj9ohcw0.js", - "sha256": "4646bfaeb32a1d48909cc5dba8678a7374001c1162c1ce595cc339ab7beca2c5", + "path": "houseplan-assets/live-interaction-runtime-CH6eiF-a.js", + "sha256": "4496895d47a93cb25b52f543915fd62147ffbb081130128abb86335fe953853e", "rawBytes": 5196, - "gzipBytes": 2125, + "gzipBytes": 2122, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/zigbee-topology-5lWJidfb.js", - "sha256": "c78fd713884be766e8a1b4845b69e584ed346cc4f9dd554593e27c0456891a9c", + "path": "houseplan-assets/pdf-export-COKn8jYQ.js", + "sha256": "fbdb5f9473127c4d4aafb94cd912f031ecd684e65764cba5319ed0f58efc51e8", + "rawBytes": 220489, + "gzipBytes": 104231, + "isEntry": false, + "imports": [ + "houseplan-assets/furniture-plan-art.generated-CiVCUNvm.js", + "houseplan-assets/houseplan-card-BCodcbie.js" + ], + "dynamicImports": [] + }, + { + "path": "houseplan-assets/zigbee-topology-CQqDGRbo.js", + "sha256": "08222cd7aef111484a28efc7d8189aec4e360cd393daf1742127d49e0fc19746", "rawBytes": 18961, - "gzipBytes": 7427, + "gzipBytes": 7425, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] }, { - "path": "houseplan-assets/zigbee-topology-runtime-D_luJHXO.js", - "sha256": "7dce8d77b41a653e35cdf78a4fbfe09bdf1a7a9d6eb545aa2d27934c30e1f299", + "path": "houseplan-assets/zigbee-topology-runtime-Dpiom0TO.js", + "sha256": "b7d06489a8b0d553848e1d7264f34e05fb5b093202cacf2db98ab2e387c901f7", "rawBytes": 3941, - "gzipBytes": 1759, + "gzipBytes": 1760, "isEntry": false, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js", - "houseplan-assets/zigbee-topology-5lWJidfb.js" + "houseplan-assets/houseplan-card-BCodcbie.js", + "houseplan-assets/zigbee-topology-CQqDGRbo.js" ], "dynamicImports": [] }, { "path": "houseplan-card.js", - "sha256": "19518aed8ddb7da540e7f66443460095113690729264b8f46cf4092dfc1c22c5", + "sha256": "4037aeb456109886170e1113322ef22e9d6d77fc01fa9df01c4351ee0b151719", "rawBytes": 1183, - "gzipBytes": 795, + "gzipBytes": 792, "isEntry": true, "imports": [ - "houseplan-assets/houseplan-card-DPsHeJqW.js" + "houseplan-assets/houseplan-card-BCodcbie.js" ], "dynamicImports": [] } diff --git a/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-Dr_sQO9B.js b/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-flaNG0_n.js similarity index 99% rename from custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-Dr_sQO9B.js rename to custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-flaNG0_n.js index e2f2bbd8..fc7e0587 100644 --- a/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-Dr_sQO9B.js +++ b/custom_components/houseplan/frontend/houseplan-assets/backdrop-pick-flaNG0_n.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b128ecf5e0a3be2860b34e0069d829a";import{D as e,b as t,A as i,q as o,t as n,ds as r}from"./houseplan-card-DPsHeJqW.js";function s(e){const t=e.visualViewport;return t&&Number.isFinite(t.width)&&Number.isFinite(t.height)?{left:Number(t.offsetLeft)||0,top:Number(t.offsetTop)||0,width:Math.max(0,Number(t.width)||0),height:Math.max(0,Number(t.height)||0)}:{left:0,top:0,width:e.innerWidth,height:e.innerHeight}}function a(e,t,i,o=7,n=8){const r=i.left+n,s=i.top+n,a=Math.max(r,i.left+i.width-n),l=Math.max(s,i.top+i.height-n),h=Math.max(0,a-r),d=Math.max(0,l-s),c=Math.min(Math.max(0,t.width),h),u=Math.min(Math.max(0,t.height),d);let p=e.left;p+c>a&&(p=e.right-c),p=Math.min(Math.max(r,p),Math.max(r,a-c));const g=e.bottom+o,_=e.top-o-u;let m="bottom",f=g;return g+u>l&&_>=s?(m="top",f=Math.min(Math.max(s,_),Math.max(s,l-u))):f=Math.min(Math.max(s,g),Math.max(s,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(h),maxHeight:Math.round(d)}}class l{constructor(e,t,i){this.owner=e,this.name=t,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(e=!1){const t=this.window();return!e&&!!t&&function(e){const t=e.HTMLElement?.prototype;return"function"==typeof t?.showPopover&&"function"==typeof t?.hidePopover}(t)}get hasFallback(){return!!this.host}containsPath(e){return e.includes(this.owner)||!!this.host&&e.includes(this.host)}ownsActiveElement(){let e=this.owner.ownerDocument.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(!e||e!==this.owner&&!this.owner.shadowRoot?.contains(e)&&!this.root?.contains(e))}renderFallback(i,o){const n=this.ensureFallback();return n?(e(t`${i}`,n),n):null}surface(e,t){return t?this.owner.shadowRoot?.querySelector(e)||null:this.root?.querySelector(e)||null}destroy(){this.root&&e(i,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const e=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!e)return null;const t=this.owner.ownerDocument.createElement("div");return t.dataset.hpOverlay=this.name,t.style.display="contents",this.keydown&&t.addEventListener("keydown",this.keydown,!0),e.append(t),this.host=t,this.root=t.attachShadow({mode:"open"}),this.root}}let h=0;class d extends n{constructor(){super(...arguments),this.text="",this.ariaLabel="",this.pointerHover=!1,this._open=!1,this._openTimer=0,this._closeTimer=0,this._positionRaf=0,this._forceFallback=!1,this._hoverOwned=!1,this._overlayDispose=null,this._scrollDialog=null,this._descriptionId="hp-help-description-"+ ++h,this._surfacePointerEnter=()=>{const e=this._window();this._closeTimer&&e?.clearTimeout(this._closeTimer),this._closeTimer=0},this._surfacePointerLeave=()=>{this._scheduleClose()},this._outsidePointerDown=e=>{if(!this._open)return;const t=e.composedPath();this._floating.containsPath(t)||this._closeHelp(!1,"outside")},this._dialogScroll=e=>{const t=this._floating.containsPath(e.composedPath()),i=e.target,o=this._dialog(),n=i instanceof Node&&(i===o||i instanceof Element&&i.contains(this));var r;this._open&&(r=n,!t&&r)&&this._closeHelp(!1,"scroll")},this._keyDown=e=>{if(!this._open||e.defaultPrevented)return;if("Escape"===e.key)return e.preventDefault(),e.stopImmediatePropagation(),void this._closeHelp(this._floating.ownsActiveElement(),"escape");const t=this.renderRoot.querySelector(".trigger");if(!t||!e.composedPath().includes(t))return;const i=this._surface();if(!i||i.scrollHeight<=i.clientHeight)return;const o=Math.max(40,.8*i.clientHeight),n={ArrowDown:40,ArrowUp:-40,PageDown:o,PageUp:-o};if("Home"===e.key)i.scrollTop=0;else if("End"===e.key)i.scrollTop=i.scrollHeight;else{if(!(e.key in n))return;i.scrollBy({top:n[e.key],behavior:"auto"})}e.preventDefault(),e.stopImmediatePropagation()},this._floating=new l(this,"help",this._keyDown),this._queuePosition=()=>{if(!this._open||this._positionRaf)return;const e=this._window();e&&(this._positionRaf=e.requestAnimationFrame(()=>{this._positionRaf=0,this._position()||this._closeHelp()}))}}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._keyDown,!0)}willUpdate(){this.toggleAttribute("data-has-content",this._hasContent())}disconnectedCallback(){const e=this.ownerDocument.defaultView;this._unsubscribeOpenListeners(),this.removeEventListener("keydown",this._keyDown,!0),this._clearTimers(),this._positionRaf&&e?.cancelAnimationFrame(this._positionRaf),this._positionRaf=0,this._closeHelp(!1,"disconnect"),super.disconnectedCallback()}updated(e){if(e.has("pointerHover")&&!this.pointerHover){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._openTimer=0,this._hoverOwned&&this._closeHelp(!1,"outside")}this._hasContent()||!this._open?this._open&&e.has("text")&&(this._usesPopover()||this._renderFallback(),this._queuePosition()):this._closeHelp()}_window(){return this._floating.window()}_dialog(){return this._floating.dialog()}_usesPopover(){return this._floating.usesPopover(this._forceFallback)}_hasContent(){return e=this.text,t=this.ariaLabel,"string"==typeof e&&e.trim().length>0&&"string"==typeof t&&t.trim().length>0;var e,t}_clearTimers(){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._closeTimer&&e?.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=0}_scheduleOpen(){const e=this._window();this.pointerHover&&e&&!this._open&&!this._openTimer&&(this._closeTimer&&e.clearTimeout(this._closeTimer),this._closeTimer=0,this._openTimer=e.setTimeout(()=>{this._openTimer=0,this.isConnected&&(this._hoverOwned=!0,this._openHelp())},300))}_scheduleClose(){const e=this._window(),t=this.renderRoot.querySelector(".trigger");e&&!t?.matches(":focus-visible")&&(this._openTimer&&e.clearTimeout(this._openTimer),this._closeTimer&&e.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=e.setTimeout(()=>{this._closeTimer=0,this.isConnected&&this._closeHelp()},150))}_triggerPointerEnter(e){this.pointerHover&&"mouse"===e.pointerType&&this._scheduleOpen()}_triggerPointerLeave(e){"mouse"===e.pointerType&&this._scheduleClose()}_triggerFocus(){queueMicrotask(()=>{const e=this.renderRoot.querySelector(".trigger");e?.matches(":focus-visible")&&(this._hoverOwned=!1,this._openHelp())})}_triggerBlur(){this._scheduleClose()}_triggerClick(){this._open?this._closeHelp():(this._hoverOwned=!1,this._openHelp())}_subscribeOpenListeners(){this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("keydown",this._keyDown,!0);const e=this._window();e?.addEventListener("resize",this._queuePosition),e?.addEventListener("orientationchange",this._queuePosition),e?.visualViewport?.addEventListener("resize",this._queuePosition),e?.visualViewport?.addEventListener("scroll",this._queuePosition),this._scrollDialog=this._dialog(),this._scrollDialog?.addEventListener("scroll",this._dialogScroll,!0)}_unsubscribeOpenListeners(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("keydown",this._keyDown,!0);const e=this._window();e?.removeEventListener("resize",this._queuePosition),e?.removeEventListener("orientationchange",this._queuePosition),e?.visualViewport?.removeEventListener("resize",this._queuePosition),e?.visualViewport?.removeEventListener("scroll",this._queuePosition),this._scrollDialog?.removeEventListener("scroll",this._dialogScroll,!0),this._scrollDialog=null}async _openHelp(){!this._open&&this._hasContent()&&(this._clearTimers(),this._forceFallback=!1,this._open=!0,this._subscribeOpenListeners(),await this.updateComplete,this._open&&(this._usesPopover()||this._renderFallback(),this._position()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:e=>this._closeHelp("escape"===e&&this._floating.ownsActiveElement(),e)})||null:this._closeHelp()))}_closeHelp(e=!1,t="exclusive"){if(!this._open&&!this._floating.hasFallback)return;this._clearTimers();const i=this._overlayDispose;this._overlayDispose=null,i?.();const o=this.renderRoot.querySelector(".tooltip");if(o?.hidePopover)try{o.matches(":popover-open")&&o.hidePopover()}catch{}this._open=!1,this._hoverOwned=!1,this._unsubscribeOpenListeners(),this._floating.destroy(),e&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_tooltipTemplate(e){return t`

a&&(p=e.right-c),p=Math.min(Math.max(r,p),Math.max(r,a-c));const g=e.bottom+o,_=e.top-o-u;let m="bottom",f=g;return g+u>l&&_>=s?(m="top",f=Math.min(Math.max(s,_),Math.max(s,l-u))):f=Math.min(Math.max(s,g),Math.max(s,l-u)),{left:Math.round(p),top:Math.round(f),side:m,maxWidth:Math.round(h),maxHeight:Math.round(d)}}class l{constructor(e,t,i){this.owner=e,this.name=t,this.keydown=i,this.host=null,this.root=null}window(){return this.owner.ownerDocument.defaultView}dialog(){return this.owner.closest("hp-dialog")}usesPopover(e=!1){const t=this.window();return!e&&!!t&&function(e){const t=e.HTMLElement?.prototype;return"function"==typeof t?.showPopover&&"function"==typeof t?.hidePopover}(t)}get hasFallback(){return!!this.host}containsPath(e){return e.includes(this.owner)||!!this.host&&e.includes(this.host)}ownsActiveElement(){let e=this.owner.ownerDocument.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return!(!e||e!==this.owner&&!this.owner.shadowRoot?.contains(e)&&!this.root?.contains(e))}renderFallback(i,o){const n=this.ensureFallback();return n?(e(t`${i}`,n),n):null}surface(e,t){return t?this.owner.shadowRoot?.querySelector(e)||null:this.root?.querySelector(e)||null}destroy(){this.root&&e(i,this.root),this.host?.remove(),this.host=null,this.root=null}ensureFallback(){if(this.root?.isConnected)return this.root;const e=this.dialog()?.overlayPortal()||this.owner.ownerDocument.body;if(!e)return null;const t=this.owner.ownerDocument.createElement("div");return t.dataset.hpOverlay=this.name,t.style.display="contents",this.keydown&&t.addEventListener("keydown",this.keydown,!0),e.append(t),this.host=t,this.root=t.attachShadow({mode:"open"}),this.root}}let h=0;class d extends n{constructor(){super(...arguments),this.text="",this.ariaLabel="",this.pointerHover=!1,this._open=!1,this._openTimer=0,this._closeTimer=0,this._positionRaf=0,this._forceFallback=!1,this._hoverOwned=!1,this._overlayDispose=null,this._scrollDialog=null,this._descriptionId="hp-help-description-"+ ++h,this._surfacePointerEnter=()=>{const e=this._window();this._closeTimer&&e?.clearTimeout(this._closeTimer),this._closeTimer=0},this._surfacePointerLeave=()=>{this._scheduleClose()},this._outsidePointerDown=e=>{if(!this._open)return;const t=e.composedPath();this._floating.containsPath(t)||this._closeHelp(!1,"outside")},this._dialogScroll=e=>{const t=this._floating.containsPath(e.composedPath()),i=e.target,o=this._dialog(),n=i instanceof Node&&(i===o||i instanceof Element&&i.contains(this));var r;this._open&&(r=n,!t&&r)&&this._closeHelp(!1,"scroll")},this._keyDown=e=>{if(!this._open||e.defaultPrevented)return;if("Escape"===e.key)return e.preventDefault(),e.stopImmediatePropagation(),void this._closeHelp(this._floating.ownsActiveElement(),"escape");const t=this.renderRoot.querySelector(".trigger");if(!t||!e.composedPath().includes(t))return;const i=this._surface();if(!i||i.scrollHeight<=i.clientHeight)return;const o=Math.max(40,.8*i.clientHeight),n={ArrowDown:40,ArrowUp:-40,PageDown:o,PageUp:-o};if("Home"===e.key)i.scrollTop=0;else if("End"===e.key)i.scrollTop=i.scrollHeight;else{if(!(e.key in n))return;i.scrollBy({top:n[e.key],behavior:"auto"})}e.preventDefault(),e.stopImmediatePropagation()},this._floating=new l(this,"help",this._keyDown),this._queuePosition=()=>{if(!this._open||this._positionRaf)return;const e=this._window();e&&(this._positionRaf=e.requestAnimationFrame(()=>{this._positionRaf=0,this._position()||this._closeHelp()}))}}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this._keyDown,!0)}willUpdate(){this.toggleAttribute("data-has-content",this._hasContent())}disconnectedCallback(){const e=this.ownerDocument.defaultView;this._unsubscribeOpenListeners(),this.removeEventListener("keydown",this._keyDown,!0),this._clearTimers(),this._positionRaf&&e?.cancelAnimationFrame(this._positionRaf),this._positionRaf=0,this._closeHelp(!1,"disconnect"),super.disconnectedCallback()}updated(e){if(e.has("pointerHover")&&!this.pointerHover){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._openTimer=0,this._hoverOwned&&this._closeHelp(!1,"outside")}this._hasContent()||!this._open?this._open&&e.has("text")&&(this._usesPopover()||this._renderFallback(),this._queuePosition()):this._closeHelp()}_window(){return this._floating.window()}_dialog(){return this._floating.dialog()}_usesPopover(){return this._floating.usesPopover(this._forceFallback)}_hasContent(){return e=this.text,t=this.ariaLabel,"string"==typeof e&&e.trim().length>0&&"string"==typeof t&&t.trim().length>0;var e,t}_clearTimers(){const e=this._window();this._openTimer&&e?.clearTimeout(this._openTimer),this._closeTimer&&e?.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=0}_scheduleOpen(){const e=this._window();this.pointerHover&&e&&!this._open&&!this._openTimer&&(this._closeTimer&&e.clearTimeout(this._closeTimer),this._closeTimer=0,this._openTimer=e.setTimeout(()=>{this._openTimer=0,this.isConnected&&(this._hoverOwned=!0,this._openHelp())},300))}_scheduleClose(){const e=this._window(),t=this.renderRoot.querySelector(".trigger");e&&!t?.matches(":focus-visible")&&(this._openTimer&&e.clearTimeout(this._openTimer),this._closeTimer&&e.clearTimeout(this._closeTimer),this._openTimer=0,this._closeTimer=e.setTimeout(()=>{this._closeTimer=0,this.isConnected&&this._closeHelp()},150))}_triggerPointerEnter(e){this.pointerHover&&"mouse"===e.pointerType&&this._scheduleOpen()}_triggerPointerLeave(e){"mouse"===e.pointerType&&this._scheduleClose()}_triggerFocus(){queueMicrotask(()=>{const e=this.renderRoot.querySelector(".trigger");e?.matches(":focus-visible")&&(this._hoverOwned=!1,this._openHelp())})}_triggerBlur(){this._scheduleClose()}_triggerClick(){this._open?this._closeHelp():(this._hoverOwned=!1,this._openHelp())}_subscribeOpenListeners(){this.ownerDocument.addEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.addEventListener("keydown",this._keyDown,!0);const e=this._window();e?.addEventListener("resize",this._queuePosition),e?.addEventListener("orientationchange",this._queuePosition),e?.visualViewport?.addEventListener("resize",this._queuePosition),e?.visualViewport?.addEventListener("scroll",this._queuePosition),this._scrollDialog=this._dialog(),this._scrollDialog?.addEventListener("scroll",this._dialogScroll,!0)}_unsubscribeOpenListeners(){this.ownerDocument.removeEventListener("pointerdown",this._outsidePointerDown,!0),this.ownerDocument.removeEventListener("keydown",this._keyDown,!0);const e=this._window();e?.removeEventListener("resize",this._queuePosition),e?.removeEventListener("orientationchange",this._queuePosition),e?.visualViewport?.removeEventListener("resize",this._queuePosition),e?.visualViewport?.removeEventListener("scroll",this._queuePosition),this._scrollDialog?.removeEventListener("scroll",this._dialogScroll,!0),this._scrollDialog=null}async _openHelp(){!this._open&&this._hasContent()&&(this._clearTimers(),this._forceFallback=!1,this._open=!0,this._subscribeOpenListeners(),await this.updateComplete,this._open&&(this._usesPopover()||this._renderFallback(),this._position()?this._overlayDispose=this._dialog()?.registerOverlay({owner:this,group:"transient",close:e=>this._closeHelp("escape"===e&&this._floating.ownsActiveElement(),e)})||null:this._closeHelp()))}_closeHelp(e=!1,t="exclusive"){if(!this._open&&!this._floating.hasFallback)return;this._clearTimers();const i=this._overlayDispose;this._overlayDispose=null,i?.();const o=this.renderRoot.querySelector(".tooltip");if(o?.hidePopover)try{o.matches(":popover-open")&&o.hidePopover()}catch{}this._open=!1,this._hoverOwned=!1,this._unsubscribeOpenListeners(),this._floating.destroy(),e&&this.updateComplete.then(()=>this.renderRoot.querySelector(".trigger")?.focus())}_tooltipTemplate(e){return t``}_renderFallback(){const e=d.styles.cssText;this._floating.renderFallback(this._tooltipTemplate(!1),e)}_surface(){return this._floating.surface(".tooltip",this._usesPopover())}_position(){if(!this._open)return!1;const e=this._window(),t=this.renderRoot.querySelector(".trigger");let i=this._surface();if(!e||!t?.isConnected||!i?.isConnected)return!1;const o=s(e);if(i.style.maxWidth=`${Math.max(0,Math.min(320,o.width-16))}px`,i.style.maxHeight=`${Math.max(0,o.height-16)}px`,i.style.visibility="hidden",this._usesPopover()&&i.showPopover)try{i.matches(":popover-open")||i.showPopover()}catch{if(this._forceFallback=!0,this._renderFallback(),i=this._surface(),!i?.isConnected)return!1;i.style.visibility="hidden"}const n=t.getBoundingClientRect(),r=i.getBoundingClientRect();if(!(n.width&&n.height&&r.width&&r.height))return!1;const l=a(n,r,o);return i.style.left=`${l.left}px`,i.style.top=`${l.top}px`,i.dataset.side=l.side,i.style.visibility="",!0}render(){if(!this._hasContent())return i;const e=this.ariaLabel.trim();return t` ({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`({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`r===this.ot[e]))return t}else if(this.ot===e)return t;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,a)}});export{s as i}; diff --git a/custom_components/houseplan/frontend/houseplan-assets/guard-eiu_tbpd.js b/custom_components/houseplan/frontend/houseplan-assets/guard-eiu_tbpd.js new file mode 100644 index 00000000..2b874ba3 --- /dev/null +++ b/custom_components/houseplan/frontend/houseplan-assets/guard-eiu_tbpd.js @@ -0,0 +1 @@ +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6412fad64699400d6b77fdda3cf1ecebe27c1dc2134d0e63e34fc7ef196a99a0";import{dK as r,dL as e,dM as t}from"./houseplan-card-BCodcbie.js";const s={},a=r(class extends e{constructor(){super(...arguments),this.ot=s}render(r,e){return e()}update(r,[e,s]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((r,e)=>r===this.ot[e]))return t}else if(this.ot===e)return t;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,s)}});export{a as i}; diff --git a/custom_components/houseplan/frontend/houseplan-assets/houseplan-card-DPsHeJqW.js b/custom_components/houseplan/frontend/houseplan-assets/houseplan-card-BCodcbie.js similarity index 60% rename from custom_components/houseplan/frontend/houseplan-assets/houseplan-card-DPsHeJqW.js rename to custom_components/houseplan/frontend/houseplan-assets/houseplan-card-BCodcbie.js index b8b564cb..8ad69ea2 100644 --- a/custom_components/houseplan/frontend/houseplan-assets/houseplan-card-DPsHeJqW.js +++ b/custom_components/houseplan/frontend/houseplan-assets/houseplan-card-BCodcbie.js @@ -1,5 +1,5 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b128ecf5e0a3be2860b34e0069d829a";const e=globalThis,t=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),n=new WeakMap;let r=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const i=this.t;if(t&&void 0===e){const t=void 0!==i&&1===i.length;t&&(e=n.get(i)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&n.set(i,e))}return e}toString(){return this.cssText}};const o=(e,...t)=>{const n=1===e.length?e[0]:t.reduce((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1],e[0]);return new r(n,e,i)},s=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e,{is:a,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,m=_?_.emptyScript:"",g=p.reactiveElementPolyfillSupport,f=(e,t)=>e,v={toAttribute(e,t){switch(t){case Boolean:e=e?m:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!a(e,t),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=b){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),n=this.getPropertyDescriptor(e,i,t);void 0!==n&&l(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){const{get:n,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:n,set(t){const o=n?.call(this);r?.call(this,t),this.requestUpdate(e,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const e=this.properties,t=[...h(e),...d(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{if(t)i.adoptedStyleSheets=n.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const t of n){const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,n=i._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=i.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:v;this._$Em=n;const o=r.fromAttribute(t,e.type);this[n]=o??this._$Ej?.get(n)??o,this._$Em=null}}requestUpdate(e,t,i,n=!1,r){if(void 0!==e){const o=this.constructor;if(!1===n&&(r=this[e]),i??=o.getPropertyOptions(e),!((i.hasChanged??y)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:n,wrapped:r},o){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),!0!==r||void 0!==o)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===n&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,n=this[t];!0!==e||this._$AL.has(t)||void 0===n||this.C(t,void 0,i,n)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,g?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=e=>e,S=k.trustedTypes,$=S?S.createPolicy("lit-html",{createHTML:e=>e}):void 0,M="$lit$",R=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+R,T=`<${C}>`,D=document,A=()=>D.createComment(""),P=e=>null===e||"object"!=typeof e&&"function"!=typeof e,F=Array.isArray,z="[ \t\n\f\r]",I=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,O=/-->/g,E=/>/g,N=RegExp(`>|${z}(?:([^\\s"'>=/]+)(${z}*=${z}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),G=new WeakMap,K=D.createTreeWalker(D,129);function Y(e,t){if(!F(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==$?$.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,n=[];let r,o=2===t?"":3===t?"":"",s=I;for(let t=0;t"===l[0]?(s=r??I,c=-1):void 0===l[1]?c=-2:(c=s.lastIndex-l[2].length,a=l[1],s=void 0===l[3]?N:'"'===l[3]?L:H):s===L||s===H?s=N:s===O||s===E?s=I:(s=N,r=void 0);const d=s===N&&e[t+1].startsWith("/>")?" ":"";o+=s===I?i+T:c>=0?(n.push(a),i.slice(0,c)+M+i.slice(c)+R+d):i+R+(-2===c?t:d)}return[Y(e,o+(e[i]||"")+(2===t?"":3===t?"":"")),n]};class Z{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,o=0;const s=e.length-1,a=this.parts,[l,c]=X(e,t);if(this.el=Z.createElement(l,i),K.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(n=K.nextNode())&&a.length0){n.textContent=S?S.emptyScript:"";for(let i=0;iF(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==V&&P(this._$AH)?this._$AA.nextSibling.data=e:this.T(D.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=Z.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===n)this._$AH.p(t);else{const e=new Q(n,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=G.get(e.strings);return void 0===t&&G.set(e.strings,t=new Z(e)),t}k(e){F(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new ee(this.O(A()),this.O(A()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}_$AI(e,t=this,i,n){const r=this.strings;let o=!1;if(void 0===r)e=J(this,e,t,0),o=!P(e)||e!==this._$AH&&e!==U,o&&(this._$AH=e);else{const n=e;let s,a;for(e=r[0],s=0;s{const n=i?.renderBefore??t;let r=n._$litPart$;if(void 0===r){const e=i?.renderBefore??null;n._$litPart$=r=new ee(t.insertBefore(A(),e),e,void 0,i??{})}return r._$AI(e),r},ce=globalThis;let he=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=le(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};he._$litElement$=!0,he.finalized=!0,ce.litElementHydrateSupport?.({LitElement:he});const de=ce.litElementPolyfillSupport;de?.({LitElement:he}),(ce.litElementVersions??=[]).push("4.2.2");const ue=2,pe=e=>(...t)=>({_$litDirective$:e,values:t});let _e=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}};const{I:me}=se,ge=e=>e,fe=(e,t)=>void 0!==e?._$litType$,ve=()=>document.createComment(""),ye=(e,t,i)=>{const n=e._$AA.parentNode,r=void 0===t?e._$AB:t._$AA;if(void 0===i){const t=n.insertBefore(ve(),r),o=n.insertBefore(ve(),r);i=new me(t,o,e,e.options)}else{const t=i._$AB.nextSibling,o=i._$AM,s=o!==e;if(s){let t;i._$AQ?.(e),i._$AM=e,void 0!==i._$AP&&(t=e._$AU)!==o._$AU&&i._$AP(t)}if(t!==r||s){let e=i._$AA;for(;e!==t;){const t=ge(e).nextSibling;ge(n).insertBefore(e,r),e=t}}}return i},be=(e,t,i=e)=>(e._$AI(t,i),e),we={},ke=(e,t=we)=>e._$AH=t,xe=e=>e._$AH,Se=e=>{e._$AR(),e._$AA.remove()},$e=e=>(e=>null!=e?._$litType$?.h)(e)?e._$litType$.h:e.strings,Me=pe(class extends _e{constructor(e){super(e),this.et=new WeakMap}render(e){return[e]}update(e,[t]){const i=fe(this.it)?$e(this.it):null,n=fe(t)?$e(t):null;if(null!==i&&(null===n||i!==n)){const t=xe(e).pop();let n=this.et.get(i);if(void 0===n){const e=document.createDocumentFragment();n=le(V,e),n.setConnected(!1),this.et.set(i,n)}ke(n,[t]),ye(n,void 0,t)}if(null!==n){if(null===i||i!==n){const t=this.et.get(n);if(void 0!==t){const i=xe(t).pop();(e=>{e._$AR()})(e),ye(e,void 0,i),ke(e,[i])}}this.it=t}else this.it=void 0;return this.render(t)}}),Re=new WeakMap;let Ce=0;class Te extends he{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.alert=!1,this.describedBy="",this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=null,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Ce,this._focusInitial=()=>{const e=this._focusableElements(),t=e.find(e=>e.hasAttribute("autofocus"))||e[0]||(this._usesHaDialog()?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");t?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=e=>{if("Escape"===e.key){e.preventDefault(),e.stopImmediatePropagation(),this._pruneOverlays();const t=this._overlays[this._overlays.length-1];return t?void this._closeOverlay(t,"escape"):void this._requestClose()}if("Tab"!==e.key||this._usesHaDialog())return;const t=this.renderRoot.querySelector(".close"),i=t?[t,...this._focusableElements()]:this._focusableElements();if(!i.length)return e.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const n=this._deepActiveElement(),r=i[0],o=i[i.length-1];!e.shiftKey||n!==r&&i.includes(n)?e.shiftKey||n!==o||(e.preventDefault(),r.focus()):(e.preventDefault(),o.focus())},this._onFallbackCancel=e=>{e.preventDefault(),this._requestClose()},this._onFallbackClick=e=>{this.dismissOnScrim&&e.target===e.currentTarget&&this._requestClose()}}_usesHaDialog(){return!0===this._useHaDialog&&!this.alert}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const e=this.getRootNode();this._focusRoot=e;const t=Re.get(e)||{dialogs:new Set,opener:this._opener};t.dialogs.add(this),Re.set(e,t),null===this._useHaDialog&&(this._useHaDialog=!!customElements.get("ha-dialog")),this.addEventListener("keydown",this._onKeyDown,!0),queueMicrotask(()=>{this._ensureNativeModal()&&this._focusInitial()})}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const e=[...this._overlays];this._overlays=[];for(const t of e.reverse())t.close("disconnect");const t=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const n=t?Re.get(t):void 0;n?.dialogs.delete(this),super.disconnectedCallback(),t&&n&&requestAnimationFrame(()=>{const e=Re.get(t);if(!e)return;if(!e.dialogs.size)return e.opener?.isConnected&&e.opener.focus({preventScroll:!0}),void Re.delete(t);const n=i?.closest("hp-dialog");i?.isConnected&&n&&e.dialogs.has(n)&&i.focus({preventScroll:!0})})}firstUpdated(e){super.firstUpdated(e),this._ensureNativeModal(),queueMicrotask(()=>this._focusInitial())}updated(e){super.updated(e),this._ensureNativeModal()}_ensureNativeModal(){if(this._usesHaDialog()||!this.isConnected)return!1;const e=this.renderRoot.querySelector("dialog");if(!e?.isConnected)return!1;try{return!e.matches(":modal")&&(e.open&&e.close(),e.showModal(),!0)}catch{return!1}}_deepActiveElement(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e&&e!==document.body?e:null}_focusableElements(){const e=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),t=[],i=new Set,n=r=>{if(!i.has(r)){if(i.add(r),r instanceof HTMLElement){if(r.matches(e)&&t.push(r),r instanceof HTMLSlotElement){for(const e of r.assignedNodes({flatten:!0}))n(e);return}if(r.shadowRoot){for(const e of r.shadowRoot.childNodes)n(e);return}}for(const e of r.childNodes)n(e)}};for(const e of this.childNodes)n(e);const r=this.overlayPortal();return r&&n(r),t.filter(e=>{let t=e;for(;t;){const e=getComputedStyle(t);if(t.hidden||t.inert||"true"===t.getAttribute("aria-hidden")||"none"===e.display||"hidden"===e.visibility)return!1;if(t=t.assignedSlot||t.parentElement||(t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:null),t===this)break}return!0})}rejectClose(){this._closing=!1,this.requestUpdate()}_pruneOverlays(){this._overlays=this._overlays.filter(e=>e.owner.isConnected)}_closeOverlay(e,t){const i=this._overlays.findIndex(t=>t.token===e.token);i>=0&&this._overlays.splice(i,1),e.close(t)}registerOverlay(e){this._pruneOverlays();const t=this._overlays.find(t=>t.owner===e.owner);t&&this._overlays.splice(this._overlays.indexOf(t),1);const i=e.group||"transient";for(const e of[...this._overlays].reverse())e.group===i&&this._closeOverlay(e,"exclusive");const n={...e,group:i,token:Symbol("hp-overlay")};this._overlays.push(n);let r=!1;return()=>{if(r)return;r=!0;const e=this._overlays.findIndex(e=>e.token===n.token);e>=0&&this._overlays.splice(e,1)}}closeTransientOverlays(e="outside"){this._pruneOverlays();const t=[...this._overlays].filter(e=>"transient"===(e.group||"transient"));for(const i of t.reverse())this._closeOverlay(i,e);return t.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const e=j` - ${this.icon?j``:V} +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6412fad64699400d6b77fdda3cf1ecebe27c1dc2134d0e63e34fc7ef196a99a0";const e=globalThis,t=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),n=new WeakMap;let r=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const i=this.t;if(t&&void 0===e){const t=void 0!==i&&1===i.length;t&&(e=n.get(i)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&n.set(i,e))}return e}toString(){return this.cssText}};const o=(e,...t)=>{const n=1===e.length?e[0]:t.reduce((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1],e[0]);return new r(n,e,i)},s=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e,{is:a,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:h,getOwnPropertySymbols:d,getPrototypeOf:u}=Object,p=globalThis,_=p.trustedTypes,m=_?_.emptyScript:"",g=p.reactiveElementPolyfillSupport,f=(e,t)=>e,v={toAttribute(e,t){switch(t){case Boolean:e=e?m:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},y=(e,t)=>!a(e,t),b={attribute:!0,type:String,converter:v,reflect:!1,useDefault:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),p.litPropertyMetadata??=new WeakMap;let w=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=b){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),n=this.getPropertyDescriptor(e,i,t);void 0!==n&&l(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){const{get:n,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:n,set(t){const o=n?.call(this);r?.call(this,t),this.requestUpdate(e,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??b}static _$Ei(){if(this.hasOwnProperty(f("elementProperties")))return;const e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(f("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(f("properties"))){const e=this.properties,t=[...h(e),...d(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{if(t)i.adoptedStyleSheets=n.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(const t of n){const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$ET(e,t){const i=this.constructor.elementProperties.get(e),n=this.constructor._$Eu(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:v).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,n=i._$Eh.get(e);if(void 0!==n&&this._$Em!==n){const e=i.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:v;this._$Em=n;const o=r.fromAttribute(t,e.type);this[n]=o??this._$Ej?.get(n)??o,this._$Em=null}}requestUpdate(e,t,i,n=!1,r){if(void 0!==e){const o=this.constructor;if(!1===n&&(r=this[e]),i??=o.getPropertyOptions(e),!((i.hasChanged??y)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:n,wrapped:r},o){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),!0!==r||void 0!==o)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===n&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e){const{wrapped:e}=i,n=this[t];!0!==e||this._$AL.has(t)||void 0===n||this.C(t,void 0,i,n)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};w.elementStyles=[],w.shadowRootOptions={mode:"open"},w[f("elementProperties")]=new Map,w[f("finalized")]=new Map,g?.({ReactiveElement:w}),(p.reactiveElementVersions??=[]).push("2.1.2");const k=globalThis,x=e=>e,S=k.trustedTypes,$=S?S.createPolicy("lit-html",{createHTML:e=>e}):void 0,M="$lit$",R=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+R,T=`<${C}>`,D=document,A=()=>D.createComment(""),P=e=>null===e||"object"!=typeof e&&"function"!=typeof e,F=Array.isArray,z="[ \t\n\f\r]",I=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,O=/-->/g,E=/>/g,N=RegExp(`>|${z}(?:([^\\s"'>=/]+)(${z}*=${z}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,L=/"/g,B=/^(?:script|style|textarea|title)$/i,q=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),j=q(1),W=q(2),U=Symbol.for("lit-noChange"),G=Symbol.for("lit-nothing"),V=new WeakMap,K=D.createTreeWalker(D,129);function Y(e,t){if(!F(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==$?$.createHTML(t):t}const X=(e,t)=>{const i=e.length-1,n=[];let r,o=2===t?"":3===t?"":"",s=I;for(let t=0;t"===l[0]?(s=r??I,c=-1):void 0===l[1]?c=-2:(c=s.lastIndex-l[2].length,a=l[1],s=void 0===l[3]?N:'"'===l[3]?L:H):s===L||s===H?s=N:s===O||s===E?s=I:(s=N,r=void 0);const d=s===N&&e[t+1].startsWith("/>")?" ":"";o+=s===I?i+T:c>=0?(n.push(a),i.slice(0,c)+M+i.slice(c)+R+d):i+R+(-2===c?t:d)}return[Y(e,o+(e[i]||"")+(2===t?"":3===t?"":"")),n]};class Z{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,o=0;const s=e.length-1,a=this.parts,[l,c]=X(e,t);if(this.el=Z.createElement(l,i),K.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(n=K.nextNode())&&a.length0){n.textContent=S?S.emptyScript:"";for(let i=0;iF(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==G&&P(this._$AH)?this._$AA.nextSibling.data=e:this.T(D.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,n="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=Z.createElement(Y(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===n)this._$AH.p(t);else{const e=new Q(n,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=V.get(e.strings);return void 0===t&&V.set(e.strings,t=new Z(e)),t}k(e){F(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new ee(this.O(A()),this.O(A()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=G}_$AI(e,t=this,i,n){const r=this.strings;let o=!1;if(void 0===r)e=J(this,e,t,0),o=!P(e)||e!==this._$AH&&e!==U,o&&(this._$AH=e);else{const n=e;let s,a;for(e=r[0],s=0;s{const n=i?.renderBefore??t;let r=n._$litPart$;if(void 0===r){const e=i?.renderBefore??null;n._$litPart$=r=new ee(t.insertBefore(A(),e),e,void 0,i??{})}return r._$AI(e),r},ce=globalThis;let he=class extends w{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=le(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return U}};he._$litElement$=!0,he.finalized=!0,ce.litElementHydrateSupport?.({LitElement:he});const de=ce.litElementPolyfillSupport;de?.({LitElement:he}),(ce.litElementVersions??=[]).push("4.2.2");const ue=2,pe=e=>(...t)=>({_$litDirective$:e,values:t});let _e=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}};const{I:me}=se,ge=e=>e,fe=(e,t)=>void 0!==e?._$litType$,ve=()=>document.createComment(""),ye=(e,t,i)=>{const n=e._$AA.parentNode,r=void 0===t?e._$AB:t._$AA;if(void 0===i){const t=n.insertBefore(ve(),r),o=n.insertBefore(ve(),r);i=new me(t,o,e,e.options)}else{const t=i._$AB.nextSibling,o=i._$AM,s=o!==e;if(s){let t;i._$AQ?.(e),i._$AM=e,void 0!==i._$AP&&(t=e._$AU)!==o._$AU&&i._$AP(t)}if(t!==r||s){let e=i._$AA;for(;e!==t;){const t=ge(e).nextSibling;ge(n).insertBefore(e,r),e=t}}}return i},be=(e,t,i=e)=>(e._$AI(t,i),e),we={},ke=(e,t=we)=>e._$AH=t,xe=e=>e._$AH,Se=e=>{e._$AR(),e._$AA.remove()},$e=e=>(e=>null!=e?._$litType$?.h)(e)?e._$litType$.h:e.strings,Me=pe(class extends _e{constructor(e){super(e),this.et=new WeakMap}render(e){return[e]}update(e,[t]){const i=fe(this.it)?$e(this.it):null,n=fe(t)?$e(t):null;if(null!==i&&(null===n||i!==n)){const t=xe(e).pop();let n=this.et.get(i);if(void 0===n){const e=document.createDocumentFragment();n=le(G,e),n.setConnected(!1),this.et.set(i,n)}ke(n,[t]),ye(n,void 0,t)}if(null!==n){if(null===i||i!==n){const t=this.et.get(n);if(void 0!==t){const i=xe(t).pop();(e=>{e._$AR()})(e),ye(e,void 0,i),ke(e,[i])}}this.it=t}else this.it=void 0;return this.render(t)}}),Re=new WeakMap;let Ce=0;class Te extends he{constructor(){super(...arguments),this.title="",this.icon="",this.wide=!1,this.alert=!1,this.describedBy="",this.dismissOnScrim=!1,this.hass=null,this._opener=null,this._focusRoot=null,this._useHaDialog=null,this._closing=!1,this._overlays=[],this._titleId="hp-dialog-title-"+ ++Ce,this._focusInitial=()=>{const e=this._focusableElements(),t=e.find(e=>e.hasAttribute("autofocus"))||e[0]||(this._usesHaDialog()?null:this.renderRoot.querySelector(".close"))||this.renderRoot.querySelector(".surface")||this.renderRoot.querySelector("ha-dialog");t?.focus({preventScroll:!0})},this._requestClose=()=>{this._closing||(this._closing=!0,this.dispatchEvent(new CustomEvent("hp-close",{bubbles:!0,composed:!0})))},this._onKeyDown=e=>{if("Escape"===e.key){e.preventDefault(),e.stopImmediatePropagation(),this._pruneOverlays();const t=this._overlays[this._overlays.length-1];return t?void this._closeOverlay(t,"escape"):void this._requestClose()}if("Tab"!==e.key||this._usesHaDialog())return;const t=this.renderRoot.querySelector(".close"),i=t?[t,...this._focusableElements()]:this._focusableElements();if(!i.length)return e.preventDefault(),void this.renderRoot.querySelector(".surface")?.focus({preventScroll:!0});const n=this._deepActiveElement(),r=i[0],o=i[i.length-1];!e.shiftKey||n!==r&&i.includes(n)?e.shiftKey||n!==o||(e.preventDefault(),r.focus()):(e.preventDefault(),o.focus())},this._onFallbackCancel=e=>{e.preventDefault(),this._requestClose()},this._onFallbackClick=e=>{this.dismissOnScrim&&e.target===e.currentTarget&&this._requestClose()}}_usesHaDialog(){return!0===this._useHaDialog&&!this.alert}connectedCallback(){super.connectedCallback(),this._opener=this._deepActiveElement();const e=this.getRootNode();this._focusRoot=e;const t=Re.get(e)||{dialogs:new Set,opener:this._opener};t.dialogs.add(this),Re.set(e,t),null===this._useHaDialog&&(this._useHaDialog=!!customElements.get("ha-dialog")),this.addEventListener("keydown",this._onKeyDown,!0),queueMicrotask(()=>{this._ensureNativeModal()&&this._focusInitial()})}disconnectedCallback(){this.removeEventListener("keydown",this._onKeyDown,!0);const e=[...this._overlays];this._overlays=[];for(const t of e.reverse())t.close("disconnect");const t=this._focusRoot,i=this._opener;this._opener=null,this._focusRoot=null;const n=t?Re.get(t):void 0;n?.dialogs.delete(this),super.disconnectedCallback(),t&&n&&requestAnimationFrame(()=>{const e=Re.get(t);if(!e)return;if(!e.dialogs.size)return e.opener?.isConnected&&e.opener.focus({preventScroll:!0}),void Re.delete(t);const n=i?.closest("hp-dialog");i?.isConnected&&n&&e.dialogs.has(n)&&i.focus({preventScroll:!0})})}firstUpdated(e){super.firstUpdated(e),this._ensureNativeModal(),queueMicrotask(()=>this._focusInitial())}updated(e){super.updated(e),this._ensureNativeModal()}_ensureNativeModal(){if(this._usesHaDialog()||!this.isConnected)return!1;const e=this.renderRoot.querySelector("dialog");if(!e?.isConnected)return!1;try{return!e.matches(":modal")&&(e.open&&e.close(),e.showModal(),!0)}catch{return!1}}_deepActiveElement(){let e=document.activeElement;for(;e?.shadowRoot?.activeElement;)e=e.shadowRoot.activeElement;return e&&e!==document.body?e:null}_focusableElements(){const e=["[autofocus]","a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])",'[contenteditable="true"]','[tabindex]:not([tabindex="-1"])'].join(","),t=[],i=new Set,n=r=>{if(!i.has(r)){if(i.add(r),r instanceof HTMLElement){if(r.matches(e)&&t.push(r),r instanceof HTMLSlotElement){for(const e of r.assignedNodes({flatten:!0}))n(e);return}if(r.shadowRoot){for(const e of r.shadowRoot.childNodes)n(e);return}}for(const e of r.childNodes)n(e)}};for(const e of this.childNodes)n(e);const r=this.overlayPortal();return r&&n(r),t.filter(e=>{let t=e;for(;t;){const e=getComputedStyle(t);if(t.hidden||t.inert||"true"===t.getAttribute("aria-hidden")||"none"===e.display||"hidden"===e.visibility)return!1;if(t=t.assignedSlot||t.parentElement||(t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:null),t===this)break}return!0})}rejectClose(){this._closing=!1,this.requestUpdate()}_pruneOverlays(){this._overlays=this._overlays.filter(e=>e.owner.isConnected)}_closeOverlay(e,t){const i=this._overlays.findIndex(t=>t.token===e.token);i>=0&&this._overlays.splice(i,1),e.close(t)}registerOverlay(e){this._pruneOverlays();const t=this._overlays.find(t=>t.owner===e.owner);t&&this._overlays.splice(this._overlays.indexOf(t),1);const i=e.group||"transient";for(const e of[...this._overlays].reverse())e.group===i&&this._closeOverlay(e,"exclusive");const n={...e,group:i,token:Symbol("hp-overlay")};this._overlays.push(n);let r=!1;return()=>{if(r)return;r=!0;const e=this._overlays.findIndex(e=>e.token===n.token);e>=0&&this._overlays.splice(e,1)}}closeTransientOverlays(e="outside"){this._pruneOverlays();const t=[...this._overlays].filter(e=>"transient"===(e.group||"transient"));for(const i of t.reverse())this._closeOverlay(i,e);return t.length>0}overlayPortal(){return this.renderRoot.querySelector(".overlay-portal")}render(){const e=j` + ${this.icon?j``:G} ${this.title} `;return this._usesHaDialog()?this.describedBy?j` @@ -247,14 +247,14 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12
- `}}De.properties={hass:{attribute:!1},request:{attribute:!1},token:{type:Number}},customElements.get("hp-confirm")||customElements.define("hp-confirm",De);class Ae{constructor(e){this._changed=e,this._sequence=0,this._active=null}get state(){return this._active?{token:this._active.token,request:this._active.request}:null}confirm(e){this.cancel();const t={token:++this._sequence,request:Object.freeze({...e})};return new Promise(e=>{this._active={...t,resolve:e},this._changed(t)})}resolve(e,t){const i=this._active;return!(!i||i.token!==e)&&(this._active=null,this._changed(null),i.resolve(t),!0)}cancel(){const e=this._active;return!!e&&this.resolve(e.token,!1)}}const Pe=new Set(["hacs","sun","backup","hassio","met","telegram_bot","mobile_app","systemmonitor","better_thermostat","adaptive_lighting","yandex_pogoda","upnp_serial_number"]),Fe=[{pattern:"протечк|leak|water sensor",icon:"mdi:water-alert"},{pattern:"клапан|valve",icon:"mdi:pipe-valve"},{pattern:"дым|smoke",icon:"mdi:smoke-detector"},{pattern:"термоголов|trv|radiator",icon:"mdi:radiator"},{pattern:"чайник|kettle|термопот",icon:"mdi:kettle"},{pattern:"сауна|sauna|harvia|парная|парилк",icon:"mdi:hot-tub"},{pattern:"температ|temperature|thermometer|climate sensor",icon:"mdi:thermometer"},{pattern:"qingping|air monitor|молекул|air quality",icon:"mdi:air-filter"},{pattern:"штор|curtain|blind|shade",icon:"mdi:roller-shade"},{pattern:"розетк|plug|socket|outlet",icon:"mdi:power-socket-de"},{pattern:"выключат|switch",icon:"mdi:light-switch"},{pattern:"лампа|лампочк|bulb|gx53|светильник|rgb|lamp|light strip",icon:"mdi:lightbulb"},{pattern:"камер|camera",icon:"mdi:cctv"},{pattern:"замок|ttlock|lock|sn609|sn9161",icon:"mdi:lock"},{pattern:"ворота|garage|gate",icon:"mdi:garage-variant"},{pattern:"калитк|door|открыт|contact",icon:"mdi:door"},{pattern:"счётчик|счетчик|kws|meter",icon:"mdi:meter-electric"},{pattern:"вводный автомат|breaker|wifimcbn",icon:"mdi:electric-switch"},{pattern:"myheat|котёл|котел|boiler|отоплен|heating",icon:"mdi:water-boiler"},{pattern:"холодильник|fridge",icon:"mdi:fridge"},{pattern:"стиральн|washer|washing",icon:"mdi:washing-machine"},{pattern:"сушилк|dryer",icon:"mdi:tumble-dryer"},{pattern:"пылесос|vacuum|dreame|roborock",icon:"mdi:robot-vacuum"},{pattern:"soundbar",icon:"mdi:soundbar"},{pattern:"колонк|станц|speaker|яндекс|yandex|алиса|alice",icon:"mdi:speaker"},{pattern:"tv|телевизор|hyundaitv|mitv|television",icon:"mdi:television"},{pattern:"keenetic|роутер|router|mesh|access point",icon:"mdi:router-wireless"},{pattern:"ибп|ups|kirpich",icon:"mdi:battery-charging-high"},{pattern:"slzb|координат|zigbee|coordinator",icon:"mdi:zigbee"},{pattern:"motion|движен|presence|присутств",icon:"mdi:motion-sensor"},{pattern:"humidity|влажн",icon:"mdi:water-percent"}];function ze(e){const t=[];for(const i of e)if(i&&"string"==typeof i.pattern&&i.icon)try{t.push({re:new RegExp(i.pattern,"i"),icon:i.icon})}catch{}return t}function Ie(e){try{return new RegExp(e,"i"),!0}catch{return!1}}const Oe=ze(Fe),Ee={temperature:"mdi:thermometer",humidity:"mdi:water-percent",motion:"mdi:motion-sensor",occupancy:"mdi:motion-sensor",presence:"mdi:motion-sensor",door:"mdi:door",window:"mdi:window-closed",garage_door:"mdi:garage-variant",smoke:"mdi:smoke-detector",moisture:"mdi:water-alert",gas:"mdi:gas-cylinder",power:"mdi:meter-electric",energy:"mdi:meter-electric",illuminance:"mdi:brightness-5",co2:"mdi:molecule-co2",pm25:"mdi:air-filter",battery:"mdi:battery"},Ne="mdi:chip";function He(e,t,i){const n=((e||"")+" "+(t||"")).toLowerCase();for(const{re:e,icon:t}of i??Oe)if(e.test(n))return t;return Ne}const Le=["light","switch","cover","valve","lock","climate","fan","media_player","camera","vacuum","humidifier","water_heater","alarm_control_panel","sensor","binary_sensor","event","button","number","select","update"];var Be=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,qe=Math.ceil,je=Math.floor,We="[BigNumber Error] ",Ue=We+"Number primitive has more than 15 significant digits: ",Ve=1e14,Ge=14,Ke=9007199254740991,Ye=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],Xe=1e7,Ze=1e9;function Je(e){var t=0|e;return e>0||e===t?t:t-1}function Qe(e){for(var t,i,n=1,r=e.length,o=e[0]+"";nc^i?1:-1;for(a=(l=r.length)<(c=o.length)?l:c,s=0;so[s]^i?1:-1;return l==c?0:l>c^i?1:-1}function tt(e,t,i,n){if(ei||e!==je(e))throw Error(We+(n||"Argument")+("number"==typeof e?ei?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function it(e){var t=e.c.length-1;return Je(e.e/Ge)==t&&e.c[t]%2!=0}function nt(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function rt(e,t,i){var n,r;if(t<0){for(r=i+".";++t;r+=i);e=r+e}else if(++t>(n=e.length)){for(r=i,t-=n;--t;r+=i);e+=r}else ty?u.c=u.e=null:e.e=10;l/=10,a++);return void(a>y?u.c=u.e=null:(u.e=a,u.c=[e]))}d=String(e)}else{if(!Be.test(d=String(e)))return r(u,d,c);u.s=45==d.charCodeAt(0)?(d=d.slice(1),-1):1}(a=d.indexOf("."))>-1&&(d=d.replace(".","")),(l=d.search(/e/i))>0?(a<0&&(a=l),a+=+d.slice(l+1),d=d.substring(0,l)):a<0&&(a=d.length)}else{if(tt(t,2,S.length,"Base"),10==t&&$)return D(u=new M(e),_+u.e+1,m);if(d=String(e),c="number"==typeof e){if(0*e!=0)return r(u,d,c,t);if(u.s=1/e<0?(d=d.slice(1),-1):1,M.DEBUG&&d.replace(/^0\.0*|\./,"").length>15)throw Error(Ue+e)}else u.s=45===d.charCodeAt(0)?(d=d.slice(1),-1):1;for(i=S.slice(0,t),a=l=0,h=d.length;la){a=h;continue}}else if(!s&&(d==d.toUpperCase()&&(d=d.toLowerCase())||d==d.toLowerCase()&&(d=d.toUpperCase()))){s=!0,l=-1,a=0;continue}return r(u,String(e),c,t)}c=!1,(a=(d=n(d,t,10,u.s)).indexOf("."))>-1?d=d.replace(".",""):a=d.length}for(l=0;48===d.charCodeAt(l);l++);for(h=d.length;48===d.charCodeAt(--h););if(d=d.slice(l,++h)){if(h-=l,c&&M.DEBUG&&h>15&&(e>Ke||e!==je(e)))throw Error(Ue+u.s*e);if((a=a-l-1)>y)u.c=u.e=null;else if(a=f)?nt(l,s):rt(l,s,"0");else if(o=(e=D(new M(e),t,i)).e,a=(l=Qe(e.c)).length,1==n||2==n&&(t<=o||o<=g)){for(;as),l=rt(l,o,"0"),o+1>a){if(--t>0)for(l+=".";t--;l+="0");}else if((t+=o-a)>0)for(o+1==a&&(l+=".");t--;l+="0");return e.s<0&&r?"-"+l:l}function C(e,t){for(var i,n,r=1,o=new M(e[0]);r=10;r/=10,n++);return(i=n+i*Ge-1)>y?e.c=e.e=null:i=10;a/=10,r++);if((o=t-r)<0)o+=Ge,s=t,l=d[c=0],h=je(l/u[r-s-1]%10);else if((c=qe((o+1)/Ge))>=d.length){if(!n)break e;for(;d.length<=c;d.push(0));l=h=0,r=1,s=(o%=Ge)-Ge+1}else{for(l=a=d[c],r=1;a>=10;a/=10,r++);h=(s=(o%=Ge)-Ge+r)<0?0:je(l/u[r-s-1]%10)}if(n=n||t<0||null!=d[c+1]||(s<0?l:l%u[r-s-1]),n=i<4?(h||n)&&(0==i||i==(e.s<0?3:2)):h>5||5==h&&(4==i||n||6==i&&(o>0?s>0?l/u[r-s]:0:d[c-1])%10&1||i==(e.s<0?8:7)),t<1||!d[0])return d.length=0,n?(t-=e.e+1,d[0]=u[(Ge-t%Ge)%Ge],e.e=-t||0):d[0]=e.e=0,e;if(0==o?(d.length=c,a=1,c--):(d.length=c+1,a=u[Ge-o],d[c]=s>0?je(l/u[r-s]%u[s])*a:0),n)for(;;){if(0==c){for(o=1,s=d[0];s>=10;s/=10,o++);for(s=d[0]+=a,a=1;s>=10;s/=10,a++);o!=a&&(e.e++,d[0]==Ve&&(d[0]=1));break}if(d[c]+=a,d[c]!=Ve)break;d[c--]=0,a=1}for(o=d.length;0===d[--o];d.pop());}e.e>y?e.c=e.e=null:e.e=f?nt(t,i):rt(t,i,"0"),e.s<0?"-"+t:t)}return M.clone=e,M.ROUND_UP=0,M.ROUND_DOWN=1,M.ROUND_CEIL=2,M.ROUND_FLOOR=3,M.ROUND_HALF_UP=4,M.ROUND_HALF_DOWN=5,M.ROUND_HALF_EVEN=6,M.ROUND_HALF_CEIL=7,M.ROUND_HALF_FLOOR=8,M.EUCLID=9,M.config=M.set=function(e){var t,i;if(null!=e){if("object"!=typeof e)throw Error(We+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(tt(i=e[t],0,Ze,t),_=i),e.hasOwnProperty(t="ROUNDING_MODE")&&(tt(i=e[t],0,8,t),m=i),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((i=e[t])&&i.pop?(tt(i[0],-Ze,0,t),tt(i[1],0,Ze,t),g=i[0],f=i[1]):(tt(i,-Ze,Ze,t),g=-(f=i<0?-i:i))),e.hasOwnProperty(t="RANGE"))if((i=e[t])&&i.pop)tt(i[0],-Ze,-1,t),tt(i[1],1,Ze,t),v=i[0],y=i[1];else{if(tt(i,-Ze,Ze,t),!i)throw Error(We+t+" cannot be zero: "+i);v=-(y=i<0?-i:i)}if(e.hasOwnProperty(t="CRYPTO")){if((i=e[t])!==!!i)throw Error(We+t+" not true or false: "+i);if(i){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw b=!i,Error(We+"crypto unavailable");b=i}else b=i}if(e.hasOwnProperty(t="MODULO_MODE")&&(tt(i=e[t],0,9,t),w=i),e.hasOwnProperty(t="POW_PRECISION")&&(tt(i=e[t],0,Ze,t),k=i),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(i=e[t]))throw Error(We+t+" not an object: "+i);x=i}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(i=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(i))throw Error(We+t+" invalid: "+i);$="0123456789"==i.slice(0,10),S=i}}return{DECIMAL_PLACES:_,ROUNDING_MODE:m,EXPONENTIAL_AT:[g,f],RANGE:[v,y],CRYPTO:b,MODULO_MODE:w,POW_PRECISION:k,FORMAT:x,ALPHABET:S}},M.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!M.DEBUG)return!0;var t,i,n=e.c,r=e.e,o=e.s;e:if("[object Array]"=={}.toString.call(n)){if((1===o||-1===o)&&r>=-Ze&&r<=Ze&&r===je(r)){if(0===n[0]){if(0===r&&1===n.length)return!0;break e}if((t=(r+1)%Ge)<1&&(t+=Ge),String(n[0]).length==t){for(t=0;t=Ve||i!==je(i))break e;if(0!==i)return!0}}}else if(null===n&&null===r&&(null===o||1===o||-1===o))return!0;throw Error(We+"Invalid BigNumber: "+e)},M.maximum=M.max=function(){return C(arguments,-1)},M.minimum=M.min=function(){return C(arguments,1)},M.random=(o=9007199254740992,s=Math.random()*o&2097151?function(){return je(Math.random()*o)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,i,n,r,o,a=0,l=[],c=new M(p);if(null==e?e=_:tt(e,0,Ze),r=qe(e/Ge),b)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(r*=2));a>>11))>=9e15?(i=crypto.getRandomValues(new Uint32Array(2)),t[a]=i[0],t[a+1]=i[1]):(l.push(o%1e14),a+=2);a=r/2}else{if(!crypto.randomBytes)throw b=!1,Error(We+"crypto unavailable");for(t=crypto.randomBytes(r*=7);a=9e15?crypto.randomBytes(7).copy(t,a):(l.push(o%1e14),a+=7);a=r/7}if(!b)for(;a=10;o/=10,a++);ai-1&&(null==s[r+1]&&(s[r+1]=0),s[r+1]+=s[r]/i|0,s[r]%=i)}return s.reverse()}return function(n,r,o,s,a){var l,c,h,d,u,p,g,f,v=n.indexOf("."),y=_,b=m;for(v>=0&&(d=k,k=0,n=n.replace(".",""),p=(f=new M(r)).pow(n.length-v),k=d,f.c=t(rt(Qe(p.c),p.e,"0"),10,o,e),f.e=f.c.length),h=d=(g=t(n,r,o,a?(l=S,e):(l=e,S))).length;0==g[--d];g.pop());if(!g[0])return l.charAt(0);if(v<0?--h:(p.c=g,p.e=h,p.s=s,g=(p=i(p,f,y,b,o)).c,u=p.r,h=p.e),v=g[c=h+y+1],d=o/2,u=u||c<0||null!=g[c+1],u=b<4?(null!=v||u)&&(0==b||b==(p.s<0?3:2)):v>d||v==d&&(4==b||u||6==b&&1&g[c-1]||b==(p.s<0?8:7)),c<1||!g[0])n=u?rt(l.charAt(1),-y,l.charAt(0)):l.charAt(0);else{if(g.length=c,u)for(--o;++g[--c]>o;)g[c]=0,c||(++h,g=[1].concat(g));for(d=g.length;!g[--d];);for(v=0,n="";v<=d;n+=l.charAt(g[v++]));n=rt(n,h,l.charAt(0))}return n}}(),i=function(){function e(e,t,i){var n,r,o,s,a=0,l=e.length,c=t%Xe,h=t/Xe|0;for(e=e.slice();l--;)a=((r=c*(o=e[l]%Xe)+(n=h*o+(s=e[l]/Xe|0)*c)%Xe*Xe+a)/i|0)+(n/Xe|0)+h*s,e[l]=r%i;return a&&(e=[a].concat(e)),e}function t(e,t,i,n){var r,o;if(i!=n)o=i>n?1:-1;else for(r=o=0;rt[r]?1:-1;break}return o}function i(e,t,i,n){for(var r=0;i--;)e[i]-=r,r=e[i]1;e.splice(0,1));}return function(n,r,o,s,a){var l,c,h,d,u,p,_,m,g,f,v,y,b,w,k,x,S,$=n.s==r.s?1:-1,R=n.c,C=r.c;if(!(R&&R[0]&&C&&C[0]))return new M(n.s&&r.s&&(R?!C||R[0]!=C[0]:C)?R&&0==R[0]||!C?0*$:$/0:NaN);for(g=(m=new M($)).c=[],$=o+(c=n.e-r.e)+1,a||(a=Ve,c=Je(n.e/Ge)-Je(r.e/Ge),$=$/Ge|0),h=0;C[h]==(R[h]||0);h++);if(C[h]>(R[h]||0)&&c--,$<0)g.push(1),d=!0;else{for(w=R.length,x=C.length,h=0,$+=2,(u=je(a/(C[0]+1)))>1&&(C=e(C,u,a),R=e(R,u,a),x=C.length,w=R.length),b=x,v=(f=R.slice(0,x)).length;v=a/2&&k++;do{if(u=0,(l=t(C,f,x,v))<0){if(y=f[0],x!=v&&(y=y*a+(f[1]||0)),(u=je(y/k))>1)for(u>=a&&(u=a-1),_=(p=e(C,u,a)).length,v=f.length;1==t(p,f,_,v);)u--,i(p,x<_?S:C,_,a),_=p.length,l=1;else 0==u&&(l=u=1),_=(p=C.slice()).length;if(_=10;$/=10,h++);D(m,o+(m.e=h+c*Ge-1)+1,s,d)}else m.e=c,m.r=+d;return m}}(),a=/^(-?)0([xbo])(?=\w[\w.]*$)/i,l=/^([^.]+)\.$/,c=/^\.([^.]+)$/,h=/^-?(Infinity|NaN)$/,d=/^\s*\+(?=[\w.])|^\s+|\s+$/g,r=function(e,t,i,n){var r,o=i?t:t.replace(d,"");if(h.test(o))e.s=isNaN(o)?null:o<0?-1:1;else{if(!i&&(o=o.replace(a,function(e,t,i){return r="x"==(i=i.toLowerCase())?16:"b"==i?2:8,n&&n!=r?e:t}),n&&(r=n,o=o.replace(l,"$1").replace(c,"0.$1")),t!=o))return new M(o,r);if(M.DEBUG)throw Error(We+"Not a"+(n?" base "+n:"")+" number: "+t);e.s=null}e.c=e.e=null},u.absoluteValue=u.abs=function(){var e=new M(this);return e.s<0&&(e.s=1),e},u.comparedTo=function(e,t){return et(this,new M(e,t))},u.decimalPlaces=u.dp=function(e,t){var i,n,r,o=this;if(null!=e)return tt(e,0,Ze),null==t?t=m:tt(t,0,8),D(new M(o),e+o.e+1,t);if(!(i=o.c))return null;if(n=((r=i.length-1)-Je(this.e/Ge))*Ge,r=i[r])for(;r%10==0;r/=10,n--);return n<0&&(n=0),n},u.dividedBy=u.div=function(e,t){return i(this,new M(e,t),_,m)},u.dividedToIntegerBy=u.idiv=function(e,t){return i(this,new M(e,t),0,1)},u.exponentiatedBy=u.pow=function(e,t){var i,n,r,o,s,a,l,c,h=this;if((e=new M(e)).c&&!e.isInteger())throw Error(We+"Exponent not an integer: "+A(e));if(null!=t&&(t=new M(t)),s=e.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!e.c||!e.c[0])return c=new M(Math.pow(+A(h),s?e.s*(2-it(e)):+A(e))),t?c.mod(t):c;if(a=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new M(NaN);(n=!a&&h.isInteger()&&t.isInteger())&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||s&&h.c[1]>=24e7:h.c[0]<8e13||s&&h.c[0]<=9999975e7)))return o=h.s<0&&it(e)?-0:0,h.e>-1&&(o=1/o),new M(a?1/o:o);k&&(o=qe(k/Ge+2))}for(s?(i=new M(.5),a&&(e.s=1),l=it(e)):l=(r=Math.abs(+A(e)))%2,c=new M(p);;){if(l){if(!(c=c.times(h)).c)break;o?c.c.length>o&&(c.c.length=o):n&&(c=c.mod(t))}if(r){if(0===(r=je(r/2)))break;l=r%2}else if(D(e=e.times(i),e.e+1,1),e.e>14)l=it(e);else{if(0===(r=+A(e)))break;l=r%2}h=h.times(h),o?h.c&&h.c.length>o&&(h.c.length=o):n&&(h=h.mod(t))}return n?c:(a&&(c=p.div(c)),t?c.mod(t):o?D(c,k,m,void 0):c)},u.integerValue=function(e){var t=new M(this);return null==e?e=m:tt(e,0,8),D(t,t.e+1,e)},u.isEqualTo=u.eq=function(e,t){return 0===et(this,new M(e,t))},u.isFinite=function(){return!!this.c},u.isGreaterThan=u.gt=function(e,t){return et(this,new M(e,t))>0},u.isGreaterThanOrEqualTo=u.gte=function(e,t){return 1===(t=et(this,new M(e,t)))||0===t},u.isInteger=function(){return!!this.c&&Je(this.e/Ge)>this.c.length-2},u.isLessThan=u.lt=function(e,t){return et(this,new M(e,t))<0},u.isLessThanOrEqualTo=u.lte=function(e,t){return-1===(t=et(this,new M(e,t)))||0===t},u.isNaN=function(){return!this.s},u.isNegative=function(){return this.s<0},u.isPositive=function(){return this.s>0},u.isZero=function(){return!!this.c&&0==this.c[0]},u.minus=function(e,t){var i,n,r,o,s=this,a=s.s;if(t=(e=new M(e,t)).s,!a||!t)return new M(NaN);if(a!=t)return e.s=-t,s.plus(e);var l=s.e/Ge,c=e.e/Ge,h=s.c,d=e.c;if(!l||!c){if(!h||!d)return h?(e.s=-t,e):new M(d?s:NaN);if(!h[0]||!d[0])return d[0]?(e.s=-t,e):new M(h[0]?s:3==m?-0:0)}if(l=Je(l),c=Je(c),h=h.slice(),a=l-c){for((o=a<0)?(a=-a,r=h):(c=l,r=d),r.reverse(),t=a;t--;r.push(0));r.reverse()}else for(n=(o=(a=h.length)<(t=d.length))?a:t,a=t=0;t0)for(;t--;h[i++]=0);for(t=Ve-1;n>a;){if(h[--n]=0;){for(i=0,u=y[r]%g,p=y[r]/g|0,o=r+(s=l);o>r;)i=((c=u*(c=v[--s]%g)+(a=p*c+(h=v[s]/g|0)*u)%g*g+_[o]+i)/m|0)+(a/g|0)+p*h,_[o--]=c%m;_[o]=i}return i?++n:_.splice(0,1),T(e,_,n)},u.negated=function(){var e=new M(this);return e.s=-e.s||null,e},u.plus=function(e,t){var i,n=this,r=n.s;if(t=(e=new M(e,t)).s,!r||!t)return new M(NaN);if(r!=t)return e.s=-t,n.minus(e);var o=n.e/Ge,s=e.e/Ge,a=n.c,l=e.c;if(!o||!s){if(!a||!l)return new M(r/0);if(!a[0]||!l[0])return l[0]?e:new M(a[0]?n:0*r)}if(o=Je(o),s=Je(s),a=a.slice(),r=o-s){for(r>0?(s=o,i=l):(r=-r,i=a),i.reverse();r--;i.push(0));i.reverse()}for((r=a.length)-(t=l.length)<0&&(i=l,l=a,a=i,t=r),r=0;t;)r=(a[--t]=a[t]+l[t]+r)/Ve|0,a[t]=Ve===a[t]?0:a[t]%Ve;return r&&(a=[r].concat(a),++s),T(e,a,s)},u.precision=u.sd=function(e,t){var i,n,r,o=this;if(null!=e&&e!==!!e)return tt(e,1,Ze),null==t?t=m:tt(t,0,8),D(new M(o),e,t);if(!(i=o.c))return null;if(n=(r=i.length-1)*Ge+1,r=i[r]){for(;r%10==0;r/=10,n--);for(r=i[0];r>=10;r/=10,n++);}return e&&o.e+1>n&&(n=o.e+1),n},u.shiftedBy=function(e){return tt(e,-9007199254740991,Ke),this.times("1e"+e)},u.squareRoot=u.sqrt=function(){var e,t,n,r,o,s=this,a=s.c,l=s.s,c=s.e,h=_+4,d=new M("0.5");if(1!==l||!a||!a[0])return new M(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(l=Math.sqrt(+A(s)))||l==1/0?(((t=Qe(a)).length+c)%2==0&&(t+="0"),l=Math.sqrt(+t),c=Je((c+1)/2)-(c<0||c%2),n=new M(t=l==1/0?"5e"+c:(t=l.toExponential()).slice(0,t.indexOf("e")+1)+c)):n=new M(l+""),n.c[0])for((l=(c=n.e)+h)<3&&(l=0);;)if(o=n,n=d.times(o.plus(i(s,o,h,1))),Qe(o.c).slice(0,l)===(t=Qe(n.c)).slice(0,l)){if(n.e0&&_>0){for(o=_%a||a,h=p.substr(0,o);o<_;o+=a)h+=c+p.substr(o,a);l>0&&(h+=c+p.slice(o)),u&&(h="-"+h)}n=d?h+(i.decimalSeparator||"")+((l=+i.fractionGroupSize)?d.replace(new RegExp("\\d{"+l+"}\\B","g"),"$&"+(i.fractionGroupSeparator||"")):d):h}return(i.prefix||"")+n+(i.suffix||"")},u.toFraction=function(e){var t,n,r,o,s,a,l,c,h,d,u,_,g=this,f=g.c;if(null!=e&&(!(l=new M(e)).isInteger()&&(l.c||1!==l.s)||l.lt(p)))throw Error(We+"Argument "+(l.isInteger()?"out of range: ":"not an integer: ")+A(l));if(!f)return new M(g);for(t=new M(p),h=n=new M(p),r=c=new M(p),_=Qe(f),s=t.e=_.length-g.e-1,t.c[0]=Ye[(a=s%Ge)<0?Ge+a:a],e=!e||l.comparedTo(t)>0?s>0?t:h:l,a=y,y=1/0,l=new M(_),c.c[0]=0;d=i(l,t,0,1),1!=(o=n.plus(d.times(r))).comparedTo(e);)n=r,r=o,h=c.plus(d.times(o=h)),c=o,t=l.minus(d.times(o=t)),l=o;return o=i(e.minus(n),r,0,1),c=c.plus(o.times(h)),n=n.plus(o.times(r)),c.s=h.s=g.s,u=i(h,r,s*=2,m).minus(g).abs().comparedTo(i(c,n,s,m).minus(g).abs())<1?[h,r]:[c,n],y=a,u},u.toNumber=function(){return+A(this)},u.toPrecision=function(e,t){return null!=e&&tt(e,1,Ze),R(this,e,t,2)},u.toString=function(e){var t,i=this,r=i.s,o=i.e;return null===o?r?(t="Infinity",r<0&&(t="-"+t)):t="NaN":(null==e?t=o<=g||o>=f?nt(Qe(i.c),o):rt(Qe(i.c),o,"0"):10===e&&$?t=rt(Qe((i=D(new M(i),_+o+1,m)).c),i.e,"0"):(tt(e,2,S.length,"Base"),t=n(rt(Qe(i.c),o,"0"),10,e,r,!0)),r<0&&i.c[0]&&(t="-"+t)),t},u.valueOf=u.toJSON=function(){return A(this)},u._isBigNumber=!0,u[Symbol.toStringTag]="BigNumber",u[Symbol.for("nodejs.util.inspect.custom")]=u.valueOf,null!=t&&M.set(t),M}(),st=class{key;left=null;right=null;constructor(e){this.key=e}},at=class extends st{constructor(e){super(e)}},lt=class{size=0;modificationCount=0;splayCount=0;splay(e){const t=this.root;if(null==t)return this.compare(e,e),-1;let i=null,n=null,r=null,o=null,s=t;const a=this.compare;let l;for(;;)if(l=a(s.key,e),l>0){let t=s.left;if(null==t)break;if(l=a(t.key,e),l>0&&(s.left=t.right,t.right=s,s=t,t=s.left,null==t))break;null==i?n=s:i.left=s,i=s,s=t}else{if(!(l<0))break;{let t=s.right;if(null==t)break;if(l=a(t.key,e),l<0&&(s.right=t.left,t.left=s,s=t,t=s.right,null==t))break;null==r?o=s:r.right=s,r=s,s=t}}return null!=r&&(r.right=s.left,s.left=o),null!=i&&(i.left=s.right,s.right=n),this.root!==s&&(this.root=s,this.splayCount++),l}splayMin(e){let t=e,i=t.left;for(;null!=i;){const e=i;t.left=e.right,e.right=t,t=e,i=t.left}return t}splayMax(e){let t=e,i=t.right;for(;null!=i;){const e=i;t.right=e.left,e.left=t,t=e,i=t.right}return t}_delete(e){if(null==this.root)return null;if(0!=this.splay(e))return null;let t=this.root;const i=t,n=t.left;if(this.size--,null==n)this.root=t.right;else{const e=t.right;t=this.splayMax(n),t.right=e,this.root=t}return this.modificationCount++,i}addNewRoot(e,t){this.size++,this.modificationCount++;const i=this.root;null!=i?(t<0?(e.left=i,e.right=i.right,i.right=null):(e.right=i,e.left=i.left,i.left=null),this.root=e):this.root=e}_first(){const e=this.root;return null==e?null:(this.root=this.splayMin(e),this.root)}_last(){const e=this.root;return null==e?null:(this.root=this.splayMax(e),this.root)}clear(){this.root=null,this.size=0,this.modificationCount++}has(e){return this.validKey(e)&&0==this.splay(e)}defaultCompare(){return(e,t)=>et?1:0}wrap(){return{getRoot:()=>this.root,setRoot:e=>{this.root=e},getSize:()=>this.size,getModificationCount:()=>this.modificationCount,getSplayCount:()=>this.splayCount,setSplayCount:e=>{this.splayCount=e},splay:e=>this.splay(e),has:e=>this.has(e)}}},ct=class e extends lt{root=null;compare;validKey;constructor(e,t){super(),this.compare=e??this.defaultCompare(),this.validKey=t??(e=>null!=e&&null!=e)}delete(e){return!!this.validKey(e)&&null!=this._delete(e)}deleteAll(e){for(const t of e)this.delete(t)}forEach(e){const t=this[Symbol.iterator]();let i;for(;i=t.next(),!i.done;)e(i.value,i.value,this)}add(e){const t=this.splay(e);return 0!=t&&this.addNewRoot(new at(e),t),this}addAndReturn(e){const t=this.splay(e);return 0!=t&&this.addNewRoot(new at(e),t),this.root.key}addAll(e){for(const t of e)this.add(t)}isEmpty(){return null==this.root}isNotEmpty(){return null!=this.root}single(){if(0==this.size)throw"Bad state: No element";if(this.size>1)throw"Bad state: Too many element";return this.root.key}first(){if(0==this.size)throw"Bad state: No element";return this._first().key}last(){if(0==this.size)throw"Bad state: No element";return this._last().key}lastBefore(e){if(null==e)throw"Invalid arguments(s)";if(null==this.root)return null;if(this.splay(e)<0)return this.root.key;let t=this.root.left;if(null==t)return null;let i=t.right;for(;null!=i;)t=i,i=t.right;return t.key}firstAfter(e){if(null==e)throw"Invalid arguments(s)";if(null==this.root)return null;if(this.splay(e)>0)return this.root.key;let t=this.root.right;if(null==t)return null;let i=t.left;for(;null!=i;)t=i,i=t.left;return t.key}retainAll(t){const i=new e(this.compare,this.validKey),n=this.modificationCount;for(const e of t){if(n!=this.modificationCount)throw"Concurrent modification during iteration.";this.validKey(e)&&0==this.splay(e)&&i.add(this.root.key)}i.size!=this.size&&(this.root=i.root,this.size=i.size,this.modificationCount++)}lookup(e){if(!this.validKey(e))return null;return 0!=this.splay(e)?null:this.root.key}intersection(t){const i=new e(this.compare,this.validKey);for(const e of this)t.has(e)&&i.add(e);return i}difference(t){const i=new e(this.compare,this.validKey);for(const e of this)t.has(e)||i.add(e);return i}union(e){const t=this.clone();return t.addAll(e),t}clone(){const t=new e(this.compare,this.validKey);return t.size=this.size,t.root=this.copyNode(this.root),t}copyNode(e){if(null==e)return null;const t=new at(e.key);return function e(t,i){let n,r;do{if(n=t.left,r=t.right,null!=n){const t=new at(n.key);i.left=t,e(n,t)}if(null!=r){const e=new at(r.key);i.right=e,t=r,i=e}}while(null!=r)}(e,t),t}toSet(){return this.clone()}entries(){return new ut(this.wrap())}keys(){return this[Symbol.iterator]()}values(){return this[Symbol.iterator]()}[Symbol.iterator](){return new dt(this.wrap())}[Symbol.toStringTag]="[object Set]"},ht=class{tree;path=new Array;modificationCount=null;splayCount;constructor(e){this.tree=e,this.splayCount=e.getSplayCount()}[Symbol.iterator](){return this}next(){return this.moveNext()?{done:!1,value:this.current()}:{done:!0,value:null}}current(){if(!this.path.length)return null;const e=this.path[this.path.length-1];return this.getValue(e)}rebuildPath(e){this.path.splice(0,this.path.length),this.tree.splay(e),this.path.push(this.tree.getRoot()),this.splayCount=this.tree.getSplayCount()}findLeftMostDescendent(e){for(;null!=e;)this.path.push(e),e=e.left}moveNext(){if(this.modificationCount!=this.tree.getModificationCount()){if(null==this.modificationCount){this.modificationCount=this.tree.getModificationCount();let e=this.tree.getRoot();for(;null!=e;)this.path.push(e),e=e.left;return this.path.length>0}throw"Concurrent modification during iteration."}if(!this.path.length)return!1;this.splayCount!=this.tree.getSplayCount()&&this.rebuildPath(this.path[this.path.length-1].key);let e=this.path[this.path.length-1],t=e.right;if(null!=t){for(;null!=t;)this.path.push(t),t=t.left;return!0}for(this.path.pop();this.path.length&&this.path[this.path.length-1].right===e;)e=this.path.pop();return this.path.length>0}},dt=class extends ht{getValue(e){return e.key}},ut=class extends ht{getValue(e){return[e.key,e.key]}},pt=e=>()=>e,_t=e=>{const t=e?(t,i)=>i.minus(t).abs().isLessThanOrEqualTo(e):pt(!1);return(e,i)=>t(e,i)?0:e.comparedTo(i)};function mt(e){const t=e?(t,i,n,r,o)=>t.exponentiatedBy(2).isLessThanOrEqualTo(r.minus(i).exponentiatedBy(2).plus(o.minus(n).exponentiatedBy(2)).times(e)):pt(!1);return(e,i,n)=>{const r=e.x,o=e.y,s=n.x,a=n.y,l=o.minus(a).times(i.x.minus(s)).minus(r.minus(s).times(i.y.minus(a)));return t(l,r,o,s,a)?0:l.comparedTo(0)}}var gt=e=>e,ft=e=>{if(e){const t=new ct(_t(e)),i=new ct(_t(e)),n=(e,t)=>t.addAndReturn(e),r=e=>({x:n(e.x,t),y:n(e.y,i)});return r({x:new ot(0),y:new ot(0)}),r}return gt},vt=e=>({set:e=>{yt=vt(e)},reset:()=>vt(e),compare:_t(e),snap:ft(e),orient:mt(e)}),yt=vt(),bt=(e,t)=>e.ll.x.isLessThanOrEqualTo(t.x)&&t.x.isLessThanOrEqualTo(e.ur.x)&&e.ll.y.isLessThanOrEqualTo(t.y)&&t.y.isLessThanOrEqualTo(e.ur.y),wt=(e,t)=>{if(t.ur.x.isLessThan(e.ll.x)||e.ur.x.isLessThan(t.ll.x)||t.ur.y.isLessThan(e.ll.y)||e.ur.y.isLessThan(t.ll.y))return null;const i=e.ll.x.isLessThan(t.ll.x)?t.ll.x:e.ll.x,n=e.ur.x.isLessThan(t.ur.x)?e.ur.x:t.ur.x;return{ll:{x:i,y:e.ll.y.isLessThan(t.ll.y)?t.ll.y:e.ll.y},ur:{x:n,y:e.ur.y.isLessThan(t.ur.y)?e.ur.y:t.ur.y}}},kt=(e,t)=>e.x.times(t.y).minus(e.y.times(t.x)),xt=(e,t)=>e.x.times(t.x).plus(e.y.times(t.y)),St=e=>xt(e,e).sqrt(),$t=(e,t,i)=>{const n={x:t.x.minus(e.x),y:t.y.minus(e.y)},r={x:i.x.minus(e.x),y:i.y.minus(e.y)};return kt(r,n).div(St(r)).div(St(n))},Mt=(e,t,i)=>{const n={x:t.x.minus(e.x),y:t.y.minus(e.y)},r={x:i.x.minus(e.x),y:i.y.minus(e.y)};return xt(r,n).div(St(r)).div(St(n))},Rt=(e,t,i)=>t.y.isZero()?null:{x:e.x.plus(t.x.div(t.y).times(i.minus(e.y))),y:i},Ct=(e,t,i)=>t.x.isZero()?null:{x:i,y:e.y.plus(t.y.div(t.x).times(i.minus(e.x)))},Tt=class e{point;isLeft;segment;otherSE;consumedBy;static compare(t,i){const n=e.comparePoints(t.point,i.point);return 0!==n?n:(t.point!==i.point&&t.link(i),t.isLeft!==i.isLeft?t.isLeft?1:-1:Et.compare(t.segment,i.segment))}static comparePoints(e,t){return e.x.isLessThan(t.x)?-1:e.x.isGreaterThan(t.x)?1:e.y.isLessThan(t.y)?-1:e.y.isGreaterThan(t.y)?1:0}constructor(e,t){void 0===e.events?e.events=[this]:e.events.push(this),this.point=e,this.isLeft=t}link(e){if(e.point===this.point)throw new Error("Tried to link already linked events");const t=e.point.events;for(let e=0,i=t.length;e{const n=i.otherSE;t.set(i,{sine:$t(this.point,e.point,n.point),cosine:Mt(this.point,e.point,n.point)})};return(e,n)=>{t.has(e)||i(e),t.has(n)||i(n);const{sine:r,cosine:o}=t.get(e),{sine:s,cosine:a}=t.get(n);return r.isGreaterThanOrEqualTo(0)&&s.isGreaterThanOrEqualTo(0)?o.isLessThan(a)?1:o.isGreaterThan(a)?-1:0:r.isLessThan(0)&&s.isLessThan(0)?o.isLessThan(a)?-1:o.isGreaterThan(a)?1:0:s.isLessThan(r)?-1:s.isGreaterThan(r)?1:0}}},Dt=class e{events;poly;_isExteriorRing;_enclosingRing;static factory(t){const i=[];for(let n=0,r=t.length;n0&&(e=i)}let t=e.segment.prevInResult(),i=t?t.prevInResult():null;for(;;){if(!t)return null;if(!i)return t.ringOut;if(i.ringOut!==t.ringOut)return i.ringOut?.enclosingRing()!==t.ringOut?t.ringOut:t.ringOut?.enclosingRing();t=i.prevInResult(),i=t?t.prevInResult():null}}},At=class{exteriorRing;interiorRings;constructor(e){this.exteriorRing=e,e.poly=this,this.interiorRings=[]}addInterior(e){this.interiorRings.push(e),e.poly=this}getGeom(){const e=this.exteriorRing.getGeom();if(null===e)return null;const t=[e];for(let e=0,i=this.interiorRings.length;e0?(this.tree.delete(t),i.push(e)):(this.segments.push(t),t.prev=n)}else{if(n&&r){const e=n.getIntersection(r);if(null!==e){if(!n.isAnEndpoint(e)){const t=this._splitSafely(n,e);for(let e=0,n=t.length;e0)return-1;const n=t.comparePoint(e.rightSE.point);return 0!==n?n:-1}if(i.isGreaterThan(n)){if(s.isLessThan(a)&&s.isLessThan(c))return-1;if(s.isGreaterThan(a)&&s.isGreaterThan(c))return 1;const i=t.comparePoint(e.leftSE.point);if(0!==i)return i;const n=e.comparePoint(t.rightSE.point);return n<0?1:n>0?-1:1}if(s.isLessThan(a))return-1;if(s.isGreaterThan(a))return 1;if(r.isLessThan(o)){const i=t.comparePoint(e.rightSE.point);if(0!==i)return i}if(r.isGreaterThan(o)){const i=e.comparePoint(t.rightSE.point);if(i<0)return 1;if(i>0)return-1}if(!r.eq(o)){const e=l.minus(s),t=r.minus(i),h=c.minus(a),d=o.minus(n);if(e.isGreaterThan(t)&&h.isLessThan(d))return 1;if(e.isLessThan(t)&&h.isGreaterThan(d))return-1}return r.isGreaterThan(o)?1:r.isLessThan(o)||l.isLessThan(c)?-1:l.isGreaterThan(c)?1:e.idt.id?1:0}constructor(e,t,i,n){this.id=++Ot,this.leftSE=e,e.segment=this,e.otherSE=t,this.rightSE=t,t.segment=this,t.otherSE=e,this.rings=i,this.windings=n}static fromRing(t,i,n){let r,o,s;const a=Tt.comparePoints(t,i);if(a<0)r=t,o=i,s=1;else{if(!(a>0))throw new Error(`Tried to create degenerate segment at [${t.x}, ${t.y}]`);r=i,o=t,s=-1}const l=new Tt(r,!0),c=new Tt(o,!1);return new e(l,c,[n],[s])}replaceRightSE(e){this.rightSE=e,this.rightSE.segment=this,this.rightSE.otherSE=this.leftSE,this.leftSE.otherSE=this.rightSE}bbox(){const e=this.leftSE.point.y,t=this.rightSE.point.y;return{ll:{x:this.leftSE.point.x,y:e.isLessThan(t)?e:t},ur:{x:this.rightSE.point.x,y:e.isGreaterThan(t)?e:t}}}vector(){return{x:this.rightSE.point.x.minus(this.leftSE.point.x),y:this.rightSE.point.y.minus(this.leftSE.point.y)}}isAnEndpoint(e){return e.x.eq(this.leftSE.point.x)&&e.y.eq(this.leftSE.point.y)||e.x.eq(this.rightSE.point.x)&&e.y.eq(this.rightSE.point.y)}comparePoint(e){return yt.orient(this.leftSE.point,e,this.rightSE.point)}getIntersection(e){const t=this.bbox(),i=e.bbox(),n=wt(t,i);if(null===n)return null;const r=this.leftSE.point,o=this.rightSE.point,s=e.leftSE.point,a=e.rightSE.point,l=bt(t,s)&&0===this.comparePoint(s),c=bt(i,r)&&0===e.comparePoint(r),h=bt(t,a)&&0===this.comparePoint(a),d=bt(i,o)&&0===e.comparePoint(o);if(c&&l)return d&&!h?o:!d&&h?a:null;if(c)return h&&r.x.eq(a.x)&&r.y.eq(a.y)?null:r;if(l)return d&&o.x.eq(s.x)&&o.y.eq(s.y)?null:s;if(d&&h)return null;if(d)return o;if(h)return a;const u=((e,t,i,n)=>{if(t.x.isZero())return Ct(i,n,e.x);if(n.x.isZero())return Ct(e,t,i.x);if(t.y.isZero())return Rt(i,n,e.y);if(n.y.isZero())return Rt(e,t,i.y);const r=kt(t,n);if(r.isZero())return null;const o={x:i.x.minus(e.x),y:i.y.minus(e.y)},s=kt(o,t).div(r),a=kt(o,n).div(r),l=e.x.plus(a.times(t.x)),c=i.x.plus(s.times(n.x)),h=e.y.plus(a.times(t.y)),d=i.y.plus(s.times(n.y));return{x:l.plus(c).div(2),y:h.plus(d).div(2)}})(r,this.vector(),s,e.vector());return null===u?null:bt(n,u)?yt.snap(u):null}split(t){const i=[],n=void 0!==t.events,r=new Tt(t,!0),o=new Tt(t,!1),s=this.rightSE;this.replaceRightSE(o),i.push(o),i.push(r);const a=new e(r,s,this.rings.slice(),this.windings.slice());return Tt.comparePoints(a.leftSE.point,a.rightSE.point)>0&&a.swapEvents(),Tt.comparePoints(this.leftSE.point,this.rightSE.point)>0&&this.swapEvents(),n&&(r.checkForConsuming(),o.checkForConsuming()),i}swapEvents(){const e=this.rightSE;this.rightSE=this.leftSE,this.leftSE=e,this.leftSE.isLeft=!0,this.rightSE.isLeft=!1;for(let e=0,t=this.windings.length;e0){const e=i;i=n,n=e}if(i.prev===n){const e=i;i=n,n=e}for(let e=0,t=n.rings.length;e1===e.length&&e[0].isSubject;this._isInResult=i(e)!==i(t);break}}return this._isInResult}},Nt=class{poly;isExterior;segments;bbox;constructor(e,t,i){if(!Array.isArray(e)||0===e.length)throw new Error("Input geometry is not a valid Polygon or MultiPolygon");if(this.poly=t,this.isExterior=i,this.segments=[],"number"!=typeof e[0][0]||"number"!=typeof e[0][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");const n=yt.snap({x:new ot(e[0][0]),y:new ot(e[0][1])});this.bbox={ll:{x:n.x,y:n.y},ur:{x:n.x,y:n.y}};let r=n;for(let t=1,i=e.length;tIt.run("union",e,t),qt=(e,...t)=>It.run("intersection",e,t),jt=(e,...t)=>It.run("difference",e,t);yt.set;const Wt=/^#[0-9a-fA-F]{6}$/;function Ut(e,t){return"string"==typeof e&&Wt.test(e)?e:t}const Vt="(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])",Gt=new RegExp(`^rgb\\(${Vt}, ${Vt}, ${Vt}\\)$`);function Kt(e){if(!Array.isArray(e)||e.length<3)return null;const t=e.slice(0,3);if(!t.every(e=>"number"==typeof e&&Number.isFinite(e)))return null;const[i,n,r]=t.map(e=>Math.round(Math.min(255,Math.max(0,e))));return`rgb(${i}, ${n}, ${r})`}function Yt(e){const t=Math.max(0,Math.min(120,(e-40)/140*120));return`hsl(${Math.round(t)}, 85%, 55%)`}function Xt(e,t){if(!(Number.isFinite(e)&&t>0))return e;const i=Math.round(e/t)*t;return Math.abs(i-e)<=1e-9*t?e:i}function Zt(e,t,i,n=1/0){if(!(i>0&&e?.every(Number.isFinite)&&t?.every(Number.isFinite)))return[t[0],t[1]];const r=t[0]-e[0],o=t[1]-e[1];if(Math.abs(r)+Math.abs(o)<=1e-12)return[e[0],e[1]];const s=Math.PI/4;let a=Math.atan2(o,r);a<0&&(a+=2*Math.PI);const l=Math.floor(a/s+.5)%8,[c,h]=[[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1],[0,-1],[1,-1]][l],d=c*c+h*h;let u=Math.max(0,Math.round((r*c+o*h)/(i*d)));if(Number.isFinite(n)&&n>=0){const t=(e,t)=>{if(!t)return 1/0;const r=t>0?n-e:e+n;return Math.max(0,Math.floor((r+1e-9*i)/i))};u=Math.min(u,t(e[0],c),t(e[1],h))}return[e[0]+c*u*i,e[1]+h*u*i]}function Jt(e,t){if(t){const t=e/2.54;let i=Math.floor(t/12),n=Math.round(t-12*i);return 12===n&&(i+=1,n=0),`${i}′ ${n}″`}return`${(e/100).toFixed(2)} m`}function Qt(e,t,i=1){const n=e[0].toFixed(i),r=e[1].toFixed(i),o=t[0].toFixed(i),s=t[1].toFixed(i),a=n=3?e.poly:e&&null!=e.x&&null!=e.y&&null!=e.w&&null!=e.h?[[e.x,e.y],[e.x+e.w,e.y],[e.x+e.w,e.y+e.h],[e.x,e.y+e.h]]:null}function ti(e){const t=[];for(const i of e||[])i?.poly?.length>=3?t.push({poly:i.poly.map(e=>e.join(",")).join(" ")}):i&&null!=i.x&&null!=i.y&&null!=i.w&&null!=i.h&&t.push({rect:{x:i.x,y:i.y,w:i.w,h:i.h,rx:.03*Math.min(i.w,i.h)}});return t}function ii(e){const t=[],i=new Set;for(const n of e||[]){const e=ei(n);if(e)for(let n=0;n=90?e-=180:e<-90&&(e+=180),n.step&&n.step>0){const i=Math.sqrt(d),o=Math.min(Math.max(n.length||0,0)/2,i/2);let a=Math.round(u*i/n.step)*n.step;Math.abs(u*i-i/2)<=n.step/2&&(a=i/2),a=Math.max(o,Math.min(i-o,a));const l=a/i;r={x:t+l*c,y:s+l*h,angle:e}}else r={x:p[0],y:p[1],angle:e}}}return r}function ri(e,t,i){let n=null,r=1/0;for(let o=0;o=r)continue;r=_;const m=Math.sqrt(u),g=(i>0?Math.max(0,Math.min(m,Math.round(p*m/i)*i)):p*m)/m;n=[s+g*h,a+g*d]}return n}function oi(e,t,i,n,r,o=1){const s=t*Math.PI/180,a=[Math.cos(s),Math.sin(s)];let l=null,c=o;for(const t of ii(n)){const i=[[t[0],t[1]],[t[2],t[3]]],n=t=>Math.abs(a[0]*(t[1]-e[1])-a[1]*(t[0]-e[0]));if(n(i[0])>o||n(i[1])>o)continue;const r=(i[0][0]-e[0])*a[0]+(i[0][1]-e[1])*a[1],s=(i[1][0]-e[0])*a[0]+(i[1][1]-e[1])*a[1],h=Math.min(r,s),d=Math.max(r,s),u=h>0?h:d<0?-d:0;u[e[0]+a[0]*t,e[1]+a[1]*t],g=(h+d)/2;return{wallA:m(h),wallB:m(d),sideA:p,sideB:_,midA:m((h-u)/2),midB:m((u+d)/2),wallCenter:m(g),centered:Math.abs(g)<=r}}function si(e,t,i=!1,n){if("passage"===e)return 1;if(null==t||"unavailable"===t||"unknown"===t)return"window"===e?0:1;const r="string"==typeof n?n.trim()?Number(n):NaN:Number(n),o=null!=n&&Number.isFinite(r)?Math.max(0,Math.min(1,r/100)):function(e){return["on","open","home","detected","playing","cleaning"].includes(String(e))}(t)?1:0;return i?1-o:o}function ai(e){const t=Number.isFinite(e)?Math.max(0,Math.min(1,e)):0;return Math.min(1,Math.max(0,.05*Math.round(t/.05)))}function li(e,t){return(Number.isFinite(e)&&e>0?e:0)*(Number.isFinite(t)?Math.max(0,Math.min(1,t)):0)}function ci(e){return"passage"===e.type?[]:[e.contact,e.lock].filter(e=>"string"==typeof e&&e.length>0)}function hi(e,t,i=200){const n=t.trim().toLowerCase();return(n?e.filter(e=>e.label.toLowerCase().includes(n)||e.value.toLowerCase().includes(n)):e).slice(0,Math.max(0,i))}function di(e,t,i=.001){return Math.abs(e[0]-t[0])e[1]!=l>e[1]&&e[0]<(a-o)*(e[1]-s)/(l-s)+o&&(i=!i)}return i}function pi(e,t,i){const n=i[0]-t[0],r=i[1]-t[1],o=n*n+r*r;let s=o?((e[0]-t[0])*n+(e[1]-t[1])*r)/o:0;return s=Math.max(0,Math.min(1,s)),Math.hypot(e[0]-(t[0]+s*n),e[1]-(t[1]+s*r))}function _i(e,t){if(!t||t.length<2)return null;let i=null,n=1/0;for(let r=0;rr&&s<-r||o<-r&&s>r)&&(a>r&&l<-r||a<-r&&l>r)}function yi(e,t=24){const i=e.map(e=>e[0]),n=e.map(e=>e[1]),r=Math.min(...i),o=Math.max(...i),s=Math.min(...n),a=Math.max(...n),l=Math.max(o-r,a-s)||1;let c=0,h=0,d=0;for(let t=0;t1e-9?[h/(3*c),d/(3*c)]:[(r+o)/2,(s+a)/2],p=(t,i)=>{const n=((t,i)=>{if(!ui([t,i],e))return-1/0;let n=1/0;for(let r=0;rm&&(m=c,_=[n,l])}if(_){const[e,i]=_,n=(o-r)/t,l=(a-s)/t;for(let t=-4;t<=4;t++)for(let r=-4;r<=4;r++){const o=e+n*t/4,s=i+l*r/4,a=p(o,s);a>m&&(m=a,_=[o,s])}}return _||bi(e)||e[0]}function bi(e,t=1e-6){if(!e||e.length<3)return null;const i=e.length,n=[e.reduce((e,t)=>e+t[0],0)/i,e.reduce((e,t)=>e+t[1],0)/i];if(gi(n,e,t))return n;for(let n=0;nki(e,t,i));return n.filter(e=>!n.some(t=>t!==e&&ki(t,e,i)))}function $i(e){if(!e||e.length<3)return 0;let t=0;for(let i=0;i[e[0],e[1]]),[e[0][0],e[0][1]]]]}function Ri(e,t){if(!e||!t||e.length<3||t.length<3)return null;const i=Bt(Mi(e),Mi(t));if(1!==i.length)return null;if(1!==i[0].length)return null;const n=i[0][0].slice(0,-1).map(e=>[e[0],e[1]]);return n.length>=3?n:null}function Ci(e,t,i){for(let n=0;n1&&di(i[0],i[i.length-1],t)&&i.pop(),i}function Di(e,t,i=1e-6){if(!e||e.length<3||!t||t.length<2)return null;const n=t[0],r=t[t.length-1];if(di(n,r,i))return null;const o=Ci(e,n,i),s=Ci(e,r,i);if(o<0||s<0)return null;const a=t.slice(1,-1);for(const t of a)if(!gi(t,e,i))return null;for(let i=0;i{const s=[t];let a=(n+1)%e.length;for(let t=0;t<=e.length&&(s.push(e[a]),a!==o);t++)a=(a+1)%e.length;return s.push(r),Ti(s,i)};let c,h;if(o===s){const s=Ti([...t],i);if(s.length<3||$i(s)<=i)return null;const a=[];for(let i=0;i=0?t:[...t].reverse();for(const e of i)a.push(e)}c=Ti(a,i),h=s}else c=Ti([...l(n,o,r,s),...[...a].reverse()],i),h=Ti([...l(r,s,n,o),...a],i);return c.length<3||h.length<3||$i(c)<=i||$i(h)<=i||Math.abs($i(c)+$i(h)-$i(e))>Math.max(i,1e-6*$i(e))?null:[c,h]}function Ai(e,t,i){const[n,r]=e.split(":");return"device"===n?r:"entity"===n?"lg_"+r:t&&t.startsWith("v_")?t:i()}function Pi(e){return e.length?Math.round(e.reduce((e,t)=>e+t,0)/e.length):null}function Fi(e,t){if(t>e[2]/e[3]){const i=e[3],n=e[3]*t;return{x:e[0]-(n-e[2])/2,y:e[1],w:n,h:i}}const i=e[2],n=e[2]/t;return{x:e[0],y:e[1]-(n-e[3])/2,w:i,h:n}}function zi(e,t,i,n){if(e.length<2)return;const r=t.x+n,o=t.x+t.w-n,s=t.y+n,a=t.y+t.h-n;for(let t=0;t<60;t++){let t=!1;for(let n=0;n=0)i=t.slice(0,r).trim(),n=t.slice(r+1).trim();else{const e=t.split(".");e.length>2&&(i=e.slice(0,2).join("."),n=e.slice(2).join("."))}return/^[a-z0-9_]+\.[a-z0-9_]+$/.test(i)?r>=0&&!n||n&&!/^[a-zA-Z0-9_.-]+$/.test(n)?null:n?{entity:i,attr:n}:{entity:i}:null}function Vi(e,t){const i=String(e??"").trim(),n=String(t??"").trim(),r=Ui(n?`${i}:${n}`:i);return r?`{${r.entity}${r.attr?`:${r.attr}`:""}}`:""}function Gi(e,t,i){const n=String(t??"").trim();if(!n)return null;const r=e?.states?.[n];if(!r)return null;const o=String(i??"").trim(),s=e=>e.slice(0,60);if(o){const t=function(e){if(null==e)return null;if(Array.isArray(e)){const t=e.map(e=>null==e?"":String(e)).join(", ");return t?t.slice(0,60):null}if("object"==typeof e)return null;const t=String(e);return""===t?null:t.slice(0,60)}(r.attributes?.[o]);if(null===t)return null;const i=e?.formatEntityAttributeValue;if("function"==typeof i)try{const t=i.call(e,r,o);if("string"==typeof t&&""!==t)return{text:s(t),formatted:!0}}catch{}return{text:t,formatted:!1}}const a=r.state;if(null==a||""===a)return null;const l=e?.formatEntityState;if("function"==typeof l)try{const t=l.call(e,r);if("string"==typeof t&&""!==t)return{text:s(t),formatted:!0}}catch{}return{text:s(String(a)),formatted:!1}}function Ki(e,t,i){const n=String(t??"").trim(),r=String(i??"").trim()||n;if(!r)return e.text;const o=e.formatted&&n?function(e,t){if(!t)return e;const i=e.replace(/\s+$/,"");return i.endsWith(t)?i.slice(0,i.length-t.length).replace(/\s+$/,""):e}(e.text,n):e.text;return`${o} ${r}`}function Yi(e,t){const i=(t?.entity||"").trim();if(!i)return"";const n=e?.states?.[i],r=n?.state;if(!n||null==r||""===r||"unavailable"===r||"unknown"===r)return ji;const o=(t?.attr||"").trim(),s=Gi(e,i,o||null);if(null===s)return ji;return Ki(s,o?"":String(n.attributes?.unit_of_measurement??"").trim(),t?.unit)}function Xi(e,t,i,n=()=>!0){const r=e??"";let o=!1;const s=r.replace(/\{([^{}\r\n]+)\}/g,(e,t)=>{const r=Ui(t);return r?(o=!0,n(r.entity||"")?Yi(i,r):ji):e});if(o)return s;const a=(t?.entity||"").trim();if(!a)return r;if(!n(a)){const e=r.indexOf(Wi);return e>=0?r.slice(0,e)+ji+r.slice(e+2):r?`${r} ${ji}`:ji}const l=Yi(i,t),c=r.indexOf(Wi);return c>=0?r.slice(0,c)+l+r.slice(c+2):r?`${r} ${l}`:l}const Zi=20;function Ji(e){const t=Number(e?.scale);if(Number.isFinite(t)&&t>0)return Math.min(20,Math.max(.15,t));return{s:.7,m:1,l:1.5}[String(e?.size??"")]??1}function Qi(e,t){if(!t)return e;let i=e;for(const[e,n]of Object.entries(t))i=i.split("{"+e+"}").join(String(n));return i}const en="#55606c",tn=.55,nn=20,rn=25,on={c:"#607d8b",a:.18};function sn(e,t=on){const i=e&&"object"==typeof e?e:null,n=i?.a;return{c:Ut(i?.c,t.c),a:"number"==typeof n&&Number.isFinite(n)?Math.min(1,Math.max(0,n)):t.a}}function an(e,t){const i=sn(e),n=t?.settings?.custom_fill;return n&&"object"==typeof n?sn(n,i):i}function ln(e){const t=e?.settings||{},i=!e?.plan_url,n="glow"===t.fill_mode;return{showBorders:t.show_borders??i,showNames:t.show_names??i,color:Ut(t.room_color,en),opacity:"number"==typeof t.room_opacity?Math.min(1,Math.max(0,t.room_opacity)):.55,fill:["lqi","light","temp","custom"].includes(t.fill_mode)?t.fill_mode:"none",customFill:sn(t.custom_fill),glow:"boolean"==typeof t.glow_enabled?t.glow_enabled:n,tempMin:"number"==typeof t.temp_min?t.temp_min:20,tempMax:"number"==typeof t.temp_max?t.temp_max:25,showLqi:"boolean"==typeof t.show_lqi?t.show_lqi:null,cardFontScale:"number"==typeof t.card_font_scale&&t.card_font_scale>0?Math.min(3,Math.max(.5,t.card_font_scale)):1,labelTemp:!0===t.label_temp,labelHum:!0===t.label_hum,labelLqi:!0===t.label_lqi,labelLight:!0===t.label_light,bgColor:Ut(t.bg_color,null),hideDecor:!0===t.hide_decor,hideOpenings:!0===t.hide_openings}}function cn(e,t){if(t.bgColor)return t.bgColor;const i=e?.bg_color;return Ut(i,"")}function hn(e){return!1!==e?.show_room_tooltip}const dn={light_on:{c:"#ffd45c",a:.18},light_off:{c:"#9aa0a6",a:.14},light_none:{c:"#6b7480",a:0},temp_cold:{c:"#4fc3f7",a:.18},temp_ok:{c:"#66d17a",a:.18},temp_hot:{c:"#ffd45c",a:.18},lqi_low:{c:"#f25a4a",a:.18},lqi_high:{c:"#4bd28f",a:.18},glow_base:{c:"#0d1b2a",a:.5},glow_light:{c:"#ffd9a0",a:.85},wall_fill:{c:"#ffffff",a:1}};function un(e){const t={},i=e?.fill_colors||{};for(const e of Object.keys(dn)){const n=dn[e],r=i[e];t[e]={c:Ut(r?.c,n.c),a:r&&"number"==typeof r.a?Math.min(1,Math.max(0,r.a)):n.a}}return t}function pn(e,t,i){const n=Math.min(1,Math.max(0,i)),r=[1,3,5].map(t=>parseInt(e.slice(t,t+2),16)),o=[1,3,5].map(e=>parseInt(t.slice(e,e+2),16)),s=r.map((e,t)=>Math.round(e+(o[t]-e)*n));return"#"+s.map(e=>e.toString(16).padStart(2,"0")).join("")}function _n(e,t,i,n,r,o,s,a=on){const l=function(e,t,i,n,r,o,s,a=on){if("custom"===e)return sn(a);if("lqi"===e){if(null==t)return null;const e=(t-40)/140;return{c:pn(s.lqi_low.c,s.lqi_high.c,e),a:s.lqi_low.a+(s.lqi_high.a-s.lqi_low.a)*Math.min(1,Math.max(0,e))}}if("light"===e)return"none"===i?s.light_none.a>0?s.light_none:null:"on"===i?s.light_on:s.light_off;if("temp"===e){if(null==n)return null;const e=Math.min(r,o),t=Math.max(r,o);return nt?s.temp_hot:s.temp_ok}return null}(e,t,i,n,r,o,s,a);return l?{color:l.c,opacity:l.a,mode:e}:null}const mn={blind:["mdi:blinds","mdi:blinds-open"],shade:["mdi:blinds","mdi:blinds-open"],shutter:["mdi:window-shutter","mdi:window-shutter-open"],curtain:["mdi:curtains-closed","mdi:curtains"],window:["mdi:window-closed","mdi:window-open"],awning:["mdi:awning-outline","mdi:awning"],door:["mdi:door-closed","mdi:door-open"],garage:["mdi:garage","mdi:garage-open"],gate:["mdi:gate","mdi:gate-open"],damper:["mdi:circle-slice-8","mdi:circle-outline"]},gn=[["mdi:roller-shade-closed","mdi:roller-shade"],["mdi:blinds-horizontal-closed","mdi:blinds-horizontal"],["mdi:garage-variant","mdi:garage-open-variant"],["mdi:door","mdi:door-open"]];function fn(e){for(const t of[...Object.values(mn),...gn])if(e===t[0]||e===t[1])return t;return null}function vn(e,t,i,n,r){if(!n||"unavailable"===n||"unknown"===n)return e;if(r){const i="cover"===t?fn(e):null;return i?"closed"===n?i[0]:i[1]:e}if("binary_sensor"===t){if("door"===i)return"on"===n?"mdi:door-open":"mdi:door-closed";if("window"===i)return"on"===n?"mdi:window-open":"mdi:window-closed";if("garage_door"===i)return"on"===n?"mdi:garage-open-variant":"mdi:garage-variant"}if("cover"===t){const t=mn[String(i||"")];if(t)return"closed"===n?t[0]:t[1];const r=fn(e);return r?"closed"===n?r[0]:r[1]:e}return"lock"===t?"locked"===n?"mdi:lock":"mdi:lock-open-variant":"light"===t&&"mdi:lightbulb"===e&&"on"===n?"mdi:lightbulb-on":e}function yn(e){const t=Math.min(4e4,Math.max(1e3,e))/100,i=t<=66?255:329.698727446*Math.pow(t-60,-.1332047592),n=t<=66?99.4708025861*Math.log(t)-161.1195681661:288.1221695283*Math.pow(t-60,-.0755148492),r=t>=66?255:t<=19?0:138.5177312231*Math.log(t-10)-305.0447927307,o=e=>Math.round(Math.min(255,Math.max(0,e)));return[o(i),o(n),o(r)]}const bn=1/2.2;function wn(e){const t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/.exec(e);return t?"#"+t.slice(1).map(e=>Math.min(255,Number(e)).toString(16).padStart(2,"0")).join(""):null}function kn(e){if(!e||"object"!=typeof e||Array.isArray(e))return null;const t=e;if(Object.keys(t).some(e=>"c"!==e&&"bri"!==e))return null;const i=Ut(t.c,null);return i?void 0===t.bri||null===t.bri?{c:i}:"number"!=typeof t.bri||!Number.isFinite(t.bri)||t.bri<.01||t.bri>1?null:{c:i,bri:t.bri}:null}function xn(e,t,i){const n=kn(t),r=e?.attributes||{},o=n?.bri??function(e){const t=e?.attributes?.brightness,i="number"==typeof t?t:"string"==typeof t&&""!==t.trim()?Number(t):Number.NaN;return Number.isFinite(i)?Math.max(0,Math.min(1,i/255)):1}(e);if(n)return{c:n.c,bri:o};const s=Kt(r.rgb_color);if(s)return{c:wn(s)||Ut(i,"#ffd9a0"),bri:o};const a=Number(r.color_temp_kelvin)||(Number(r.color_temp)>0?1e6/Number(r.color_temp):NaN);return Number.isFinite(a)&&a>0?{c:(l=yn(a),"#"+l.slice(0,3).map(e=>Math.min(255,Math.max(0,Math.round(Number(e)||0))).toString(16).padStart(2,"0")).join("")),bri:o}:{c:Ut(i,"#ffd9a0"),bri:o};var l}function Sn(e,t,i){return"on"===e?.state?xn(e,t,i):null}function $n(e,t=1){const i=Math.max(0,Math.min(1,Number.isFinite(e)?e:1)),n=.7*Math.max(0,Math.min(1,Number.isFinite(t)?t:1))*(.4+.6*Math.pow(i,bn));return Math.max(0,Math.min(1,n))}function Mn(e){return e.startsWith("light.")||e.startsWith("switch.")}function Rn(e,t,i=1e-6){const n=[];if(!e||!t||e.length<3||t.length<3)return n;for(let r=0;ru||l>u)continue;const p=(r[0]-o[0])*h+(r[1]-o[1])*d,_=(s[0]-o[0])*h+(s[1]-o[1])*d,m=Math.max(0,Math.min(p,_)),g=Math.min(c,Math.max(p,_));g-m>i&&n.push([o[0]+h*m,o[1]+d*m,o[0]+h*g,o[1]+d*g])}}return n}function Cn(e,t,i=1e-6){const n=[];for(const r of e){const e=[r[0],r[1]],o=[r[2],r[3]],s=o[0]-e[0],a=o[1]-e[1],l=Math.hypot(s,a);if(lo||r>o)continue;const s=(n[0]-e[0])*c+(n[1]-e[1])*h,a=(n[2]-e[0])*c+(n[3]-e[1])*h,u=Math.max(0,Math.min(s,a)),p=Math.min(l,Math.max(s,a));p-u>i&&d.push([u,p])}if(!d.length){n.push([e[0],e[1],o[0],o[1]]);continue}d.sort((e,t)=>e[0]-t[0]);let u=0;for(const[t,r]of d)t-u>i&&n.push([e[0]+c*u,e[1]+h*u,e[0]+c*t,e[1]+h*t]),u=Math.max(u,r);l-u>i&&n.push([e[0]+c*u,e[1]+h*u,o[0],o[1]])}return n}function Tn(e,t,i=1e-6){const n=[];for(let t=0;t{if("string"!=typeof e||!e)return;const i=Fn(e);i.startsWith("/api/houseplan/content/")&&t.add(i)};for(const t of e?.spaces||[]){i(t?.plan_url);for(const e of t?.markers||[])for(const t of e?.pdfs||[])i(t?.url)}for(const t of e?.markers||[])for(const e of t?.pdfs||[])i(e?.url);return t}function Fn(e){return e?e.startsWith("/houseplan_files/plans/")?"/api/houseplan/content/plans/_/"+e.slice(23):e.startsWith("/houseplan_files/files/")?"/api/houseplan/content/files/"+e.slice(23):e:""}function zn(e,t){const i=t?.settings?.fill_mode;return"none"===i||"lqi"===i||"light"===i||"temp"===i||"custom"===i?i:e}function In(e,t){const i=t?.settings;return"boolean"==typeof i?.glow?i.glow:"glow"===i?.fill_mode||e}function On(e,t,i,n){if(!t||!i||t===i)return e;const r="/files/"+t+"/",o="/files/"+i+"/";return e.map(e=>{if(!e.url.includes(r))return e;const t=e.url.split(r)[1]||"",[i,s]=[t.split("?")[0],t.includes("?")?"?"+t.split("?")[1]:""];if(n){const t=n[decodeURIComponent(i)]??n[i];return t?{...e,url:e.url.split(r+i)[0]+o+encodeURIComponent(t)+s}:e}return{...e,url:e.url.split(r).join(o)}})}function En(e,t=1){const i=Number(e);return Number.isFinite(i)&&i>0?Math.min(3,Math.max(.5,i)):t}function Nn(e,t,i){let n=null,r=null;for(const o of t){if(!(Math.abs(o[0]-e[0])<1e-6&&Math.abs(o[1]-e[1])<1e-6)){if(Math.abs(o[0]-e[0])<=i){const t=Math.abs(o[1]-e[1]);t>1e-6&&(!n||t1e-6&&(!r||t"number"==typeof e&&Number.isFinite(e),Zn=(e,t,i)=>Math.min(i,Math.max(t,e));function Jn(e){return e.elevation<=-6?"night":e.elevation>=6?"day":e.rising?"dawn":"dusk"}function Qn(e){const t=(Math.floor(Number(e)||0)%1440+1440)%1440;return t>=300&&t<480?"dawn":t>=480&&t<1080?"day":t>=1080&&t<1260?"dusk":"night"}function er(e){const t=Jn(e),i=e.azimuth*Math.PI/180;return{sunX:50-42*Math.sin(i),sunY:78-Zn(e.elevation,0,90)/90*64,sunOpacity:"night"===t?0:Zn((e.elevation+6)/12,0,1)}}function tr(e){const t=(Math.floor(Number(e)||0)%1440+1440)%1440;if(t<300||t>=1260)return{sunX:50,sunY:78,sunOpacity:0};const i=(t-300)/960,n=(t-300)/120,r=(1260-t)/120;return{sunX:8+84*i,sunY:78-64*Math.sin(i*Math.PI),sunOpacity:Math.max(.18,Math.min(n,r,1))}}function ir(e,t=new Date){const i=function(e){const t=e?.states?.["sun.sun"]?.attributes;return t&&Xn(t.azimuth)&&Xn(t.elevation)&&"boolean"==typeof t.rising?{azimuth:Gn(t.azimuth),elevation:t.elevation,rising:t.rising}:null}(e);if(i)return{phase:Jn(i),source:"sun",...er(i)};const n="number"==typeof t?t:function(e=new Date){return 60*e.getHours()+e.getMinutes()}(t);return{phase:Qn(n),source:"clock",...tr(n)}}function nr(e){return`${e.source}|${e.phase}|${e.sunX.toFixed(2)}|${e.sunY.toFixed(2)}|`+e.sunOpacity.toFixed(3)}const rr=[[-90,"#070c14"],[-12,"#070c14"],[-4,"#131a28"],[0,"#4a3527"],[10,"#e8ddcf"],[30,"#ffffff"],[90,"#ffffff"]],or=e=>Math.min(1,Math.max(0,e));function sr(e,t,i=6){const n=e.angle*Math.PI/180,r=[Math.sin(n),-Math.cos(n)],o=n=>{const o=[e.x+r[0]*i*n,e.y+r[1]*i*n];return t.find(e=>e.poly.length>=3&&ui(o,e.poly))||null},s=o(1),a=o(-1);return s&&a?null:s||a?s?{normal:[-r[0],-r[1]],roomId:s.id}:{normal:r,roomId:a.id}:null}function ar(e,t,i){return i>0&&e[0]*t[0]+e[1]*t[1]>.05}function lr(e,t,i,n){return[[e[0],e[1]],[t[0],t[1]],[t[0]+i[0]*n,t[1]+i[1]*n],[e[0]+i[0]*n,e[1]+i[1]*n]]}function cr(e,t){try{const i=qt([[...e.map(e=>[e[0],e[1]]),[e[0][0],e[0][1]]]],[[...t.map(e=>[e[0],e[1]]),[t[0][0],t[0][1]]]]),n=[];for(const e of i){const t=e?.[0];!Array.isArray(t)||t.length<4||n.push(t.slice(0,t.length-1).map(e=>[e[0],e[1]]))}return n}catch{return[]}}function hr(e,t,i,n,r,o,s){if(!(n>0))return[];const a=Kn(i,r),l=[-a[0],-a[1]],c=function(e){const t=Math.min(90,Math.max(0,e));return.7*(.8+1.7*Math.pow(1-t/90,1.6))}(n),h=[];for(const i of t){if(!(i.length>0))continue;const t=sr(i,e);if(!t||!ar(t.normal,a,n))continue;const r=e.find(e=>e.id===t.roomId);if(!r)continue;const d=o&&o[t.roomId]||r.poly,u=i.angle*Math.PI/180,p=i.length/2,_=[-t.normal[0],-t.normal[1]],m=Math.max(0,s?.[i.id]||0),g=i.x+_[0]*m/2,f=i.y+_[1]*m/2,v=Math.cos(u)*p,y=Math.sin(u)*p,b=[g-v,f-y],w=[g+v,f+y],k=c*i.length,x=cr(lr(b,w,l,k),d);if(!x.length)continue;const S=l[0]*_[0]+l[1]*_[1];h.push({openingId:i.id,roomId:t.roomId,polys:x,a:b,b:w,dir:l,len:k,normal:_,depth:k*S})}return h}const dr=e=>"number"==typeof e&&Number.isInteger(e)&&e>=0&&e<=359?e:null;function ur(e,t){const i=dr(t?.north_deg);return null!==i?i:dr(e?.north_deg)}function pr(e,t){const i=e=>"static"===e||"daynight"===e?e:null;return i(t?.bg_mode)??i(e?.bg_mode)??"static"}function _r(e,t){const i=t?.sun_rays;return"boolean"==typeof i?i:!0===e?.sun_rays}function mr(e){const t=e?.states?.["sun.sun"]?.attributes,i=Number(t?.azimuth),n=Number(t?.elevation);return Number.isFinite(i)&&Number.isFinite(n)?{azimuth:i,elevation:n}:null}const gr=["dawn","day","dusk","night"];function fr(e){if(!e)return"";const t=Yn[e.phase];return[`--hp-day-cycle-outline-near:${t.outlineNear}`,`--hp-day-cycle-outline-mid:${t.outlineMid}`,`--hp-day-cycle-outline-far:${t.outlineFar}`].join(";")}function vr(e,t=1){if(!e)return V;const i=[`--hp-day-cycle-sun-x:${e.sunX.toFixed(2)}%`,`--hp-day-cycle-sun-y:${e.sunY.toFixed(2)}%`,`--hp-day-cycle-sun-opacity:${e.sunOpacity.toFixed(3)}`,`opacity:${Math.min(1,Math.max(0,t)).toFixed(4)}`].join(";");return j``:G} -
this._markupClick(e)} @wheel=${e=>this._onWheel(e)} @pointerdown=${e=>{this._notePointer(e),this._stagePointerDown(e)}} @@ -5480,33 +5484,33 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 @pointerup=${e=>this._stagePointerUp(e)} @pointercancel=${e=>this._stagePointerCancel(e)}> ${vr(I,O)} - ${this._editorRuntime?this._renderEditorSecondary():V} + ${this._editorRuntime?this._renderEditorSecondary():G}
${d&&M?.structural?W``:V} - `:G} + - + ${""} ${this._wallHatchDefs(g.color)}${W`${this._paperShapes(a.rooms).map(e=>"path"in e?W``:"poly"in e?W``:W``)}`} - ${this._editing?this._renderMarkupDefs(c):V} + ${this._editing?this._renderMarkupDefs(c):G} ${""} - ${this._editing&&!this._markup&&this._gridLevels()?W``:V} + ${this._editing&&!this._markup&&this._gridLevels()?W``:G} ${a.bg&&P?W`this._onBackdropLoaded(a.bg.href,P)} - transform=${a.bg.angle?`rotate(${a.bg.angle} ${a.bg.x+a.bg.w/2} ${a.bg.y+a.bg.h/2})`:V} + transform=${a.bg.angle?`rotate(${a.bg.angle} ${a.bg.x+a.bg.w/2} ${a.bg.y+a.bg.h/2})`:G} @dblclick=${e=>this._openBackdropDialog(e)} - preserveAspectRatio="none" />`:V} - ${(()=>{const e=this._openCuts(),t=this._thickWallCuts(),i=this._wallUnionGeometry()?.roomGeom,n=new Map,r=e=>(n.has(e)||n.set(e,ei(e)),n.get(e));return a.rooms.filter(e=>e.area||"view"===this._mode||this._markup||g.showBorders).map(n=>{let o="room "+(a.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||n.id!==this._mergeSel&&n.id!==this._splitSel?.roomId||(o+=" picked");let s="";const l=zn(g.fill,n);if(!this._markup&&(g.showBorders||"none"!==l)){o+=" styled";const e=[];e.push(`--room-stroke:${g.color}`,`--room-stroke-op:${g.showBorders?g.opacity:0}`);const t=f.byRoom.get(n)||null;t?(o+=" filled",e.push(`--room-fill:${t.color}`,`--room-fill-op:${t.opacity}`)):e.push("--room-fill:transparent","--room-fill-op:0"),s=e.join(";")}let c;const h=e=>{this._roomTipEnabledForPointer(e)&&(void 0===c&&(c=this._roomArea(n)),this._showTip(e,n.name||this._t("room.unnamed"),c?this._t("tip.area",{value:c}):"",y?this._roomLqi(n.area):null,this._roomTemp(n),this._roomHum(n),!0))},d=e=>{this._notePointer(e),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:a.id,room:n},this._syncLiveHover())},u=r(n),p=this._markup&&(n.id===this._mergeSel||n.id===this._splitSel?.roomId),_=u&&!p?e.filter(e=>{const t=[(e[0]+e[2])/2,(e[1]+e[3])/2];return u.some((e,i)=>Bn(t,[e[0],e[1],...u[(i+1)%u.length]])<=.08*this._gridPitch)}):[],m=p?[]:t,v=_.concat(m);v.length&&(o+=" noedge");const b=this._spaceWalls.length&&n.id&&u&&this._innerRoomContour(a,n.id,e,i)||u,w=b?Si(b,(k=n,a.rooms.filter(e=>e!==k).map(r).filter(Boolean))):[];var k;const x=e=>"M "+e.map(e=>e[0]+" "+e[1]).join(" L ")+" Z",S=b?this._cleanFloor(n,b,a).path:"",$=n.id||V,M=n.area||V,R=S&&b?W``:G} + ${(()=>{const e=this._openCuts(),t=this._thickWallCuts(),i=this._wallUnionGeometry()?.roomGeom,n=new Map,r=e=>(n.has(e)||n.set(e,ei(e)),n.get(e));return a.rooms.filter(e=>e.area||"view"===this._mode||this._markup||g.showBorders).map(n=>{let o="room "+(a.bg?"overlay":"yard")+(this._markup?" outlined":"");!this._markup||n.id!==this._mergeSel&&n.id!==this._splitSel?.roomId||(o+=" picked");let s="";const l=zn(g.fill,n);if(!this._markup&&(g.showBorders||"none"!==l)){o+=" styled";const e=[];e.push(`--room-stroke:${g.color}`,`--room-stroke-op:${g.showBorders?g.opacity:0}`);const t=f.byRoom.get(n)||null;t?(o+=" filled",e.push(`--room-fill:${t.color}`,`--room-fill-op:${t.opacity}`)):e.push("--room-fill:transparent","--room-fill-op:0"),s=e.join(";")}let c;const h=e=>{this._roomTipEnabledForPointer(e)&&(void 0===c&&(c=this._roomArea(n)),this._showTip(e,n.name||this._t("room.unnamed"),c?this._t("tip.area",{value:c}):"",y?this._roomLqi(n.area):null,this._roomTemp(n),this._roomHum(n),!0))},d=e=>{this._notePointer(e),this._pointerModality.hoverEnabled&&(this._hoverRoom={space:a.id,room:n},this._syncLiveHover())},u=r(n),p=this._markup&&(n.id===this._mergeSel||n.id===this._splitSel?.roomId),_=u&&!p?e.filter(e=>{const t=[(e[0]+e[2])/2,(e[1]+e[3])/2];return u.some((e,i)=>Bn(t,[e[0],e[1],...u[(i+1)%u.length]])<=.08*this._gridPitch)}):[],m=p?[]:t,v=_.concat(m);v.length&&(o+=" noedge");const b=this._spaceWalls.length&&n.id&&u&&this._innerRoomContour(a,n.id,e,i)||u,w=b?Si(b,(k=n,a.rooms.filter(e=>e!==k).map(r).filter(Boolean))):[];var k;const x=e=>"M "+e.map(e=>e[0]+" "+e[1]).join(" L ")+" Z",S=b?this._cleanFloor(n,b,a).path:"",$=n.id||G,M=n.area||G,R=S&&b?W``:V;return W`${R}${T}`})})()} + style=${this._markup?G:`stroke:${g.color};stroke-opacity:${g.showBorders?g.opacity:0}`}>`:G;return W`${R}${T}`})})()} ${this._renderRoomHoverFill(A)} ${this._renderOpeningTunnelFills(a,f)} ${this._renderGlowBaseRooms(a,v)} ${this._renderOpeningTunnelFills(a,v,"glow-base")} ${""} - ${g.hideDecor&&"decor"!==this._mode?V:this._renderDecorLayer(void 0,S)} - ${N?this._renderGlowLayer(a,g,S):V} + ${g.hideDecor&&"decor"!==this._mode?G:this._renderDecorLayer(void 0,S)} + ${N?this._renderGlowLayer(a,g,S):G} ${this._renderSunRays(a)} ${this._editing?W`${this._renderAlignGuides()}`:V} + opacity="${z?.editorWeight??1}">${this._renderAlignGuides()}`:G} ${this._markup?W`${this._renderMarkupLayer(c)}`:V} + opacity="${z?.editorWeight??1}">${this._renderMarkupLayer(c)}`:G} ${""} ${""} - ${this._editing?V:this._renderZeroWalls(g)} + ${this._editing?G:this._renderZeroWalls(g)} ${this._renderWallBodies(g)} - ${this._markup&&"resize"===this._tool?this._renderResizeMeasurements():V} + ${this._markup&&"resize"===this._tool?this._renderResizeMeasurements():G} ${this._renderRoomHoverOutline(A)} ${""} - ${this._editing?this._renderZeroWalls(g):V} + ${this._editing?this._renderZeroWalls(g):G} ${this._markup?W`${this._renderHiddenWallDiagnosticOverlay()}`:V} + opacity="${z?.editorWeight??1}">${this._renderHiddenWallDiagnosticOverlay()}`:G} ${this._markup?W`${this._renderOpeningPlacementPreview()}`:V} - ${T?this._renderOpeningDimensionGuides(T):V} - ${T?.guide?this._renderOpeningCenterTick(T.guide):V} + opacity="${z?.editorWeight??1}">${this._renderOpeningPlacementPreview()}`:G} + ${T?this._renderOpeningDimensionGuides(T):G} + ${T?.guide?this._renderOpeningCenterTick(T.guide):G} ${""} ${""} ${this._markup?W`${this._renderActiveChainInk()}`:V} + opacity="${z?.editorWeight??1}">${this._renderActiveChainInk()}`:G} ${this._markup?W`${this._renderPlanSnapOverlay()}`:V} - ${g.hideOpenings&&!this._markup||M&&!M.floorSymbols?V:this._renderOpenings(g)} + opacity="${z?.editorWeight??1}">${this._renderPlanSnapOverlay()}`:G} + ${g.hideOpenings&&!this._markup||M&&!M.floorSymbols?G:this._renderOpenings(g)} ${this._renderWallThickUi()} - ${this._markup&&"resize"===this._tool?this._renderResizeLayer(S):V} + ${this._markup&&"resize"===this._tool?this._renderResizeLayer(S):G} ${""} ${this._renderBackdropFrame(S)} ${this._renderTextFrame(S)} @@ -5576,31 +5580,31 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 ${Me(d&&M?.structural?W` `:V)} + ${$?.grounds??G} + ${$?.raised??G} + `:G)} ${""} -
+
${_.map(e=>this._renderDevice(e,S,y,R?.devices.get(e.id)))} ${this._renderVacuums(this._renderVacuumDevices,S,a.id)} ${this._renderVacFit(S)} ${this._renderOpeningLocks(S,R?.locks)} - ${g.showNames||this._markup?a.rooms.map(e=>this._renderRoomLabel(e,a,S,g,R?.rooms.get(e))):V} - ${this._markup?a.rooms.map(e=>this._renderRoomGear(e,a,S)):V} - ${B={hass:this.hass,settings:this._settings,devices:this._renderDevices,registry:this._haRegistry,currentSpace:a.id,spaces:this._serverCfg?.spaces,viewKey:S,view:"view"===this._mode,kiosk:this._kiosk},B.view&&!B.kiosk&&!0===B.hass?.user?.is_admin&&Jm(B.settings).enabled?(import("./hp-zigbee-topology-overlay-D_uDeHju.js"),j``):G}
- ${this._wallDialog?j`
${this._renderWallThickDialog()}
`:V} + ${this._wallDialog?j`
${this._renderWallThickDialog()}
`:G}
${this._renderFarHint()} @@ -5609,24 +5613,24 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 ${this._renderRecoveryOverlay()} ${this._booting||this._bootFading?j``:V} +
`:G}
- ${this._roomDialog&&this._editorRuntime?this._renderRoomDialog():V} - ${this._mergeDialog&&this._editorRuntime?this._renderMergeDialog():V} - ${this._openingDialog&&this._editorRuntime?this._renderOpeningDialog():V} - ${this._physicalDialog&&this._editorRuntime?this._renderPhysicalDialog():V} - ${this._partitionDeleteDialog&&this._editorRuntime?this._renderPartitionDeleteDialog():V} - ${this._roomDeleteDialog&&this._editorRuntime?this._renderRoomDeleteDialog():V} - ${this._openingInfo?this._renderOpeningInfoCard():V} - ${this._decorTextDialog&&this._editorRuntime?this._renderDecorTextDialog():V} - ${this._decorShapeDialog&&this._editorRuntime?this._renderDecorShapeDialog():V} - ${this._backdropDialog&&this._editorRuntime?this._renderBackdropDialog():V} - ${this._decorEraseConfirm&&this._editorRuntime?this._renderDecorEraseConfirm():V} - ${this._spaceDialog&&(this._onboardingRuntime||this._editorRuntime)?this._renderSpaceDialog():V} - ${this._deviceInbox&&this._editorRuntime?this._renderDeviceInbox():V} - ${this._markerDialog&&this._editorRuntime?this._renderMarkerDialog():V} - ${this._backdropGuard?this._editorRuntime?this._editorRuntime._renderBackdropGuard():this._onboardingRuntime?._renderBackdropGuard()??V:V} + ${this._roomDialog&&this._editorRuntime?this._renderRoomDialog():G} + ${this._mergeDialog&&this._editorRuntime?this._renderMergeDialog():G} + ${this._openingDialog&&this._editorRuntime?this._renderOpeningDialog():G} + ${this._physicalDialog&&this._editorRuntime?this._renderPhysicalDialog():G} + ${this._partitionDeleteDialog&&this._editorRuntime?this._renderPartitionDeleteDialog():G} + ${this._roomDeleteDialog&&this._editorRuntime?this._renderRoomDeleteDialog():G} + ${this._openingInfo?this._renderOpeningInfoCard():G} + ${this._decorTextDialog&&this._editorRuntime?this._renderDecorTextDialog():G} + ${this._decorShapeDialog&&this._editorRuntime?this._renderDecorShapeDialog():G} + ${this._backdropDialog&&this._editorRuntime?this._renderBackdropDialog():G} + ${this._decorEraseConfirm&&this._editorRuntime?this._renderDecorEraseConfirm():G} + ${this._spaceDialog&&(this._onboardingRuntime||this._editorRuntime)?this._renderSpaceDialog():G} + ${this._deviceInbox&&this._editorRuntime?this._renderDeviceInbox():G} + ${this._markerDialog&&this._editorRuntime?this._renderMarkerDialog():G} + ${this._backdropGuard?this._editorRuntime?this._editorRuntime._renderBackdropGuard():this._onboardingRuntime?._renderBackdropGuard()??G:G} ${this._vacCalConfirm&&this._editorRuntime?j`${this._t("vac.apply_proposal")} - `:V} - ${this._infoCard?this._renderInfoCard():V} - ${this._rulesDialog&&this._editorRuntime?this._renderRulesDialog():V} - ${this._settingsDialog&&this._editorRuntime?this._renderSettingsDialog():V} - ${this._supportDialog&&this._editorRuntime?this._renderSupportDialog():V} - ${this._alignDialog&&this._editorRuntime?this._renderAlignDialog():V} - ${this._backupExportDialog&&this._editorRuntime?this._renderBackupExportDialog():V} - ${this._backupImportDialog&&this._editorRuntime?this._renderBackupImportDialog():V} - ${this._importDialog&&this._onboardingRuntime?this._renderImportDialog():V} + `:G} + ${this._infoCard?this._renderInfoCard():G} + ${this._rulesDialog&&this._editorRuntime?this._renderRulesDialog():G} + ${this._settingsDialog&&this._editorRuntime?this._renderSettingsDialog():G} + ${this._supportDialog&&this._editorRuntime?this._renderSupportDialog():G} + ${this._pdfDialog?this._renderPdfDialog():G} + ${this._alignDialog&&this._editorRuntime?this._renderAlignDialog():G} + ${this._backupExportDialog&&this._editorRuntime?this._renderBackupExportDialog():G} + ${this._backupImportDialog&&this._editorRuntime?this._renderBackupImportDialog():G} + ${this._importDialog&&this._onboardingRuntime?this._renderImportDialog():G} ${this._kiosk&&!this._hasFixedFloor&&this._kioskDots&&this._model.length>1?j`
${this._model.map(e=>j``)} -
`:V} - ${this._kioskDialog?this._renderKioskDialog():V} + `:G} + ${this._kioskDialog?this._renderKioskDialog():G} ${this._vacFit?j`
${this._t("vac.fit_hint")} -
`:V} + `:G} ${this._tapConfirm?j`${this._t("btn.run")} - `:V} - ${this._toast?j``:V} + `:G} + ${this._toast?j``:G} - `;var B}_vacCandidateStatus(e,t,i=this._planHass){const n=this._bindingStatus("entity:"+e);if("ha_disabled"===n.kind)return"disabled";if("orphaned"===n.kind)return"missing";if("unverified"===n.kind)return"unverified";const r=i?.states?.[e];return"unavailable"===r?.state?"unavailable":t?.hasPosition?"ok":"unsupported"}_vacOpenAllCameras(e){const t=this._haRegistry.entities||{},i=[];for(const[e,n]of Object.entries(this.hass?.states||{})){if(!e.startsWith("camera."))continue;const r=kc(e,n,t[e]);r&&i.push(r)}this._vacAllCameraCache={devId:e.id,candidates:i},this._vacAllCamerasFor=e.id}_vacSourceResolution(e,t=!1,i=this._planHass){const n=e.marker?.vacuum,r="string"==typeof n?.source&&!!n.source,o=new Set(e.entities||[]),s=new Set(o);r&&s.add(n.source);const a=i?.entities||{},l=[];for(const e of s){const t=i?.states?.[e],o=kc(e,t,a[e]);o?l.push(o):r&&e===n.source&&l.push({entityId:e,name:String(t?.attributes?.friendly_name||e),platform:a[e]?.platform?String(a[e].platform):null,category:e.startsWith("camera.")?"camera":"partial",hasPosition:!1,hasRooms:!1,hasPath:!1,hasMapId:!1,score:0})}if(t&&this._vacAllCameraCache?.devId===e.id){const e=new Set(l.map(e=>e.entityId));for(const t of this._vacAllCameraCache.candidates)e.has(t.entityId)||l.push(t)}const c={};for(const e of l)c[e.entityId]=this._vacCandidateStatus(e.entityId,e,i);return function(e,t,i,n){const r="string"==typeof e&&e.length>0,o=new Set(t),s=Array.from(i).sort((t,i)=>r&&t.entityId===e?-1:r&&i.entityId===e?1:i.score-t.score||t.entityId.localeCompare(i.entityId));if(r){const t=s.find(t=>t.entityId===e);return{entityId:e,status:n[e]||(t?.hasPosition?"ok":"unverified"),pinned:!0,candidates:s}}const a=s.find(e=>o.has(e.entityId)&&e.hasPosition&&"ok"===n[e.entityId]);return a?{entityId:a.entityId,status:"ok",pinned:!1,candidates:s}:{entityId:null,status:"none",pinned:!1,candidates:s}}(n?.source,o,l,c)}_vacSource(e,t=this._planHass){if(!1===e.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(e,!1,t);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(e){return e.primary?.startsWith("vacuum.")?e.primary:(e.entities||[]).find(e=>e.startsWith("vacuum."))||null}_isVacDev(e){return!!this._vacEntity(e)}_activitySourceKey(e){return this._activitySnapshot(e).sourceKey}_activitySnapshot(e,t=pd(this._planHass,this._devices,null,this._virtualLights)){const i=Rp(this._planHass,e,this._devices,t,this._fullRegistryHass);return{samples:i.samples,sourceKey:Dp(this._planHass,e,i)}}_stampActivity(e,t,i){let n=this._activityRt.get(e);n||(n=xm(i||"",[]),this._activityRt.set(e,n)),null!=i&&(n.sources=i),$m(n,t,Date.now(),window.clearTimeout.bind(window),e=>window.setTimeout(()=>this.requestUpdate(),e))}_syncActivityRuntime(){const e=new Map;if(!this.hass)return e;if(!1===this._config?.live_states){for(const e of this._activityRt.values())clearTimeout(e.timer);return this._activityRt.clear(),e}const t=new Set,i=pd(this._planHass,this._devices,null,this._virtualLights);for(const n of this._devices){if(n.hidden)continue;if("icon_ripple"!==Ei(n.marker?.display))continue;t.add(n.id);const r=this._activitySnapshot(n,i);e.set(n.id,r);const{samples:o,sourceKey:s}=r;let a=this._activityRt.get(n.id);a?a.sources!==s&&Sm(a,s,o,window.clearTimeout.bind(window)):(a=xm(s,o),this._activityRt.set(n.id,a))}for(const[e,i]of this._activityRt)t.has(e)||(clearTimeout(i.timer),this._activityRt.delete(e));return e}_activityTick(){if(!this.hass)return;const e=this._syncActivityRuntime();for(const t of this._devices){if(t.hidden)continue;if("icon_ripple"!==Ei(t.marker?.display))continue;const i=e.get(t.id)||this._activitySnapshot(t),{samples:n,sourceKey:r}=i,o=this._activityRt.get(t.id);if(!o||o.sources!==r)continue;const s=Mm(o,n,window.clearTimeout.bind(window));s&&this._stampActivity(t.id,s,r)}}_vacTick(){if(this.hass)for(const e of this._devices){if(e.hidden||!this._isVacDev(e))continue;if("static_icon"===Ei(e.marker?.display)){this._vacRt.delete(e.id);continue}const t=this._vacSource(e);if(!t)continue;const i=this._vacEntity(e),n=Rc(this.hass.states[i||""]?.state),r=yc(this.hass.states[t]?.attributes);let o=this._vacRt.get(e.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(e.id,o)),n&&!o.moving&&(o.trail=[],o.lastPos=null);const s="never"!==Fc(e.marker?.vacuum)&&!r?.path.length;!n&&o.moving&&(o.endedTs=Date.now(),s&&o.lastPos&&(o.trail=Mc(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=n;const a=r?.pos;if(n&&a){const e=a.x+":"+a.y;if(e!==o.lastKey){const t=Date.now();o.jump=o.lastTs>0&&t-o.lastTs>1e4,o.lastKey=e,o.lastTs=t,s&&o.lastPos&&(o.trail=Mc(o.trail,o.lastPos,40)),o.lastPos=[a.x,a.y]}}}}_vacEnsureMarker(e){const t=this._serverCfg;if(!t)return null;t.markers=t.markers||[];const i=t.markers.find(t=>t.id===e.id);if(i)return i;if("device"!==e.bindingKind&&"entity"!==e.bindingKind||!e.bindingRef)return null;const n={id:e.id,binding:e.bindingKind+":"+e.bindingRef,space:e.space||null,area:e.area||null,hidden:!!e.hidden};return t.markers.push(n),n}_renderVacSection(e){return this._editorRuntimeOrThrow()._renderVacSection(e)}_vacMapId(e,t,i=this._planHass){const n=this._vacEntity(e),r=n?i?.states?.[n]?.attributes?.selected_map:null;return o=t.mapId,s=r,"default"!==o?o:null!=s?String(s):"default";var o,s}_vacObservedMapId(e,t,i=this._planHass){const n=yc(i?.states?.[t]?.attributes);return n?this._vacMapId(e,n,i):void 0}_vacSaveMatrix(e,t,i,n,r=""){return this._editorRuntimeOrThrow()._vacSaveMatrix(e,t,i,n,r)}_vacPlanRoomAnchors(e){return this._editorRuntimeOrThrow()._vacPlanRoomAnchors(e)}_vacAutoCalibrate(e){return this._editorRuntimeOrThrow()._vacAutoCalibrate(e)}_vacApplyCalibrationProposal(e){return this._editorRuntimeOrThrow()._vacApplyCalibrationProposal(e)}_vacStartFit(e){return this._editorRuntimeOrThrow()._vacStartFit(e)}_vacFitSave(){return this._editorRuntimeOrThrow()._vacFitSave()}_vacFitTurn(e){return this._editorRuntimeOrThrow()._vacFitTurn(e)}_vacGhostCentre(e){return this._editorRuntimeOrThrow()._vacGhostCentre(e)}_vacDelta(e,t,i){return this._editorRuntimeOrThrow()._vacDelta(e,t,i)}_vacFitPointer(e,t){return this._editorRuntimeOrThrow()._vacFitPointer(e,t)}_renderVacFit(e){return this._editorRuntime?this._editorRuntimeOrThrow()._renderVacFit(e):V}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const e=this.renderRoot,t=this._stageEl,i=this._vacLastView,n=e?.querySelectorAll?.(".vacpuck")||[];if(!t||!i||!n.length)return void(this._vacRaf=0);const r=t.getBoundingClientRect();for(const t of n){const n=t.getAttribute("data-mid"),o=t.getBoundingClientRect(),s=i.x+(o.left+o.width/2-r.left)/r.width*i.w,a=i.y+(o.top+o.height/2-r.top)/r.height*i.h;for(const t of e.querySelectorAll(`line.tip[data-mid="${n}"]`))t.setAttribute("x2",s.toFixed(1)),t.setAttribute("y2",a.toFixed(1))}this._vacRafLoop()})}_vacTrailPathD(e,t){const i=e.map(e=>e.map(([e,i])=>lc(t,e,i))),n=function(e,t,i=console.warn){if(!Number.isFinite(t)||t<=0)return[];const n=[];let r=0;for(const i of e){if(!i.every(fc)){r++;continue}const e=i.filter((e,t)=>0===t||!vc(e,i[t-1]));if(e.length<2)continue;const o=[{kind:"move",point:e[0]}];if(2!==e.length){for(let i=1;i0&&i(`[houseplan] vacuum trail: ${r} segment(s) dropped — non-finite point (check map calibration)`),n}(i,this._cmToUnits(17.5)),r=e=>{const t=this._scenePoint(e);return`${t[0].toFixed(1)} ${t[1].toFixed(1)}`};return n.map(e=>e.map(e=>"move"===e.kind?`M ${r(e.point)}`:"line"===e.kind?`L ${r(e.point)}`:`Q ${r(e.control)} ${r(e.point)}`).join(" ")).join(" ")}_renderVacuums(e,t,i){if(this._markup||"decor"===this._mode)return V;const n=this._space+"|"+t.x+"|"+t.y+"|"+t.w+"|"+t.h,r=this._vacJumpOnce||n!==this._vacViewKey;this._vacViewKey=n,this._vacJumpOnce=!1;const o=[],s=[];for(const n of e){if(n.hidden||!this._isVacDev(n))continue;if("static_icon"===Ei(n.marker?.display))continue;const e=this._renderDeviceSnapshot?.facts.get(`vacuum:${n.id}`),a=e?.source??this._vacSource(n,this._renderPlanHass);if(!a)continue;const l=e?.telemetry??yc(this._renderPlanHass?.states[a]?.attributes);if(!l)continue;const c=e?.routes??Ec(n.id,n.marker?.vacuum??null,n.space,a),h=e?.resolution??Hc({routes:c,observed:Lc(c,[a],e=>this._vacObservedMapId(n,e)),spaceIds:new Set(this._model.map(e=>e.id))}),d=e?.server??this._vacSrvTrails[n.id],u=qc({resolution:h,routes:c,renderSpace:i,rootSource:n.marker?.vacuum?.source??null,serverCurrent:d?.current??null,serverPrevious:d?.previous??null,explicitRoutes:Array.isArray(n.marker?.vacuum?.map_routes)});if(!u.live&&!u.previous)continue;const p=u.live,_=e?.runtime??this._vacRt.get(n.id),m=_?.moving??!1,g=Fc(n.marker?.vacuum),f="always"===g||"cleaning"===g&&m,v=d,y=u.currentRunMatches&&Array.isArray(v?.current?.points)?v.current:null,b=u.previous&&Array.isArray(v?.previous?.points)?v.previous:null;if("always"===g&&b&&u.previous){const e=_c(b.points),t=this._vacTrailPathD(e,u.previous);t&&s.push(W``)}if(f&&p){const e=mc(l,y,_?.trail||[]),t=!m||"integration"!==e.source&&"server"!==e.source?e.path:gc(e.path);if(t.length){const e=this._vacTrailPathD(t,p);e&&s.push(W``);const i=t[t.length-1];if(m&&i?.length>=2){const e=i[i.length-1],[t,r]=lc(p,e[0],e[1]),o=this._scenePoint([t,r]),a=o[0].toFixed(1),l=o[1].toFixed(1);s.push(W``)}}}if(!m||!l.pos||!p)continue;const[w,k]=lc(p,l.pos.x,l.pos.y),x=this._scenePoint([w,k]),S=(x[0]-t.x)/t.w*100,$=(x[1]-t.y)/t.h*100,M=_&&_.lastTs>0&&Date.now()-_.lastTs>6e4,R=n.marker?.icon||n.icon||"mdi:robot-vacuum";o.push(j`
e.entityId));for(const t of this._vacAllCameraCache.candidates)e.has(t.entityId)||l.push(t)}const c={};for(const e of l)c[e.entityId]=this._vacCandidateStatus(e.entityId,e,i);return function(e,t,i,n){const r="string"==typeof e&&e.length>0,o=new Set(t),s=Array.from(i).sort((t,i)=>r&&t.entityId===e?-1:r&&i.entityId===e?1:i.score-t.score||t.entityId.localeCompare(i.entityId));if(r){const t=s.find(t=>t.entityId===e);return{entityId:e,status:n[e]||(t?.hasPosition?"ok":"unverified"),pinned:!0,candidates:s}}const a=s.find(e=>o.has(e.entityId)&&e.hasPosition&&"ok"===n[e.entityId]);return a?{entityId:a.entityId,status:"ok",pinned:!1,candidates:s}:{entityId:null,status:"none",pinned:!1,candidates:s}}(n?.source,o,l,c)}_vacSource(e,t=this._planHass){if(!1===e.marker?.vacuum?.live)return null;const i=this._vacSourceResolution(e,!1,t);return"ok"===i.status||"unsupported"===i.status?i.entityId:null}_vacEntity(e){return e.primary?.startsWith("vacuum.")?e.primary:(e.entities||[]).find(e=>e.startsWith("vacuum."))||null}_isVacDev(e){return!!this._vacEntity(e)}_activitySourceKey(e){return this._activitySnapshot(e).sourceKey}_activitySnapshot(e,t=_d(this._planHass,this._devices,null,this._virtualLights)){const i=Cp(this._planHass,e,this._devices,t,this._fullRegistryHass);return{samples:i.samples,sourceKey:Ap(this._planHass,e,i)}}_stampActivity(e,t,i){let n=this._activityRt.get(e);n||(n=Sm(i||"",[]),this._activityRt.set(e,n)),null!=i&&(n.sources=i),Mm(n,t,Date.now(),window.clearTimeout.bind(window),e=>window.setTimeout(()=>this.requestUpdate(),e))}_syncActivityRuntime(){const e=new Map;if(!this.hass)return e;if(!1===this._config?.live_states){for(const e of this._activityRt.values())clearTimeout(e.timer);return this._activityRt.clear(),e}const t=new Set,i=_d(this._planHass,this._devices,null,this._virtualLights);for(const n of this._devices){if(n.hidden)continue;if("icon_ripple"!==Ei(n.marker?.display))continue;t.add(n.id);const r=this._activitySnapshot(n,i);e.set(n.id,r);const{samples:o,sourceKey:s}=r;let a=this._activityRt.get(n.id);a?a.sources!==s&&$m(a,s,o,window.clearTimeout.bind(window)):(a=Sm(s,o),this._activityRt.set(n.id,a))}for(const[e,i]of this._activityRt)t.has(e)||(clearTimeout(i.timer),this._activityRt.delete(e));return e}_activityTick(){if(!this.hass)return;const e=this._syncActivityRuntime();for(const t of this._devices){if(t.hidden)continue;if("icon_ripple"!==Ei(t.marker?.display))continue;const i=e.get(t.id)||this._activitySnapshot(t),{samples:n,sourceKey:r}=i,o=this._activityRt.get(t.id);if(!o||o.sources!==r)continue;const s=Rm(o,n,window.clearTimeout.bind(window));s&&this._stampActivity(t.id,s,r)}}_vacTick(){if(this.hass)for(const e of this._devices){if(e.hidden||!this._isVacDev(e))continue;if("static_icon"===Ei(e.marker?.display)){this._vacRt.delete(e.id);continue}const t=this._vacSource(e);if(!t)continue;const i=this._vacEntity(e),n=Cc(this.hass.states[i||""]?.state),r=bc(this.hass.states[t]?.attributes);let o=this._vacRt.get(e.id);o||(o={trail:[],lastKey:"",lastTs:0,moving:!1,jump:!1,endedTs:0,lastPos:null},this._vacRt.set(e.id,o)),n&&!o.moving&&(o.trail=[],o.lastPos=null);const s="never"!==zc(e.marker?.vacuum)&&!r?.path.length;!n&&o.moving&&(o.endedTs=Date.now(),s&&o.lastPos&&(o.trail=Rc(o.trail,o.lastPos,40)),o.lastPos=null),o.moving=n;const a=r?.pos;if(n&&a){const e=a.x+":"+a.y;if(e!==o.lastKey){const t=Date.now();o.jump=o.lastTs>0&&t-o.lastTs>1e4,o.lastKey=e,o.lastTs=t,s&&o.lastPos&&(o.trail=Rc(o.trail,o.lastPos,40)),o.lastPos=[a.x,a.y]}}}}_vacEnsureMarker(e){const t=this._serverCfg;if(!t)return null;t.markers=t.markers||[];const i=t.markers.find(t=>t.id===e.id);if(i)return i;if("device"!==e.bindingKind&&"entity"!==e.bindingKind||!e.bindingRef)return null;const n={id:e.id,binding:e.bindingKind+":"+e.bindingRef,space:e.space||null,area:e.area||null,hidden:!!e.hidden};return t.markers.push(n),n}_renderVacSection(e){return this._editorRuntimeOrThrow()._renderVacSection(e)}_vacMapId(e,t,i=this._planHass){const n=this._vacEntity(e),r=n?i?.states?.[n]?.attributes?.selected_map:null;return o=t.mapId,s=r,"default"!==o?o:null!=s?String(s):"default";var o,s}_vacObservedMapId(e,t,i=this._planHass){const n=bc(i?.states?.[t]?.attributes);return n?this._vacMapId(e,n,i):void 0}_vacSaveMatrix(e,t,i,n,r=""){return this._editorRuntimeOrThrow()._vacSaveMatrix(e,t,i,n,r)}_vacPlanRoomAnchors(e){return this._editorRuntimeOrThrow()._vacPlanRoomAnchors(e)}_vacAutoCalibrate(e){return this._editorRuntimeOrThrow()._vacAutoCalibrate(e)}_vacApplyCalibrationProposal(e){return this._editorRuntimeOrThrow()._vacApplyCalibrationProposal(e)}_vacStartFit(e){return this._editorRuntimeOrThrow()._vacStartFit(e)}_vacFitSave(){return this._editorRuntimeOrThrow()._vacFitSave()}_vacFitTurn(e){return this._editorRuntimeOrThrow()._vacFitTurn(e)}_vacGhostCentre(e){return this._editorRuntimeOrThrow()._vacGhostCentre(e)}_vacDelta(e,t,i){return this._editorRuntimeOrThrow()._vacDelta(e,t,i)}_vacFitPointer(e,t){return this._editorRuntimeOrThrow()._vacFitPointer(e,t)}_renderVacFit(e){return this._editorRuntime?this._editorRuntimeOrThrow()._renderVacFit(e):G}_vacRafLoop(){this._vacRaf=requestAnimationFrame(()=>{const e=this.renderRoot,t=this._stageEl,i=this._vacLastView,n=e?.querySelectorAll?.(".vacpuck")||[];if(!t||!i||!n.length)return void(this._vacRaf=0);const r=t.getBoundingClientRect();for(const t of n){const n=t.getAttribute("data-mid"),o=t.getBoundingClientRect(),s=i.x+(o.left+o.width/2-r.left)/r.width*i.w,a=i.y+(o.top+o.height/2-r.top)/r.height*i.h;for(const t of e.querySelectorAll(`line.tip[data-mid="${n}"]`))t.setAttribute("x2",s.toFixed(1)),t.setAttribute("y2",a.toFixed(1))}this._vacRafLoop()})}_vacTrailPathD(e,t){const i=e.map(e=>e.map(([e,i])=>cc(t,e,i))),n=function(e,t,i=console.warn){if(!Number.isFinite(t)||t<=0)return[];const n=[];let r=0;for(const i of e){if(!i.every(vc)){r++;continue}const e=i.filter((e,t)=>0===t||!yc(e,i[t-1]));if(e.length<2)continue;const o=[{kind:"move",point:e[0]}];if(2!==e.length){for(let i=1;i0&&i(`[houseplan] vacuum trail: ${r} segment(s) dropped — non-finite point (check map calibration)`),n}(i,this._cmToUnits(17.5)),r=e=>{const t=this._scenePoint(e);return`${t[0].toFixed(1)} ${t[1].toFixed(1)}`};return n.map(e=>e.map(e=>"move"===e.kind?`M ${r(e.point)}`:"line"===e.kind?`L ${r(e.point)}`:`Q ${r(e.control)} ${r(e.point)}`).join(" ")).join(" ")}_renderVacuums(e,t,i){if(this._markup||"decor"===this._mode)return G;const n=this._space+"|"+t.x+"|"+t.y+"|"+t.w+"|"+t.h,r=this._vacJumpOnce||n!==this._vacViewKey;this._vacViewKey=n,this._vacJumpOnce=!1;const o=[],s=[];for(const n of e){if(n.hidden||!this._isVacDev(n))continue;if("static_icon"===Ei(n.marker?.display))continue;const e=this._renderDeviceSnapshot?.facts.get(`vacuum:${n.id}`),a=e?.source??this._vacSource(n,this._renderPlanHass);if(!a)continue;const l=e?.telemetry??bc(this._renderPlanHass?.states[a]?.attributes);if(!l)continue;const c=e?.routes??Nc(n.id,n.marker?.vacuum??null,n.space,a),h=e?.resolution??Lc({routes:c,observed:Bc(c,[a],e=>this._vacObservedMapId(n,e)),spaceIds:new Set(this._model.map(e=>e.id))}),d=e?.server??this._vacSrvTrails[n.id],u=jc({resolution:h,routes:c,renderSpace:i,rootSource:n.marker?.vacuum?.source??null,serverCurrent:d?.current??null,serverPrevious:d?.previous??null,explicitRoutes:Array.isArray(n.marker?.vacuum?.map_routes)});if(!u.live&&!u.previous)continue;const p=u.live,_=e?.runtime??this._vacRt.get(n.id),m=_?.moving??!1,g=zc(n.marker?.vacuum),f="always"===g||"cleaning"===g&&m,v=d,y=u.currentRunMatches&&Array.isArray(v?.current?.points)?v.current:null,b=u.previous&&Array.isArray(v?.previous?.points)?v.previous:null;if("always"===g&&b&&u.previous){const e=mc(b.points),t=this._vacTrailPathD(e,u.previous);t&&s.push(W``)}if(f&&p){const e=gc(l,y,_?.trail||[]),t=!m||"integration"!==e.source&&"server"!==e.source?e.path:fc(e.path);if(t.length){const e=this._vacTrailPathD(t,p);e&&s.push(W``);const i=t[t.length-1];if(m&&i?.length>=2){const e=i[i.length-1],[t,r]=cc(p,e[0],e[1]),o=this._scenePoint([t,r]),a=o[0].toFixed(1),l=o[1].toFixed(1);s.push(W``)}}}if(!m||!l.pos||!p)continue;const[w,k]=cc(p,l.pos.x,l.pos.y),x=this._scenePoint([w,k]),S=(x[0]-t.x)/t.w*100,$=(x[1]-t.y)/t.h*100,M=_&&_.lastTs>0&&Date.now()-_.lastTs>6e4,R=n.marker?.icon||n.icon||"mdi:robot-vacuum";o.push(j`
{e.stopPropagation();const t=this._vacEntity(n);t&&this._openMoreInfo(t)}}>
`)}return this._vacLastView=t,o.length&&!this._vacRaf&&this._vacRafLoop(),o.length||s.length?j` - ${s.length?W`${s}`:V} - ${o}`:V}_renderDevice(e,t,i=!0,n){const r=this._pos(e),o=n?.visualScene??this._scenePoint([r.x,r.y]),s=(o[0]-t.x)/t.w*100,a=(o[1]-t.y)/t.h*100,l=this._devicePresentation(e,i),c=[`left:${s}%`,`top:${a}%`,...Hp(l)],h=l.disabledReason,d=l.haDisabled?this._t(`marker.ha_disabled_${h}`):e.userHidden?this._t("marker.hidden_ghost"):e.name,u=wp(l),p="view"===this._mode||"devices"===this._mode,_=[d,l.haDisabled?"":this._t(`marker.state_a11y_${u}`),"none"!==l.pulse.kind?this._t(`marker.pulse_a11y_${l.pulse.reason}`):"",l.valueFullText||l.valueText||"",ep(l.valueBadge),null!=l.lqiText&&l.lqiBand?this._t(`marker.lqi_a11y_${l.lqiBand}`,{value:l.lqiText}):""].filter(Boolean).join(", "),m=[e.model,l.valueBadge?.fullText||"",null!=l.lqiText?"LQI "+l.lqiText:""].filter(Boolean).join(" · ");return j`
${s}`:G} + ${o}`:G}_renderDevice(e,t,i=!0,n){const r=this._pos(e),o=n?.visualScene??this._scenePoint([r.x,r.y]),s=(o[0]-t.x)/t.w*100,a=(o[1]-t.y)/t.h*100,l=this._devicePresentation(e,i),c=[`left:${s}%`,`top:${a}%`,...Lp(l)],h=l.disabledReason,d=l.haDisabled?this._t(`marker.ha_disabled_${h}`):e.userHidden?this._t("marker.hidden_ghost"):e.name,u=kp(l),p="view"===this._mode||"devices"===this._mode,_=[d,l.haDisabled?"":this._t(`marker.state_a11y_${u}`),"none"!==l.pulse.kind?this._t(`marker.pulse_a11y_${l.pulse.reason}`):"",l.valueFullText||l.valueText||"",tp(l.valueBadge),null!=l.lqiText&&l.lqiBand?this._t(`marker.lqi_a11y_${l.lqiBand}`,{value:l.lqiText}):""].filter(Boolean).join(", "),m=[e.model,l.valueBadge?.fullText||"",null!=l.lqiText?"LQI "+l.lqiText:""].filter(Boolean).join(" · ");return j`
this._clickDevice(t,e)} @keydown=${t=>this._keyDevice(t,e)} @@ -5728,65 +5733,65 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 @pointercancel=${t=>this._pointerCancel(t,e)} @lostpointercapture=${t=>this._pointerCancel(t,e)} > - ${Bp(l,{newDevice:this._newIds.has(e.id),newDeviceTitle:this._t("device.new"),disabledTitle:l.haDisabled?d:""})} + ${qp(l,{newDevice:this._newIds.has(e.id),newDeviceTitle:this._t("device.new"),disabledTitle:l.haDisabled?d:""})} ${this._vacRouteBadge(e)} -
`}_vacRouteBadge(e){if(!this._isVacDev(e)||e.hidden)return V;if("static_icon"===Ei(e.marker?.display))return V;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${e.id}`),i=function(e,t){if(!t||!e)return null;switch(e.kind){case"unmapped":case"needs_calibration":case"ambiguous":case"missing_space":return e.kind;default:return null}}(t?.resolution,this._vacRt.get(e.id)?.moving??!1);if(!i)return V;const n=this._t(`vac.route_warn_${i}`);return j` - `}_roomArea(e){const t=ei(e);if(!t)return null;const i=this._spaceModel();if(!i)return null;const n=this._spaceWalls.length&&e.id&&this._innerRoomContour(i,e.id)||t,r=this._cleanFloor(e,n),o=this._cellCm/this._gridPitch;return Vn(r.area*o*o/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(e){const t=e.settings?.temp_source;if(t)return zd(this._renderPlanHass,t,"temp",this._markers);const i=Od(this._spaceModel()?.id,e);return i?this._climate().get(i)?.temp??null:null}_roomHum(e){const t=e.settings?.hum_source;if(t)return zd(this._renderPlanHass,t,"hum",this._markers);const i=Od(this._spaceModel()?.id,e);return i?this._climate().get(i)?.hum??null:null}_climate(){const e=this._serverCfg?.markers,t=this._renderPlanHass,i=this._climateCache,n=this._settings.exclude_integrations;if(i&&i.h===t&&i.r===this._iconRules&&i.mk===e&&i.ex===n)return i.m;const r=Hd(t,this._iconRules,e,this._excluded);return this._climateCache={h:t,r:this._iconRules,mk:e,ex:n,m:r},r}_resetRoomDialogFields(){return this._editorRuntimeOrThrow()._resetRoomDialogFields()}_openRoomEdit(e){return this._editorRuntimeOrThrow()._openRoomEdit(e)}_roomSettingsFromDialog(){return this._editorRuntimeOrThrow()._roomSettingsFromDialog()}_saveRoomEdit(){return this._editorRuntimeOrThrow()._saveRoomEdit()}_roomSrcCandidates(){return this._editorRuntimeOrThrow()._roomSrcCandidates()}_roomSrcLabel(e){return this._editorRuntimeOrThrow()._roomSrcLabel(e)}_labelPos(e,t){const i=this._layout["rl_"+(e.id||"")];if(i&&i.s===t)return{x:i.x*Tf,y:i.y*Tf};const n=this._roomCenter(e),r=this._gridPitch;return{x:Ja(Xt(n[0],r)),y:Ja(Xt(n[1],r))}}_labelDown(e,t,i){if(this._editorRuntime)return this._editorRuntimeOrThrow()._labelDown(e,t,i)}_labelMove(e,t,i){if(this._editorRuntime)return this._editorRuntimeOrThrow()._labelMove(e,t,i)}_labelUp(e){if(this._editorRuntime)return this._editorRuntimeOrThrow()._labelUp(e)}_labelScale(e){const t=this._layout["rl_"+(e.id||"")]?.k;return"number"==typeof t&&Number.isFinite(t)?Math.min(3,Math.max(.5,t)):1}_rlResizeDown(e,t,i){return this._editorRuntimeOrThrow()._rlResizeDown(e,t,i)}_rlResizeMove(e){return this._editorRuntimeOrThrow()._rlResizeMove(e)}_rlResizeUp(){return this._editorRuntimeOrThrow()._rlResizeUp()}_renderRoomGear(e,t,i){return this._editorRuntimeOrThrow()._renderRoomGear(e,t,i)}_renderRoomLabel(e,t,i,n,r){if(!e.name&&!this._markup)return V;const o=this._labelPos(e,t.id),s=r?.visualScene??this._scenePoint([o.x,o.y]),a=(s[0]-i.x)/i.w*100,l=(s[1]-i.y)/i.h*100,c=Math.min(1,n.opacity+.25),h=this._labelScale(e),d=[];if(n.labelTemp||n.labelHum||n.labelLqi&&e.area||n.labelLight){if(n.labelTemp){const t=this._roomTemp(e);null!=t&&d.push(j`${t}°`)}if(n.labelHum){const t=this._roomHum(e);null!=t&&d.push(j`${t}%`)}if(n.labelLqi&&e.area){const t=this._roomLqi(e.area);null!=t&&d.push(j`${t}`)}if(n.labelLight){const t=(u=pd(this._renderPlanHass,this._renderDevices,e,this._virtualLights)).length?{on:u.filter(e=>e.on).length,total:u.length}:null;if(t){const e=0===t.on?this._t("roomcard.light_off"):t.on===t.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:t.on,total:t.total});d.push(j`${e}`)}}}var u;const p=!!e.area,_=!this._markup;return j`
`}_vacRouteBadge(e){if(!this._isVacDev(e)||e.hidden)return G;if("static_icon"===Ei(e.marker?.display))return G;const t=this._renderDeviceSnapshot?.facts.get(`vacuum:${e.id}`),i=function(e,t){if(!t||!e)return null;switch(e.kind){case"unmapped":case"needs_calibration":case"ambiguous":case"missing_space":return e.kind;default:return null}}(t?.resolution,this._vacRt.get(e.id)?.moving??!1);if(!i)return G;const n=this._t(`vac.route_warn_${i}`);return j` + `}_roomArea(e){const t=ei(e);if(!t)return null;const i=this._spaceModel();if(!i)return null;const n=this._spaceWalls.length&&e.id&&this._innerRoomContour(i,e.id)||t,r=this._cleanFloor(e,n),o=this._cellCm/this._gridPitch;return Gn(r.area*o*o/1e4,"mi"===this._renderPlanHass?.config?.unit_system?.length)}_roomTemp(e){const t=e.settings?.temp_source;if(t)return Id(this._renderPlanHass,t,"temp",this._markers);const i=Ed(this._spaceModel()?.id,e);return i?this._climate().get(i)?.temp??null:null}_roomHum(e){const t=e.settings?.hum_source;if(t)return Id(this._renderPlanHass,t,"hum",this._markers);const i=Ed(this._spaceModel()?.id,e);return i?this._climate().get(i)?.hum??null:null}_climate(){const e=this._serverCfg?.markers,t=this._renderPlanHass,i=this._climateCache,n=this._settings.exclude_integrations;if(i&&i.h===t&&i.r===this._iconRules&&i.mk===e&&i.ex===n)return i.m;const r=Ld(t,this._iconRules,e,this._excluded);return this._climateCache={h:t,r:this._iconRules,mk:e,ex:n,m:r},r}_resetRoomDialogFields(){return this._editorRuntimeOrThrow()._resetRoomDialogFields()}_openRoomEdit(e){return this._editorRuntimeOrThrow()._openRoomEdit(e)}_roomSettingsFromDialog(){return this._editorRuntimeOrThrow()._roomSettingsFromDialog()}_saveRoomEdit(){return this._editorRuntimeOrThrow()._saveRoomEdit()}_roomSrcCandidates(){return this._editorRuntimeOrThrow()._roomSrcCandidates()}_roomSrcLabel(e){return this._editorRuntimeOrThrow()._roomSrcLabel(e)}_labelPos(e,t){const i=this._layout["rl_"+(e.id||"")];if(i&&i.s===t)return{x:i.x*Df,y:i.y*Df};const n=this._roomCenter(e),r=this._gridPitch;return{x:Qa(Xt(n[0],r)),y:Qa(Xt(n[1],r))}}_labelDown(e,t,i){if(this._editorRuntime)return this._editorRuntimeOrThrow()._labelDown(e,t,i)}_labelMove(e,t,i){if(this._editorRuntime)return this._editorRuntimeOrThrow()._labelMove(e,t,i)}_labelUp(e){if(this._editorRuntime)return this._editorRuntimeOrThrow()._labelUp(e)}_labelScale(e){const t=this._layout["rl_"+(e.id||"")]?.k;return"number"==typeof t&&Number.isFinite(t)?Math.min(3,Math.max(.5,t)):1}_rlResizeDown(e,t,i){return this._editorRuntimeOrThrow()._rlResizeDown(e,t,i)}_rlResizeMove(e){return this._editorRuntimeOrThrow()._rlResizeMove(e)}_rlResizeUp(){return this._editorRuntimeOrThrow()._rlResizeUp()}_renderRoomGear(e,t,i){return this._editorRuntimeOrThrow()._renderRoomGear(e,t,i)}_renderRoomLabel(e,t,i,n,r){if(!e.name&&!this._markup)return G;const o=this._labelPos(e,t.id),s=r?.visualScene??this._scenePoint([o.x,o.y]),a=(s[0]-i.x)/i.w*100,l=(s[1]-i.y)/i.h*100,c=Math.min(1,n.opacity+.25),h=this._labelScale(e),d=[];if(n.labelTemp||n.labelHum||n.labelLqi&&e.area||n.labelLight){if(n.labelTemp){const t=this._roomTemp(e);null!=t&&d.push(j`${t}°`)}if(n.labelHum){const t=this._roomHum(e);null!=t&&d.push(j`${t}%`)}if(n.labelLqi&&e.area){const t=this._roomLqi(e.area);null!=t&&d.push(j`${t}`)}if(n.labelLight){const t=(u=_d(this._renderPlanHass,this._renderDevices,e,this._virtualLights)).length?{on:u.filter(e=>e.on).length,total:u.length}:null;if(t){const e=0===t.on?this._t("roomcard.light_off"):t.on===t.total?this._t("roomcard.light_on"):this._t("roomcard.light_partial",{on:t.on,total:t.total});d.push(j`${e}`)}}}var u;const p=!!e.area,_=!this._markup;return j`
this._roomLabelKey(t,e.id):V} - @pointerdown=${this._markup?i=>this._labelDown(i,e,t.id):V} - @pointermove=${this._markup?i=>this._labelMove(i,e,t.id):V} - @pointerup=${this._markup?()=>this._labelUp(e):V} - @pointercancel=${this._markup?()=>this._labelUp(e):V} + @keydown=${"view"===this._mode&&e.id?t=>this._roomLabelKey(t,e.id):G} + @pointerdown=${this._markup?i=>this._labelDown(i,e,t.id):G} + @pointermove=${this._markup?i=>this._labelMove(i,e,t.id):G} + @pointerup=${this._markup?()=>this._labelUp(e):G} + @pointercancel=${this._markup?()=>this._labelUp(e):G} >${e.name||(this._markup?this._t("room.unnamed"):"")}${p?j`{t.stopPropagation(),this._clickRoom(e)}:V} - @pointerdown=${_?e=>e.stopPropagation():V}>`:V} - ${d.length?j`${d}`:V} + title=${_?this._t("room.open_area"):G} + @click=${_?t=>{t.stopPropagation(),this._clickRoom(e)}:G} + @pointerdown=${_?e=>e.stopPropagation():G}>`:G} + ${d.length?j`${d}`:G} ${"plan"===this._mode?["tl","tr","bl","br"].map(i=>j`this._rlResizeDown(i,e,t.id)} @pointermove=${e=>this._rlResizeMove(e)} @pointerup=${()=>this._rlResizeUp()} - @pointercancel=${()=>this._rlResizeUp()}>`):V} + @pointercancel=${()=>this._rlResizeUp()}>`):G}
`}_renderLiveEditorMeasurements(e){const t=e,i=this._opMeasureView,n=this._decorMeasure,r=this._bdLive,o=this._editorRuntime?._furnLive()??null;return j` - ${this._measureAnchor?j`
${this._renderMeasureLabel(t)}
`:V} + ${this._measureAnchor?j`
${this._renderMeasureLabel(t)}
`:G} ${this._resize?.liveLabels?j`
${this._resize.liveLabels.map(e=>j`
${e.text}
`)}
`:V} + data-hp=${"area"===e.kind?"resize-area-label":"resize-length-label"} data-room=${"area"===e.kind?e.roomId:G} data-side=${"area"===e.kind?e.placement.side:G} + style="left:${((e.x-t.x)/t.w*100).toFixed(2)}%;top:${((e.y-t.y)/t.h*100).toFixed(2)}%;${"area"===e.kind?`--rsz-label-x:${e.placement.offsetXPx.toFixed(2)}px;--rsz-label-y:${e.placement.offsetYPx.toFixed(2)}px;--rsz-label-tangent:${e.placement.tangentOffsetPx.toFixed(2)}px`:""}">${e.text}
`)}
`:G} ${i?j`
${i.labels.map(e=>j`
${e.text}
`)}
`:V} + data-dimension-source=${e.dimension?.source||G} data-dimension-room=${e.dimension?.roomId||G} + style="left:${((e.x-t.x)/t.w*100).toFixed(2)}%;top:${((e.y-t.y)/t.h*100).toFixed(2)}%;${e.dimension?`--op-label-shift-x:${(12*e.dimension.labelNormal[0]).toFixed(2)}px;--op-label-shift-y:${(12*e.dimension.labelNormal[1]).toFixed(2)}px`:""}">${e.text}
`)}`:G} ${n?j`
${n.text}
`:V} + style="left:${((n.x-t.x)/t.w*100).toFixed(2)}%;top:${((n.y-t.y)/t.h*100).toFixed(2)}%">${n.text}`:G} ${o?j`
${o.map(e=>j`
${e.text}
`)}
`:V} + style="left:${((e.x-t.x)/t.w*100).toFixed(2)}%;top:${((e.y-t.y)/t.h*100).toFixed(2)}%">${e.text}`)}`:G} ${r?j`
${r.text}
`:V} + style="left:${((r.x-t.x)/t.w*100).toFixed(2)}%;top:${((r.y-t.y)/t.h*100).toFixed(2)}%">${r.text}`:G} `}get _measureAnchor(){return this._markup&&this._cursorPt?"draw"===this._tool&&this._path.length&&!this._contourClosed?this._path[this._path.length-1]:"split"===this._tool&&this._splitSel?.pts?.length?this._splitSel.pts[this._splitSel.pts.length-1]:null:null}_renderMeasureLabel(e){const t=this._measureAnchor,i=this._cursorPt,n=(i[0]-e.x)/e.w*100,r=(i[1]-e.y)/e.h*100,o=Hn(t,i),s=Math.round(10*o)/10,a=function(e,t,i=.001){if(e.length<2||t.length<2)return!1;const n=Math.abs(t[0]-e[0]),r=Math.abs(t[1]-e[1]);if(!Number.isFinite(n)||!Number.isFinite(r)||Math.hypot(n,r)<=i)return!1;const o=Math.max(n,r,1);return n<=i*o||r<=i*o||Math.abs(n-r)<=i*o}(t,i,2e-4*this._gridPitch);return j`
- ${this._fmtLen(t,i)} · ${s}°
`}get _decorMeasure(){const e=this._decorDraft;if(!e||"decor"!==this._mode)return null;const[t,i]=e.a,[n,r]=e.b;if(Math.abs(t-n)<1e-6&&Math.abs(i-r)<1e-6)return null;const o=(t+n)/2,s=(i+r)/2;if("line"===e.kind){const t=Hn(e.a,e.b);return{x:o,y:s,on45:Ln(t),text:`${this._fmtLen(e.a,e.b)} · ${Math.round(10*t)/10}°`}}const a=this._fmtLen([t,i],[n,i]),l=this._fmtLen([n,i],[n,r]);if("ellipse"===e.kind){const e=this._fmtLen([0,0],[Math.abs(n-t)/2,0]),a=this._fmtLen([0,0],[0,Math.abs(r-i)/2]);return{x:o,y:s,on45:!1,text:Math.abs(Math.abs(n-t)-Math.abs(r-i))<1e-6?`R ${e}`:`Rx ${e} × Ry ${a}`}}return{x:o,y:s,on45:!1,text:`${a} × ${l} · ${Vn($r(Math.abs(n-t),this._cellCm,this._gridPitch)*$r(Math.abs(r-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const e=this._drag.id.slice(3),t=this._spaceModel()?.rooms.find(t=>t.id===e);return t?(()=>{const e=this._labelPos(t,this._space);return[e.x,e.y]})():null}return null}if("devices"===this._mode&&this._deviceDrag?.moved){const e=this._devices.find(e=>e.id===this._deviceDrag.id);return e?(()=>{const t=this._pos(e);return[t.x,t.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const e=this._decorList.find(e=>e.id===this._decorMove.id);if(!e)return null;const t=Tf,i=this._decorH;return"line"===e.kind?[e.x1*t,e.y1*i]:[e.x*t,e.y*i]}return null}return null}_alignCandidates(){return this._editorRuntimeOrThrow()._alignCandidates()}_renderAlignGuides(){return this._editorRuntimeOrThrow()._renderAlignGuides()}_renderOpeningCenterTick(e){return this._editorRuntimeOrThrow()._renderOpeningCenterTick(e)}_renderOpeningDimensionGuides(e){return this._editorRuntimeOrThrow()._renderOpeningDimensionGuides(e)}_roomCenter(e){if(e.poly){const t=e.poly.length;return[e.poly.reduce((e,t)=>e+t[0],0)/t,e.poly.reduce((e,t)=>e+t[1],0)/t]}return[e.x+e.w/2,e.y+.1*Math.min(e.w,e.h)]}_openingAmt(e){const t=e.contact&&this._renderOpeningEntityAvailable(e.contact)?this._renderPlanHass.states[e.contact]:null;return si(e.type,t?.state,!!e.invert,t?.attributes?.current_position)}_planEntityAvailable(e){return!!e&&(!Cd(this._fullRegistryHass,e,Rd(this._markers))&&"active"===this._bindingStatus("entity:"+e).kind)}_renderEntityAvailable(e){return!!e&&(!Cd(this._renderPlanHass,e,Rd(this._markers))&&(!!this._renderPlanHass.entities?.[e]&&!!this._renderPlanHass.states?.[e]))}_openingEntityAvailable(e){return function(e,t,i=Fh(e)){return!!t&&"active"===Bh(e,`entity:${t}`,i).kind}(this.hass,e,this._haRegistry)}_renderOpeningEntityAvailable(e){return t=this._renderPlanHass,!!(i=e)&&!!t?.states?.[i];var t,i}_renderOpeningPlacementPreview(){return this._editorRuntimeOrThrow()._renderOpeningPlacementPreview()}_renderOpenings(e,t){const i=t?this._openingsR.filter(e=>t.includes(e.id)):this._openingsR;if(!i.length)return W``;const n=this._spaceModel();if(!n)return W``;const r=e.color,o=this._spaceWalls,s=this._openCuts(),a=this._openingWallIndexFor(n,s).value;return W`${i.map(e=>{if(e.orphanReason)return W``}get _decorMeasure(){const e=this._decorDraft;if(!e||"decor"!==this._mode)return null;const[t,i]=e.a,[n,r]=e.b;if(Math.abs(t-n)<1e-6&&Math.abs(i-r)<1e-6)return null;const o=(t+n)/2,s=(i+r)/2;if("line"===e.kind){const t=Hn(e.a,e.b);return{x:o,y:s,on45:Ln(t),text:`${this._fmtLen(e.a,e.b)} · ${Math.round(10*t)/10}°`}}const a=this._fmtLen([t,i],[n,i]),l=this._fmtLen([n,i],[n,r]);if("ellipse"===e.kind){const e=this._fmtLen([0,0],[Math.abs(n-t)/2,0]),a=this._fmtLen([0,0],[0,Math.abs(r-i)/2]);return{x:o,y:s,on45:!1,text:Math.abs(Math.abs(n-t)-Math.abs(r-i))<1e-6?`R ${e}`:`Rx ${e} × Ry ${a}`}}return{x:o,y:s,on45:!1,text:`${a} × ${l} · ${Gn($r(Math.abs(n-t),this._cellCm,this._gridPitch)*$r(Math.abs(r-i),this._cellCm,this._gridPitch)/1e4,this._imperial)}`}}get _alignPoint(){if(this._markup){if("draw"===this._tool&&this._path.length&&!this._contourClosed&&this._cursorPt)return this._cursorPt;if("split"===this._tool&&this._splitSel?.pts?.length&&this._cursorPt)return this._cursorPt;if(this._drag?.id.startsWith("rl_")&&this._drag.moved){const e=this._drag.id.slice(3),t=this._spaceModel()?.rooms.find(t=>t.id===e);return t?(()=>{const e=this._labelPos(t,this._space);return[e.x,e.y]})():null}return null}if("devices"===this._mode&&this._deviceDrag?.moved){const e=this._devices.find(e=>e.id===this._deviceDrag.id);return e?(()=>{const t=this._pos(e);return[t.x,t.y]})():null}if("decor"===this._mode){if(this._decorDraft)return this._decorDraft.b;if(this._decorMove){const e=this._decorList.find(e=>e.id===this._decorMove.id);if(!e)return null;const t=Df,i=this._decorH;return"line"===e.kind?[e.x1*t,e.y1*i]:[e.x*t,e.y*i]}return null}return null}_alignCandidates(){return this._editorRuntimeOrThrow()._alignCandidates()}_renderAlignGuides(){return this._editorRuntimeOrThrow()._renderAlignGuides()}_renderOpeningCenterTick(e){return this._editorRuntimeOrThrow()._renderOpeningCenterTick(e)}_renderOpeningDimensionGuides(e){return this._editorRuntimeOrThrow()._renderOpeningDimensionGuides(e)}_roomCenter(e){if(e.poly){const t=e.poly.length;return[e.poly.reduce((e,t)=>e+t[0],0)/t,e.poly.reduce((e,t)=>e+t[1],0)/t]}return[e.x+e.w/2,e.y+.1*Math.min(e.w,e.h)]}_openingAmt(e){const t=e.contact&&this._renderOpeningEntityAvailable(e.contact)?this._renderPlanHass.states[e.contact]:null;return si(e.type,t?.state,!!e.invert,t?.attributes?.current_position)}_planEntityAvailable(e){return!!e&&(!Td(this._fullRegistryHass,e,Cd(this._markers))&&"active"===this._bindingStatus("entity:"+e).kind)}_renderEntityAvailable(e){return!!e&&(!Td(this._renderPlanHass,e,Cd(this._markers))&&(!!this._renderPlanHass.entities?.[e]&&!!this._renderPlanHass.states?.[e]))}_openingEntityAvailable(e){return function(e,t,i=zh(e)){return!!t&&"active"===qh(e,`entity:${t}`,i).kind}(this.hass,e,this._haRegistry)}_renderOpeningEntityAvailable(e){return t=this._renderPlanHass,!!(i=e)&&!!t?.states?.[i];var t,i}_renderOpeningPlacementPreview(){return this._editorRuntimeOrThrow()._renderOpeningPlacementPreview()}_renderOpenings(e,t){const i=t?this._openingsR.filter(e=>t.includes(e.id)):this._openingsR;if(!i.length)return W``;const n=this._spaceModel();if(!n)return W``;const r=e.color,o=this._spaceWalls,s=this._openCuts(),a=this._openingWallIndexFor(n,s).value;return W`${i.map(e=>{if(e.orphanReason)return W`{t.stopPropagation(),this._editOpening(e)}}> - + ! - `;const t=this._openingAmt(e),i=t>0&&!!e.contact&&this._renderOpeningEntityAvailable(e.contact)?"var(--hp-open)":r,n="gate"===e.type?!e.flip_v:e.flip_v,s=e.partitionHost||o.length||"gate"===e.type?this._openingFace(e,a,!!n):{ox:0,oy:0,cm:0,side:-1},l={type:e.type,length:e.rlen,angle:e.angle,amount:t,flipH:!!e.flip_h,flipV:!!e.flip_v,base:r,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s},{half:c,outlineHalf:h,hitHalf:d}=Gu(l),u=za(10,this._cellCm),p=za(12,this._cellCm);return W``;const t=this._openingAmt(e),i=t>0&&!!e.contact&&this._renderOpeningEntityAvailable(e.contact)?"var(--hp-open)":r,n="gate"===e.type?!e.flip_v:e.flip_v,s=e.partitionHost||o.length||"gate"===e.type?this._openingFace(e,a,!!n):{ox:0,oy:0,cm:0,side:-1},l={type:e.type,length:e.rlen,angle:e.angle,amount:t,flipH:!!e.flip_h,flipV:!!e.flip_v,base:r,tone:i,cellCm:this._cellCm,gridPitch:this._gridPitch,face:s},{half:c,outlineHalf:h,hitHalf:d}=Ku(l),u=Ia(10,this._cellCm),p=Ia(12,this._cellCm);return W` - ${Ju(l)} + ${Qu(l)} + rx="${Ia(6,this._cellCm)}"> this._opClick(t,e)} @@ -5794,12 +5799,12 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 @pointermove=${t=>this._opPointerMove(t,e)} @pointerup=${t=>this._opPointerUp(t,e)} @pointercancel=${t=>this._opPointerUp(t,e)}> - `})}`}_renderOpeningLocks(e,t){const i=this._openingsR.filter(e=>!e.orphanReason&&("door"===e.type||"gate"===e.type)&&e.lock&&this._renderOpeningEntityAvailable(e.lock));if(!i.length)return j``;const n=this._spaceModel();if(!n)return j``;const r=this._openCuts(),o=this._openingWallIndexFor(n,r).value;return j`${i.map(i=>{const n=this._renderPlanHass.states[i.lock]?.state,r="locked"===n,s=r||["unlocked","open","opening","unlocking","locking"].includes(String(n)),a="gate"===i.type?this._openingFace(i,o,!i.flip_v):null,l=Vu({x:i.rx,y:i.ry,angle:i.angle,flipV:!!i.flip_v,gateFace:a},this._cellCm)[0],c=t?.get(String(i.id)),h=c?.visualScene??this._scenePoint(l),d=(h[0]-e.x)/e.w*100,u=(h[1]-e.y)/e.h*100;return j`
`})}`}_renderOpeningLocks(e,t){const i=this._openingsR.filter(e=>!e.orphanReason&&("door"===e.type||"gate"===e.type)&&e.lock&&this._renderOpeningEntityAvailable(e.lock));if(!i.length)return j``;const n=this._spaceModel();if(!n)return j``;const r=this._openCuts(),o=this._openingWallIndexFor(n,r).value;return j`${i.map(i=>{const n=this._renderPlanHass.states[i.lock]?.state,r="locked"===n,s=r||["unlocked","open","opening","unlocking","locking"].includes(String(n)),a="gate"===i.type?this._openingFace(i,o,!i.flip_v):null,l=Vu({x:i.rx,y:i.ry,angle:i.angle,flipV:!!i.flip_v,gateFace:a},this._cellCm)[0],c=t?.get(String(i.id)),h=c?.visualScene??this._scenePoint(l),d=(h[0]-e.x)/e.w*100,u=(h[1]-e.y)/e.h*100;return j`
{"view"===this._mode&&(e.stopPropagation(),this._openingInfo=i)}}>
`:G} ${n.length?j`
${this._t("info.controls")} ${n.map(e=>{const t=this.hass.states[e],i="on"===t?.state;return j` ${t?.attributes?.friendly_name||e}`})} -
`:V} - ${e.model||i||e.link||e.description||e.pdfs&&e.pdfs.length||n.length?V:j`
${this._t("info.none")}
`} +
`:G} + ${e.model||i||e.link||e.description||e.pdfs&&e.pdfs.length||n.length?G:j`
${this._t("info.none")}
`}
${e.primary?j``:V} + `:G}
- `}_markerValueBadgeFields(e){return this._editorRuntimeOrThrow()._markerValueBadgeFields(e)}_markerDraft(e){return this._editorRuntimeOrThrow()._markerDraft(e)}_markerPreviewDevice(e){return this._editorRuntimeOrThrow()._markerPreviewDevice(e)}_markerPreviewDevices(e){return this._editorRuntimeOrThrow()._markerPreviewDevices(e)}_toggleIntent(e,t=this._devices){return cu({hass:this._planHass,registryHass:this._fullRegistryHass,devices:t,device:e,virtualLights:this._virtualLights})}_toggleIntentForDialog(e){return this._editorRuntimeOrThrow()._toggleIntentForDialog(e)}_toggleStateText(e,t){const i=this._planHass?.states?.[e]||this.hass?.states?.[e];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):t}catch{return t}}_toggleConfirmationStateText(e){const t=String(e.state||"unknown"),i=e.entityId?this._toggleStateText(e.entityId,t):t;if(i.trim().toLocaleLowerCase()!==t.trim().toLocaleLowerCase())return i;const n={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[t];return n?this._t(n):t.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(e){const t={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(e,t){if(!du(e)||!e.nextEffect||!e.targets.length)return[];const i="group"===e.kind,n=i?e.targets.filter(e=>"on"===e.state).length:0,r=i?0===n?t.groupAllOff():t.groupCurrent(n,e.targets.length):t.state(e.targets[0]);let o;return o="toggle"===e.nextEffect?t.expectedByHa():i&&"turn-on"===e.nextEffect?t.groupAllOn():i&&"turn-off"===e.nextEffect?t.groupAllOff():t.effect(e.nextEffect),[t.current(r),t.expected(o),...e.skippedTargets.length?[t.unavailable(e.skippedTargets.length)]:[]]}(e,{state:e=>this._toggleConfirmationStateText(e),current:e=>this._t("confirm.current_state",{state:e}),expected:e=>this._t("confirm.expected_state",{state:e}),groupCurrent:(e,t)=>this._t("confirm.group_current",{on:e,total:t}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:e=>this._t("confirm.unavailable_targets",{count:e}),effect:e=>this._t(t[e]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(e){return this._editorRuntimeOrThrow()._toggleHintLines(e)}_effectiveStoredTapAction(e,t){return this._editorRuntimeOrThrow()._effectiveStoredTapAction(e,t)}_effectiveMarkerTapAction(e,t=this._markerPreviewDevice(e)){return this._editorRuntimeOrThrow()._effectiveMarkerTapAction(e,t)}_announceToggleDraft(e){return this._editorRuntimeOrThrow()._announceToggleDraft(e)}_valueBadgeForBinding(e,t){return this._editorRuntimeOrThrow()._valueBadgeForBinding(e,t)}_markerSpatialSource(e){return this._editorRuntimeOrThrow()._markerSpatialSource(e)}_markerAutoHasSpatialSource(e){return this._editorRuntimeOrThrow()._markerAutoHasSpatialSource(e)}_setMarkerLightRole(e){return this._editorRuntimeOrThrow()._setMarkerLightRole(e)}_controlRefInfo(e){return this._editorRuntimeOrThrow()._controlRefInfo(e)}_valueBadgeCandidateLabel(e){return this._editorRuntimeOrThrow()._valueBadgeCandidateLabel(e)}_controlCandidates(e){return this._editorRuntimeOrThrow()._controlCandidates(e)}_addControlRef(e,t){return this._editorRuntimeOrThrow()._addControlRef(e,t)}_setMarkerGlowMode(e){return this._editorRuntimeOrThrow()._setMarkerGlowMode(e)}_renderMarkerDialog(){return this._editorRuntimeOrThrow()._renderMarkerDialog()}_renderSpaceDialog(){return this._onboardingRuntime&&this._spaceDialog&&this._spaceDialogUsesOnboardingRuntime(this._spaceDialog.mode)?this._onboardingRuntime._renderSpaceDialog():this._editorRuntimeOrThrow()._renderSpaceDialog()}_renderMergeDialog(){return this._editorRuntimeOrThrow()._renderMergeDialog()}_renderCardPreview(e,t,i){const n=18*e;return j`
+ `}_markerValueBadgeFields(e){return this._editorRuntimeOrThrow()._markerValueBadgeFields(e)}_markerDraft(e){return this._editorRuntimeOrThrow()._markerDraft(e)}_markerPreviewDevice(e){return this._editorRuntimeOrThrow()._markerPreviewDevice(e)}_markerPreviewDevices(e){return this._editorRuntimeOrThrow()._markerPreviewDevices(e)}_toggleIntent(e,t=this._devices){return hu({hass:this._planHass,registryHass:this._fullRegistryHass,devices:t,device:e,virtualLights:this._virtualLights})}_toggleIntentForDialog(e){return this._editorRuntimeOrThrow()._toggleIntentForDialog(e)}_toggleStateText(e,t){const i=this._planHass?.states?.[e]||this.hass?.states?.[e];try{return i&&"function"==typeof this.hass?.formatEntityState?this.hass.formatEntityState(i):t}catch{return t}}_toggleConfirmationStateText(e){const t=String(e.state||"unknown"),i=e.entityId?this._toggleStateText(e.entityId,t):t;if(i.trim().toLocaleLowerCase()!==t.trim().toLocaleLowerCase())return i;const n={on:"confirm.state_on",off:"confirm.state_off",open:"confirm.state_open",closed:"confirm.state_closed",opening:"confirm.state_opening",closing:"confirm.state_closing",unknown:"confirm.state_unknown"}[t];return n?this._t(n):t.replaceAll("_"," ").replaceAll("-"," ")}_toggleConfirmationLines(e){const t={"turn-on":"confirm.state_on","turn-off":"confirm.state_off",open:"confirm.state_open",close:"confirm.state_closed",stop:"confirm.state_stopped"};return function(e,t){if(!uu(e)||!e.nextEffect||!e.targets.length)return[];const i="group"===e.kind,n=i?e.targets.filter(e=>"on"===e.state).length:0,r=i?0===n?t.groupAllOff():t.groupCurrent(n,e.targets.length):t.state(e.targets[0]);let o;return o="toggle"===e.nextEffect?t.expectedByHa():i&&"turn-on"===e.nextEffect?t.groupAllOn():i&&"turn-off"===e.nextEffect?t.groupAllOff():t.effect(e.nextEffect),[t.current(r),t.expected(o),...e.skippedTargets.length?[t.unavailable(e.skippedTargets.length)]:[]]}(e,{state:e=>this._toggleConfirmationStateText(e),current:e=>this._t("confirm.current_state",{state:e}),expected:e=>this._t("confirm.expected_state",{state:e}),groupCurrent:(e,t)=>this._t("confirm.group_current",{on:e,total:t}),groupAllOn:()=>this._t("confirm.group_all_on"),groupAllOff:()=>this._t("confirm.group_all_off"),unavailable:e=>this._t("confirm.unavailable_targets",{count:e}),effect:e=>this._t(t[e]),expectedByHa:()=>this._t("confirm.expected_by_ha")})}_toggleHintLines(e){return this._editorRuntimeOrThrow()._toggleHintLines(e)}_effectiveStoredTapAction(e,t){return this._editorRuntimeOrThrow()._effectiveStoredTapAction(e,t)}_effectiveMarkerTapAction(e,t=this._markerPreviewDevice(e)){return this._editorRuntimeOrThrow()._effectiveMarkerTapAction(e,t)}_announceToggleDraft(e){return this._editorRuntimeOrThrow()._announceToggleDraft(e)}_valueBadgeForBinding(e,t){return this._editorRuntimeOrThrow()._valueBadgeForBinding(e,t)}_markerSpatialSource(e){return this._editorRuntimeOrThrow()._markerSpatialSource(e)}_markerAutoHasSpatialSource(e){return this._editorRuntimeOrThrow()._markerAutoHasSpatialSource(e)}_setMarkerLightRole(e){return this._editorRuntimeOrThrow()._setMarkerLightRole(e)}_controlRefInfo(e){return this._editorRuntimeOrThrow()._controlRefInfo(e)}_valueBadgeCandidateLabel(e){return this._editorRuntimeOrThrow()._valueBadgeCandidateLabel(e)}_controlCandidates(e){return this._editorRuntimeOrThrow()._controlCandidates(e)}_addControlRef(e,t){return this._editorRuntimeOrThrow()._addControlRef(e,t)}_setMarkerGlowMode(e){return this._editorRuntimeOrThrow()._setMarkerGlowMode(e)}_renderMarkerDialog(){return this._editorRuntimeOrThrow()._renderMarkerDialog()}_renderSpaceDialog(){return this._onboardingRuntime&&this._spaceDialog&&this._spaceDialogUsesOnboardingRuntime(this._spaceDialog.mode)?this._onboardingRuntime._renderSpaceDialog():this._editorRuntimeOrThrow()._renderSpaceDialog()}_renderMergeDialog(){return this._editorRuntimeOrThrow()._renderMergeDialog()}_renderCardPreview(e,t,i){const n=18*e;return j`
${this._t("preview.room_name")} @@ -5872,4 +5877,4 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 45% · ${this._t("roomcard.light_partial",{on:1,total:3})} -
`}_renderRoomSource(e){return this._editorRuntimeOrThrow()._renderRoomSource(e)}_renderRoomDialog(){return this._editorRuntimeOrThrow()._renderRoomDialog()}}Of.properties={_tabDrag:{state:!0},_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_editorRuntimeLoadingVisible:{state:!0},_backdropGuard:{state:!0},_tapConfirm:{state:!0},_dangerConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeWallChainId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_roomDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_decorImagePalette:{state:!0},_decorAssetCatalog:{state:!0},_decorAssetBusy:{state:!0},_furnCategory:{state:!0},_furnPreviewInput:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_deviceInbox:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_supportDialog:{state:!0},_alignDialog:{state:!0},_preflightClipboardFallback:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0}},Of.ZOOM_MAX=8,Of.ZOOM_MIN=1/3,Of.styles=[Ru,Om],customElements.get("houseplan-card")||customElements.define("houseplan-card",Of),window.customCards=window.customCards||[],window.customCards.find(e=>"houseplan-card"===e.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${gf} `,"background:#3ea6ff;color:#04121f;font-weight:700","");export{Hl as $,V as A,Hp as B,ep as C,le as D,Bp as E,Zm as F,vi as G,Or as H,ki as I,xi as J,qt as K,$i as L,Ya as M,Na as N,fo as O,ei as P,Po as Q,Gp as R,Kp as S,ms as T,Jr as U,qo as V,di as W,Lo as X,a_ as Y,Pl as Z,Qa as _,Nm as a,Sg as a$,Ol as a0,Ss as a1,as as a2,xs as a3,Gs as a4,As as a5,ni as a6,Ga as a7,vu as a8,Mu as a9,Cn as aA,Bn as aB,P_ as aC,Sr as aD,D_ as aE,Rl as aF,zl as aG,Kl as aH,Ua as aI,Yl as aJ,ql as aK,us as aL,Xs as aM,Xo as aN,aa as aO,Aa as aP,o_ as aQ,ca as aR,Ms as aS,Jm as aT,hn as aU,_r as aV,pr as aW,ur as aX,cn as aY,Fe as aZ,Wu as a_,$s as aa,vo as ab,Su as ac,gu as ad,Go as ae,Rs as af,yu as ag,Qs as ah,ia as ai,po as aj,mo as ak,Kr as al,n_ as am,Wo as an,Ka as ao,Bo as ap,La as aq,Ba as ar,Zi as as,Ji as at,Ui as au,Vi as av,Wa as aw,Rd as ax,Cd as ay,ii as az,j as b,_i as b$,Mo as b0,Ja as b1,Xt as b2,Zt as b3,Er as b4,ha as b5,sc as b6,r_ as b7,go as b8,Em as b9,xr as bA,Cr as bB,Hn as bC,br as bD,kr as bE,Ul as bF,Ar as bG,Vl as bH,Ll as bI,Il as bJ,Gl as bK,jl as bL,Wl as bM,$_ as bN,Ko as bO,Gu as bP,xu as bQ,uf as bR,ku as bS,na as bT,af as bU,pf as bV,Yp as bW,oi as bX,bu as bY,$u as bZ,Ri as b_,c_ as ba,gi as bb,ui as bc,Di as bd,Ta as be,ga as bf,ma as bg,Uo as bh,Vo as bi,Ys as bj,Jt as bk,fl as bl,Ma as bm,$a as bn,Un as bo,Vn as bp,yi as bq,ds as br,hs as bs,h_ as bt,d_ as bu,Dr as bv,zr as bw,Fr as bx,$r as by,wr as bz,ic as c,_u as c$,ri as c0,mi as c1,Yo as c2,Ai as c3,kn as c4,up as c5,pp as c6,Qh as c7,ou as c8,Ei as c9,He as cA,Ie as cB,yc as cC,Sc as cD,Fc as cE,uc as cF,$c as cG,bc as cH,wc as cI,Pc as cJ,Tc as cK,lc as cL,En as cM,Nn as cN,si as cO,lf as cP,Ju as cQ,sf as cR,yl as cS,Cs as cT,is as cU,ns as cV,Pe as cW,Nd as cX,_p as cY,mp as cZ,Fd as c_,qi as ca,Wn as cb,On as cc,Sd as cd,y_ as ce,_o as cf,Md as cg,xd as ch,ln as ci,sn as cj,on as ck,Oa as cl,e_ as cm,rn as cn,nn as co,tn as cp,en as cq,Ia as cr,m_ as cs,l_ as ct,Rr as cu,dn as cv,Qm as cw,io as cx,mr as cy,ze as cz,Hm as d,_d as d0,pd as d1,cd as d2,td as d3,Mn as d4,Jh as d5,$d as d6,xn as d7,Pp as d8,ip as d9,ba as dA,js as dB,Vu as dC,Si as dD,Np as dE,Bg as dF,qg as dG,Cg as dH,Lp as dI,Fa as dJ,pe as dK,_e as dL,U as dM,Bu as dN,Au as dO,Ou as dP,Pu as dQ,Yt as dR,Of as dS,hd as da,dd as db,id as dc,eu as dd,Ni as de,Oi as df,np as dg,Ii as dh,Ea as di,Hi as dj,Li as dk,yo as dl,hi as dm,Dd as dn,Pd as dp,Va as dq,Ml as dr,ac as ds,vg as dt,yg as du,Uu as dv,wg as dw,gl as dx,bg as dy,kg as dz,Ec as e,Dc as f,Zs as g,ko as h,Ac as i,So as j,xo as k,qu as l,za as m,Ic as n,Lc as o,Ro as p,o as q,Hc as r,Qi as s,he as t,Ut as u,Ru as v,W as w,ju as x,fp as y,Ep as z}; +
`}_renderRoomSource(e){return this._editorRuntimeOrThrow()._renderRoomSource(e)}_renderRoomDialog(){return this._editorRuntimeOrThrow()._renderRoomDialog()}}Ef.properties={_tabDrag:{state:!0},_hdrH:{state:!0},_booting:{state:!0},_bootFading:{state:!0},_bootSoft:{state:!0},_continuityEpoch:{state:!0},_editorRuntimeLoadingVisible:{state:!0},_backdropGuard:{state:!0},_tapConfirm:{state:!0},_dangerConfirm:{state:!0},hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_mode:{state:!0},_tool:{state:!0},_wallDialog:{state:!0},_drawWallField:{state:!0},_activeWallChainId:{state:!0},_physicalSel:{state:!0},_physicalDialog:{state:!0},_partitionDeleteDialog:{state:!0},_roomDeleteDialog:{state:!0},_physicalDrag:{state:!0},_physicalRotate:{state:!0},_duplicateColumnId:{state:!0},_opMeasure:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_mergeSel:{state:!0},_openingPreset:{state:!0},_openingDialog:{state:!0},_openingInfo:{state:!0},_mergeDialog:{state:!0},_splitSel:{state:!0},_decorTool:{state:!0},_decorStyle:{state:!0},_decorDraft:{state:!0},_decorSel:{state:!0},_decorEraseConfirm:{state:!0},_decorTextDialog:{state:!0},_decorShapeDialog:{state:!0},_backdropDialog:{state:!0},_furnPalette:{state:!0},_decorImagePalette:{state:!0},_decorAssetCatalog:{state:!0},_decorAssetBusy:{state:!0},_furnCategory:{state:!0},_furnPreviewInput:{state:!0},_bdDrag:{state:!0},_dtBox:{state:!0},_dtDrag:{state:!0},_kioskDialog:{state:!0},_vacFit:{state:!0},_vacAllCamerasFor:{state:!0},_vacCalConfirm:{state:!0},_kioskDots:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_roomEditId:{state:!0},_roomFill:{state:!0},_roomCustomFill:{state:!0},_roomTempSrc:{state:!0},_roomHumSrc:{state:!0},_roomSrcOpen:{state:!0},_roomSrcFilter:{state:!0},_roomNameScale:{state:!0},_roomLabelScale:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_deviceInbox:{state:!0},_rulesDialog:{state:!0},_settingsDialog:{state:!0},_pdfDialog:{state:!0},_supportDialog:{state:!0},_alignDialog:{state:!0},_preflightClipboardFallback:{state:!0},_backupExportDialog:{state:!0},_backupImportDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0}},Ef.ZOOM_MAX=8,Ef.ZOOM_MIN=1/3,Ef.styles=[Cu,Em],customElements.get("houseplan-card")||customElements.define("houseplan-card",Ef),window.customCards=window.customCards||[],window.customCards.find(e=>"houseplan-card"===e.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info(`%c HOUSEPLAN-CARD %c v${ff} `,"background:#3ea6ff;color:#04121f;font-weight:700","");export{Ll as $,G as A,Lp as B,tp as C,le as D,qp as E,Jm as F,vi as G,Or as H,ki as I,xi as J,qt as K,$i as L,Xa as M,Ha as N,fo as O,ei as P,Po as Q,Kp as R,Yp as S,ms as T,Jr as U,qo as V,di as W,Lo as X,l_ as Y,Fl as Z,el as _,Hm as a,$g as a$,El as a0,Ss as a1,as as a2,xs as a3,Vs as a4,As as a5,ni as a6,Ka as a7,yu as a8,Ru as a9,Cn as aA,Bn as aB,F_ as aC,Sr as aD,A_ as aE,Cl as aF,Il as aG,Yl as aH,Ga as aI,Xl as aJ,jl as aK,us as aL,Xs as aM,Xo as aN,la as aO,Pa as aP,s_ as aQ,ha as aR,Ms as aS,Qm as aT,hn as aU,_r as aV,pr as aW,ur as aX,cn as aY,Fe as aZ,Uu as a_,$s as aa,vo as ab,$u as ac,fu as ad,Vo as ae,Rs as af,bu as ag,Qs as ah,ia as ai,po as aj,mo as ak,Kr as al,r_ as am,Wo as an,Ya as ao,Bo as ap,Ba as aq,qa as ar,Zi as as,Ji as at,Ui as au,Gi as av,Ua as aw,Cd as ax,Td as ay,ii as az,j as b,_i as b$,Mo as b0,Qa as b1,Xt as b2,Zt as b3,Er as b4,da as b5,ac as b6,o_ as b7,go as b8,Nm as b9,xr as bA,Cr as bB,Hn as bC,br as bD,kr as bE,Gl as bF,Ar as bG,Vl as bH,Bl as bI,Ol as bJ,Kl as bK,Wl as bL,Ul as bM,M_ as bN,Ko as bO,Ku as bP,Su as bQ,pf as bR,xu as bS,ra as bT,lf as bU,_f as bV,Xp as bW,oi as bX,wu as bY,Mu as bZ,Ri as b_,h_ as ba,gi as bb,ui as bc,Di as bd,Da as be,fa as bf,ga as bg,Uo as bh,Go as bi,Ys as bj,Jt as bk,vl as bl,Ra as bm,Ma as bn,Un as bo,Gn as bp,yi as bq,ds as br,hs as bs,d_ as bt,u_ as bu,Dr as bv,zr as bw,Fr as bx,$r as by,wr as bz,nc as c,mu as c$,ri as c0,mi as c1,Yo as c2,Ai as c3,kn as c4,pp as c5,_p as c6,ed as c7,su as c8,Ei as c9,He as cA,Ie as cB,bc as cC,$c as cD,zc as cE,pc as cF,Mc as cG,wc as cH,kc as cI,Fc as cJ,Dc as cK,cc as cL,En as cM,Nn as cN,si as cO,cf as cP,Qu as cQ,af as cR,bl as cS,Cs as cT,is as cU,ns as cV,Pe as cW,Hd as cX,mp as cY,gp as cZ,zd as c_,qi as ca,Wn as cb,On as cc,$d as cd,b_ as ce,_o as cf,Rd as cg,Sd as ch,ln as ci,sn as cj,on as ck,Ea as cl,t_ as cm,rn as cn,nn as co,tn as cp,en as cq,Oa as cr,g_ as cs,c_ as ct,Rr as cu,dn as cv,eg as cw,io as cx,mr as cy,ze as cz,Lm as d,md as d0,_d as d1,hd as d2,id as d3,Mn as d4,Qh as d5,Md as d6,xn as d7,Fp as d8,np as d9,wa as dA,js as dB,Vu as dC,Si as dD,Hp as dE,qg as dF,jg as dG,Tg as dH,Bp as dI,za as dJ,pe as dK,_e as dL,U as dM,Ca as dN,na as dO,Mr as dP,Tr as dQ,Ta as dR,xl as dS,p_ as dT,D_ as dU,qu as dV,Pu as dW,Eu as dX,Fu as dY,Yt as dZ,Ef as d_,dd as da,ud as db,nd as dc,tu as dd,Ni as de,Oi as df,rp as dg,Ii as dh,Na as di,Hi as dj,Li as dk,yo as dl,hi as dm,Ad as dn,Fd as dp,Va as dq,Rl as dr,lc as ds,yg as dt,bg as du,Gu as dv,kg as dw,fl as dx,wg as dy,xg as dz,Nc as e,Ac as f,Zs as g,ko as h,Pc as i,So as j,xo as k,ju as l,Ia as m,Oc as n,Bc as o,Ro as p,o as q,Lc as r,Qi as s,he as t,Ut as u,Cu as v,W as w,Wu as x,vp as y,Np as z}; diff --git a/custom_components/houseplan/frontend/houseplan-assets/houseplan-editor-runtime-BY9_H46m.js b/custom_components/houseplan/frontend/houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js similarity index 99% rename from custom_components/houseplan/frontend/houseplan-assets/houseplan-editor-runtime-BY9_H46m.js rename to custom_components/houseplan/frontend/houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js index 38d07fb9..dd39975a 100644 --- a/custom_components/houseplan/frontend/houseplan-assets/houseplan-editor-runtime-BY9_H46m.js +++ b/custom_components/houseplan/frontend/houseplan-assets/houseplan-editor-runtime-BH5YaEYG.js @@ -1,4 +1,4 @@ -globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b128ecf5e0a3be2860b34e0069d829a";import{s as t,e,n as s,f as i,i as o,l as a,o as n,r,A as l,b as h,a as c,c as d,d as p,D as u,w as _,N as m,g,h as f,j as b,k as v,m as y,p as w,q as $,t as k,u as x,v as S,x as M,y as C,z as P,B as D,C as I,E as T,F as R,G as z,H as F,I as A,J as N,K as H,L,M as O,O as E,P as B,Q as W,R as G,S as j,T as q,U,V as K,W as V,X as J,Y,Z as X,_ as Z,$ as Q,a0 as tt,a1 as et,a2 as st,a3 as it,a4 as ot,a5 as at,a6 as nt,a7 as rt,a8 as lt,a9 as ht,aa as ct,ab as dt,ac as pt,ad as ut,ae as _t,af as mt,ag as gt,ah as ft,ai as bt,aj as vt,ak as yt,al as wt,am as $t,an as kt,ao as xt,ap as St,aq as Mt,ar as Ct,as as Pt,at as Dt,au as It,av as Tt,aw as Rt,ax as zt,ay as Ft,az as At,aA as Nt,aB as Ht,aC as Lt,aD as Ot,aE as Et,aF as Bt,aG as Wt,aH as Gt,aI as jt,aJ as qt,aK as Ut,aL as Kt,aM as Vt,aN as Jt,aO as Yt,aP as Xt,aQ as Zt,aR as Qt,aS as te,aT as ee,aU as se,aV as ie,aW as oe,aX as ae,aY as ne,aZ as re,a_ as le,a$ as he,b0 as ce,b1 as de,b2 as pe,b3 as ue,b4 as _e,b5 as me,b6 as ge,b7 as fe,b8 as be,b9 as ve,ba as ye,bb as we,bc as $e,bd as ke,be as xe,bf as Se,bg as Me,bh as Ce,bi as Pe,bj as De,bk as Ie,bl as Te,bm as Re,bn as ze,bo as Fe,bp as Ae,bq as Ne,br as He,bs as Le,bt as Oe,bu as Ee,bv as Be,bw as We,bx as Ge,by as je,bz as qe,bA as Ue,bB as Ke,bC as Ve,bD as Je,bE as Ye,bF as Xe,bG as Ze,bH as Qe,bI as ts,bJ as es,bK as ss,bL as is,bM as os,bN as as,bO as ns,bP as rs,bQ as ls,bR as hs,bS as cs,bT as ds,bU as ps,bV as us,bW as _s,bX as ms,bY as gs,bZ as fs,b_ as bs,b$ as vs,c0 as ys,c1 as ws,c2 as $s,c3 as ks,c4 as xs,c5 as Ss,c6 as Ms,c7 as Cs,c8 as Ps,c9 as Ds,ca as Is,cb as Ts,cc as Rs,cd as zs,ce as Fs,cf as As,cg as Ns,ch as Hs,ci as Ls,cj as Os,ck as Es,cl as Bs,cm as Ws,cn as Gs,co as js,cp as qs,cq as Us,cr as Ks,cs as Vs,ct as Js,cu as Ys,cv as Xs,cw as Zs,cx as Qs,cy as ti,cz as ei,cA as si,cB as ii,cC as oi,cD as ai,cE as ni,cF as ri,cG as li,cH as hi,cI as ci,cJ as di,cK as pi,cL as ui,cM as _i,cN as mi,cO as gi,cP as fi,cQ as bi,cR as vi,cS as yi,cT as wi,cU as $i,cV as ki,cW as xi,cX as Si,cY as Mi,cZ as Ci,c_ as Pi,c$ as Di,d0 as Ii,d1 as Ti,d2 as Ri,d3 as zi,d4 as Fi,d5 as Ai,d6 as Ni,d7 as Hi,d8 as Li,d9 as Oi,da as Ei,db as Bi,dc as Wi,dd as Gi,de as ji,df as qi,dg as Ui,dh as Ki,di as Vi,dj as Ji,dk as Yi,dl as Xi,dm as Zi,dn as Qi,dp as to,dq as eo,dr as so}from"./houseplan-card-DPsHeJqW.js";import{i as io}from"./guard-BQbM7Hae.js";import{F as oo,f as ao,p as no,c as ro,s as lo,i as ho,e as co,r as po,a as uo,b as _o,d as mo,g as go,t as fo}from"./backdrop-pick-Dr_sQO9B.js";import{t as bo,h as vo,m as yo,T as wo}from"./zigbee-topology-5lWJidfb.js";import{GENERATED_FURNITURE_ART as $o,FURNITURE_ART_FINGERPRINT as ko}from"./furniture-plan-art.generated-DCcpljFT.js";var xo={"gs.hint":"Fill colors apply to every space; each color has its own opacity. Which fill mode a space uses is set in that space's dialog.","gs.show_room_tooltip":"Show the room information window on hover","support.about_group":"About the card","support.guide_group":"Documentation","support.guide":"User guide","support.form_group":"Send a report or suggestion","support.contact":"Contact details (email/tg/WhatsApp), optional.","support.message":"Message","support.attach":"Attach anonymized information from your plan","support.attach_hint":"Includes only allowed plan geometry, settings and bounded runtime facts. Excludes names, Home Assistant IDs, live states, URLs, files, and your message/contact.","support.geometry_warning":"The package contains no names or Home Assistant IDs, but it does contain the exact geometry and dimensions of your home.","support.close_busy_title":"Stop the current operation?","support.close_busy_body":"House Plan is preparing or sending the report. Closing now stops waiting for the result.","support.building":"Preparing anonymized data…","support.preview_summary":"Package v{version} · {spaces} spaces · {size} KiB","support.prepared":"Snapshot prepared {n} min ago","support.show_data":"Show data","support.download":"Download JSON","support.refresh":"Refresh snapshot","support.privacy":"When you send, your message, optional contact and, if selected, exact geometry leave your Home Assistant through the House Plan project relay and are visible to maintainers. The project node keeps the report for up to 30 days. Network infrastructure sees your HA server address, but House Plan does not retain it raw; rate-limit and idempotency metadata is kept for up to 24 hours.","support.error_title":"The report was not sent","support.manual_recovery":"You can keep the message and attachment and continue manually:","support.copy_message":"Copy message","support.success":"Report sent: {id}. Save this number when contacting support.","support.copy_id":"Copy ID","support.sending":"Sending…","support.retry":"Retry","support.send":"Send","support.update_required":"Update the House Plan card and integration to compatible versions to send reports.","support.message_copied":"Message copied","support.id_copied":"Report ID copied","support.copy_failed":"Could not access the clipboard. Select and copy the text manually.","support.validation.message_required":"Enter a message.","support.validation.message_too_long":"The message must contain no more than 10,000 characters.","support.validation.contact_too_long":"Contact details must contain no more than 320 characters.","support.validation.preview_missing":"Wait for the attachment preview or turn the attachment off.","support.validation.preview_expired":"The attachment preview expired. Refresh the snapshot.","support.error.support_invalid_message":"Check the message and try again.","support.error.support_preview_expired":"The attachment preview expired or is no longer available. Refresh the snapshot.","support.error.support_package_too_large":"The anonymized package exceeds the 8 MiB limit.","support.error.support_rate_limited":"Too many reports or previews were requested. Try again later.","support.error.support_unavailable":"The private support service is temporarily unavailable. Your draft remains here.","support.error.support_rejected":"The report did not pass the support service validation.","support.error.unauthorized":"You do not have permission to send this report.","vac.routes_section":"Maps and floors","vac.routes_current_map":"Current map","vac.routes_no_map":"no telemetry","vac.routes_status":"Routing","vac.routes_state_ready":"map assigned and calibrated","vac.routes_state_needs_calibration":"map assigned, calibration needed","vac.routes_state_unmapped":"current map is not assigned to a floor","vac.routes_state_ambiguous":"two maps are indistinguishable — no floor is chosen","vac.routes_state_missing_space":"the map's space was deleted","vac.routes_state_none":"no map data","vac.routes_empty":"No map is assigned to a floor yet.","vac.route_map_default":"no map id","vac.route_active":"Active","vac.route_space":"Space","vac.route_space_none":"not selected","vac.route_status_ready":"ready","vac.route_status_needs_calibration":"needs calibration","vac.route_status_ambiguous":"ambiguous","vac.route_status_missing_space":"space deleted","vac.route_missing_space_group":"Deleted space","vac.route_add_current":"Add current map","vac.route_delete":"Remove map","vac.route_delete_title":"Remove the map from its floor?","vac.route_delete_body":"Calibration and saved paths for this map will be removed. Continue?","vac.route_delete_confirm":"Remove","vac.route_space_title":"Move the map to another space?","vac.route_space_body":"Calibration and saved paths for this map will be removed. Continue?","vac.route_space_confirm":"Move","vac.route_missing_space_hint":"One of the maps points at a deleted space: pick a new one or remove the map. Until then the robot is not drawn for that map.","vac.route_default_hint":"The source reports no stable map id. Several floors cannot be told apart without another source or the robot's own selected map.","vac.route_target_hint":"The dock stays in the “{space}” space regardless of the current map.","vac.route_add_source":"Add a map source","vac.route_add_source_hint":"For integrations that give each map its own camera. The “All cameras” section above widens this list.","vac.route_source_no_map":"no map reported"};const So={en:xo,ru:{"gs.hint":"Цвета заливок действуют на все пространства; у каждого цвета своя прозрачность. Какой режим заливки использует пространство — задаётся в его диалоге.","gs.show_room_tooltip":"Показывать окно с информацией при наведении на комнату","support.about_group":"О карточке","support.guide_group":"Документация","support.guide":"Руководство пользователя","support.form_group":"Отправить репорт или предложение","support.contact":"Контакт для связи (email/tg/WhatsApp), необязательно.","support.message":"Сообщение","support.attach":"Прикрепить обезличенную информацию из вашего плана","support.attach_hint":"В пакет входят только разрешённые геометрия, настройки и ограниченные сведения о среде. Не входят имена, HA id, текущие состояния, URL, файлы, сообщение и контакт.","support.geometry_warning":"Пакет не содержит имён и HA id, но содержит точную геометрию и размеры дома.","support.close_busy_title":"Прервать текущую операцию?","support.close_busy_body":"House Plan подготавливает или отправляет репорт. При закрытии ожидание результата прекратится.","support.building":"Подготавливаем обезличенные данные…","support.preview_summary":"Пакет v{version} · пространств: {spaces} · {size} КиБ","support.prepared":"Снимок подготовлен {n} мин назад","support.show_data":"Показать данные","support.download":"Скачать JSON","support.refresh":"Обновить снимок","support.privacy":"При отправке сообщение, необязательный контакт и, если выбран пакет, точная геометрия покидают ваш Home Assistant через relay проекта House Plan и доступны мейнтейнерам. Узел проекта хранит репорт до 30 дней. Сетевая инфраструктура видит адрес сервера HA, но House Plan не сохраняет его в исходном виде; метаданные лимитов и идемпотентности хранятся до 24 часов.","support.error_title":"Репорт не отправлен","support.manual_recovery":"Сообщение и вложение можно сохранить и продолжить вручную:","support.copy_message":"Копировать сообщение","support.success":"Репорт отправлен: {id}. Сохраните номер для связи с поддержкой.","support.copy_id":"Копировать ID","support.sending":"Отправляем…","support.retry":"Повторить","support.send":"Отправить","support.update_required":"Обновите карточку и интеграцию House Plan до совместимых версий, чтобы отправлять репорты.","support.message_copied":"Сообщение скопировано","support.id_copied":"ID репорта скопирован","support.copy_failed":"Не удалось получить доступ к буферу обмена. Выделите и скопируйте текст вручную.","support.validation.message_required":"Введите сообщение.","support.validation.message_too_long":"Сообщение должно содержать не более 10 000 символов.","support.validation.contact_too_long":"Контакт должен содержать не более 320 символов.","support.validation.preview_missing":"Дождитесь предпросмотра вложения или отключите его.","support.validation.preview_expired":"Предпросмотр вложения истёк. Обновите снимок.","support.error.support_invalid_message":"Проверьте сообщение и повторите попытку.","support.error.support_preview_expired":"Предпросмотр вложения истёк или больше недоступен. Обновите снимок.","support.error.support_package_too_large":"Обезличенный пакет превышает лимит 8 МиБ.","support.error.support_rate_limited":"Запрошено слишком много репортов или предпросмотров. Повторите позже.","support.error.support_unavailable":"Закрытая служба поддержки временно недоступна. Черновик сохранён в этом окне.","support.error.support_rejected":"Репорт не прошёл проверку службы поддержки.","support.error.unauthorized":"У вас нет прав на отправку этого репорта.","vac.routes_section":"Карты и этажи","vac.routes_current_map":"Текущая карта","vac.routes_no_map":"источник молчит","vac.routes_status":"Маршрутизация","vac.routes_state_ready":"карта сопоставлена и откалибрована","vac.routes_state_needs_calibration":"карта сопоставлена, нужна калибровка","vac.routes_state_unmapped":"текущая карта не сопоставлена этажу","vac.routes_state_ambiguous":"две карты неразличимы — этаж не выбирается","vac.routes_state_missing_space":"пространство карты удалено","vac.routes_state_none":"нет данных о карте","vac.routes_empty":"Ни одна карта ещё не сопоставлена этажу.","vac.route_map_default":"без идентификатора","vac.route_active":"Текущая","vac.route_space":"Пространство","vac.route_space_none":"не выбрано","vac.route_status_ready":"готова","vac.route_status_needs_calibration":"нужна калибровка","vac.route_status_ambiguous":"неоднозначна","vac.route_status_missing_space":"пространство удалено","vac.route_missing_space_group":"Пространство удалено","vac.route_add_current":"Добавить текущую карту","vac.route_delete":"Удалить карту","vac.route_delete_title":"Удалить карту с этажа?","vac.route_delete_body":"Калибровка и сохранённые пути этой карты будут удалены. Продолжить?","vac.route_delete_confirm":"Удалить","vac.route_space_title":"Перенести карту в другое пространство?","vac.route_space_body":"Калибровка и сохранённые пути этой карты будут удалены. Продолжить?","vac.route_space_confirm":"Перенести","vac.route_missing_space_hint":"Одна из карт ссылается на удалённое пространство: выберите новое или удалите карту. Пока ссылка не исправлена, робот на этой карте не рисуется.","vac.route_default_hint":"Источник не сообщает стабильный идентификатор карты. Несколько этажей нельзя различить без другого источника или собственной карты робота.","vac.route_target_hint":"Док остаётся в пространстве «{space}» независимо от текущей карты.","vac.route_add_source":"Добавить источник карты","vac.route_add_source_hint":"Для интеграций, где у каждой карты своя камера. Список расширяется разделом «Все камеры» выше.","vac.route_source_no_map":"карта не читается"},de:{"gs.hint":"Füllfarben gelten für jeden Bereich; jede Farbe hat ihre eigene Deckkraft. Der Füllmodus wird in den Einstellungen des jeweiligen Bereichs festgelegt.","gs.show_room_tooltip":"Rauminformationen beim Darüberfahren anzeigen","support.about_group":"Über die Karte","support.guide_group":"Dokumentation","support.guide":"Benutzerhandbuch","support.form_group":"Bericht oder Vorschlag senden","support.contact":"Kontakt (E-Mail/tg/WhatsApp), optional.","support.message":"Nachricht","support.attach":"Anonymisierte Informationen aus dem Plan anhängen","support.attach_hint":"Enthält nur erlaubte Plangeometrie, Einstellungen und begrenzte Laufzeitdaten. Namen, Home-Assistant-IDs, Live-Zustände, URLs, Dateien, Nachricht und Kontakt werden ausgeschlossen.","support.geometry_warning":"Das Paket enthält keine Namen oder Home-Assistant-IDs, aber die exakte Geometrie und die Maße Ihres Hauses.","support.close_busy_title":"Aktuellen Vorgang abbrechen?","support.close_busy_body":"House Plan bereitet den Bericht vor oder sendet ihn. Beim Schließen wird nicht weiter auf das Ergebnis gewartet.","support.building":"Anonymisierte Daten werden vorbereitet…","support.preview_summary":"Paket v{version} · {spaces} Bereiche · {size} KiB","support.prepared":"Schnappschuss vor {n} Min. erstellt","support.show_data":"Daten anzeigen","support.download":"JSON herunterladen","support.refresh":"Schnappschuss aktualisieren","support.privacy":"Beim Senden verlassen Ihre Nachricht, der optionale Kontakt und, falls ausgewählt, die exakte Geometrie Ihren Home Assistant über das House-Plan-Projektrelay und sind für die Maintainer sichtbar. Der Projektserver speichert den Bericht bis zu 30 Tage. Die Netzwerkinfrastruktur sieht die Adresse Ihres HA-Servers, House Plan speichert sie jedoch nicht im Rohformat; Limit- und Idempotenzdaten bleiben bis zu 24 Stunden erhalten.","support.error_title":"Der Bericht wurde nicht gesendet","support.manual_recovery":"Nachricht und Anhang können gespeichert und manuell weitergegeben werden:","support.copy_message":"Nachricht kopieren","support.success":"Bericht gesendet: {id}. Bewahren Sie diese Nummer für den Support auf.","support.copy_id":"ID kopieren","support.sending":"Wird gesendet…","support.retry":"Erneut versuchen","support.send":"Senden","support.update_required":"Aktualisieren Sie House-Plan-Karte und Integration auf kompatible Versionen, um Berichte zu senden.","support.message_copied":"Nachricht kopiert","support.id_copied":"Berichts-ID kopiert","support.copy_failed":"Kein Zugriff auf die Zwischenablage. Markieren und kopieren Sie den Text manuell.","support.validation.message_required":"Geben Sie eine Nachricht ein.","support.validation.message_too_long":"Die Nachricht darf höchstens 10.000 Zeichen enthalten.","support.validation.contact_too_long":"Der Kontakt darf höchstens 320 Zeichen enthalten.","support.validation.preview_missing":"Warten Sie auf die Vorschau oder deaktivieren Sie den Anhang.","support.validation.preview_expired":"Die Anhangsvorschau ist abgelaufen. Aktualisieren Sie den Schnappschuss.","support.error.support_invalid_message":"Prüfen Sie die Nachricht und versuchen Sie es erneut.","support.error.support_preview_expired":"Die Anhangsvorschau ist abgelaufen oder nicht mehr verfügbar. Aktualisieren Sie den Schnappschuss.","support.error.support_package_too_large":"Das anonymisierte Paket überschreitet das Limit von 8 MiB.","support.error.support_rate_limited":"Zu viele Berichte oder Vorschauen wurden angefordert. Versuchen Sie es später erneut.","support.error.support_unavailable":"Der private Supportdienst ist vorübergehend nicht verfügbar. Der Entwurf bleibt in diesem Fenster erhalten.","support.error.support_rejected":"Der Bericht hat die Prüfung des Supportdienstes nicht bestanden.","support.error.unauthorized":"Sie dürfen diesen Bericht nicht senden.","vac.routes_section":"Karten und Etagen","vac.routes_current_map":"Aktuelle Karte","vac.routes_no_map":"keine Telemetrie","vac.routes_status":"Zuordnung","vac.routes_state_ready":"Karte zugeordnet und kalibriert","vac.routes_state_needs_calibration":"Karte zugeordnet, Kalibrierung nötig","vac.routes_state_unmapped":"aktuelle Karte keiner Etage zugeordnet","vac.routes_state_ambiguous":"zwei Karten nicht unterscheidbar — keine Etage gewählt","vac.routes_state_missing_space":"der Raum der Karte wurde gelöscht","vac.routes_state_none":"keine Kartendaten","vac.routes_empty":"Noch keine Karte einer Etage zugeordnet.","vac.route_map_default":"ohne Karten-ID","vac.route_active":"Aktiv","vac.route_space":"Raum","vac.route_space_none":"nicht gewählt","vac.route_status_ready":"bereit","vac.route_status_needs_calibration":"Kalibrierung nötig","vac.route_status_ambiguous":"mehrdeutig","vac.route_status_missing_space":"Raum gelöscht","vac.route_missing_space_group":"Gelöschter Bereich","vac.route_add_current":"Aktuelle Karte hinzufügen","vac.route_delete":"Karte entfernen","vac.route_delete_title":"Karte von der Etage entfernen?","vac.route_delete_body":"Kalibrierung und gespeicherte Pfade dieser Karte werden entfernt. Fortfahren?","vac.route_delete_confirm":"Entfernen","vac.route_space_title":"Karte in einen anderen Raum verschieben?","vac.route_space_body":"Kalibrierung und gespeicherte Pfade dieser Karte werden entfernt. Fortfahren?","vac.route_space_confirm":"Verschieben","vac.route_missing_space_hint":"Eine Karte verweist auf einen gelöschten Raum: neuen wählen oder Karte entfernen. Bis dahin wird der Roboter für diese Karte nicht gezeichnet.","vac.route_default_hint":"Die Quelle meldet keine stabile Karten-ID. Mehrere Etagen lassen sich ohne andere Quelle oder die vom Roboter gewählte Karte nicht unterscheiden.","vac.route_target_hint":"Die Station bleibt unabhängig von der aktuellen Karte im Raum „{space}“.","vac.route_add_source":"Kartenquelle hinzufügen","vac.route_add_source_hint":"Für Integrationen, die jeder Karte eine eigene Kamera geben. Der Abschnitt „Alle Kameras“ oben erweitert diese Liste.","vac.route_source_no_map":"keine Karte gemeldet"},fr:{"gs.hint":"Les couleurs de remplissage s’appliquent à tous les espaces ; chaque couleur possède sa propre opacité. Le mode de remplissage utilisé par un espace se règle dans la boîte de dialogue de cet espace.","gs.show_room_tooltip":"Afficher les informations de la pièce au survol","support.about_group":"À propos de la carte","support.guide_group":"Documentation d’aide","support.guide":"Guide utilisateur","support.form_group":"Envoyer un rapport ou une suggestion","support.contact":"Contact (e-mail/tg/WhatsApp), facultatif.","support.message":"Votre message","support.attach":"Joindre des informations anonymisées de votre plan","support.attach_hint":"Inclut uniquement la géométrie, les réglages autorisés et des données d’exécution limitées. Exclut les noms, identifiants Home Assistant, états en direct, URL, fichiers, message et contact.","support.geometry_warning":"Le paquet ne contient ni noms ni identifiants Home Assistant, mais il contient la géométrie et les dimensions exactes de votre logement.","support.close_busy_title":"Interrompre l’opération en cours ?","support.close_busy_body":"House Plan prépare ou envoie le rapport. Fermer maintenant arrête l’attente du résultat.","support.building":"Préparation des données anonymisées…","support.preview_summary":"Paquet v{version} · {spaces} espaces · {size} Kio","support.prepared":"Instantané préparé il y a {n} min","support.show_data":"Afficher les données","support.download":"Télécharger le JSON","support.refresh":"Actualiser l’instantané","support.privacy":"Lors de l’envoi, votre message, le contact facultatif et, si elle est sélectionnée, la géométrie exacte quittent votre Home Assistant via le relais du projet House Plan et sont visibles par les mainteneurs. Le serveur du projet conserve le rapport jusqu’à 30 jours. L’infrastructure réseau voit l’adresse de votre serveur HA, mais House Plan ne la conserve pas en clair ; les métadonnées de limitation et d’idempotence sont gardées jusqu’à 24 heures.","support.error_title":"Le rapport n’a pas été envoyé","support.manual_recovery":"Vous pouvez conserver le message et la pièce jointe puis continuer manuellement :","support.copy_message":"Copier le message","support.success":"Rapport envoyé : {id}. Conservez ce numéro pour contacter l’assistance.","support.copy_id":"Copier l’ID","support.sending":"Envoi…","support.retry":"Réessayer","support.send":"Envoyer","support.update_required":"Mettez à jour la carte et l’intégration House Plan vers des versions compatibles pour envoyer des rapports.","support.message_copied":"Message copié","support.id_copied":"ID du rapport copié","support.copy_failed":"Impossible d’accéder au presse-papiers. Sélectionnez et copiez le texte manuellement.","support.validation.message_required":"Saisissez un message.","support.validation.message_too_long":"Le message ne doit pas dépasser 10 000 caractères.","support.validation.contact_too_long":"Le contact ne doit pas dépasser 320 caractères.","support.validation.preview_missing":"Attendez l’aperçu de la pièce jointe ou désactivez-la.","support.validation.preview_expired":"L’aperçu de la pièce jointe a expiré. Actualisez l’instantané.","support.error.support_invalid_message":"Vérifiez le message et réessayez.","support.error.support_preview_expired":"L’aperçu de la pièce jointe a expiré ou n’est plus disponible. Actualisez l’instantané.","support.error.support_package_too_large":"Le paquet anonymisé dépasse la limite de 8 Mio.","support.error.support_rate_limited":"Trop de rapports ou d’aperçus ont été demandés. Réessayez plus tard.","support.error.support_unavailable":"Le service d’assistance privé est temporairement indisponible. Le brouillon reste dans cette fenêtre.","support.error.support_rejected":"Le rapport n’a pas passé la validation du service d’assistance.","support.error.unauthorized":"Vous n’êtes pas autorisé à envoyer ce rapport.","vac.routes_section":"Cartes et étages","vac.routes_current_map":"Carte actuelle","vac.routes_no_map":"aucune télémétrie","vac.routes_status":"Routage","vac.routes_state_ready":"carte assignée et calibrée","vac.routes_state_needs_calibration":"carte assignée, calibrage requis","vac.routes_state_unmapped":"carte actuelle non assignée à un étage","vac.routes_state_ambiguous":"deux cartes indiscernables — aucun étage choisi","vac.routes_state_missing_space":"l'espace de la carte a été supprimé","vac.routes_state_none":"aucune donnée de carte","vac.routes_empty":"Aucune carte n'est encore assignée à un étage.","vac.route_map_default":"sans identifiant","vac.route_active":"Active","vac.route_space":"Espace","vac.route_space_none":"non sélectionné","vac.route_status_ready":"prête","vac.route_status_needs_calibration":"calibrage requis","vac.route_status_ambiguous":"ambiguë","vac.route_status_missing_space":"espace supprimé","vac.route_missing_space_group":"Espace supprimé","vac.route_add_current":"Ajouter la carte actuelle","vac.route_delete":"Supprimer la carte","vac.route_delete_title":"Retirer la carte de son étage ?","vac.route_delete_body":"Le calibrage et les trajets enregistrés de cette carte seront supprimés. Continuer ?","vac.route_delete_confirm":"Supprimer","vac.route_space_title":"Déplacer la carte vers un autre espace ?","vac.route_space_body":"Le calibrage et les trajets enregistrés de cette carte seront supprimés. Continuer ?","vac.route_space_confirm":"Déplacer","vac.route_missing_space_hint":"Une carte pointe vers un espace supprimé : choisissez-en un autre ou supprimez la carte. D'ici là, le robot n'est pas dessiné pour cette carte.","vac.route_default_hint":"La source ne fournit pas d'identifiant de carte stable. Plusieurs étages ne peuvent pas être distingués sans une autre source ou la carte sélectionnée du robot.","vac.route_target_hint":"La station reste dans l'espace « {space} » quelle que soit la carte actuelle.","vac.route_add_source":"Ajouter une source de carte","vac.route_add_source_hint":"Pour les intégrations qui donnent à chaque carte sa propre caméra. La section « Toutes les caméras » ci-dessus élargit cette liste.","vac.route_source_no_map":"aucune carte signalée"}};function Mo(e,s,i){return t(So[e]?.[s]??xo[s]??s,i)}function Co(t,e,s,i,o){return{markerId:t,source:i,mapId:o,space:e.length?"":s}}function Po(t,e,s){return{...t,space:s.has(e)?e:""}}function Do(t,e=Math.random){const s=new Set(t);for(let t=0;t<64;t+=1){const t="vr_"+Math.floor(16777215*e()).toString(36).padStart(5,"0");if(!s.has(t))return t}return"vr_"+Date.now().toString(36)}function Io(t,e,s){return t.map(t=>t.id===e?{...t,calibration:s}:t)}const To=new WeakMap,Ro=(t,e)=>{const s=(t._serverCfg?.spaces||[]).find(t=>t?.id===e);return String(s?.name||s?.id||e)};function zo(t,i,o){const u=t.host,_=a(u.hass,u._config?.language),m=(t,e)=>Mo(_,t,e),g=i.marker?.vacuum||{},f=Array.isArray(g.map_routes),b=u._vacSource(i)||"",v=e(i.id,g,i.space,b),y=(u._serverCfg?.spaces||[]).filter(t=>"string"==typeof t?.id&&!!t.id).map(t=>({id:t.id,name:String(t.name||t.id)})),w=new Set(y.map(t=>t.id)),$=n(v,[b],t=>u._vacObservedMapId(i,t)),k=r({routes:v,observed:$,spaceIds:w}),x="ready"===k.kind||"needs_calibration"===k.kind||"missing_space"===k.kind?k.route.id:"",S=b?$[b]:void 0,M=async e=>{let o=f?g.map_routes??null:null;if(!o&&(o=function(t,e,i,o){if(!i)return null;const a=t?.calibration;if(!a||"object"!=typeof a)return null;const n=new Set,r=[];for(const t of Object.keys(a)){const l=s(a[t]);if(!l)continue;const h=o(n);n.add(h),r.push({id:h,source:i,map_id:t,space:e,calibration:l})}return r.length?r:null}(g,i.space,b,t=>Do(t))??[],!b&&Object.keys(g.calibration||{}).length))return!1;const a=e(o);return!!a&&(async e=>{const s=u._serverCfg;if(!s)return!1;const o=JSON.parse(JSON.stringify(s));o.markers=o.markers||[];let a=o.markers.find(t=>t.id===i.id);if(!a){if("device"!==i.bindingKind&&"entity"!==i.bindingKind||!i.bindingRef)return!1;a={id:i.id,binding:`${i.bindingKind}:${i.bindingRef}`,space:i.space||null,area:i.area||null,hidden:!!i.hidden},o.markers.push(a)}a.vacuum={...a.vacuum||{},map_routes:e},delete a.vacuum.calibration;const n=c(s,o,u._cfgContentFingerprint,u._cfgRev,d);u._serverCfg=o,u._regSignature="",u._maybeRebuildDevices(),u.requestUpdate(),u._saveConfigDebounced.pending()&&u._saveConfigDebounced.cancel();try{return await t._saveConfigNow(),!0}catch(t){return p(u,n,d),u._regSignature="",u._maybeRebuildDevices(),u.requestUpdate(),u._showToast(u._t("toast.cfg_save_failed",{err:u._errText(t)})),!1}})(a)},C=o.candidates.filter(t=>t.entityId!==b&&!v.some(e=>e.source===t.entityId)),P=async(t,e)=>{if(!e||e===t.space)return;await u._confirmDanger({key:"vacuum_route_space",kind:"warning",title:m("vac.route_space_title"),message:m("vac.route_space_body"),objectName:t.map_id||m("vac.route_map_default"),confirmLabel:m("vac.route_space_confirm"),cancelLabel:u._t("btn.cancel")})&&await M(s=>function(t,e,s,i){return t.map(t=>t.id===e?{...t,id:i,space:s,calibration:null}:t)}(s,t.id,e,Do(new Set(v.map(t=>t.id)))))},D=new Map(y.map((t,e)=>[t.id,e])),I=(t,e)=>t.map_id.localeCompare(e.map_id)||t.source.localeCompare(e.source)||t.id.localeCompare(e.id),T=v.filter(t=>w.has(t.space)).sort((t,e)=>(D.get(t.space)??0)-(D.get(e.space)??0)||I(t,e)),R=v.filter(t=>!w.has(t.space)).sort(I),z=[...T,...R],F=!!b&&void 0!==S&&!v.some(t=>t.source===b&&t.map_id===S);let A=To.get(t);const N=A?.source||"",H=A?.mapId||"",L=!!A&&v.some(t=>t.source===N&&t.map_id===H);A&&(A.markerId!==i.id||u._vacObservedMapId(i,A.source)!==A.mapId||L&&!A.saving)&&(To.delete(t),A=void 0),A?.space&&!w.has(A.space)&&(A=Po(A,"",w),To.set(t,A));const O=e=>h` +globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6412fad64699400d6b77fdda3cf1ecebe27c1dc2134d0e63e34fc7ef196a99a0";import{s as t,e,n as s,f as i,i as o,l as a,o as n,r,A as l,b as h,a as c,c as d,d as p,D as u,w as _,N as m,g,h as f,j as b,k as v,m as y,p as w,q as $,t as k,u as x,v as S,x as M,y as C,z as P,B as D,C as I,E as T,F as R,G as z,H as F,I as A,J as N,K as H,L,M as O,O as E,P as B,Q as W,R as G,S as j,T as q,U,V as K,W as V,X as J,Y,Z as X,_ as Z,$ as Q,a0 as tt,a1 as et,a2 as st,a3 as it,a4 as ot,a5 as at,a6 as nt,a7 as rt,a8 as lt,a9 as ht,aa as ct,ab as dt,ac as pt,ad as ut,ae as _t,af as mt,ag as gt,ah as ft,ai as bt,aj as vt,ak as yt,al as wt,am as $t,an as kt,ao as xt,ap as St,aq as Mt,ar as Ct,as as Pt,at as Dt,au as It,av as Tt,aw as Rt,ax as zt,ay as Ft,az as At,aA as Nt,aB as Ht,aC as Lt,aD as Ot,aE as Et,aF as Bt,aG as Wt,aH as Gt,aI as jt,aJ as qt,aK as Ut,aL as Kt,aM as Vt,aN as Jt,aO as Yt,aP as Xt,aQ as Zt,aR as Qt,aS as te,aT as ee,aU as se,aV as ie,aW as oe,aX as ae,aY as ne,aZ as re,a_ as le,a$ as he,b0 as ce,b1 as de,b2 as pe,b3 as ue,b4 as _e,b5 as me,b6 as ge,b7 as fe,b8 as be,b9 as ve,ba as ye,bb as we,bc as $e,bd as ke,be as xe,bf as Se,bg as Me,bh as Ce,bi as Pe,bj as De,bk as Ie,bl as Te,bm as Re,bn as ze,bo as Fe,bp as Ae,bq as Ne,br as He,bs as Le,bt as Oe,bu as Ee,bv as Be,bw as We,bx as Ge,by as je,bz as qe,bA as Ue,bB as Ke,bC as Ve,bD as Je,bE as Ye,bF as Xe,bG as Ze,bH as Qe,bI as ts,bJ as es,bK as ss,bL as is,bM as os,bN as as,bO as ns,bP as rs,bQ as ls,bR as hs,bS as cs,bT as ds,bU as ps,bV as us,bW as _s,bX as ms,bY as gs,bZ as fs,b_ as bs,b$ as vs,c0 as ys,c1 as ws,c2 as $s,c3 as ks,c4 as xs,c5 as Ss,c6 as Ms,c7 as Cs,c8 as Ps,c9 as Ds,ca as Is,cb as Ts,cc as Rs,cd as zs,ce as Fs,cf as As,cg as Ns,ch as Hs,ci as Ls,cj as Os,ck as Es,cl as Bs,cm as Ws,cn as Gs,co as js,cp as qs,cq as Us,cr as Ks,cs as Vs,ct as Js,cu as Ys,cv as Xs,cw as Zs,cx as Qs,cy as ti,cz as ei,cA as si,cB as ii,cC as oi,cD as ai,cE as ni,cF as ri,cG as li,cH as hi,cI as ci,cJ as di,cK as pi,cL as ui,cM as _i,cN as mi,cO as gi,cP as fi,cQ as bi,cR as vi,cS as yi,cT as wi,cU as $i,cV as ki,cW as xi,cX as Si,cY as Mi,cZ as Ci,c_ as Pi,c$ as Di,d0 as Ii,d1 as Ti,d2 as Ri,d3 as zi,d4 as Fi,d5 as Ai,d6 as Ni,d7 as Hi,d8 as Li,d9 as Oi,da as Ei,db as Bi,dc as Wi,dd as Gi,de as ji,df as qi,dg as Ui,dh as Ki,di as Vi,dj as Ji,dk as Yi,dl as Xi,dm as Zi,dn as Qi,dp as to,dq as eo,dr as so}from"./houseplan-card-BCodcbie.js";import{i as io}from"./guard-eiu_tbpd.js";import{F as oo,f as ao,p as no,c as ro,s as lo,i as ho,e as co,r as po,a as uo,b as _o,d as mo,g as go,t as fo}from"./backdrop-pick-flaNG0_n.js";import{t as bo,h as vo,m as yo,T as wo}from"./zigbee-topology-CQqDGRbo.js";import{GENERATED_FURNITURE_ART as $o,FURNITURE_ART_FINGERPRINT as ko}from"./furniture-plan-art.generated-CiVCUNvm.js";var xo={"gs.hint":"Fill colors apply to every space; each color has its own opacity. Which fill mode a space uses is set in that space's dialog.","gs.show_room_tooltip":"Show the room information window on hover","support.about_group":"About the card","support.guide_group":"Documentation","support.guide":"User guide","support.form_group":"Send a report or suggestion","support.contact":"Contact details (email/tg/WhatsApp), optional.","support.message":"Message","support.attach":"Attach anonymized information from your plan","support.attach_hint":"Includes only allowed plan geometry, settings and bounded runtime facts. Excludes names, Home Assistant IDs, live states, URLs, files, and your message/contact.","support.geometry_warning":"The package contains no names or Home Assistant IDs, but it does contain the exact geometry and dimensions of your home.","support.close_busy_title":"Stop the current operation?","support.close_busy_body":"House Plan is preparing or sending the report. Closing now stops waiting for the result.","support.building":"Preparing anonymized data…","support.preview_summary":"Package v{version} · {spaces} spaces · {size} KiB","support.prepared":"Snapshot prepared {n} min ago","support.show_data":"Show data","support.download":"Download JSON","support.refresh":"Refresh snapshot","support.privacy":"When you send, your message, optional contact and, if selected, exact geometry leave your Home Assistant through the House Plan project relay and are visible to maintainers. The project node keeps the report for up to 30 days. Network infrastructure sees your HA server address, but House Plan does not retain it raw; rate-limit and idempotency metadata is kept for up to 24 hours.","support.error_title":"The report was not sent","support.manual_recovery":"You can keep the message and attachment and continue manually:","support.copy_message":"Copy message","support.success":"Report sent: {id}. Save this number when contacting support.","support.copy_id":"Copy ID","support.sending":"Sending…","support.retry":"Retry","support.send":"Send","support.update_required":"Update the House Plan card and integration to compatible versions to send reports.","support.message_copied":"Message copied","support.id_copied":"Report ID copied","support.copy_failed":"Could not access the clipboard. Select and copy the text manually.","support.validation.message_required":"Enter a message.","support.validation.message_too_long":"The message must contain no more than 10,000 characters.","support.validation.contact_too_long":"Contact details must contain no more than 320 characters.","support.validation.preview_missing":"Wait for the attachment preview or turn the attachment off.","support.validation.preview_expired":"The attachment preview expired. Refresh the snapshot.","support.error.support_invalid_message":"Check the message and try again.","support.error.support_preview_expired":"The attachment preview expired or is no longer available. Refresh the snapshot.","support.error.support_package_too_large":"The anonymized package exceeds the 8 MiB limit.","support.error.support_rate_limited":"Too many reports or previews were requested. Try again later.","support.error.support_unavailable":"The private support service is temporarily unavailable. Your draft remains here.","support.error.support_rejected":"The report did not pass the support service validation.","support.error.unauthorized":"You do not have permission to send this report.","vac.routes_section":"Maps and floors","vac.routes_current_map":"Current map","vac.routes_no_map":"no telemetry","vac.routes_status":"Routing","vac.routes_state_ready":"map assigned and calibrated","vac.routes_state_needs_calibration":"map assigned, calibration needed","vac.routes_state_unmapped":"current map is not assigned to a floor","vac.routes_state_ambiguous":"two maps are indistinguishable — no floor is chosen","vac.routes_state_missing_space":"the map's space was deleted","vac.routes_state_none":"no map data","vac.routes_empty":"No map is assigned to a floor yet.","vac.route_map_default":"no map id","vac.route_active":"Active","vac.route_space":"Space","vac.route_space_none":"not selected","vac.route_status_ready":"ready","vac.route_status_needs_calibration":"needs calibration","vac.route_status_ambiguous":"ambiguous","vac.route_status_missing_space":"space deleted","vac.route_missing_space_group":"Deleted space","vac.route_add_current":"Add current map","vac.route_delete":"Remove map","vac.route_delete_title":"Remove the map from its floor?","vac.route_delete_body":"Calibration and saved paths for this map will be removed. Continue?","vac.route_delete_confirm":"Remove","vac.route_space_title":"Move the map to another space?","vac.route_space_body":"Calibration and saved paths for this map will be removed. Continue?","vac.route_space_confirm":"Move","vac.route_missing_space_hint":"One of the maps points at a deleted space: pick a new one or remove the map. Until then the robot is not drawn for that map.","vac.route_default_hint":"The source reports no stable map id. Several floors cannot be told apart without another source or the robot's own selected map.","vac.route_target_hint":"The dock stays in the “{space}” space regardless of the current map.","vac.route_add_source":"Add a map source","vac.route_add_source_hint":"For integrations that give each map its own camera. The “All cameras” section above widens this list.","vac.route_source_no_map":"no map reported"};const So={en:xo,ru:{"gs.hint":"Цвета заливок действуют на все пространства; у каждого цвета своя прозрачность. Какой режим заливки использует пространство — задаётся в его диалоге.","gs.show_room_tooltip":"Показывать окно с информацией при наведении на комнату","support.about_group":"О карточке","support.guide_group":"Документация","support.guide":"Руководство пользователя","support.form_group":"Отправить репорт или предложение","support.contact":"Контакт для связи (email/tg/WhatsApp), необязательно.","support.message":"Сообщение","support.attach":"Прикрепить обезличенную информацию из вашего плана","support.attach_hint":"В пакет входят только разрешённые геометрия, настройки и ограниченные сведения о среде. Не входят имена, HA id, текущие состояния, URL, файлы, сообщение и контакт.","support.geometry_warning":"Пакет не содержит имён и HA id, но содержит точную геометрию и размеры дома.","support.close_busy_title":"Прервать текущую операцию?","support.close_busy_body":"House Plan подготавливает или отправляет репорт. При закрытии ожидание результата прекратится.","support.building":"Подготавливаем обезличенные данные…","support.preview_summary":"Пакет v{version} · пространств: {spaces} · {size} КиБ","support.prepared":"Снимок подготовлен {n} мин назад","support.show_data":"Показать данные","support.download":"Скачать JSON","support.refresh":"Обновить снимок","support.privacy":"При отправке сообщение, необязательный контакт и, если выбран пакет, точная геометрия покидают ваш Home Assistant через relay проекта House Plan и доступны мейнтейнерам. Узел проекта хранит репорт до 30 дней. Сетевая инфраструктура видит адрес сервера HA, но House Plan не сохраняет его в исходном виде; метаданные лимитов и идемпотентности хранятся до 24 часов.","support.error_title":"Репорт не отправлен","support.manual_recovery":"Сообщение и вложение можно сохранить и продолжить вручную:","support.copy_message":"Копировать сообщение","support.success":"Репорт отправлен: {id}. Сохраните номер для связи с поддержкой.","support.copy_id":"Копировать ID","support.sending":"Отправляем…","support.retry":"Повторить","support.send":"Отправить","support.update_required":"Обновите карточку и интеграцию House Plan до совместимых версий, чтобы отправлять репорты.","support.message_copied":"Сообщение скопировано","support.id_copied":"ID репорта скопирован","support.copy_failed":"Не удалось получить доступ к буферу обмена. Выделите и скопируйте текст вручную.","support.validation.message_required":"Введите сообщение.","support.validation.message_too_long":"Сообщение должно содержать не более 10 000 символов.","support.validation.contact_too_long":"Контакт должен содержать не более 320 символов.","support.validation.preview_missing":"Дождитесь предпросмотра вложения или отключите его.","support.validation.preview_expired":"Предпросмотр вложения истёк. Обновите снимок.","support.error.support_invalid_message":"Проверьте сообщение и повторите попытку.","support.error.support_preview_expired":"Предпросмотр вложения истёк или больше недоступен. Обновите снимок.","support.error.support_package_too_large":"Обезличенный пакет превышает лимит 8 МиБ.","support.error.support_rate_limited":"Запрошено слишком много репортов или предпросмотров. Повторите позже.","support.error.support_unavailable":"Закрытая служба поддержки временно недоступна. Черновик сохранён в этом окне.","support.error.support_rejected":"Репорт не прошёл проверку службы поддержки.","support.error.unauthorized":"У вас нет прав на отправку этого репорта.","vac.routes_section":"Карты и этажи","vac.routes_current_map":"Текущая карта","vac.routes_no_map":"источник молчит","vac.routes_status":"Маршрутизация","vac.routes_state_ready":"карта сопоставлена и откалибрована","vac.routes_state_needs_calibration":"карта сопоставлена, нужна калибровка","vac.routes_state_unmapped":"текущая карта не сопоставлена этажу","vac.routes_state_ambiguous":"две карты неразличимы — этаж не выбирается","vac.routes_state_missing_space":"пространство карты удалено","vac.routes_state_none":"нет данных о карте","vac.routes_empty":"Ни одна карта ещё не сопоставлена этажу.","vac.route_map_default":"без идентификатора","vac.route_active":"Текущая","vac.route_space":"Пространство","vac.route_space_none":"не выбрано","vac.route_status_ready":"готова","vac.route_status_needs_calibration":"нужна калибровка","vac.route_status_ambiguous":"неоднозначна","vac.route_status_missing_space":"пространство удалено","vac.route_missing_space_group":"Пространство удалено","vac.route_add_current":"Добавить текущую карту","vac.route_delete":"Удалить карту","vac.route_delete_title":"Удалить карту с этажа?","vac.route_delete_body":"Калибровка и сохранённые пути этой карты будут удалены. Продолжить?","vac.route_delete_confirm":"Удалить","vac.route_space_title":"Перенести карту в другое пространство?","vac.route_space_body":"Калибровка и сохранённые пути этой карты будут удалены. Продолжить?","vac.route_space_confirm":"Перенести","vac.route_missing_space_hint":"Одна из карт ссылается на удалённое пространство: выберите новое или удалите карту. Пока ссылка не исправлена, робот на этой карте не рисуется.","vac.route_default_hint":"Источник не сообщает стабильный идентификатор карты. Несколько этажей нельзя различить без другого источника или собственной карты робота.","vac.route_target_hint":"Док остаётся в пространстве «{space}» независимо от текущей карты.","vac.route_add_source":"Добавить источник карты","vac.route_add_source_hint":"Для интеграций, где у каждой карты своя камера. Список расширяется разделом «Все камеры» выше.","vac.route_source_no_map":"карта не читается"},de:{"gs.hint":"Füllfarben gelten für jeden Bereich; jede Farbe hat ihre eigene Deckkraft. Der Füllmodus wird in den Einstellungen des jeweiligen Bereichs festgelegt.","gs.show_room_tooltip":"Rauminformationen beim Darüberfahren anzeigen","support.about_group":"Über die Karte","support.guide_group":"Dokumentation","support.guide":"Benutzerhandbuch","support.form_group":"Bericht oder Vorschlag senden","support.contact":"Kontakt (E-Mail/tg/WhatsApp), optional.","support.message":"Nachricht","support.attach":"Anonymisierte Informationen aus dem Plan anhängen","support.attach_hint":"Enthält nur erlaubte Plangeometrie, Einstellungen und begrenzte Laufzeitdaten. Namen, Home-Assistant-IDs, Live-Zustände, URLs, Dateien, Nachricht und Kontakt werden ausgeschlossen.","support.geometry_warning":"Das Paket enthält keine Namen oder Home-Assistant-IDs, aber die exakte Geometrie und die Maße Ihres Hauses.","support.close_busy_title":"Aktuellen Vorgang abbrechen?","support.close_busy_body":"House Plan bereitet den Bericht vor oder sendet ihn. Beim Schließen wird nicht weiter auf das Ergebnis gewartet.","support.building":"Anonymisierte Daten werden vorbereitet…","support.preview_summary":"Paket v{version} · {spaces} Bereiche · {size} KiB","support.prepared":"Schnappschuss vor {n} Min. erstellt","support.show_data":"Daten anzeigen","support.download":"JSON herunterladen","support.refresh":"Schnappschuss aktualisieren","support.privacy":"Beim Senden verlassen Ihre Nachricht, der optionale Kontakt und, falls ausgewählt, die exakte Geometrie Ihren Home Assistant über das House-Plan-Projektrelay und sind für die Maintainer sichtbar. Der Projektserver speichert den Bericht bis zu 30 Tage. Die Netzwerkinfrastruktur sieht die Adresse Ihres HA-Servers, House Plan speichert sie jedoch nicht im Rohformat; Limit- und Idempotenzdaten bleiben bis zu 24 Stunden erhalten.","support.error_title":"Der Bericht wurde nicht gesendet","support.manual_recovery":"Nachricht und Anhang können gespeichert und manuell weitergegeben werden:","support.copy_message":"Nachricht kopieren","support.success":"Bericht gesendet: {id}. Bewahren Sie diese Nummer für den Support auf.","support.copy_id":"ID kopieren","support.sending":"Wird gesendet…","support.retry":"Erneut versuchen","support.send":"Senden","support.update_required":"Aktualisieren Sie House-Plan-Karte und Integration auf kompatible Versionen, um Berichte zu senden.","support.message_copied":"Nachricht kopiert","support.id_copied":"Berichts-ID kopiert","support.copy_failed":"Kein Zugriff auf die Zwischenablage. Markieren und kopieren Sie den Text manuell.","support.validation.message_required":"Geben Sie eine Nachricht ein.","support.validation.message_too_long":"Die Nachricht darf höchstens 10.000 Zeichen enthalten.","support.validation.contact_too_long":"Der Kontakt darf höchstens 320 Zeichen enthalten.","support.validation.preview_missing":"Warten Sie auf die Vorschau oder deaktivieren Sie den Anhang.","support.validation.preview_expired":"Die Anhangsvorschau ist abgelaufen. Aktualisieren Sie den Schnappschuss.","support.error.support_invalid_message":"Prüfen Sie die Nachricht und versuchen Sie es erneut.","support.error.support_preview_expired":"Die Anhangsvorschau ist abgelaufen oder nicht mehr verfügbar. Aktualisieren Sie den Schnappschuss.","support.error.support_package_too_large":"Das anonymisierte Paket überschreitet das Limit von 8 MiB.","support.error.support_rate_limited":"Zu viele Berichte oder Vorschauen wurden angefordert. Versuchen Sie es später erneut.","support.error.support_unavailable":"Der private Supportdienst ist vorübergehend nicht verfügbar. Der Entwurf bleibt in diesem Fenster erhalten.","support.error.support_rejected":"Der Bericht hat die Prüfung des Supportdienstes nicht bestanden.","support.error.unauthorized":"Sie dürfen diesen Bericht nicht senden.","vac.routes_section":"Karten und Etagen","vac.routes_current_map":"Aktuelle Karte","vac.routes_no_map":"keine Telemetrie","vac.routes_status":"Zuordnung","vac.routes_state_ready":"Karte zugeordnet und kalibriert","vac.routes_state_needs_calibration":"Karte zugeordnet, Kalibrierung nötig","vac.routes_state_unmapped":"aktuelle Karte keiner Etage zugeordnet","vac.routes_state_ambiguous":"zwei Karten nicht unterscheidbar — keine Etage gewählt","vac.routes_state_missing_space":"der Raum der Karte wurde gelöscht","vac.routes_state_none":"keine Kartendaten","vac.routes_empty":"Noch keine Karte einer Etage zugeordnet.","vac.route_map_default":"ohne Karten-ID","vac.route_active":"Aktiv","vac.route_space":"Raum","vac.route_space_none":"nicht gewählt","vac.route_status_ready":"bereit","vac.route_status_needs_calibration":"Kalibrierung nötig","vac.route_status_ambiguous":"mehrdeutig","vac.route_status_missing_space":"Raum gelöscht","vac.route_missing_space_group":"Gelöschter Bereich","vac.route_add_current":"Aktuelle Karte hinzufügen","vac.route_delete":"Karte entfernen","vac.route_delete_title":"Karte von der Etage entfernen?","vac.route_delete_body":"Kalibrierung und gespeicherte Pfade dieser Karte werden entfernt. Fortfahren?","vac.route_delete_confirm":"Entfernen","vac.route_space_title":"Karte in einen anderen Raum verschieben?","vac.route_space_body":"Kalibrierung und gespeicherte Pfade dieser Karte werden entfernt. Fortfahren?","vac.route_space_confirm":"Verschieben","vac.route_missing_space_hint":"Eine Karte verweist auf einen gelöschten Raum: neuen wählen oder Karte entfernen. Bis dahin wird der Roboter für diese Karte nicht gezeichnet.","vac.route_default_hint":"Die Quelle meldet keine stabile Karten-ID. Mehrere Etagen lassen sich ohne andere Quelle oder die vom Roboter gewählte Karte nicht unterscheiden.","vac.route_target_hint":"Die Station bleibt unabhängig von der aktuellen Karte im Raum „{space}“.","vac.route_add_source":"Kartenquelle hinzufügen","vac.route_add_source_hint":"Für Integrationen, die jeder Karte eine eigene Kamera geben. Der Abschnitt „Alle Kameras“ oben erweitert diese Liste.","vac.route_source_no_map":"keine Karte gemeldet"},fr:{"gs.hint":"Les couleurs de remplissage s’appliquent à tous les espaces ; chaque couleur possède sa propre opacité. Le mode de remplissage utilisé par un espace se règle dans la boîte de dialogue de cet espace.","gs.show_room_tooltip":"Afficher les informations de la pièce au survol","support.about_group":"À propos de la carte","support.guide_group":"Documentation d’aide","support.guide":"Guide utilisateur","support.form_group":"Envoyer un rapport ou une suggestion","support.contact":"Contact (e-mail/tg/WhatsApp), facultatif.","support.message":"Votre message","support.attach":"Joindre des informations anonymisées de votre plan","support.attach_hint":"Inclut uniquement la géométrie, les réglages autorisés et des données d’exécution limitées. Exclut les noms, identifiants Home Assistant, états en direct, URL, fichiers, message et contact.","support.geometry_warning":"Le paquet ne contient ni noms ni identifiants Home Assistant, mais il contient la géométrie et les dimensions exactes de votre logement.","support.close_busy_title":"Interrompre l’opération en cours ?","support.close_busy_body":"House Plan prépare ou envoie le rapport. Fermer maintenant arrête l’attente du résultat.","support.building":"Préparation des données anonymisées…","support.preview_summary":"Paquet v{version} · {spaces} espaces · {size} Kio","support.prepared":"Instantané préparé il y a {n} min","support.show_data":"Afficher les données","support.download":"Télécharger le JSON","support.refresh":"Actualiser l’instantané","support.privacy":"Lors de l’envoi, votre message, le contact facultatif et, si elle est sélectionnée, la géométrie exacte quittent votre Home Assistant via le relais du projet House Plan et sont visibles par les mainteneurs. Le serveur du projet conserve le rapport jusqu’à 30 jours. L’infrastructure réseau voit l’adresse de votre serveur HA, mais House Plan ne la conserve pas en clair ; les métadonnées de limitation et d’idempotence sont gardées jusqu’à 24 heures.","support.error_title":"Le rapport n’a pas été envoyé","support.manual_recovery":"Vous pouvez conserver le message et la pièce jointe puis continuer manuellement :","support.copy_message":"Copier le message","support.success":"Rapport envoyé : {id}. Conservez ce numéro pour contacter l’assistance.","support.copy_id":"Copier l’ID","support.sending":"Envoi…","support.retry":"Réessayer","support.send":"Envoyer","support.update_required":"Mettez à jour la carte et l’intégration House Plan vers des versions compatibles pour envoyer des rapports.","support.message_copied":"Message copié","support.id_copied":"ID du rapport copié","support.copy_failed":"Impossible d’accéder au presse-papiers. Sélectionnez et copiez le texte manuellement.","support.validation.message_required":"Saisissez un message.","support.validation.message_too_long":"Le message ne doit pas dépasser 10 000 caractères.","support.validation.contact_too_long":"Le contact ne doit pas dépasser 320 caractères.","support.validation.preview_missing":"Attendez l’aperçu de la pièce jointe ou désactivez-la.","support.validation.preview_expired":"L’aperçu de la pièce jointe a expiré. Actualisez l’instantané.","support.error.support_invalid_message":"Vérifiez le message et réessayez.","support.error.support_preview_expired":"L’aperçu de la pièce jointe a expiré ou n’est plus disponible. Actualisez l’instantané.","support.error.support_package_too_large":"Le paquet anonymisé dépasse la limite de 8 Mio.","support.error.support_rate_limited":"Trop de rapports ou d’aperçus ont été demandés. Réessayez plus tard.","support.error.support_unavailable":"Le service d’assistance privé est temporairement indisponible. Le brouillon reste dans cette fenêtre.","support.error.support_rejected":"Le rapport n’a pas passé la validation du service d’assistance.","support.error.unauthorized":"Vous n’êtes pas autorisé à envoyer ce rapport.","vac.routes_section":"Cartes et étages","vac.routes_current_map":"Carte actuelle","vac.routes_no_map":"aucune télémétrie","vac.routes_status":"Routage","vac.routes_state_ready":"carte assignée et calibrée","vac.routes_state_needs_calibration":"carte assignée, calibrage requis","vac.routes_state_unmapped":"carte actuelle non assignée à un étage","vac.routes_state_ambiguous":"deux cartes indiscernables — aucun étage choisi","vac.routes_state_missing_space":"l'espace de la carte a été supprimé","vac.routes_state_none":"aucune donnée de carte","vac.routes_empty":"Aucune carte n'est encore assignée à un étage.","vac.route_map_default":"sans identifiant","vac.route_active":"Active","vac.route_space":"Espace","vac.route_space_none":"non sélectionné","vac.route_status_ready":"prête","vac.route_status_needs_calibration":"calibrage requis","vac.route_status_ambiguous":"ambiguë","vac.route_status_missing_space":"espace supprimé","vac.route_missing_space_group":"Espace supprimé","vac.route_add_current":"Ajouter la carte actuelle","vac.route_delete":"Supprimer la carte","vac.route_delete_title":"Retirer la carte de son étage ?","vac.route_delete_body":"Le calibrage et les trajets enregistrés de cette carte seront supprimés. Continuer ?","vac.route_delete_confirm":"Supprimer","vac.route_space_title":"Déplacer la carte vers un autre espace ?","vac.route_space_body":"Le calibrage et les trajets enregistrés de cette carte seront supprimés. Continuer ?","vac.route_space_confirm":"Déplacer","vac.route_missing_space_hint":"Une carte pointe vers un espace supprimé : choisissez-en un autre ou supprimez la carte. D'ici là, le robot n'est pas dessiné pour cette carte.","vac.route_default_hint":"La source ne fournit pas d'identifiant de carte stable. Plusieurs étages ne peuvent pas être distingués sans une autre source ou la carte sélectionnée du robot.","vac.route_target_hint":"La station reste dans l'espace « {space} » quelle que soit la carte actuelle.","vac.route_add_source":"Ajouter une source de carte","vac.route_add_source_hint":"Pour les intégrations qui donnent à chaque carte sa propre caméra. La section « Toutes les caméras » ci-dessus élargit cette liste.","vac.route_source_no_map":"aucune carte signalée"}};function Mo(e,s,i){return t(So[e]?.[s]??xo[s]??s,i)}function Co(t,e,s,i,o){return{markerId:t,source:i,mapId:o,space:e.length?"":s}}function Po(t,e,s){return{...t,space:s.has(e)?e:""}}function Do(t,e=Math.random){const s=new Set(t);for(let t=0;t<64;t+=1){const t="vr_"+Math.floor(16777215*e()).toString(36).padStart(5,"0");if(!s.has(t))return t}return"vr_"+Date.now().toString(36)}function Io(t,e,s){return t.map(t=>t.id===e?{...t,calibration:s}:t)}const To=new WeakMap,Ro=(t,e)=>{const s=(t._serverCfg?.spaces||[]).find(t=>t?.id===e);return String(s?.name||s?.id||e)};function zo(t,i,o){const u=t.host,_=a(u.hass,u._config?.language),m=(t,e)=>Mo(_,t,e),g=i.marker?.vacuum||{},f=Array.isArray(g.map_routes),b=u._vacSource(i)||"",v=e(i.id,g,i.space,b),y=(u._serverCfg?.spaces||[]).filter(t=>"string"==typeof t?.id&&!!t.id).map(t=>({id:t.id,name:String(t.name||t.id)})),w=new Set(y.map(t=>t.id)),$=n(v,[b],t=>u._vacObservedMapId(i,t)),k=r({routes:v,observed:$,spaceIds:w}),x="ready"===k.kind||"needs_calibration"===k.kind||"missing_space"===k.kind?k.route.id:"",S=b?$[b]:void 0,M=async e=>{let o=f?g.map_routes??null:null;if(!o&&(o=function(t,e,i,o){if(!i)return null;const a=t?.calibration;if(!a||"object"!=typeof a)return null;const n=new Set,r=[];for(const t of Object.keys(a)){const l=s(a[t]);if(!l)continue;const h=o(n);n.add(h),r.push({id:h,source:i,map_id:t,space:e,calibration:l})}return r.length?r:null}(g,i.space,b,t=>Do(t))??[],!b&&Object.keys(g.calibration||{}).length))return!1;const a=e(o);return!!a&&(async e=>{const s=u._serverCfg;if(!s)return!1;const o=JSON.parse(JSON.stringify(s));o.markers=o.markers||[];let a=o.markers.find(t=>t.id===i.id);if(!a){if("device"!==i.bindingKind&&"entity"!==i.bindingKind||!i.bindingRef)return!1;a={id:i.id,binding:`${i.bindingKind}:${i.bindingRef}`,space:i.space||null,area:i.area||null,hidden:!!i.hidden},o.markers.push(a)}a.vacuum={...a.vacuum||{},map_routes:e},delete a.vacuum.calibration;const n=c(s,o,u._cfgContentFingerprint,u._cfgRev,d);u._serverCfg=o,u._regSignature="",u._maybeRebuildDevices(),u.requestUpdate(),u._saveConfigDebounced.pending()&&u._saveConfigDebounced.cancel();try{return await t._saveConfigNow(),!0}catch(t){return p(u,n,d),u._regSignature="",u._maybeRebuildDevices(),u.requestUpdate(),u._showToast(u._t("toast.cfg_save_failed",{err:u._errText(t)})),!1}})(a)},C=o.candidates.filter(t=>t.entityId!==b&&!v.some(e=>e.source===t.entityId)),P=async(t,e)=>{if(!e||e===t.space)return;await u._confirmDanger({key:"vacuum_route_space",kind:"warning",title:m("vac.route_space_title"),message:m("vac.route_space_body"),objectName:t.map_id||m("vac.route_map_default"),confirmLabel:m("vac.route_space_confirm"),cancelLabel:u._t("btn.cancel")})&&await M(s=>function(t,e,s,i){return t.map(t=>t.id===e?{...t,id:i,space:s,calibration:null}:t)}(s,t.id,e,Do(new Set(v.map(t=>t.id)))))},D=new Map(y.map((t,e)=>[t.id,e])),I=(t,e)=>t.map_id.localeCompare(e.map_id)||t.source.localeCompare(e.source)||t.id.localeCompare(e.id),T=v.filter(t=>w.has(t.space)).sort((t,e)=>(D.get(t.space)??0)-(D.get(e.space)??0)||I(t,e)),R=v.filter(t=>!w.has(t.space)).sort(I),z=[...T,...R],F=!!b&&void 0!==S&&!v.some(t=>t.source===b&&t.map_id===S);let A=To.get(t);const N=A?.source||"",H=A?.mapId||"",L=!!A&&v.some(t=>t.source===N&&t.map_id===H);A&&(A.markerId!==i.id||u._vacObservedMapId(i,A.source)!==A.mapId||L&&!A.saving)&&(To.delete(t),A=void 0),A?.space&&!w.has(A.space)&&(A=Po(A,"",w),To.set(t,A));const O=e=>h`
  • ${e.map_id||m("vac.route_map_default")} @@ -578,7 +578,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 .previewfacts > div { grid-template-columns: minmax(0, 1fr); gap: 2px; } } `],customElements.get("hp-device-preview")||customElements.define("hp-device-preview",ba);const va={revision:0,topologies:[],states:{}};class ya extends k{constructor(){super(...arguments),this.value={enabled:!1,z2mBaseTopics:[]},this.savedEnabled=!1,this.devices=[],this._runtime=null,this._snapshot=va,this._topicText="zigbee2mqtt",this._invalidTopic=!1}disconnectedCallback(){this._release?.(),this._release=void 0,super.disconnectedCallback()}updated(t){t.has("hass")&&(this._release?.(),this._release=void 0,this._runtime=null,this._snapshot=va),this.savedEnabled&&this._admin&&this._ensureRuntime()}willUpdate(t){t.has("value")&&(this._topicText=(this.value.z2mBaseTopics.length?this.value.z2mBaseTopics:["zigbee2mqtt"]).join("\n"),this._invalidTopic=!1)}get _admin(){return!0===this.hass?.user?.is_admin}_t(t,e){return bo(a(this.hass),t,e)}_help(){const t=a(this.hass);return vo(t,"help")&&vo(t,"help_aria")?h``:l}async _ensureRuntime(){return this._runtime||(this._runtime=await import("./zigbee-topology-runtime-D_luJHXO.js"),this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this._release=this._runtime.subscribeZigbeeTopology(this.hass,()=>{this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this.requestUpdate()}),this.requestUpdate()),this._runtime}_emit(t){this._admin&&this.dispatchEvent(new CustomEvent("hp-topology-settings-change",{detail:t,bubbles:!0,composed:!0}))}_topics(){return this.value.z2mBaseTopics.length?this.value.z2mBaseTopics:["zigbee2mqtt"]}_editTopics(t){this._topicText=t;const e=t.split(/[\r\n,]+/).map(t=>t.trim()).filter(Boolean),s=e.map(R).filter(Boolean);this._invalidTopic=s.length!==e.length,this._invalidTopic?this.requestUpdate():this._emit({...this.value,z2mBaseTopics:[...new Set(s)].slice(0,8)})}_status(t){const e=this._snapshot.states[t];if(!e)return this._t("status_idle");if("loading"===e.phase)return this._t("status_loading");if("error"===e.phase)return this._t(`error_${e.error||"provider"}`);if("ready"!==e.phase||!e.obtainedAt)return this._t("status_idle");const s=new Date(e.obtainedAt).toLocaleTimeString(a(this.hass),{hour:"2-digit",minute:"2-digit"}),i=this._snapshot.topologies.find(e=>"zha"===t?"zha"===e.provider:`z2m:${e.instanceId}`===t),o=!!i&&!!this.registry&&yo(i,this.devices,this.registry).warnings.length>0;return e.partial||o?this._t("status_partial",{time:s}):i&&!i.links.length?this._t("status_no_links",{time:s}):this._t(Date.now()-e.obtainedAt>wo?"status_stale":"status_ready",{time:s})}_busy(t){return"loading"===this._snapshot.states[t]?.phase}async _readZha(){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).readZhaTopology(this.hass)}async _refreshZ2m(t){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).refreshZ2mTopology(this.hass,t)}render(){const t=this._admin,e=this.value.enabled,s=t&&this.savedEnabled,i=this._topics();return h` + .ariaLabel=${this._t("help_aria")}>`:l}async _ensureRuntime(){return this._runtime||(this._runtime=await import("./zigbee-topology-runtime-Dpiom0TO.js"),this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this._release=this._runtime.subscribeZigbeeTopology(this.hass,()=>{this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this.requestUpdate()}),this.requestUpdate()),this._runtime}_emit(t){this._admin&&this.dispatchEvent(new CustomEvent("hp-topology-settings-change",{detail:t,bubbles:!0,composed:!0}))}_topics(){return this.value.z2mBaseTopics.length?this.value.z2mBaseTopics:["zigbee2mqtt"]}_editTopics(t){this._topicText=t;const e=t.split(/[\r\n,]+/).map(t=>t.trim()).filter(Boolean),s=e.map(R).filter(Boolean);this._invalidTopic=s.length!==e.length,this._invalidTopic?this.requestUpdate():this._emit({...this.value,z2mBaseTopics:[...new Set(s)].slice(0,8)})}_status(t){const e=this._snapshot.states[t];if(!e)return this._t("status_idle");if("loading"===e.phase)return this._t("status_loading");if("error"===e.phase)return this._t(`error_${e.error||"provider"}`);if("ready"!==e.phase||!e.obtainedAt)return this._t("status_idle");const s=new Date(e.obtainedAt).toLocaleTimeString(a(this.hass),{hour:"2-digit",minute:"2-digit"}),i=this._snapshot.topologies.find(e=>"zha"===t?"zha"===e.provider:`z2m:${e.instanceId}`===t),o=!!i&&!!this.registry&&yo(i,this.devices,this.registry).warnings.length>0;return e.partial||o?this._t("status_partial",{time:s}):i&&!i.links.length?this._t("status_no_links",{time:s}):this._t(Date.now()-e.obtainedAt>wo?"status_stale":"status_ready",{time:s})}_busy(t){return"loading"===this._snapshot.states[t]?.phase}async _readZha(){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).readZhaTopology(this.hass)}async _refreshZ2m(t){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).refreshZ2mTopology(this.hass,t)}render(){const t=this._admin,e=this.value.enabled,s=t&&this.savedEnabled,i=this._topics();return h`
    ${this._t("title")}${this._help()}
    - `}}const hc=(t,e)=>t[0]*e[1]-t[1]*e[0],cc=(t,e)=>t[0]*e[0]+t[1]*e[1],dc=(t,e)=>[t[0]-e[0],t[1]-e[1]],pc=(t,e,s)=>[t[0]+e[0]*s,t[1]+e[1]*s];function uc(t,e,s){return Math.abs(hc(t,e))<=s}function _c(t,e,s){return Math.abs(hc(dc(t,e),s))}function mc(t,e,s,i,o){const a=e[0]-t[0],n=e[1]-t[1],r=Math.hypot(a,n);if(!(r>o&&s>0))return[];const l=[a/r,n/r];return function(t,e,s){const i=e.map(([e,s])=>[Math.max(0,Math.min(e,s)),Math.min(t,Math.max(e,s))]).filter(([t,e])=>e>t+s).sort((t,e)=>t[0]-e[0]||t[1]-e[1]),o=[];for(const t of i){const e=o[o.length-1];!e||t[0]>e[1]+s?o.push([...t]):e[1]=Math.max(e[1],t[1])}const a=[];let n=0;for(const[t,e]of o)t>n+s&&a.push([n,t]),n=Math.max(n,e);return t>n+s&&a.push([n,t]),a}(r,i.flatMap(e=>{const i=e.b[0]-e.a[0],a=e.b[1]-e.a[1],n=Math.hypot(i,a);if(!(n>o&&uc(l,[i/n,a/n],1e-6)))return[];if(_c(e.a,t,l)>1.1*Math.max(s,o)||_c(e.b,t,l)>1.1*Math.max(s,o))return[];return[[cc(dc(e.a,t),l),cc(dc(e.b,t),l)]]}),o).flatMap(([e,i])=>{const o=Jt({a:pc(t,l,e),b:pc(t,l,i),halfDepth:s});return o?[o]:[]})}function gc(t){const e=t.coordScale??1,s=Math.max(t.epsilon??2e-4*t.gridPitch,1e-9),i=[];for(const s of t.rooms||[]){if(!s?.id)continue;const o=et(t.rooms,s.id,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e);if(!o||o.poly.length<3)continue;const a=Kt(o.poly,o.offsets);!a||a.length<3||i.push({roomId:s.id,profile:o,inner:a})}i.sort((t,e)=>t.roomId.localeCompare(e.roomId));const o=(t.roomOpenings||[]).map(t=>{const e=t.angle*Math.PI/180,s=[Math.cos(e),Math.sin(e)],i=Math.max(0,t.length)/2;return{a:pc([t.x,t.y],s,-i),b:pc([t.x,t.y],s,i)}}),a=[];for(const i of Vt(t.rooms,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e))for(const t of mc(i.a,i.b,i.depthUnits/2,o,s))a.push({body:t});const n=new Map;for(const e of t.partitionCuts||[]){const t=n.get(e.hostId)||[];t.push(e),n.set(e.hostId,t)}for(const e of t.partitions||[]){const i=w(e.cm,t.cellCm,t.gridPitch)/2;for(const t of mc(e.a,e.b,i,n.get(e.id)||[],s))a.push({body:t,partitionId:e.id})}return{rooms:i,boundaries:a,epsilon:s}}function fc(t,e,s,i){const o=t.profile.offsets[e];if(!(o>0))return null;const a=function(t,e){const s=t[e],i=t[(e+1)%t.length],o=i[0]-s[0],a=i[1]-s[1],n=Math.hypot(o,a)||1;return function(t){let e=0;for(let s=0;s=0?[-a/n,o/n]:[a/n,-o/n]}(t.profile.poly,e),n=pc(s.center,a,o),r=[];for(let e=0;ei&&uc(s.axis,[l[0]/h,l[1]/h],1e-6)))continue;if(_c(o,n,s.axis)>i||_c(a,n,s.axis)>i)continue;const c=cc(dc(o,n),s.axis),d=cc(dc(a,n),s.axis);r.push([Math.min(c,d),Math.max(c,d)])}const l=function(t,e){t.sort((t,e)=>t[0]-e[0]||t[1]-e[1]);const s=[];for(const i of t){const t=s[s.length-1];!t||i[0]>t[1]+e?s.push([...i]):t[1]=Math.max(t[1],i[1])}return s}(r,i).find(([t,e])=>t<=i&&e>=-i);if(!l)return null;const[h,c]=l,d=pc(n,s.axis,-s.half),p=pc(n,s.axis,s.half),u=Math.max(0,-s.half-h),_=Math.max(0,c-s.half),m=u>0?pc(n,s.axis,h):d,g=_>0?pc(n,s.axis,c):p,f=cc(a,s.normal)>=0?1:-1,b=(e,i,o)=>({from:e,to:i,label:[(e[0]+i[0])/2,(e[1]+i[1])/2],axis:s.axis,labelNormal:a,distance:o,roomId:t.roomId,roomSide:f,source:"room-face"});return{left:b(d,m,u),right:b(p,g,_)}}function bc(t){const e=pc(t.center,t.axis,-t.half),s=pc(t.center,t.axis,t.half),i=pc(t.center,t.axis,Math.min(-t.half,t.targetLo)),o=pc(t.center,t.axis,Math.max(t.half,t.targetHi)),a=(e,s)=>({from:e,to:s,label:[(e[0]+s[0])/2,(e[1]+s[1])/2],axis:t.axis,labelNormal:t.normal,distance:Math.hypot(s[0]-e[0],s[1]-e[1]),source:"host-end"});return[a(e,i),a(s,o)]}function vc(t,e,s,i){const o=dc(s,e),a=cc(o,o);if(!(a>i*i))return Math.hypot(...dc(t,e))<=i;const n=cc(dc(t,e),o)/a;if(n<-i||n>1+i)return!1;const r=pc(e,o,Math.max(0,Math.min(1,n)));return Math.hypot(...dc(t,r))<=i}function yc(t,e,s){let i=!1;for(let o=0,a=e.length-1;ot[1]!=h>t[1]&&t[0]<(l-n)*(t[1]-r)/(h-r)+n&&(i=!i)}return i}function wc(t,e,s,i,o,a){const n=dc(i,s),r=hc(e,n);if(Math.abs(r)<=a)return null;const l=dc(s,t),h=hc(l,n)/r,c=hc(l,e)/r;return h<-a||h>o+a||c<-a||c>1+a?null:Math.max(0,Math.min(o,h))}function $c(t,e,s){const i=bc(s),o="partition"===t.host?.kind?t.host.id:void 0;return[{base:i[0],direction:[-s.axis[0],-s.axis[1]]},{base:i[1],direction:s.axis}].map(({base:t,direction:s})=>{const i=t.distance,a=function(t,e,s,i,o,a){let n=null;for(const r of i)if(!o||r.partitionId!==o){if(yc(t,r.body,a))return 0;for(let i=0;icc(dc(t,o),s));return{center:o,axis:s,normal:i,half:Math.max(0,t.renderedLength)/2,targetLo:Math.min(...a),targetHi:Math.max(...a)}}(t),i=e.rooms.flatMap(t=>{const i=function(t,e,s){const{profile:i}=t;let o=null;for(let t=0;t0))continue;const a=i.poly[t],n=i.poly[(t+1)%i.poly.length],r=dc(n,a),l=Math.hypot(r[0],r[1]);if(!(l>s&&uc(e.axis,[r[0]/l,r[1]/l],1e-6)))continue;if(_c(a,e.center,e.axis)>s||_c(n,e.center,e.axis)>s)continue;const h=cc(dc(a,e.center),e.axis),c=cc(dc(n,e.center),e.axis),d=Math.min(h,c),p=Math.max(h,c);if(d>-e.half+s||p0?d:p<0?-p:0);(!o||u2)return bc(s);if(i.length){const t=i.map(({room:t,edge:i})=>fc(t,i,s,e.epsilon));if(t.some(t=>!t))return bc(s);const o=t;return[...o.map(t=>t.left),...o.map(t=>t.right)]}return $c(t,e,s)}function xc(t,e,s,i,o){const a=(n=t,JSON.parse(JSON.stringify(n)));var n;const r=[...new Set(i.filter(t=>"string"==typeof t&&t))],l={partitionsMerged:0,partitionsReconciled:0,openingsRehosted:0,changed:!1};if(!r.length||!Array.isArray(a?.partitions))return{space:a,report:l};const h=JSON.stringify(a),c=tl(a.partitions,{pitch:o.pitch,seedIds:r,geometry:sl(a)});c.merged&&(a.partitions=c.partitions);const d=Array.isArray(a.openings)?a.openings:[];c.merged&&el(d,c.partitions,c.openingMoves,{coordScale:o.coordScale,cellCm:o.cellCm,gridPitch:o.gridPitch});const p=function(t,e,s){const i=new Set(t.map(t=>t.id)),o=new Map(s.map(t=>[t.fromId,t.toId]));return[...new Set(e.map(t=>o.get(t)||t).filter(t=>i.has(t)))].sort((t,e)=>t.localeCompare(e))}(c.partitions,r,c.openingMoves),u=gl(a,{rooms:e.rooms,wall_columns:e.wall_columns,partitions:c.partitions.map(t=>({...t,a:[t.a[0]*o.coordScale,t.a[1]*o.coordScale],b:[t.b[0]*o.coordScale,t.b[1]*o.coordScale]}))},a.walls,s,{...o,partitionIds:p});return u.partitionsReconciled&&(u.walls.length?a.walls=u.walls:delete a.walls,u.partitions.length?a.partitions=u.partitions:delete a.partitions,u.openings.length?a.openings=u.openings:delete a.openings),{space:a,report:{partitionsMerged:c.merged,partitionsReconciled:u.partitionsReconciled,openingsRehosted:u.openingsRehosted,changed:JSON.stringify(a)!==h}}}const Sc=t=>void 0===t?t:JSON.parse(JSON.stringify(t)),Mc=(t,e)=>!!t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,e);function Cc(t,e){const s=e?new Set(e):null;return(t||[]).filter(t=>"string"==typeof t?.id&&(!s||s.has(t.id))).map(t=>{const e=t.vacuum;return{markerId:t.id,roomIdPresent:Mc(t,"room_id"),...Mc(t,"room_id")?{roomId:Sc(t.room_id)}:{},vacuumPresent:Mc(t,"vacuum"),segmentMapPresent:Mc(e,"segment_map"),...Mc(e,"segment_map")?{segmentMap:Sc(e?.segment_map)}:{}}}).sort((t,e)=>t.markerId.localeCompare(e.markerId))}function Pc(t,e){const s=Sc([...t||[]]),i=new Set;for(const t of s){if("string"!=typeof t?.id)continue;let s=!1;"delete"===e.kind?t.room_id===e.roomId&&(delete t.room_id,s=!0):t.room_id===e.dropId&&(t.room_id=e.keepId,s=!0);const o=t.vacuum?.segment_map;if(o&&"object"==typeof o&&!Array.isArray(o)){for(const t of Object.keys(o))"delete"===e.kind&&o[t]===e.roomId?(delete o[t],s=!0):"merge"===e.kind&&o[t]===e.dropId&&(o[t]=e.keepId,s=!0);"delete"===e.kind&&0===Object.keys(o).length&&(t.vacuum&&delete t.vacuum.segment_map,t.vacuum&&0===Object.keys(t.vacuum).length&&delete t.vacuum)}s&&i.add(t.id)}const o=[...i].sort((t,e)=>t.localeCompare(e));return{markers:s,before:Cc(t,o),after:Cc(s,o),changed:o.length}}const Dc="1.73.0-beta.2";so.adopt($o,ko);const Ic={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},Tc={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},Rc=2e3,zc=1e3,Fc=(t,e,s,i)=>{for(t.delete(e),t.set(e,s);t.size>i;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},Ac=1e3,Nc=2e3,Hc=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}},Lc="6aa7e85aead059c4d286b3b943bfaf6a4b128ecf5e0a3be2860b34e0069d829a";class Oc{constructor(t){this.host=t,this._junctionBaselineCache=new WeakMap,this._resizePreviewNodes=null,this._resizeBaselineLimits=[],this._resizeBaseFrameStable=!0,this._supportPreviewGeneration=0,this._decorAssetGuardReplace=null,this._undoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();const t=this.host._geometryHistory.undo();t&&(this._applyGeometryState(t.before,!0)?this.host._showToast(this.host._t("history.undone",{name:t.name})):this.host._geometryHistory.clear())},this._redoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();if(this.host._activeWallChainId&&this.host._wallChainRedo.length){const t=this.host._activeWallChainId,e=this.host._path.map(t=>[...t]),s=[...this.host._activeWallChainPartitionIds],i=[...this.host._wallChainSegmentCms],o=[...this.host._wallChainRedo],a=o[o.length-1],n=this.host._geometryHistory.redo();if(!n)return;return this._applyGeometryState(n.after,!0)?(this.host._activeWallChainId=t,this.host._path=[...e,[...a.point]],this.host._activeWallChainPartitionIds=[...s,a.id],this.host._wallChainSegmentCms=[...i,a.cm],this.host._wallChainRedo=o.slice(0,-1),this._clearPlanSnapHover(),void this.host._showToast(this.host._t("history.redone",{name:n.name}))):void this.host._geometryHistory.clear()}const t=this.host._geometryHistory.redo();t&&(this._applyGeometryState(t.after,!0)?this.host._showToast(this.host._t("history.redone",{name:t.name})):this.host._geometryHistory.clear())},this._savePhysicalDialog=()=>{const t=this.host._physicalDialog,e=this.host._curSpaceCfg,s=this.host._spaceModel();if(!t||!e||!s)return;const i=lo(t.cm);if(null==i)return void this._showPhysicalRange("column"===t.kind?Yt:100,"column"===t.kind?1:0);const o=this.host._imperial?2.54*i:i,a="column"===t.kind?Yt:100,n="column"===t.kind?1:0;if(!Number.isFinite(o)||oa)return void this._showPhysicalRange(a,n);if("column"===t.kind){const e=s.wall_columns.find(e=>e.id===t.id);if(!e)return;const i=lo(t.angle||"0");if("circle"!==t.shape&&(null==i||i<0||i>=90))return void this.host._showToast(this.host._t("toast.physical_angle"));const a="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:o}:{id:t.id,shape:"square",center:e.center,cm:o,angle:i};if(s.wall_columns.some(e=>e.id!==t.id&&Xt(e,a,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"))}const r=this._geometrySnapshot();if("partition"===t.kind){const s=(e.partitions||[]).find(e=>e.id===t.id);if(s&&0===o&&Zt(e.openings,{kind:"partition",id:t.id}))return void this.host._showToast(this.host._t("toast.zero_wall_opening_conflict"));s&&(s.cm=o)}else if("column"===t.kind){const s=(e.wall_columns||[]).find(e=>e.id===t.id);s&&(s.cm=Qt(o),s.shape="circle"===t.shape?"circle":"square","square"===s.shape?s.angle=lo(t.angle||"0"):delete s.angle)}const l=this._commitPhysicalGeometry(this.host._t("history.physical_edit"),r);this.host._physicalDialog=null,l||this.host.requestUpdate()},this._deletePhysicalSelection=async()=>{const t=this.host._physicalSel,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();if("partition"===t.kind){const s=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(s.length)return void(this.host._partitionDeleteDialog={id:t.id,openings:s.map(t=>JSON.parse(JSON.stringify(t)))})}const i="partition"===t.kind?"partitions":"wall_columns";e[i]=(e[i]||[]).filter(e=>e.id!==t.id),e[i].length||delete e[i],this.host._activeWallChainPartitionIds.includes(t.id)&&this._cancelPath(),this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._confirmPartitionDelete=()=>{const t=this.host._partitionDeleteDialog,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this.host._partitionDeleteDialog=null,this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._furnShiftListener=t=>{if("Shift"!==t.key)return;const e=this.host._furnPreviewInput;if(!e)return;const s="keydown"===t.type;e.free!==s&&(this.host._furnPreviewInput={...e,free:s},this.host.requestUpdate())},this._furnShiftAttached=!1,this._confirmRoomDelete=t=>{const e=this.host._roomDeleteDialog,s=this.host._curSpaceCfg,i=this.host._spaceModel();if(!e||!s||!i)return;const o=i.rooms.find(t=>t.id===e.roomId);if(!o)return void(this.host._roomDeleteDialog=null);const a=this.host._openCuts(),n=Lh(ct(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac).filter(t=>t.roomId===o.id),i.partitions,this.host._openingsR.map(t=>({...t,x:t.rx,y:t.ry})),.02*this.host._gridPitch),r=new Set(n.materialize.filter(t=>!t.reusePartitionId).map(t=>t.interval.key)).size;if(t&&(s.partitions||[]).length+r>Nc)return void this.host._showToast(this.host._t("toast.physical_limit"));const l=this._geometrySnapshot(),h=Pc(this.host._serverCfg?.markers||[],{kind:"delete",roomId:e.roomId});l&&h.changed&&(l.roomReferences=h.before);const c=te(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac);if(t){s.partitions||=[];const t=new Map,e=new Map,i=t=>{const e=(s.wall_segments||[]).find(e=>{const s=[Number(e.a?.[0])*Ac,Number(e.a?.[1])*Ac],i=[Number(e.b?.[0])*Ac,Number(e.b?.[1])*Ac];return this._samePt(t.a,s)&&this._samePt(t.b,i)||this._samePt(t.a,i)&&this._samePt(t.b,s)});return"string"==typeof e?.id&&e.id?e.id:null},o=Date.now().toString(36);for(const a of n.materialize){let n=a.reusePartitionId?s.partitions.find(t=>t.id===a.reusePartitionId):e.get(a.interval.key);n||(n={id:i(a.interval)||`partition-room-${o}-${e.size}`,a:[a.interval.a[0]/Ac,a.interval.a[1]/Ac],b:[a.interval.b[0]/Ac,a.interval.b[1]/Ac],cm:a.interval.cm},s.partitions.push(n),e.set(a.interval.key,n)),t.set(a.interval.key,n)}for(const e of s.openings||[]){const s=n.openingIntervals.get(e.id),i=s?t.get(s):null,o=this.host._openingsR.find(t=>t.id===e.id);if(!i||!o)continue;const a={a:[i.a[0]*Ac,i.a[1]*Ac],b:[i.b[0]*Ac,i.b[1]*Ac]};e.host={kind:"partition",id:i.id,t:Oh([o.rx,o.ry],a)}}}else if(n.removeOpeningIds.length){const t=new Set(n.removeOpeningIds);s.openings=(s.openings||[]).filter(e=>!t.has(e.id)),s.openings.length||delete s.openings}s.rooms=s.rooms.filter(t=>t.id!==o.id),h.changed&&this.host._serverCfg&&(this.host._serverCfg.markers=h.markers),this.host._cfgEpoch++;const d=this.host._normalizeWalls(c,this.host._openCuts());d.length?s.walls=d:delete s.walls,this.host._roomDeleteDialog=null,this._commitPhysicalGeometry(this.host._t(t?"history.delete_room_keep_walls":"history.delete_room_with_walls"),l),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host.requestUpdate()},this._rebindPartitionOpening=()=>{const t=this.host._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this.host._tool&&(this.host._openingRebindId=e,this.host._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this.host._openingPresetRevision},this.host._openingDialog=null,this.host._openingHoverCandidate=null)},this._deviceInboxTabKey=t=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;const e=this.host._deviceInbox;if(!e)return;const s=["on_plan","available","hidden","readd"],i="ArrowRight"===t.key?1:-1,o=(s.indexOf(e.tab)+i+s.length)%s.length;this.host._deviceInbox={...e,tab:s[o],limit:100,onlyNew:!1},t.preventDefault()},this._keepClosedAsPartitions=()=>{this.host._wallFaceBatch?this._decideWallFace(!1):this.host._contourClosed&&!this.host._pendingSplit&&this.host._curSpaceCfg&&this._finalizeWallChainPartitions(this.host._activeWallChainPartitionIds)&&(this.host._roomDialog=!1,this.host._path=[],this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this.host.requestUpdate())},this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}},this._openSettingsDialog=()=>{if(!this.host._norm)return;const t=this.host._glowRadiusCm,e=this.host._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this.host._settingsDialog={colors:JSON.parse(JSON.stringify(this.host._fillColors)),glowRadius:e,bgColor:ne(this.host._settings,{bgColor:null})||null,northDeg:ae(this.host._settings,{}),bgMode:oe(this.host._settings,{}),sunRays:ie(this.host._settings,{}),showRoomTooltip:se(this.host._settings),zigbeeTopology:ee(this.host._settings),busy:!1}},this._openSupportDialog=()=>{this.host._norm&&this.host._canEdit&&(clearTimeout(this._supportExpiryTimer),this._supportExpiryTimer=void 0,this._supportPreviewGeneration+=1,this.host._supportDialog={draftId:tc("draft"),idempotencyKey:tc("report"),submissionFingerprint:"",contact:"",message:"",attach:!1,status:"idle",preview:null,rawOpen:!1,errorCode:"",reportId:""})},this._openAlignDialog=()=>this._previewAlignDialog(!1),this._toggleOptimizeLivePositions=()=>{const t=this.host._alignDialog;t&&!t.busy&&t.report.liveMissingPositions.length&&this._previewAlignDialog(!t.removeLiveMissingPositions)},this._openBackupExport=()=>{this.host._settingsDialog=null,this.host._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._decorStylePersistTimer=null,this._openRulesDialog=()=>{if(!this.host._norm)return;const t=this.host._settings.icon_rules,e=(t&&t.length?t:re).map(t=>({...t}));this.host._rulesDialog={rules:e,test:"",busy:!1}},this._discoveryPreviewMemo=null,this._decorImages=new lc(t,{decorSnap:(t,e)=>this._decorSnap(t,e),geometrySnapshot:()=>this._geometrySnapshot(),clearFurniturePreview:()=>this._clearFurniturePreview(),recordGeometry:(t,e)=>this._recordGeometry(t,e),saveConfig:()=>this._saveConfig(),saveShape:()=>this._decorSaveShape(),setGuardReplace:t=>{this._decorAssetGuardReplace=t},furnShiftDetach:()=>this._furnShiftDetach(),furnPick:t=>this._furnPick(t),furnFieldValue:t=>this._furnFieldValue(t),furnFieldToCm:t=>this._furnFieldToCm(t)}),t._editorSecondary=new Vh({root:()=>t.renderRoot,requestUpdate:()=>t.requestUpdate(),updateComplete:()=>t.updateComplete,clearTip:()=>{t._tip=null}}),t._resize=new en}_routeLiveEditorUpdate(t,e){const s=qo(this.host,t,e);return!s&&this.host._resize.preview&&(this._resizeBaseFrameStable=!1),s}_commitLiveEditor(){!function(t){const e=t,s=Wo(t);s.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(s.raf),s.raf=0,Vo(s);const i=e.renderRoot?.querySelector("[data-hp-live-editor]");i&&u(l,i);const o=e.renderRoot?.querySelector("[data-hp-live-editor-html]");if(o){const t=e._viewOr(e._baseVb());u(e._renderLiveEditorMeasurements(t),o)}Go(s,s.requestedRevision)}(this.host)}_disposeLiveEditor(){!function(t){Ho(t);const e=Lo.get(t);e&&(e.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(e.raf),Vo(e),Go(e,e.requestedRevision),Lo.delete(t))}(this.host)}async _whenLiveEditorSettled(){await this.host.updateComplete,await function(t){const e=Lo.get(t);if(!e||!e.raf||e.paintedRevision>=e.requestedRevision)return Promise.resolve();const s=e.requestedRevision;return new Promise(t=>e.waiters.push({revision:s,resolve:t}))}(this.host)}_queuePointerMove(t,e){Ao(this.host,t,e)}_flushPointerMove(t){No(this.host,t)}_cancelPointerMove(t){Ho(this.host,t)}_help(t){const e=`${t}.aria`,s=a(this.host.hass,this.host._config?.language);return le(s,t)&&le(s,e)?h``}}const hc=(t,e)=>t[0]*e[1]-t[1]*e[0],cc=(t,e)=>t[0]*e[0]+t[1]*e[1],dc=(t,e)=>[t[0]-e[0],t[1]-e[1]],pc=(t,e,s)=>[t[0]+e[0]*s,t[1]+e[1]*s];function uc(t,e,s){return Math.abs(hc(t,e))<=s}function _c(t,e,s){return Math.abs(hc(dc(t,e),s))}function mc(t,e,s,i,o){const a=e[0]-t[0],n=e[1]-t[1],r=Math.hypot(a,n);if(!(r>o&&s>0))return[];const l=[a/r,n/r];return function(t,e,s){const i=e.map(([e,s])=>[Math.max(0,Math.min(e,s)),Math.min(t,Math.max(e,s))]).filter(([t,e])=>e>t+s).sort((t,e)=>t[0]-e[0]||t[1]-e[1]),o=[];for(const t of i){const e=o[o.length-1];!e||t[0]>e[1]+s?o.push([...t]):e[1]=Math.max(e[1],t[1])}const a=[];let n=0;for(const[t,e]of o)t>n+s&&a.push([n,t]),n=Math.max(n,e);return t>n+s&&a.push([n,t]),a}(r,i.flatMap(e=>{const i=e.b[0]-e.a[0],a=e.b[1]-e.a[1],n=Math.hypot(i,a);if(!(n>o&&uc(l,[i/n,a/n],1e-6)))return[];if(_c(e.a,t,l)>1.1*Math.max(s,o)||_c(e.b,t,l)>1.1*Math.max(s,o))return[];return[[cc(dc(e.a,t),l),cc(dc(e.b,t),l)]]}),o).flatMap(([e,i])=>{const o=Jt({a:pc(t,l,e),b:pc(t,l,i),halfDepth:s});return o?[o]:[]})}function gc(t){const e=t.coordScale??1,s=Math.max(t.epsilon??2e-4*t.gridPitch,1e-9),i=[];for(const s of t.rooms||[]){if(!s?.id)continue;const o=et(t.rooms,s.id,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e);if(!o||o.poly.length<3)continue;const a=Kt(o.poly,o.offsets);!a||a.length<3||i.push({roomId:s.id,profile:o,inner:a})}i.sort((t,e)=>t.roomId.localeCompare(e.roomId));const o=(t.roomOpenings||[]).map(t=>{const e=t.angle*Math.PI/180,s=[Math.cos(e),Math.sin(e)],i=Math.max(0,t.length)/2;return{a:pc([t.x,t.y],s,-i),b:pc([t.x,t.y],s,i)}}),a=[];for(const i of Vt(t.rooms,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e))for(const t of mc(i.a,i.b,i.depthUnits/2,o,s))a.push({body:t});const n=new Map;for(const e of t.partitionCuts||[]){const t=n.get(e.hostId)||[];t.push(e),n.set(e.hostId,t)}for(const e of t.partitions||[]){const i=w(e.cm,t.cellCm,t.gridPitch)/2;for(const t of mc(e.a,e.b,i,n.get(e.id)||[],s))a.push({body:t,partitionId:e.id})}return{rooms:i,boundaries:a,epsilon:s}}function fc(t,e,s,i){const o=t.profile.offsets[e];if(!(o>0))return null;const a=function(t,e){const s=t[e],i=t[(e+1)%t.length],o=i[0]-s[0],a=i[1]-s[1],n=Math.hypot(o,a)||1;return function(t){let e=0;for(let s=0;s=0?[-a/n,o/n]:[a/n,-o/n]}(t.profile.poly,e),n=pc(s.center,a,o),r=[];for(let e=0;ei&&uc(s.axis,[l[0]/h,l[1]/h],1e-6)))continue;if(_c(o,n,s.axis)>i||_c(a,n,s.axis)>i)continue;const c=cc(dc(o,n),s.axis),d=cc(dc(a,n),s.axis);r.push([Math.min(c,d),Math.max(c,d)])}const l=function(t,e){t.sort((t,e)=>t[0]-e[0]||t[1]-e[1]);const s=[];for(const i of t){const t=s[s.length-1];!t||i[0]>t[1]+e?s.push([...i]):t[1]=Math.max(t[1],i[1])}return s}(r,i).find(([t,e])=>t<=i&&e>=-i);if(!l)return null;const[h,c]=l,d=pc(n,s.axis,-s.half),p=pc(n,s.axis,s.half),u=Math.max(0,-s.half-h),_=Math.max(0,c-s.half),m=u>0?pc(n,s.axis,h):d,g=_>0?pc(n,s.axis,c):p,f=cc(a,s.normal)>=0?1:-1,b=(e,i,o)=>({from:e,to:i,label:[(e[0]+i[0])/2,(e[1]+i[1])/2],axis:s.axis,labelNormal:a,distance:o,roomId:t.roomId,roomSide:f,source:"room-face"});return{left:b(d,m,u),right:b(p,g,_)}}function bc(t){const e=pc(t.center,t.axis,-t.half),s=pc(t.center,t.axis,t.half),i=pc(t.center,t.axis,Math.min(-t.half,t.targetLo)),o=pc(t.center,t.axis,Math.max(t.half,t.targetHi)),a=(e,s)=>({from:e,to:s,label:[(e[0]+s[0])/2,(e[1]+s[1])/2],axis:t.axis,labelNormal:t.normal,distance:Math.hypot(s[0]-e[0],s[1]-e[1]),source:"host-end"});return[a(e,i),a(s,o)]}function vc(t,e,s,i){const o=dc(s,e),a=cc(o,o);if(!(a>i*i))return Math.hypot(...dc(t,e))<=i;const n=cc(dc(t,e),o)/a;if(n<-i||n>1+i)return!1;const r=pc(e,o,Math.max(0,Math.min(1,n)));return Math.hypot(...dc(t,r))<=i}function yc(t,e,s){let i=!1;for(let o=0,a=e.length-1;ot[1]!=h>t[1]&&t[0]<(l-n)*(t[1]-r)/(h-r)+n&&(i=!i)}return i}function wc(t,e,s,i,o,a){const n=dc(i,s),r=hc(e,n);if(Math.abs(r)<=a)return null;const l=dc(s,t),h=hc(l,n)/r,c=hc(l,e)/r;return h<-a||h>o+a||c<-a||c>1+a?null:Math.max(0,Math.min(o,h))}function $c(t,e,s){const i=bc(s),o="partition"===t.host?.kind?t.host.id:void 0;return[{base:i[0],direction:[-s.axis[0],-s.axis[1]]},{base:i[1],direction:s.axis}].map(({base:t,direction:s})=>{const i=t.distance,a=function(t,e,s,i,o,a){let n=null;for(const r of i)if(!o||r.partitionId!==o){if(yc(t,r.body,a))return 0;for(let i=0;icc(dc(t,o),s));return{center:o,axis:s,normal:i,half:Math.max(0,t.renderedLength)/2,targetLo:Math.min(...a),targetHi:Math.max(...a)}}(t),i=e.rooms.flatMap(t=>{const i=function(t,e,s){const{profile:i}=t;let o=null;for(let t=0;t0))continue;const a=i.poly[t],n=i.poly[(t+1)%i.poly.length],r=dc(n,a),l=Math.hypot(r[0],r[1]);if(!(l>s&&uc(e.axis,[r[0]/l,r[1]/l],1e-6)))continue;if(_c(a,e.center,e.axis)>s||_c(n,e.center,e.axis)>s)continue;const h=cc(dc(a,e.center),e.axis),c=cc(dc(n,e.center),e.axis),d=Math.min(h,c),p=Math.max(h,c);if(d>-e.half+s||p0?d:p<0?-p:0);(!o||u2)return bc(s);if(i.length){const t=i.map(({room:t,edge:i})=>fc(t,i,s,e.epsilon));if(t.some(t=>!t))return bc(s);const o=t;return[...o.map(t=>t.left),...o.map(t=>t.right)]}return $c(t,e,s)}function xc(t,e,s,i,o){const a=(n=t,JSON.parse(JSON.stringify(n)));var n;const r=[...new Set(i.filter(t=>"string"==typeof t&&t))],l={partitionsMerged:0,partitionsReconciled:0,openingsRehosted:0,changed:!1};if(!r.length||!Array.isArray(a?.partitions))return{space:a,report:l};const h=JSON.stringify(a),c=tl(a.partitions,{pitch:o.pitch,seedIds:r,geometry:sl(a)});c.merged&&(a.partitions=c.partitions);const d=Array.isArray(a.openings)?a.openings:[];c.merged&&el(d,c.partitions,c.openingMoves,{coordScale:o.coordScale,cellCm:o.cellCm,gridPitch:o.gridPitch});const p=function(t,e,s){const i=new Set(t.map(t=>t.id)),o=new Map(s.map(t=>[t.fromId,t.toId]));return[...new Set(e.map(t=>o.get(t)||t).filter(t=>i.has(t)))].sort((t,e)=>t.localeCompare(e))}(c.partitions,r,c.openingMoves),u=gl(a,{rooms:e.rooms,wall_columns:e.wall_columns,partitions:c.partitions.map(t=>({...t,a:[t.a[0]*o.coordScale,t.a[1]*o.coordScale],b:[t.b[0]*o.coordScale,t.b[1]*o.coordScale]}))},a.walls,s,{...o,partitionIds:p});return u.partitionsReconciled&&(u.walls.length?a.walls=u.walls:delete a.walls,u.partitions.length?a.partitions=u.partitions:delete a.partitions,u.openings.length?a.openings=u.openings:delete a.openings),{space:a,report:{partitionsMerged:c.merged,partitionsReconciled:u.partitionsReconciled,openingsRehosted:u.openingsRehosted,changed:JSON.stringify(a)!==h}}}const Sc=t=>void 0===t?t:JSON.parse(JSON.stringify(t)),Mc=(t,e)=>!!t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,e);function Cc(t,e){const s=e?new Set(e):null;return(t||[]).filter(t=>"string"==typeof t?.id&&(!s||s.has(t.id))).map(t=>{const e=t.vacuum;return{markerId:t.id,roomIdPresent:Mc(t,"room_id"),...Mc(t,"room_id")?{roomId:Sc(t.room_id)}:{},vacuumPresent:Mc(t,"vacuum"),segmentMapPresent:Mc(e,"segment_map"),...Mc(e,"segment_map")?{segmentMap:Sc(e?.segment_map)}:{}}}).sort((t,e)=>t.markerId.localeCompare(e.markerId))}function Pc(t,e){const s=Sc([...t||[]]),i=new Set;for(const t of s){if("string"!=typeof t?.id)continue;let s=!1;"delete"===e.kind?t.room_id===e.roomId&&(delete t.room_id,s=!0):t.room_id===e.dropId&&(t.room_id=e.keepId,s=!0);const o=t.vacuum?.segment_map;if(o&&"object"==typeof o&&!Array.isArray(o)){for(const t of Object.keys(o))"delete"===e.kind&&o[t]===e.roomId?(delete o[t],s=!0):"merge"===e.kind&&o[t]===e.dropId&&(o[t]=e.keepId,s=!0);"delete"===e.kind&&0===Object.keys(o).length&&(t.vacuum&&delete t.vacuum.segment_map,t.vacuum&&0===Object.keys(t.vacuum).length&&delete t.vacuum)}s&&i.add(t.id)}const o=[...i].sort((t,e)=>t.localeCompare(e));return{markers:s,before:Cc(t,o),after:Cc(s,o),changed:o.length}}const Dc="1.73.0-beta.2";so.adopt($o,ko);const Ic={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},Tc={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},Rc=2e3,zc=1e3,Fc=(t,e,s,i)=>{for(t.delete(e),t.set(e,s);t.size>i;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},Ac=1e3,Nc=2e3,Hc=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}},Lc="6412fad64699400d6b77fdda3cf1ecebe27c1dc2134d0e63e34fc7ef196a99a0";class Oc{constructor(t){this.host=t,this._junctionBaselineCache=new WeakMap,this._resizePreviewNodes=null,this._resizeBaselineLimits=[],this._resizeBaseFrameStable=!0,this._supportPreviewGeneration=0,this._decorAssetGuardReplace=null,this._undoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();const t=this.host._geometryHistory.undo();t&&(this._applyGeometryState(t.before,!0)?this.host._showToast(this.host._t("history.undone",{name:t.name})):this.host._geometryHistory.clear())},this._redoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();if(this.host._activeWallChainId&&this.host._wallChainRedo.length){const t=this.host._activeWallChainId,e=this.host._path.map(t=>[...t]),s=[...this.host._activeWallChainPartitionIds],i=[...this.host._wallChainSegmentCms],o=[...this.host._wallChainRedo],a=o[o.length-1],n=this.host._geometryHistory.redo();if(!n)return;return this._applyGeometryState(n.after,!0)?(this.host._activeWallChainId=t,this.host._path=[...e,[...a.point]],this.host._activeWallChainPartitionIds=[...s,a.id],this.host._wallChainSegmentCms=[...i,a.cm],this.host._wallChainRedo=o.slice(0,-1),this._clearPlanSnapHover(),void this.host._showToast(this.host._t("history.redone",{name:n.name}))):void this.host._geometryHistory.clear()}const t=this.host._geometryHistory.redo();t&&(this._applyGeometryState(t.after,!0)?this.host._showToast(this.host._t("history.redone",{name:t.name})):this.host._geometryHistory.clear())},this._savePhysicalDialog=()=>{const t=this.host._physicalDialog,e=this.host._curSpaceCfg,s=this.host._spaceModel();if(!t||!e||!s)return;const i=lo(t.cm);if(null==i)return void this._showPhysicalRange("column"===t.kind?Yt:100,"column"===t.kind?1:0);const o=this.host._imperial?2.54*i:i,a="column"===t.kind?Yt:100,n="column"===t.kind?1:0;if(!Number.isFinite(o)||oa)return void this._showPhysicalRange(a,n);if("column"===t.kind){const e=s.wall_columns.find(e=>e.id===t.id);if(!e)return;const i=lo(t.angle||"0");if("circle"!==t.shape&&(null==i||i<0||i>=90))return void this.host._showToast(this.host._t("toast.physical_angle"));const a="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:o}:{id:t.id,shape:"square",center:e.center,cm:o,angle:i};if(s.wall_columns.some(e=>e.id!==t.id&&Xt(e,a,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"))}const r=this._geometrySnapshot();if("partition"===t.kind){const s=(e.partitions||[]).find(e=>e.id===t.id);if(s&&0===o&&Zt(e.openings,{kind:"partition",id:t.id}))return void this.host._showToast(this.host._t("toast.zero_wall_opening_conflict"));s&&(s.cm=o)}else if("column"===t.kind){const s=(e.wall_columns||[]).find(e=>e.id===t.id);s&&(s.cm=Qt(o),s.shape="circle"===t.shape?"circle":"square","square"===s.shape?s.angle=lo(t.angle||"0"):delete s.angle)}const l=this._commitPhysicalGeometry(this.host._t("history.physical_edit"),r);this.host._physicalDialog=null,l||this.host.requestUpdate()},this._deletePhysicalSelection=async()=>{const t=this.host._physicalSel,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();if("partition"===t.kind){const s=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(s.length)return void(this.host._partitionDeleteDialog={id:t.id,openings:s.map(t=>JSON.parse(JSON.stringify(t)))})}const i="partition"===t.kind?"partitions":"wall_columns";e[i]=(e[i]||[]).filter(e=>e.id!==t.id),e[i].length||delete e[i],this.host._activeWallChainPartitionIds.includes(t.id)&&this._cancelPath(),this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._confirmPartitionDelete=()=>{const t=this.host._partitionDeleteDialog,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this.host._partitionDeleteDialog=null,this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._furnShiftListener=t=>{if("Shift"!==t.key)return;const e=this.host._furnPreviewInput;if(!e)return;const s="keydown"===t.type;e.free!==s&&(this.host._furnPreviewInput={...e,free:s},this.host.requestUpdate())},this._furnShiftAttached=!1,this._confirmRoomDelete=t=>{const e=this.host._roomDeleteDialog,s=this.host._curSpaceCfg,i=this.host._spaceModel();if(!e||!s||!i)return;const o=i.rooms.find(t=>t.id===e.roomId);if(!o)return void(this.host._roomDeleteDialog=null);const a=this.host._openCuts(),n=Lh(ct(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac).filter(t=>t.roomId===o.id),i.partitions,this.host._openingsR.map(t=>({...t,x:t.rx,y:t.ry})),.02*this.host._gridPitch),r=new Set(n.materialize.filter(t=>!t.reusePartitionId).map(t=>t.interval.key)).size;if(t&&(s.partitions||[]).length+r>Nc)return void this.host._showToast(this.host._t("toast.physical_limit"));const l=this._geometrySnapshot(),h=Pc(this.host._serverCfg?.markers||[],{kind:"delete",roomId:e.roomId});l&&h.changed&&(l.roomReferences=h.before);const c=te(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac);if(t){s.partitions||=[];const t=new Map,e=new Map,i=t=>{const e=(s.wall_segments||[]).find(e=>{const s=[Number(e.a?.[0])*Ac,Number(e.a?.[1])*Ac],i=[Number(e.b?.[0])*Ac,Number(e.b?.[1])*Ac];return this._samePt(t.a,s)&&this._samePt(t.b,i)||this._samePt(t.a,i)&&this._samePt(t.b,s)});return"string"==typeof e?.id&&e.id?e.id:null},o=Date.now().toString(36);for(const a of n.materialize){let n=a.reusePartitionId?s.partitions.find(t=>t.id===a.reusePartitionId):e.get(a.interval.key);n||(n={id:i(a.interval)||`partition-room-${o}-${e.size}`,a:[a.interval.a[0]/Ac,a.interval.a[1]/Ac],b:[a.interval.b[0]/Ac,a.interval.b[1]/Ac],cm:a.interval.cm},s.partitions.push(n),e.set(a.interval.key,n)),t.set(a.interval.key,n)}for(const e of s.openings||[]){const s=n.openingIntervals.get(e.id),i=s?t.get(s):null,o=this.host._openingsR.find(t=>t.id===e.id);if(!i||!o)continue;const a={a:[i.a[0]*Ac,i.a[1]*Ac],b:[i.b[0]*Ac,i.b[1]*Ac]};e.host={kind:"partition",id:i.id,t:Oh([o.rx,o.ry],a)}}}else if(n.removeOpeningIds.length){const t=new Set(n.removeOpeningIds);s.openings=(s.openings||[]).filter(e=>!t.has(e.id)),s.openings.length||delete s.openings}s.rooms=s.rooms.filter(t=>t.id!==o.id),h.changed&&this.host._serverCfg&&(this.host._serverCfg.markers=h.markers),this.host._cfgEpoch++;const d=this.host._normalizeWalls(c,this.host._openCuts());d.length?s.walls=d:delete s.walls,this.host._roomDeleteDialog=null,this._commitPhysicalGeometry(this.host._t(t?"history.delete_room_keep_walls":"history.delete_room_with_walls"),l),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host.requestUpdate()},this._rebindPartitionOpening=()=>{const t=this.host._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this.host._tool&&(this.host._openingRebindId=e,this.host._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this.host._openingPresetRevision},this.host._openingDialog=null,this.host._openingHoverCandidate=null)},this._deviceInboxTabKey=t=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;const e=this.host._deviceInbox;if(!e)return;const s=["on_plan","available","hidden","readd"],i="ArrowRight"===t.key?1:-1,o=(s.indexOf(e.tab)+i+s.length)%s.length;this.host._deviceInbox={...e,tab:s[o],limit:100,onlyNew:!1},t.preventDefault()},this._keepClosedAsPartitions=()=>{this.host._wallFaceBatch?this._decideWallFace(!1):this.host._contourClosed&&!this.host._pendingSplit&&this.host._curSpaceCfg&&this._finalizeWallChainPartitions(this.host._activeWallChainPartitionIds)&&(this.host._roomDialog=!1,this.host._path=[],this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this.host.requestUpdate())},this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}},this._openSettingsDialog=()=>{if(!this.host._norm)return;const t=this.host._glowRadiusCm,e=this.host._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this.host._settingsDialog={colors:JSON.parse(JSON.stringify(this.host._fillColors)),glowRadius:e,bgColor:ne(this.host._settings,{bgColor:null})||null,northDeg:ae(this.host._settings,{}),bgMode:oe(this.host._settings,{}),sunRays:ie(this.host._settings,{}),showRoomTooltip:se(this.host._settings),zigbeeTopology:ee(this.host._settings),busy:!1}},this._openSupportDialog=()=>{this.host._norm&&this.host._canEdit&&(clearTimeout(this._supportExpiryTimer),this._supportExpiryTimer=void 0,this._supportPreviewGeneration+=1,this.host._supportDialog={draftId:tc("draft"),idempotencyKey:tc("report"),submissionFingerprint:"",contact:"",message:"",attach:!1,status:"idle",preview:null,rawOpen:!1,errorCode:"",reportId:""})},this._openAlignDialog=()=>this._previewAlignDialog(!1),this._toggleOptimizeLivePositions=()=>{const t=this.host._alignDialog;t&&!t.busy&&t.report.liveMissingPositions.length&&this._previewAlignDialog(!t.removeLiveMissingPositions)},this._openBackupExport=()=>{this.host._settingsDialog=null,this.host._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._decorStylePersistTimer=null,this._openRulesDialog=()=>{if(!this.host._norm)return;const t=this.host._settings.icon_rules,e=(t&&t.length?t:re).map(t=>({...t}));this.host._rulesDialog={rules:e,test:"",busy:!1}},this._discoveryPreviewMemo=null,this._decorImages=new lc(t,{decorSnap:(t,e)=>this._decorSnap(t,e),geometrySnapshot:()=>this._geometrySnapshot(),clearFurniturePreview:()=>this._clearFurniturePreview(),recordGeometry:(t,e)=>this._recordGeometry(t,e),saveConfig:()=>this._saveConfig(),saveShape:()=>this._decorSaveShape(),setGuardReplace:t=>{this._decorAssetGuardReplace=t},furnShiftDetach:()=>this._furnShiftDetach(),furnPick:t=>this._furnPick(t),furnFieldValue:t=>this._furnFieldValue(t),furnFieldToCm:t=>this._furnFieldToCm(t)}),t._editorSecondary=new Vh({root:()=>t.renderRoot,requestUpdate:()=>t.requestUpdate(),updateComplete:()=>t.updateComplete,clearTip:()=>{t._tip=null}}),t._resize=new en}_routeLiveEditorUpdate(t,e){const s=qo(this.host,t,e);return!s&&this.host._resize.preview&&(this._resizeBaseFrameStable=!1),s}_commitLiveEditor(){!function(t){const e=t,s=Wo(t);s.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(s.raf),s.raf=0,Vo(s);const i=e.renderRoot?.querySelector("[data-hp-live-editor]");i&&u(l,i);const o=e.renderRoot?.querySelector("[data-hp-live-editor-html]");if(o){const t=e._viewOr(e._baseVb());u(e._renderLiveEditorMeasurements(t),o)}Go(s,s.requestedRevision)}(this.host)}_disposeLiveEditor(){!function(t){Ho(t);const e=Lo.get(t);e&&(e.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(e.raf),Vo(e),Go(e,e.requestedRevision),Lo.delete(t))}(this.host)}async _whenLiveEditorSettled(){await this.host.updateComplete,await function(t){const e=Lo.get(t);if(!e||!e.raf||e.paintedRevision>=e.requestedRevision)return Promise.resolve();const s=e.requestedRevision;return new Promise(t=>e.waiters.push({revision:s,resolve:t}))}(this.host)}_queuePointerMove(t,e){Ao(this.host,t,e)}_flushPointerMove(t){No(this.host,t)}_cancelPointerMove(t){Ho(this.host,t)}_help(t){const e=`${t}.aria`,s=a(this.host.hass,this.host._config?.language);return le(s,t)&&le(s,e)?h``:l}_setMode(t,e=!0){t!==this.host._mode&&this.host._cancelDangerConfirm(),this.host._endTabDrag(),this._clearFurniturePreview(),this.host._pendingNavMode=null;const s=this.host._spaceModel();if(!s)return this.host._cancelModeTransition(!1),void(this.host._mode="view");if(this.host._kiosk&&"view"!==t)return;if(this.host._mode===t){if(!e&&"view"===t&&this.host._modeTransitionBusy){const e=this.host._currentModeVisual(t),s=this.host._modeTransitionTargetZoom,i=this.host._modeTransitionTargetCenterX,o=this.host._modeTransitionTargetCenterY;this.host._cancelModeTransition(!1),this.host._commitViewModeAtomic(e,s,i,o)}return}if("devices"===this.host._mode&&this.host._cancelDeviceDrag(),this.host._bootSoftCancel(),("plan"===t||"decor"===t)&&!this.host._norm)return void this.host._showToast(this.host._t("toast.markup_needs_server"));if(this.host._wallFaceBatch&&this._roomDialogCancel(),"plan"===this.host._mode&&"draw"===this.host._tool&&!this._finishWallChain())return;this.host._clearTransientHover(!0),this.host._cancelDevicePressFeedback();const i=this.host._mode,o=this.host._effectiveProjection(),a=this.host._currentModeVisual(i),n=this.host._modeTransitionBusy,r=a&&"view"!==i&&"view"!==t?{...a,toolbarContentOpacity:this.host._reducedMotion?1:.35}:a;this.host._cancelModeTransition(!1),this.host._editorSecondary.closeForNavigation(),(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)&&this._cancelDecorGesture();const l=!s.bg&&"view"===t!=("view"===i),h=n&&"view"===i&&"view"!==t?this.host._modeTransitionEditorCamera:null;let c=h?.zoom??(n?this.host._modeTransitionTargetZoom:this.host._zoom),d=h?h.centerX:n?this.host._modeTransitionTargetCenterX:r?.viewport.centerX,p=h?h.centerY:n?this.host._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===i&&"view"!==t&&!n){const e=this.host._view;if(this.host._viewModeSnap={space:this.host._space,zoom:this.host._zoom,cx:e?this.host._logicalViewCenter(o)?.x:void 0,cy:e?this.host._logicalViewCenter(o)?.y:void 0},"iso"===o){const e=this.host._logicalViewCenter("iso");d=e?.x,p=e?.y,this.host._view=null,this.host._mode=t,this.host._applyView(this.host._zoom,e?.x,e?.y)}l&&(c=1,d=void 0,p=void 0)}if(this.host._mode=t,"devices"===i&&"devices"!==t&&(this.host._showHidden=!1,this.host._deviceInbox=null,this.host._deviceInboxReturn=null,this.host._deviceInboxMemo=null),this.host._editorChromeMode="view"===t?i:t,"view"===t){"view"===i||n||(this.host._modeTransitionEditorCamera={zoom:this.host._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this.host._viewModeSnap;if(t&&t.space===this.host._space){c=t.zoom;const e=this.host._labsIso&&"iso"===this.host._viewPreference[this.host._space]?"iso":"flat",s=null!=t.cx&&null!=t.cy&&"iso"===e?he([t.cx,t.cy],0):null;d=s?.[0]??t.cx,p=s?.[1]??t.cy}else t&&(c=this.host._zoomBySpace[this.host._space]||1,d=void 0,p=void 0)}else this.host._modeTransitionEditorCamera={zoom:c,centerX:d,centerY:p};this.host._modeTransitionTargetZoom=c,this.host._modeTransitionTargetCenterX=d,this.host._modeTransitionTargetCenterY=p,("iso"===o||"view"===t&&this.host._labsIso&&"iso"===this.host._viewPreference[this.host._space])&&(this.host._modeTransitionForceAtomic=!0);const u=++this.host._modeTransitionRequest;e?r?(this.host._modeTransitionPreparing=!0,this.host._modeTransitionVisual=r,this.host._prepareModeTransition(u,r,t,c,d,p)):(this.host._modeTransitionPreparing=!1,this.host._modeTransitionVisual=null,this.host._zoom=c,this.host._view=null,requestAnimationFrame(()=>{this.host.isConnected&&u===this.host._modeTransitionRequest&&this.host._mode===t&&(this.host._applyView(c,d,p),"view"===t&&(this.host._viewModeSnap=null,this.host._modeTransitionEditorCamera=null),this.host.requestUpdate())})):"view"===t&&this.host._commitViewModeAtomic(r,c,d,p),this.host._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this.host._tool="draw",this.host._mergeSel=null,this.host._mergeDialog=null,this.host._splitSel=null,this.host._pendingSplit=null,this.host._selId=null,this.host._physicalSel=null,this.host._physicalDialog=null,this.host._physicalDrag=null,this._rszResetController(),this.host._tip=null,this.host._hoverRoom=null,this.host._decorDraft=null,this.host._decorSel=null,this.host._decorMove=null,this.host._backdropDialog=null,this.host._decorTool="select",this.host._bdDrag=null,this.host._dtDrag=null,this.host._dtBox=null,"plan"===t&&this._primeDrawWallField(),this.host._saveNav()}_primeDrawWallField(){null===this.host._drawWallField&&(this.host._drawWallField=ce(dt,this.host._imperial))}_showPhysicalRange(t=this.host._drawWallMaxCm,e=0){this.host._showToast(this.host._t("toast.physical_range",{min:ce(e,this.host._imperial),max:ce(t,this.host._imperial),unit:this.host._t(this.host._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_mergeSpacePartitions(t,e){const s=t?.partitions||[];if(s.length<2)return 0;const i=tl(s,{pitch:O,seedIds:e,geometry:sl(t)});return i.merged?(t.partitions=i.partitions,el(t.openings,t.partitions,i.openingMoves,{coordScale:Ac,cellCm:this.host._cellCm,gridPitch:this.host._gridPitch}),i.merged):0}_finalizeWallChainPartitions(t){if(!t.length)return!0;const e=this.host._curSpaceCfg,s=this.host._spaceModel(),i=this._geometrySnapshot();if(!e||!s||!i)return!1;const o=t.map(t=>or(e,t)).find(Boolean)||null,a={path:this.host._path.map(t=>[...t]),chainId:this.host._activeWallChainId,ids:[...this.host._activeWallChainPartitionIds],cms:[...this.host._wallChainSegmentCms],redo:this.host._wallChainRedo.map(t=>({...t,point:[...t.point]})),closingCm:this.host._closingWallCm};let n;try{n=xc(e,s,this.host._openCuts(),t,{pitch:this.host._wallKeyPitch,cellCm:this.host._cellCm,gridPitch:this.host._gridPitch,coordScale:Ac})}catch{return this.host._showToast(this.host._t("toast.geometry_unsafe")),!1}if(!n.report.changed)return!0;const r=this.host._serverCfg,l=r?.spaces?.findIndex(t=>t.id===i.spaceId)??-1;if(l<0)return!1;r.spaces[l]=n.space;const h=function(t,e,s,i){const{host:o}=t,a=o._serverCfg,n=()=>t._commitPhysicalGeometry(e,s,[],!1);if(!s||!a||!i||10!==Number(a.model_version||0))return n();let r;try{r=En(a).config}catch(e){return t._clearGeometryGesture(),t._restoreGeometryStateLocal(s),t._showWallModelMigrationBlocked(e),!1}const l=r.spaces.find(t=>t.id===s.spaceId),h=JSON.parse(JSON.stringify(a));if(!l||!t._restoreGeometryStateInConfig(h,s))return n();const c=h.spaces.find(t=>t.id===s.spaceId),d=ar(l,i),p=ar(c,i);if(!d||!p)return n();const u={...r,spaces:[d.space]},_={...h,spaces:[p.space]};let m=null,g=!1;try{const t=o._path.length>=2?o._path.map(t=>[t[0]/nr,t[1]/nr]):[];g=bn(l)<=bn(s,t)&&o._checkSpacePhysicalGeometry(u,s.spaceId,t=>{m=t}).ok}catch{g=!1}if(!g)return rr(t,s);const f=t._junctionLimitsIntroduced(u,_,s.spaceId,m,d.roomIds);if(f.length)return t._clearGeometryGesture(),t._restoreGeometryStateLocal(s),o._showToast(t._junctionLimitLabel(f[0])),!1;Wn(a,r);const b=a.spaces.find(t=>t.id===s.spaceId),v=o._pendingPhysicalWrites.get(s.spaceId);return o._pendingPhysicalWrites.set(s.spaceId,{before:v?.before||s,fingerprint:Y(b)}),t._saveConfig(),!0}(this,this.host._t("history.wall_segment"),i,o);return!!h||(this.host._path=a.path,this.host._activeWallChainId=a.chainId,this.host._activeWallChainPartitionIds=a.ids,this.host._wallChainSegmentCms=a.cms,this.host._wallChainRedo=a.redo,this.host._closingWallCm=a.closingCm,!1)}_finishWallChain(){return!("draw"===this.host._tool&&!this.host._wallFaceBatch&&!this.host._roomDialog)||!!this._finalizeWallChainPartitions(this.host._activeWallChainPartitionIds)&&(this.host._path=[],this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this._clearPlanSnapHover(),!0)}_activateMarkupTool(t){t!==this.host._tool&&(this.host._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this.host._tool||this._finishWallChain())&&(this._cancelPath(),"resize"===this.host._tool&&(this.host._resize.dragging?this._rszCancelDrag():this.host._resize.reset()),this.host._tool=t,"resize"===t&&this.host._resize.selectRoom(null),"wallthick"===t&&(this.host._wallDialog=null)))}_limitReached(t){const e=this.host._curSpaceCfg;if(!e)return!0;const s="partition"===t?(e.partitions||[]).length>=Nc:(e.wall_columns||[]).length>=500;return s&&this.host._showToast(this.host._t("toast.physical_limit")),s}_svgPoint(t){const e=this.host.renderRoot.querySelector(".stage").getBoundingClientRect();return this.host._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this.host._gridPitch;return[de(pe(t[0],e)),de(pe(t[1],e))]}_snapDrawPoint(t,e=!1){const s=this.host._path[this.host._path.length-1],i=e&&s?ue(s,t,this.host._gridPitch,eo):t;return this._snap(i)}_planSnapOpeningCuts(t,e){if(!this.host._openingsR.length)return[];const s=this.host._openingWallIndexFor(t,e).value,i=[];for(const e of this.host._roomWallOpeningInputs(this.host._openingsR,t)){const t=bt(s,e);if(!t.negative&&!t.positive)continue;const o=e.angle*Math.PI/180,a=Math.cos(o)*e.length/2,n=Math.sin(o)*e.length/2;i.push([e.x-a,e.y-n,e.x+a,e.y+n])}return i}_planSnapGeometrySnapshot(){const t=this.host._spaceModel();if(!t)return{key:`${this.host._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this.host._space,this.host._cfgEpoch,t.rooms.length,t.partitions.length].join("|");if(this.host._planSnapGeometryCache?.key===e)return this.host._planSnapGeometryCache;const s=this.host._openCuts(),i=oh({space:t,roomCuts:this._planSnapOpeningCuts(t,s),partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this.host._gridPitch});return this.host._planSnapGeometryCache={key:e,value:i},this.host._planSnapGeometryCache}_hiddenWallDiagnosticSnapshot(){const t=this.host._spaceModel();if(!t)return{key:`${this.host._space}|hidden-empty`,value:{segments:[],endpoints:[]}};const e=["hidden",this.host._space,this.host._cfgEpoch,t.rooms.length,t.partitions.length].join("|");if(this.host._hiddenWallDiagnosticCache?.key===e)return this.host._hiddenWallDiagnosticCache;const s=ih({space:t,epsilon:2e-4*this.host._gridPitch});return this.host._hiddenWallDiagnosticCache={key:e,value:s},this.host._hiddenWallDiagnosticCache}_planStructuralGeometrySnapshot(){const t=this.host._spaceModel();if(!t)return{key:`${this.host._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this.host._space,this.host._cfgEpoch,t.rooms.length,t.partitions.length].join("|");if(this.host._planStructuralGeometryCache?.key===e)return this.host._planStructuralGeometryCache;const s=oh({space:t,epsilon:2e-4*this.host._gridPitch});return this.host._planStructuralGeometryCache={key:e,value:s},this.host._planStructuralGeometryCache}_planSnapContextKey(t){const e=this.host._path[0],s=this.host._path[this.host._path.length-1];return[t,this.host._tool,this.host._path.length,e?`${e[0]},${e[1]}`:"",s?`${s[0]},${s[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const s=this._planSnapGeometrySnapshot(),i=this.host._path[this.host._path.length-1],o="draw"===this.host._tool&&this.host._path.length>=3?[{point:this.host._path[0],key:"closure:first-point"}]:[],a=this.host._path.length>1?this.host._path.slice(1):i?[i]:[],n={tolerance:this._cssPxToRender(12),distinguishTolerance:this._cssPxToRender(8),gridStep:this.host._gridPitch,excludePoints:a,extraEndpoints:o,epsilon:2e-4*this.host._gridPitch},r=e&&i?ch(s.value,t,{...n,anchor:i}):function(t,e,s){if(!(Jl(e)&&s.tolerance>=0))return{kind:"none",candidate:null,conflicts:[]};const i=s.epsilon??Vl,o=s.excludePoints||[],a=lh(rh(t,e,s),s.distinguishTolerance||0);if(a)return a;let n=null;for(const a of t.segments){const t=[a.a[0],a.a[1],a.b[0],a.b[1]],r=Ht([e[0],e[1]],t);if(r>s.tolerance)continue;const l=hh(a,e,s.gridStep);!ah(l,o,i)&&nh(r,a.key,n)&&(n={kind:"line",point:l,key:a.key,distance:r,segment:a})}return n?{kind:"resolved",candidate:n,conflicts:[]}:{kind:"none",candidate:null,conflicts:[]}}(s.value,t,n),l="resolved"===r.kind?r.candidate:null,h=l?[...l.point]:this._snapDrawPoint(t,e),c=i?_e(i,h):h;return{point:c,candidate:l&&V(c,l.point)?l:null,conflicts:"ambiguous"===r.kind?r.conflicts:[],ambiguous:"ambiguous"===r.kind,contextKey:this._planSnapContextKey(s.key)}}_clearPlanSnapHover(t=!0){this.host._planSnapHover=null,this._syncPlanSnapActiveMarker(null),this._syncPlanSnapConflictMarkers([]),t&&(this.host._cursorPt=null)}_samePt(t,e){return V(t,e)}_dropLegacySegments(t=this.host._serverCfg){for(const e of t?.markers||[])"ripple"===e.display&&(e.display="icon_ripple");for(const e of t?.spaces||[]){delete e.segments;const t=new Set,s=e=>"string"==typeof e&&e.length>=1&&e.length<=64&&!t.has(e),i=e=>(t.add(e),!0),o=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=jt);if(Array.isArray(e.partitions)&&(e.partitions=e.partitions.filter(t=>t&&s(t.id)&&o(t.a)&&o(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&i(t.id)).map(t=>({...t,cm:Number.isFinite(Number(t.cm))?Math.max(0,Math.min(100,Number(t.cm))):15})),e.partitions.length||delete e.partitions),Array.isArray(e.wall_columns)&&(e.wall_columns=e.wall_columns.filter(t=>t&&s(t.id)&&o(t.center)&&i(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Qt(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:me(t.angle)}})),e.wall_columns.length||delete e.wall_columns),Array.isArray(e.walls)){const t=ge(Rt({spaces:[e]}),e.id),s=t?fe(e,t,Ac,.02*xt).contour.map(t=>t.map(t=>t/Ac)):G(e.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);e.walls=St(e.walls,e.rooms||[],O,1,s),e.walls.length||delete e.walls}}}_rollbackRejectedPhysicalWrites(t){if(!this.host._serverCfg||!t.length)return!1;let e=!1;for(const[s]of t){const t=this.host._pendingPhysicalWrites.get(s);t&&(e=this._restoreGeometryStateInConfig(this.host._serverCfg,t.before)||e,this.host._pendingPhysicalWrites.delete(s))}return!!e&&(this._clearGeometryGesture(),this.host._geometryHistory.clear(),this.host._cfgEpoch++,this.host._modelCache=null,this.host._wallUnionCache=null,this.host._physicalBodiesCache=null,this.host._frame=null,this.host._regSignature="",this.host._cfgContentFingerprint=d(this.host._serverCfg),this.host._maybeRebuildDevices(),this.host.requestUpdate(),!0)}async _reloadRejectedPhysicalWrite(){const t=this.host._writeChain;await t.catch(()=>{}),await this.host._reloadConfigOnly(!0)}_prepareConfigCandidate(t){return this._dropLegacySegments(t),be(t)}_writeConfig(t=null){this.host._writesPending++,this.host._writeChain=ve(this.host._writeChain,async()=>{if(!this.host._serverCfg)return;const e=d(this.host._serverCfg),s=this._prepareConfigCandidate(this.host._serverCfg),i=d(s);t&&e===t.attemptedFingerprint&&Object.assign(t,{revision:this.host._cfgRev,attempted:s,attemptedFingerprint:i});const o=[...this.host._pendingPhysicalWrites.entries()];for(const[t,e]of o){const i=s.spaces.find(e=>e.id===t),o=Y(i);if(o===e.fingerprint)continue;let a=!1;try{a=this.host._checkSpacePhysicalGeometry(s,t).ok}catch{a=!1}if(!a)throw this._restoreGeometryStateLocal(e.before),this.host._pendingPhysicalWrites.delete(t),this.host._geometryHistory.clear(),this.host._showToast(this.host._t("toast.geometry_unsafe")),Object.assign(new Error("unsafe wall geometry"),{code:"geometry-unsafe"});e.fingerprint=o}i!==d(this.host._serverCfg)&&(this.host._serverCfg=s),this.host._cfgContentFingerprint=i;try{await this.host._sendConfigCandidate(s)}catch(t){if(!this._rollbackRejectedPhysicalWrites(o))throw t;const e=t&&"object"==typeof t?t:Object.assign(new Error(String(t)),{cause:t});throw e.physicalGeometryRolledBack=!0,e}for(const[t,e]of o)this.host._pendingPhysicalWrites.get(t)?.fingerprint===e.fingerprint&&this.host._pendingPhysicalWrites.delete(t)});return this.host._writeChain.finally(()=>{this.host._writesPending--})}_saveConfig(){this.host._cfgEpoch++,this.host._saveConfigDebounced()}_geometrySnapshotFromConfig(t,e){const s=t?.spaces?.find(t=>t.id===e);if(!s)return null;const i=t=>JSON.parse(JSON.stringify(t)),o={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==s[t]&&(o[t]=s[t]);return{spaceId:e,rooms:i(s.rooms||[]),...Array.isArray(s.openings)?{openings:i(s.openings)}:{},...Array.isArray(s.walls)?{walls:i(s.walls)}:{},...Array.isArray(s.wall_segments)?{wall_segments:i(s.wall_segments)}:{},...Array.isArray(s.open_spans)?{open_spans:i(s.open_spans)}:{},...Array.isArray(s.partitions)?{partitions:i(s.partitions)}:{},...Array.isArray(s.wall_columns)?{wall_columns:i(s.wall_columns)}:{},...Array.isArray(s.decor)?{decor:i(s.decor)}:{},plan_transform:o}}_geometrySnapshot(t=this.host._space){return this._geometrySnapshotFromConfig(this.host._serverCfg,t)}_recordGeometry(t,e){if(!e)return;const s=this._geometrySnapshot(e.spaceId);s&&JSON.stringify(e)!==JSON.stringify(s)&&(e.wallChainSeedIds&&(s.wallChainSeedIds=[...this.host._activeWallChainPartitionIds]),e.roomReferences&&(s.roomReferences=Cc(this.host._serverCfg?.markers||[],e.roomReferences.map(t=>t.markerId))),this.host._geometryHistory.push({name:t,before:e,after:s}),this.host.requestUpdate())}_restoreGeometryStateInConfig(t,e,s=!1){const i=t?.spaces?.find(t=>t.id===e.spaceId);if(!i)return!1;const o=t=>JSON.parse(JSON.stringify(t)),a=new Map((i.rooms||[]).map(t=>[t.id,t]));if(i.rooms=o(e.rooms),s)for(const t of i.rooms){const e=a.get(t.id);!Array.isArray(t.wall_ids)&&Array.isArray(e?.wall_ids)&&e.wall_ids.length===t.poly?.length&&(t.wall_ids=o(e.wall_ids))}const n=(t,e)=>{void 0!==e?i[t]=o(e):s&&"wall_segments"===t||delete i[t]},r=new Map((i.openings||[]).map(t=>[t.id,t]));if(n("openings",e.openings),n("walls",e.walls),n("wall_segments",e.wall_segments),n("open_spans",e.open_spans),n("partitions",e.partitions),n("wall_columns",e.wall_columns),n("decor",e.decor),s)for(const t of i.openings||[]){const e=r.get(t.id);t.host||"wall"!==e?.host?.kind||(t.host=o(e.host))}for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete i[t];return Object.assign(i,o(e.plan_transform||{})),e.roomReferences&&(t.markers||=[],function(t,e){const s=new Map((t||[]).map(t=>[t?.id,t]));for(const t of e){const e=s.get(t.markerId);e&&(t.roomIdPresent?e.room_id=Sc(t.roomId):delete e.room_id,t.segmentMapPresent?(e.vacuum&&"object"==typeof e.vacuum&&!Array.isArray(e.vacuum)||(e.vacuum={}),e.vacuum.segment_map=Sc(t.segmentMap)||{}):e.vacuum&&"object"==typeof e.vacuum&&!Array.isArray(e.vacuum)&&(delete e.vacuum.segment_map,t.vacuumPresent||0!==Object.keys(e.vacuum).length||delete e.vacuum))}}(t.markers,e.roomReferences)),!0}_canonicalWallChainHistoryState(t){if(this.host._activeWallChainId||!t.wallChainSeedIds?.length)return t;if(!this.host._serverCfg)return null;const e=JSON.parse(JSON.stringify(this.host._serverCfg));if(!this._restoreGeometryStateInConfig(e,t))return null;let s;try{s=En(e).config}catch{return null}const i=s.spaces?.find(e=>e.id===t.spaceId),o=ge(Rt(s),t.spaceId);if(!i||!o)return null;const a=xc(i,o,ye(i,o,xt,Ac),t.wallChainSeedIds,{pitch:O,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,gridPitch:xt,coordScale:Ac}),n=s.spaces.findIndex(e=>e.id===t.spaceId);let r;s.spaces[n]=a.space;try{r=En(s).config}catch{return null}const l=this._geometrySnapshotFromConfig(r,t.spaceId);return l?(l.wallChainSeedIds=[...t.wallChainSeedIds],t.roomReferences&&(l.roomReferences=JSON.parse(JSON.stringify(t.roomReferences))),l):null}_restoreGeometryStateLocal(t){return!!this._restoreGeometryStateInConfig(this.host._serverCfg,t)&&(this.host._cfgEpoch++,this.host._modelCache=null,this.host._wallUnionCache=null,this.host._physicalBodiesCache=null,this.host._frame=null,this.host.requestUpdate(),!0)}_wallModelBlockerLabel(t){const e=t instanceof cn?t.reason:"invalid-room";return this.host._t(`wall_model.reason.${e}`)}_hasLegacyZeroWallFields(t=this.host._serverCfg){return(t?.spaces||[]).some(t=>Array.isArray(t?.open_spans)&&t.open_spans.length>0||(t?.rooms||[]).some(t=>Array.isArray(t?.open_to)&&t.open_to.length>0))}_showWallModelMigrationBlocked(t){const e=this._hasLegacyZeroWallFields()?"toast.zero_wall_migration_blocked":"toast.wall_model_migration_blocked";this.host._showToast(this.host._t(e,{reason:this._wallModelBlockerLabel(t)}))}_limitSegmentsOf(t){const e=[];for(const s of t?.wall_segments||[])s?.a&&s?.b&&e.push({id:String(s.id||""),a:s.a,b:s.b,cm:Number(s.cm)});for(const s of t?.partitions||[])s?.a&&s?.b&&e.push({id:String(s.id||""),a:s.a,b:s.b,cm:Number(s.cm)});return e}_junctionLimitViolations(t,e,s,i){const o=(t?.spaces||[]).find(t=>t?.id===e);return o?function(t,e,s,i,o){const a=(t?.spaces||[]).find(t=>t?.id===e);if(!a)return[];const n=Number(a.cell_cm)>0?Number(a.cell_cm):5,r=[...Pr(s),...zr(s,n,O),...Ar(s,n,O)];let l=i?.multiWallNodes||null;if(!l)try{l=it(a.rooms||[],a.walls||[],[],O,n,O,1)}catch{l=null}const h=i&&"lightweight"!==i.status?i:null;let c="ok"===h?.status||"degraded-extra"===h?.status?h.roomGeom:null;const d=null===i||"lightweight"===i?.status;if(!c&&!d&&l?.nodes.length)try{const t=ot(a.rooms||[],a.walls||[],[],[],O,n,O,1);c="ok"===t?.status||"degraded-extra"===t?.status?t.roomGeom:null}catch{c=null}for(const t of a.rooms||[]){const e=String(t?.id||"");if(!e||o&&!o.has(e))continue;let s=null;try{s=at(a.rooms||[],e,a.walls||[],[],O,n,O,1,d?null:c??void 0,l)}catch{s=null}r.push(...Nr(e,s,n,O))}return r}(t,e,this._limitSegmentsOf(o),s,i):[]}_junctionLimitLabel(t){const e=t=>String(Math.round(10*t)/10);return this.host._t(`junction.limit_${t.rule}`,{actual:e(t.actual),limit:e(t.limit)})}_junctionLimitsIntroduced(t,e,s,i,o){const a=o?.length?new Set(o):void 0;let n;const r=(e.spaces||[]).find(t=>t?.id===s);let l="";try{l=Y(r)}catch{l=""}const h=!a&&e&&"object"==typeof e?this._junctionBaselineCache.get(e):void 0;if(h&&l&&h.fingerprint===l&&h.spaceId===s&&(n=h.violations),!n){try{const t=Number(e?.model_version||0)>=10?e:En(e).config;n=this.host._junctionLimitViolations(t,s,a?null:void 0,a)}catch{return[]}!a&&e&&"object"==typeof e&&l&&this._junctionBaselineCache.set(e,{spaceId:s,fingerprint:l,violations:n})}let c=[],d=n;try{c=this.host._junctionLimitViolations(t,s,i,a),a&&(d=n.filter(t=>"clearance"!==t.rule||a.has(t.subject)))}catch{return[{rule:"check_failed",subject:s,actual:0,limit:0}]}return Hr(c,d)}_commitPhysicalGeometry(t,e,s=[],i=!0){if(!e||!this.host._serverCfg)return!1;const o=this.host._serverCfg,a=t=>{const s=t?.spaces?.find(t=>t.id===e.spaceId);return s?{...t,spaces:[s]}:t},n=this._geometrySnapshotFromConfig(o,e.spaceId),r=o.spaces.find(t=>t.id===e.spaceId);if(!r||Y(e)===Y(r))return!1;let l,h=!1;try{h=this.host._checkSpacePhysicalGeometry(a(o),e.spaceId).ok}catch{h=!1}if(!h)return this._clearGeometryGesture(),this._restoreGeometryStateLocal(e),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1;let c=e;try{if(Number(o.model_version||0)<9){const t=JSON.parse(JSON.stringify(o));if(!this._restoreGeometryStateInConfig(t,e))throw new cn("invalid-room",e.spaceId);const s=En(t).config;c=this._geometrySnapshotFromConfig(s,e.spaceId)||e,c.wallChainSeedIds=e.wallChainSeedIds,c.roomReferences=e.roomReferences;const i=JSON.parse(JSON.stringify(s));if(!n||!this._restoreGeometryStateInConfig(i,n,!0))throw new cn("invalid-room",e.spaceId);const a=s.spaces.find(t=>t.id===e.spaceId),r=i.spaces.find(t=>t.id===e.spaceId);if(!Array.isArray(n.wall_segments)&&JSON.stringify(e.rooms)===JSON.stringify(n.rooms))for(const t of r?.wall_segments||[])t.cm=J(n.walls,t.a,t.b,O,1);const h=((t,e,s)=>{const i=new Map,o=new Map((t?.rooms||[]).map(t=>[t.id,t])),a=new Map((e||[]).map(t=>[t.id,t])),{rooms:n}=Dn(s,Cn(t));for(const t of n){const e=a.get(t.id),n=o.get(t.id),r=B(e),l=(s.rooms||[]).find(e=>e.id===t.id),h=B(l),c=B(n);if(r&&h&&c&&r.length===h.length&&c.length===n?.wall_ids?.length&&t.poly.length===t.wall_ids.length)for(let e=0;e{const o=[];for(let a=0;ahn||yn(r,s,i)>hn)continue;const l=vn(n,s,i),h=vn(r,s,i);l<-1e-9||h>1+hn||h<=l+hn||o.push({start:l,id:e[a]})}return o.sort((t,e)=>t.start-e.start)},o=s(c,n.wall_ids,r[e],r[(e+1)%r.length]),a=s(t.poly,t.wall_ids,h[e],h[(e+1)%h.length]);if(o.length&&o.length===a.length)for(let t=0;tt.id===e.spaceId),i=this.host._path.length>=2?this.host._path.map(t=>[t[0]/Ac,t[1]/Ac]):[];i.push(...s.map(t=>[t[0],t[1]])),d=bn(t)<=bn(c,i)&&this.host._checkSpacePhysicalGeometry(a(l),e.spaceId).ok}catch{d=!1}if(!d)return this._clearGeometryGesture(),this._restoreGeometryStateLocal(e),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1;const p=JSON.parse(JSON.stringify(o));this._restoreGeometryStateInConfig(p,e);const u=this._junctionLimitsIntroduced(l,p,e.spaceId);if(u.length)return this._clearGeometryGesture(),this._restoreGeometryStateLocal(e),this.host._showToast(this._junctionLimitLabel(u[0])),!1;Wn(o,l),i&&this._recordGeometry(t,c);const _=o.spaces.find(t=>t.id===e.spaceId),m=this.host._pendingPhysicalWrites.get(e.spaceId);return this.host._pendingPhysicalWrites.set(e.spaceId,{before:m?.before||c,fingerprint:Y(_)}),this._saveConfig(),!0}_clearGeometryGesture(){this._clearFurniturePreview(),this.host._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this.host._mergeSel=null,this.host._mergeDialog=null,this.host._splitSel=null,this.host._pendingSplit=null,this.host._wallFaceBatch=null,this.host._wallRepairDiagnostic=null,this.host._roomDeleteDialog=null,this.host._wallDialog=null,this.host._physicalDialog=null,this.host._physicalSel=null,this.host._physicalDrag=null,this.host._physicalRotate=null,this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this.host._openingDialog=null,this._rszResetController(),this.host._decorDraft=null,this.host._decorMove=null,this.host._dtDrag=null,this.host._bdDrag=null}_stagePointerCancel(t){return clearTimeout(this.host._kioskHoldTimer),this.host._swipeStart?.id===t.pointerId&&(this.host._swipeStart=null),this.host._furnTouchPending?.pid===t.pointerId?(this._clearFurniturePreview(),this.host._pointers.delete(t.pointerId),void this.host.requestUpdate()):this.host._physicalDrag?.pid!==t.pointerId&&this.host._physicalRotate?.pid!==t.pointerId?this.host._decorDraft?.pid===t.pointerId?(this.host._decorDraft=null,void this.host.requestUpdate()):void(this.host._decorMove?.pid!==t.pointerId&&this.host._dtDrag?.pid!==t.pointerId&&this.host._bdDrag?.pid!==t.pointerId?("opening"===this.host._tool?(this.host._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this.host._tool&&this._clearPlanSnapHover(),this.host._pointers.delete(t.pointerId),this.host._pointers.size<2&&(this.host._pinchStart=null),0===this.host._pointers.size&&(this.host._panStart=null,this.host._panLock=null),this.host._viewportGestureDirty&&0===this.host._pointers.size&&(this.host._viewportGestureDirty=!1,this.host.requestUpdate())):this._cancelDecorGesture()):void this._cancelPhysicalGesture()}_applyGeometryState(t,e=!1){const s=this._canonicalWallChainHistoryState(t);if(!s||!this.host._canCommitSpace(s.spaceId))return!1;const i=this._geometrySnapshot(s.spaceId);if(!i||!this._restoreGeometryStateLocal(s))return!1;const o=this.host._serverCfg,a=Y(i)!==Y(s);if(a){let t=!1;try{const i=o?this.host._checkSpacePhysicalGeometry(o,s.spaceId):null;t=!!i?.ok||!(!e||"wall-degraded-extra"!==i?.reason)}catch{t=!1}if(!t)return this._restoreGeometryStateLocal(i),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1}let n;try{n=En(o).config}catch(t){return this._restoreGeometryStateLocal(i),this._showWallModelMigrationBlocked(t),!1}if(a){let t=!1;try{const i=n?this.host._checkSpacePhysicalGeometry(n,s.spaceId):null;t=!!i?.ok||!(!e||"wall-degraded-extra"!==i?.reason)}catch{t=!1}if(!t)return this._restoreGeometryStateLocal(i),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1;Wn(o,n);const a=o?.spaces.find(t=>t.id===s.spaceId),r=this.host._pendingPhysicalWrites.get(s.spaceId);this.host._pendingPhysicalWrites.set(s.spaceId,{before:r?.before||i,fingerprint:Y(a)})}else Wn(o,n);return this._clearGeometryGesture(),this.host._space!==s.spaceId&&(this.host._commitSpace(s.spaceId),this.host._saveNav(),this.host._restoreZoom()),this.host._modelCache=null,this.host._frame=null,this.host._regSignature="",this.host._maybeRebuildDevices(),this._saveConfig(),this.host.requestUpdate(),!0}_roomAt(t){return this.host._spaceModel()?.rooms.find(e=>{const s=B(e);return!!s&&we(t,s)})}_overlapRoom(t){return this.host._spaceModel()?.rooms.find(e=>{const s=B(e);return!!s&&N(t,s)})}_pointInRoom(t,e){return e.poly?$e(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!Pa(t))return!0;const e=t.length,s=.001;for(let i=0;i=500)return this.host._showToast(this.host._t("toast.physical_limit")),!1;const t=this.host._curSpaceCfg;return!((t?.partitions||[]).length>=Nc)||(this.host._showToast(this.host._t("toast.physical_limit")),!1)}_markupClick(t){if(this.host._vacFit)return;if(!this.host._markup)return;const e=this.host._spaceModel();if(!e)return void this._clearGeometryGesture();if(this.host._suppressClick)return;if(this.host._drag||this.host._rlResize)return;const s=t.composedPath?.()||[];if(s.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(s.some(t=>t?.classList?.contains?.("physical-hit")))return;const i=this._svgPoint(t);if("select"===this.host._tool)return void(this.host._physicalSel=null);if("resize"===this.host._tool){if(this.host._resize.dragging||s.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(i,t));return this.host._resize.selectRoom(t?.id||null),void this.host.requestUpdate()}if("delroom"===this.host._tool)return void this._deleteRoomClick(i);if("opening"===this.host._tool)return void this._openingClick(i);if("merge"===this.host._tool)return void this._mergeClick(i);if("wallthick"===this.host._tool)return void this._wallThickClick(i);if("split"===this.host._tool)return void this._splitClick(i);if("column"===this.host._tool)return void this._columnClick(i);this.host._wallRepairDiagnostic=null;const o=this._resolvePlanDrawPoint(i,t.shiftKey);if(o.ambiguous)return this.host._planSnapHover={contextKey:o.contextKey,candidate:null,conflicts:o.conflicts},this._syncPlanSnapActiveMarker(null),this._syncPlanSnapConflictMarkers(o.conflicts),void this.host._showToast(this.host._t("toast.plan_snap_ambiguous"));let a=o.point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this.host._path.length<3)return;a=_e(this.host._path[this.host._path.length-1],this.host._path[0])}if(!this.host._path.length){if(!t.shiftKey&&!o.candidate&&this._offerExistingWallFace(i))return;return this.host._activeWallChainId=`chain-${Date.now().toString(36)}`,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],void(this.host._path=[a])}const n=this.host._path[this.host._path.length-1];if(this._samePt(a,n))return;if(!this._canAppendWallPoint())return;const r=this.host._drawWallCm;if(null==r)return void this._showPhysicalRange(100);const l=this.host._curSpaceCfg;if(!l)return;const h=this.host._path.map(t=>[...t]),c=this.host._activeWallChainId,d=[...this.host._activeWallChainPartitionIds],p=[...this.host._wallChainSegmentCms],u=this._wallGraphSources([]),_=this._geometrySnapshot();_&&(_.wallChainSeedIds=[...d]);const m=`partition-${crypto.randomUUID?.()||`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}`;if(l.partitions||=[],l.partitions.push({id:m,a:[n[0]/Ac,n[1]/Ac],b:[a[0]/Ac,a[1]/Ac],cm:r}),this.host._path=[...this.host._path,a],this.host._wallChainSegmentCms=[...this.host._wallChainSegmentCms,r],this.host._activeWallChainPartitionIds=[...d,m],this.host._wallChainRedo=[],!lr(this,this.host._t("history.wall_segment"),_))return this.host._activeWallChainId=c,this.host._activeWallChainPartitionIds=d,this.host._path=h,void(this.host._wallChainSegmentCms=p);this._offerWallFaces(h,h.length-1,u)}_activeWallSourceKey(t){const e=this.host._activeWallChainPartitionIds[t],s=e?this._planStructuralGeometrySnapshot().value.segments.find(t=>"partition"===t.sourceKind&&t.sourceId===e):null;return s?`static:${s.key}`:`active:${this.host._activeWallChainId||"session"}:${t}`}_wallGraphSources(t){return this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}))}_wallFaceGraph(t,e){const s=`${this.host._space}|${e}|${JSON.stringify(t)}`,i=this.host._wallFaceGraphCache.findIndex(t=>t.key===s);if(i>=0){const[t]=this.host._wallFaceGraphCache.splice(i,1);return this.host._wallFaceGraphCache.push(t),t.value}const o=Fh(t,e);return this.host._wallFaceGraphCache.push({key:s,value:o}),this.host._wallFaceGraphCache.length>4&&this.host._wallFaceGraphCache.shift(),o}_offerWallFaces(t,e=this.host._path.length-2,s){if(this.host._path.length<2||this.host._wallFaceBatch||this.host._roomDialog)return;const i=this.host._spaceModel();if(!i)return;const o=this._activeWallSourceKey(e),a=2e-4*this.host._gridPitch;let n,r;try{const e=s||this._wallGraphSources(t);r=this._wallGraphSources(this.host._path),n=function(t,e,s){const i=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!i.has(t.key)&&t.sourceKeys.includes(s))}(this._wallFaceGraph(e,a),this._wallFaceGraph(r,a),o)}catch{return}if(!n.length){const t=Uh(r,{requiredSourceKey:o,maxDistance:w(2,this.host._cellCm,this.host._gridPitch),gridStep:this.host._gridPitch,epsilon:a});return"ambiguous"===t.kind?(this.host._wallRepairDiagnostic=t.proposals[0]||null,void this.host._showToast(this.host._t(0===this.host._drawWallCm?"toast.zero_wall_ambiguous":"toast.wall_repair_ambiguous"))):void("repair"!==t.kind||this._overlapRoom(t.face.ring)||this._beginWallFaceBatch([{...t.face,repair:t.proposal}]))}for(const t of i.rooms){const e=B(t);if(!t.id||!e)continue;const s=ke(e,this.host._path,.02*this.host._gridPitch);if(!s)continue;const[i,o]=s,a=L(i)>=L(o)?i:o,r=a===i?o:i,l=[...n].sort((t,e)=>Math.abs(t.area-L(r))-Math.abs(e.area-L(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:a,newPoly:r},consumeAllActive:!0}])}const l=n.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));l.length&&this._beginWallFaceBatch(l)}_beginWallFaceBatch(t){this.host._wallRepairDiagnostic=null,this.host._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this.host._path.map(t=>[...t]),activeCms:[...this.host._wallChainSegmentCms],activePartitionIds:[...this.host._activeWallChainPartitionIds]},this._clearPlanSnapHover(),this.host._nameSel="",this.host._areaSel="",this._resetRoomDialogFields(),this.host._roomDialog=!0}_offerExistingWallFace(t){if(this.host._path.length||this.host._wallFaceBatch||this.host._roomDialog)return!1;const e=2e-4*this.host._gridPitch;try{let s,i=Ah(this._wallFaceGraph(this._wallGraphSources([]),e),t,e);if(!i){const o=Uh(this._wallGraphSources([]),{point:t,maxDistance:w(2,this.host._cellCm,this.host._gridPitch),gridStep:this.host._gridPitch,epsilon:e});if("ambiguous"===o.kind)return this.host._wallRepairDiagnostic=o.proposals[0]||null,this.host._showToast(this.host._t(0===this.host._drawWallCm?"toast.zero_wall_ambiguous":"toast.wall_repair_ambiguous")),!0;if("repair"===o.kind)i=o.face,s=o.proposal;else if("none"===o.kind){const s=Uh(this._wallGraphSources([]),{point:t,maxDistance:this._cssPxToRender(12),gridStep:this.host._gridPitch,epsilon:e});if("repair"===s.kind)return this.host._wallRepairDiagnostic=s.proposal,this.host._showToast(this.host._t("toast.wall_repair_too_large")),!0}}return!(!i||i.ring.length<3||this._contourSelfIntersects(i.ring)||this._overlapRoom(i.ring))&&(this._beginWallFaceBatch([{...i,existing:!s,repair:s}]),!0)}catch{return!1}}_columnClick(t){const e=this._snap(t),s=this.host._drawWallCm;if(null==s)return void this._showPhysicalRange(Yt,1);if(!this.host._curSpaceCfg||this._limitReached("column"))return;const i=this.host._spaceModel();if(!i)return;const o={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Qt(s),angle:0},a=(i.wall_columns||[]).find(t=>Xt(t,o,.02*this.host._gridPitch));if(a)return clearTimeout(this.host._duplicateColumnTimer),this.host._duplicateColumnId=a.id,this.host._duplicateColumnTimer=window.setTimeout(()=>{this.host._duplicateColumnId=null},900),void this.host._showToast(this.host._t("toast.column_duplicate"));const n=this._geometrySnapshot(),r=this.host._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...o,center:[e[0]/Ac,e[1]/Ac]}),this._commitPhysicalGeometry(this.host._t("history.column_add"),n)}_openPhysicalDialog(t,e){const s=this.host._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this.host._physicalDialog={kind:t,id:e,cm:ce(i.cm,this.host._imperial),length:this.host._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this.host._physicalDialog={kind:t,id:e,cm:ce(i.cm,this.host._imperial),shape:i.shape,angle:this.host._angleField("square"===i.shape?me(i.angle):0)})}}_physicalDown(t,e,s){const i=this.host._spaceModel();if(!i)return;t.stopPropagation(),Hc(t);const o=this._svgPoint(t),a=[];for(const t of[...i.wall_columns].reverse())xe(o,Se(t,this.host._cellCm,this.host._gridPitch))&&a.push({kind:"column",id:t.id});for(const t of[...i.partitions].reverse()){const e=Me(t.a,t.b,t.cm,this.host._cellCm,this.host._gridPitch);e&&xe(o,e)&&a.push({kind:"partition",id:t.id})}a.some(t=>t.kind===e&&t.id===s)||a.unshift({kind:e,id:s});const n=a.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this.host._physicalPickCycle,h=a.length>1&&l?.signature===n&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%a.length:Math.max(0,a.findIndex(t=>t.kind===e&&t.id===s));this.host._physicalPickCycle={signature:n,index:h,x:t.clientX,y:t.clientY,at:r},e=a[h].kind,s=a[h].id;const c="partition"===e?i.partitions.find(t=>t.id===s):i.wall_columns.find(t=>t.id===s);c&&(this.host._physicalSel={kind:e,id:s},this.host._physicalDrag={pid:t.pointerId,kind:e,id:s,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(c)),delta:[0,0]})}_clampPhysicalDelta(t,e,s){const i="partition"===t?[e.a,e.b]:[e.center],o=i.map(t=>t[0]),a=i.map(t=>t[1]);return[Math.max(-jt*Ac-Math.min(...o),Math.min(jt*Ac-Math.max(...o),s[0])),Math.max(-jt*Ac-Math.min(...a),Math.min(jt*Ac-Math.max(...a),s[1]))]}_physicalMove(t){t.stopPropagation(),Ao(this.host,"physical",()=>this._physicalMoveNow(t))}_physicalMoveNow(t){const e=this.host._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const s=this._svgPoint(t),i="partition"===e.kind?e.base.a:e.base.center,o=this._snap([i[0]+s[0]-e.start[0],i[1]+s[1]-e.start[1]]),a=this._clampPhysicalDelta(e.kind,e.base,[o[0]-i[0],o[1]-i[1]]);this.host._physicalDrag={...e,delta:a,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){No(this.host,"physical");const e=this.host._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this.host._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const s=this.host._spaceModel();if(!this.host._curSpaceCfg||!s)return;const i=this.host._curSpaceCfg;if("partition"===e.kind){const t=(i.partitions||[]).find(t=>t.id===e.id),s=e.base;if(t){const o={...s,a:[s.a[0]+e.delta[0],s.a[1]+e.delta[1]],b:[s.b[0]+e.delta[0],s.b[1]+e.delta[1]]};t.a=[o.a[0]/Ac,o.a[1]/Ac],t.b=[o.b[0]/Ac,o.b[1]/Ac];for(const t of i.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const s=lt(t,[o],Ac,this.host._cellCm,this.host._gridPitch).resolved;s&&Object.assign(t,ht(t,s,Ac))}}}else{const t=(i.wall_columns||[]).find(t=>t.id===e.id),o=e.base,a={...o,center:[o.center[0]+e.delta[0],o.center[1]+e.delta[1]]};if(s.wall_columns.some(t=>t.id!==e.id&&Xt(t,a,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"));t&&(t.center=[(o.center[0]+e.delta[0])/Ac,(o.center[1]+e.delta[1])/Ac])}this._commitPhysicalGeometry(this.host._t("history.physical_move"),e.before)}_registerPhysicalTap(t,e){const s=performance.now(),i=this.host._physicalLastTap?.kind===t&&this.host._physicalLastTap.id===e&&s-this.host._physicalLastTap.at<=360;this.host._physicalLastTap={kind:t,id:e,at:s},i&&(this.host._physicalLastTap=null,this._openPhysicalDialog(t,e))}_cancelPhysicalGesture(){Ho(this.host,"physical"),Ho(this.host,"physical-rotate"),this.host._physicalDrag=null,this.host._physicalRotate=null,this.host.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this.host._spaceModel())return;t.preventDefault(),t.stopPropagation(),Hc(t);const s=this._svgPoint(t);this.host._physicalSel={kind:"column",id:e.id},this.host._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(s[1]-e.center[1],s[0]-e.center[0])/Math.PI,baseAngle:me(e.angle),angle:me(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){t.preventDefault(),t.stopPropagation(),Ao(this.host,"physical-rotate",()=>this._physicalRotateMoveNow(t))}_physicalRotateMoveNow(t){const e=this.host._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const s=this._svgPoint(t),i=180*Math.atan2(s[1]-e.center[1],s[0]-e.center[0])/Math.PI,o=e.baseAngle+i-e.startAngle,a=me(t.shiftKey?o:5*Math.round(o/5));this.host._physicalRotate={...e,angle:a,moved:e.moved||Math.abs(o-e.baseAngle)>=.5}}_physicalRotateUp(t){No(this.host,"physical-rotate");const e=this.host._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this.host._physicalRotate=null;const s=this.host._spaceModel();if(!e.moved||!this.host._curSpaceCfg||!s)return;const i=s.wall_columns.find(t=>t.id===e.id);if(!i||"square"!==i.shape)return;const o={...i,angle:e.angle};if(s.wall_columns.some(t=>t.id!==e.id&&Xt(t,o,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"));const a=this.host._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);a&&(a.angle=e.angle,this._commitPhysicalGeometry(this.host._t("history.physical_edit"),e.before))}_rszRooms(){const t=[],e=this.host._spaceModel();if(!e)return t;for(const s of e.rooms){const e=s.id?B(s):null;e&&t.push({id:s.id,poly:e,wall_ids:Array.isArray(s.wall_ids)?[...s.wall_ids]:void 0})}return s=t,i=Math.max(1e-12,1e-12*this.host._gridPitch),s.map(t=>{if(!Array.isArray(t.wall_ids)||t.wall_ids.length!==t.poly.length)return{...t,poly:t.poly.map(t=>[...t])};const e=t.poly.map(t=>[...t]);let s=!0;for(;s&&e.length>3;){s=!1;for(let t=0;t0){e.splice(t,1),s=!0;break}}}return{...t,poly:e}});var s,i}_rszOpenings(){return this.host._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen,hosted:!!t.host,angle:t.angle,type:t.type}))}_rszObstacles(){const t=this.host._spaceModel();if(!t)return[];const e=[];for(const s of t.partitions||[])e.push({kind:"segment",a:[...s.a],b:[...s.b],half:w(s.cm,this.host._cellCm,this.host._gridPitch)/2});for(const s of t.wall_columns||[]){const t=w(s.cm,this.host._cellCm,this.host._gridPitch)/2;e.push({kind:"circle",center:[...s.center],radius:"square"===s.shape?t*Math.SQRT2:t})}return e}_rszOptsFor(t,e){const s=J(this.host._spaceWalls,t,e,this.host._wallKeyPitch,Ac),i=this.host._spaceWalls.filter(t=>Array.isArray(t.a)&&Array.isArray(t.b)&&t.a.length>=2&&t.b.length>=2).map(t=>({wall:t,a:[t.a[0]*Ac,t.a[1]*this.host._spaceH],b:[t.b[0]*Ac,t.b[1]*this.host._spaceH]})),o=Math.abs(t[0]-e[0])<=.05*this.host._gridPitch?"v":Math.abs(t[1]-e[1])<=.05*this.host._gridPitch?"h":null,a=i.filter(s=>!!o&&("h"===o?!(Math.abs(s.a[1]-t[1])>.05*this.host._gridPitch||Math.abs(s.b[1]-t[1])>.05*this.host._gridPitch)&&Math.min(Math.max(t[0],e[0]),Math.max(s.a[0],s.b[0]))-Math.max(Math.min(t[0],e[0]),Math.min(s.a[0],s.b[0]))>.05*this.host._gridPitch:!(Math.abs(s.a[0]-t[0])>.05*this.host._gridPitch||Math.abs(s.b[0]-t[0])>.05*this.host._gridPitch)&&Math.min(Math.max(t[1],e[1]),Math.max(s.a[1],s.b[1]))-Math.max(Math.min(t[1],e[1]),Math.min(s.a[1],s.b[1]))>.05*this.host._gridPitch)),n=new Set(a.map(t=>Number(t.wall.cm)).filter(t=>t>0));return{minDim:this.host._cmToUnits(30),eps:.05*this.host._gridPitch,step:this.host._gridPitch,movingHalf:s>0?w(s,this.host._cellCm,this.host._gridPitch)/2:0,obstacles:this._rszObstacles(),thicknessConflict:n.size>1}}_rszResolution(t,e,s){const i=this.host._resize.snapshotIdentity||s||this._rszSnapshot(),o=`${this.host._space}|${this.host._cellCm}|${this.host._gridPitch}|${i}`,a=`${t}:${e}`;return this.host._resize.resolve(o,a,()=>{const s=[...this.host._resize.rooms||this._rszRooms()],i=s.find(e=>e.id===t),o=i?.poly?.[e]||[0,0],a=i?.poly?.[(e+1)%(i?.poly?.length||1)]||[0,0];return function(t,e,s,i,o){const{eps:a}=o,n=t.find(t=>t.id===s);if(!n||i<0||i>=(n.poly?.length||0)||n.poly.length<4||!Pa(n.poly))return{enabled:!1,reason:"invalid-geometry"};const r=n.poly[i],l=n.poly[(i+1)%n.poly.length],h=Ra(r,l,a);if(!h)return{enabled:!1,reason:"diagonal"};if(!Na(n.poly,i,h,a))return{enabled:!1,reason:"side-angle"};if(o.thicknessConflict)return{enabled:!1,reason:"thickness-conflict"};for(const t of o.obstacles||[])if(Oa(t,r,l,o))return{enabled:!1,reason:"duplicate-physical-wall"};const c=xa(wa(l,r)),d=[],p=new Set;let u=!1,_=!1;for(const e of t)if(e.id!==s)for(let t=0;t1||d.length>1)return{enabled:!1,reason:"multiple-rooms"};const m={[s]:i},g=[s];if(1===d.length){const t=d[0];if(!Pa(t.room.poly))return{enabled:!1,reason:"invalid-geometry"};if(!Na(t.room.poly,t.edge,h,a))return{enabled:!1,reason:"side-angle"};g.push(t.room.id),m[t.room.id]=t.edge}const f=[];for(const t of e)if(!(Ma([t.x,t.y],r,l)>2*a)){if(t.hosted||t.length>c+2*a)return{enabled:!1,reason:"opening-conflict"};f.push(t.id)}const b=Object.fromEntries(g.map(e=>[e,t.find(t=>t.id===e).poly.length])),v=[];for(const e of g){const s=t.find(t=>t.id===e),i=m[e],o=(i-1+s.poly.length)%s.poly.length,n=(i+1)%s.poly.length,r=Wa(t,e,o,1,a),l=Wa(t,e,n,0,a);if(!r||!l)return{enabled:!1,reason:"partial-shared"};v.push(r,l)}const y={roomId:s,edge:i,a:[...r],b:[...l],n:Ca(n.poly,i),roomIds:g,edgeByRoom:m,topology:b,movingOpeningIds:f,sideOwnership:v};if(!Ja(t,e,y,0,o))return{enabled:!1,reason:"invalid-geometry"};const w=Math.abs(Number(o.step));if(Number.isFinite(w)&&w>a){const s=[-w,w];if(!s.some(s=>Ja(t,e,y,s,o))){if(!s.some(s=>qa(Ua(t,e,y,s),y,a)))return{enabled:!1,reason:"partial-shared"};const i={...o,obstacles:[]};return s.some(s=>Ja(t,e,y,s,i))?{enabled:!1,reason:"duplicate-physical-wall"}:e.length&&s.some(e=>Ja(t,[],y,e,o))?{enabled:!1,reason:"opening-conflict"}:{enabled:!1,reason:"invalid-geometry"}}}return{enabled:!0,plan:y}}(s,[...this.host._resize.openings||this._rszOpenings()],t,e,this._rszOptsFor(o,a))})}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this.host._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszResetController(){const t=null!==this.host._resize.preview;this.host._resize.reset(),t&&this.host._cfgEpoch++}_rszProjectPreview(t,e,s,i,o){this.host._rszLimitViolation=null;const a=this.host._serverCfg?.spaces.find(t=>t.id===this.host._space);if(!a||!this.host._serverCfg)return{ok:!1,reason:"missing-context"};const n=JSON.parse(t),r={...a,rooms:n.rooms,openings:n.openings||[]};for(const t of["walls","wall_segments","open_spans","partitions","wall_columns","decor"])void 0!==n[t]?r[t]=n[t]:delete r[t];for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==n.plan_transform?.[t]?r[t]=n.plan_transform[t]:delete r[t];const l=this.host._spaceH;for(const[t,s]of Object.entries(e)){const e=r.rooms.find(e=>e.id===t);e&&(e.poly=s.map(t=>[t[0]/Ac,t[1]/l]),delete e.x,delete e.y,delete e.w,delete e.h)}for(const[t,e]of Object.entries(s)){const s=(r.openings||[]).find(e=>e.id===t);s&&(s.x=e[0]/Ac,s.y=e[1]/l)}const h=[],c=[];for(const t of i){const e=o.find(e=>e.id===t),s=r.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const i=s.poly.map(t=>[t[0]*Ac,t[1]*l]);if(e.poly.length!==i.length)continue;const a=Array.isArray(e.wall_ids)?e.wall_ids:[];for(let t=0;tt.id===s):null;o&&(o.a=[i[t][0]/Ac,i[t][1]/Ac],o.b=[i[(t+1)%i.length][0]/Ac,i[(t+1)%i.length][1]/Ac])}}if(h.length&&Array.isArray(r.walls)&&r.walls.length){const t=Ce(r.walls,h,c,this.host._wallKeyPitch,Ac,"fixed-topology");if(t.rejected)return{ok:!1,reason:"wall-metadata"};r.walls=t.walls}const d=[];for(const t of r.rooms||[]){const e=B(t);if(e&&!(e.length<2))for(let t=0;tJSON.stringify([t?.key,t?.cm,t?.a,t?.b]),u=new Map;for(const t of n.walls||[]){const e=p(t);u.set(e,(u.get(e)||0)+1)}const _=[];for(const t of r.walls||[]){const e=p(t),s=u.get(e)||0;s?u.set(e,s-1):_.push(t)}if(Pe(_,d,this.host._wallKeyPitch,Ac,n.walls||[]).length)return{ok:!1,reason:"wall-metadata"};const m=function(t,e,s=1e-8){const i=on(t),o=new Set(e),a=i.flatMap(t=>{if(!o.has(String(t.id||"")))return[];const e=rn(nn(t));return e?[e]:[]});return i.flatMap(t=>{const e=String(t.id||""),i=rn(nn(t)),n=!!i&&a.some(t=>i.minX<=t.maxX+s&&i.maxX+s>=t.minX&&i.minY<=t.maxY+s&&i.maxY+s>=t.minY);return e&&(o.has(e)||n)?[e]:[]})}(r.rooms||[],i),g=ln(r,m);if(!g||!this._rszSpaceCandidateGeometry(this.host._space,g).ok)return{ok:!1,reason:"physical-geometry"};const f={...this.host._serverCfg,spaces:(this.host._serverCfg?.spaces||[]).map(t=>t?.id===this.host._space?r:t)};try{this._resizePreviewNodes=it(g.rooms,g.walls,[],O,this.host._cellCm,this.host._gridPitch,Ac)}catch{this._resizePreviewNodes=null}let b;try{const t=new Set(i),e=this.host._junctionLimitViolations(f,this.host._space,{status:"lightweight",multiWallNodes:this._resizePreviewNodes},t);b=Hr(e,this._resizeBaselineLimits.filter(e=>"clearance"!==e.rule||t.has(e.subject)))}catch{b=[{rule:"check_failed",subject:this.host._space,actual:0,limit:0}]}return b.length?(this.host._rszLimitViolation=b[0],{ok:!1,reason:"junction-limit"}):{ok:!0,value:{preview:{space:this.host._space,sp:r},beforeWalls:n.walls||[],afterWalls:r.walls||[],artifact:null}}}_rszAcceptPreview(t,e){if(this.host._cfgEpoch++,this.host._physicalBodiesCache&&(this.host._physicalBodiesCache.key=`${this.host._space}|${this.host._cfgEpoch}|${this.host._cellCm}|${this.host._gridPitch}`),!t||!e)return;const s=De(e);if(!s)return;const i=`${this.host._space}|${this.host._cfgEpoch}|${t.sp.rooms.length}`;Object.defineProperty(s,"sourceFingerprint",{value:d([t.sp,this.host._cellCm,this.host._gridPitch]),enumerable:!1});const o={key:i,value:s};Fc(this.host._wallUnionPool,i,o,8),this.host._wallUnionCache=o}_rszSpaceCandidateGeometry(t,e){if(!this.host._serverCfg)return{ok:!1,wallGeometry:null};const s={...this.host._serverCfg,spaces:this.host._serverCfg.spaces.map(s=>s.id===t?e:s)};let i=null;try{return{ok:this.host._checkSpacePhysicalGeometry(s,t,t=>{i=t}).ok,wallGeometry:i}}catch{return{ok:!1,wallGeometry:null}}}_rszSpaceCandidateRenderable(t,e){if(!this.host._serverCfg)return!1;try{const s={...this.host._serverCfg,spaces:this.host._serverCfg.spaces.map(s=>s.id===t?e:s)};return this.host._checkSpacePhysicalGeometry(s,t).ok}catch{return!1}}_rszCandidateRenderable(t){return!!t&&t.space===this.host._space&&this._rszSpaceCandidateRenderable(t.space,t.sp)}_rszEdgeDown(t,e,s){if("resize"!==this.host._tool||this.host._resize.dragging)return;this._resizeBaseFrameStable=!0,t.stopPropagation(),t.preventDefault();const i=this._rszRooms(),o=this._rszResolution(e,s);if(!o.enabled)return void this.host._showToast(this._rszReasonText(o.reason));Hc(t);const a=o.plan;try{this._resizeBaselineLimits=this.host._junctionLimitViolations(this.host._serverCfg,this.host._space,null,new Set(a.roomIds))}catch{this._resizeBaselineLimits=[]}const n=this._svgPoint(t),r=`${this.host._space}|${this.host._cfgEpoch}|${i.length}`,l=this.host._wallUnionCache?.key===r?this.host._wallUnionCache.value:null,h=this._rszSnapshot();this.host._resize.begin({pointerId:t.pointerId,start:[n[0],n[1]],roomId:e,plan:a,options:this._rszOptsFor(a.a,a.b),rooms:i,openings:this._rszOpenings(),snapshotIdentity:h,before:JSON.parse(h),wallUnionBefore:l,epochBefore:this.host._cfgEpoch})}_rszReasonText(t){return this.host._t(`resize.disabled.${t}`)}_rszDisabledActivate(t,e){t.stopPropagation(),t.preventDefault(),this.host._showToast(this._rszReasonText(e))}_rszDisabledKey(t,e){"Enter"!==t.key&&" "!==t.key||this._rszDisabledActivate(t,e)}_rszMove(t){this.host._resize.ownsPointer(t.pointerId)&&(t.stopPropagation(),Ao(this.host,"resize",()=>this._rszMoveNow(t)))}_rszMoveNow(t){if(!this.host._resize.ownsPointer(t.pointerId))return;t.stopPropagation();const e=this._svgPoint(t),s=this.host._resize.move({pointerId:t.pointerId,point:[e[0],e[1]],step:this.host._gridPitch,snap:t=>{const e=this._snap(t);return[e[0],e[1]]},project:(t,e,s,i,o)=>this._rszProjectPreview(t,e,s,i,o),publish:(t,e)=>this._rszAcceptPreview(t,e),measure:(t,e)=>this._rszEdgeLabels(t,e)});if("rejected"===s.kind)return s.notify&&this.host._showToast(this.host._rszLimitViolation?`${this.host._t("resize.limit_stopped")} — `+this._junctionLimitLabel(this.host._rszLimitViolation):this.host._t("resize.preview_failed")),void this.host.requestUpdate();"accepted"===s.kind&&this.host.requestUpdate()}_rszUp(t){if(No(this.host,"resize"),!this.host._resize.ownsPointer(t.pointerId))return;t.stopPropagation();const e=this.host._resize.finish({pointerId:t.pointerId,currentSnapshotIdentity:this._rszSnapshot(),validatePreview:t=>this._rszCandidateRenderable(t)});if("no-op"===e.kind)return this.host._cfgEpoch++,void this.host.requestUpdate();if("rejected"===e.kind)return this.host._cfgEpoch++,this.host._showToast(this.host._t("resize.commit_failed")),void this.host.requestUpdate();const s=e.preview,i=this.host._serverCfg?.spaces.find(t=>t.id===s.space);i&&(i.rooms=s.sp.rooms,i.openings=s.sp.openings,Array.isArray(s.sp.walls)&&(s.sp.walls.length?i.walls=s.sp.walls:delete i.walls),Array.isArray(s.sp.wall_segments)&&(i.wall_segments=s.sp.wall_segments)),this.host._suppressClick=!0,setTimeout(()=>this.host._suppressClick=!1,0),this._commitPhysicalGeometry(this.host._t("history.resize_room"),e.before),this.host.requestUpdate()}_rszCancelDrag(t){Ho(this.host,"resize");const e=this.host._resize.cancel(this._rszSnapshot(),t);if("no-op"!==e.kind){if(null!==e.restoreEpoch?this.host._cfgEpoch=e.restoreEpoch:this.host._cfgEpoch++,this.host._physicalBodiesCache&&(this.host._physicalBodiesCache.key=`${this.host._space}|${this.host._cfgEpoch}|${this.host._cellCm}|${this.host._gridPitch}`),e.restoreWallUnion){const t=this.host._spaceModel();if(t){const s=`${this.host._space}|${this.host._cfgEpoch}|${t.rooms.length}`,i={key:s,value:e.restoreWallUnion};Fc(this.host._wallUnionPool,s,i,8),this.host._wallUnionCache=i}}null!==e.restoreEpoch&&"plan"===this.host._mode&&this._resizeBaseFrameStable&&(this.host._terminalFrame=1),this.host.requestUpdate()}}_rszPointerCancel(t){this.host._resize.ownsPointer(t.pointerId)&&(t.stopPropagation(),this._rszCancelDrag(t.pointerId))}_rszEdgeLabels(t,e,s=this.host._resize.rooms){const i=s,o=[],a=t.polys[e.roomId]||i?.find(t=>t.id===e.roomId).poly;if(!a||!i)return o;const n=a.length,r=this._rszInnerSpanCms(e.roomId,a,t.polys);for(const t of function(t,e){const s=t.length;return[(e-1+s)%s,(e+1)%s]}(a,e.edge)){const e=a[t],s=a[(t+1)%n],i=r?.[t];o.push({kind:"length",x:(e[0]+s[0])/2,y:(e[1]+s[1])/2,text:null==i?this.host._fmtLen(e,s):Ie(i,"mi"===this.host.hass?.config?.unit_system?.length),edge:{a:[e[0],e[1]],b:[s[0],s[1]]}})}const l="mi"===this.host.hass?.config?.unit_system?.length,h=e.roomIds,c=this.host._spaceWalls,d=this.host._physicalBodiesR(),p=this.host._baseVb(),u=this.host._view&&this.host._view.w>0&&this.host._view.h>0?this.host._view:{x:p[0],y:p[1],w:p[2],h:p[3]},[_,m]=this.host._lastValidStageSize||[u.w,u.h],g={...u,stageWidth:Math.max(1,_),stageHeight:Math.max(1,m)},f=this.host._spaceModel(),b=this.host._config?.icon_size??2.5,v=f?Te(b>8?2.5:b,f,u.w,this.host._kiosk?this.host._kioskScale.icon:1)*g.stageWidth/100:24,y=Math.max(10,.77*v),w=this.host._t("room.settings_short"),$=y*(1.457+.66*Math.max(1,w.length)*.42);for(const s of h){const a=t.polys[s]||i.find(t=>t.id===s).poly,n=c.length&&f&&at(f.rooms,s,c,this.host._openCuts(),this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac,null,this._resizePreviewNodes)||a,r=d.length?Re(ze(n,d))*Math.pow(this.host._cellCm/this.host._gridPitch,2)/1e4:Fe(n,this.host._gridPitch,this.host._cellCm),h=Ae(r,l),p=cr({poly:a,edge:e.edgeByRoom[s],text:h,view:g,gearCenter:Ne(a),gearWidthPx:$,gearHeightPx:y});o.push({kind:"area",roomId:s,x:p.anchor[0],y:p.anchor[1],text:h,placement:p})}return o}_rszInnerSpanCms(t,e,s){const i=Object.keys(s).length?Object.entries(s).map(([t,e])=>({id:t,poly:e})):this.host._spaceModel()?.rooms;if(!i?.length)return null;const o=this.host._spaceWalls;if(!o.length)return null;const a=this.host._openCuts(),n=He(i,t,o,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac);if(!n||n.length!==e.length)return null;const r=this.host._cellCm/this.host._gridPitch;return e.map((t,s)=>Le(e,s,n)*r)}_renderResizeMeasurements(){const t=this.host._resize.liveLabels;if(!t?.length)return l;const e=t.filter(t=>"length"===t.kind),s=t.filter(t=>"area"===t.kind);return _`
  • ${e.map_id||m("vac.route_map_default")} @@ -578,7 +578,7 @@ globalThis.__HOUSEPLAN_BUILD_FINGERPRINT__="6aa7e85aead059c4d286b3b943bfaf6a4b12 .previewfacts > div { grid-template-columns: minmax(0, 1fr); gap: 2px; } } `],customElements.get("hp-device-preview")||customElements.define("hp-device-preview",ba);const va={revision:0,topologies:[],states:{}};class ya extends k{constructor(){super(...arguments),this.value={enabled:!1,z2mBaseTopics:[]},this.savedEnabled=!1,this.devices=[],this._runtime=null,this._snapshot=va,this._topicText="zigbee2mqtt",this._invalidTopic=!1}disconnectedCallback(){this._release?.(),this._release=void 0,super.disconnectedCallback()}updated(t){t.has("hass")&&(this._release?.(),this._release=void 0,this._runtime=null,this._snapshot=va),this.savedEnabled&&this._admin&&this._ensureRuntime()}willUpdate(t){t.has("value")&&(this._topicText=(this.value.z2mBaseTopics.length?this.value.z2mBaseTopics:["zigbee2mqtt"]).join("\n"),this._invalidTopic=!1)}get _admin(){return!0===this.hass?.user?.is_admin}_t(t,e){return bo(a(this.hass),t,e)}_help(){const t=a(this.hass);return vo(t,"help")&&vo(t,"help_aria")?h``:l}async _ensureRuntime(){return this._runtime||(this._runtime=await import("./zigbee-topology-runtime-D_luJHXO.js"),this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this._release=this._runtime.subscribeZigbeeTopology(this.hass,()=>{this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this.requestUpdate()}),this.requestUpdate()),this._runtime}_emit(t){this._admin&&this.dispatchEvent(new CustomEvent("hp-topology-settings-change",{detail:t,bubbles:!0,composed:!0}))}_topics(){return this.value.z2mBaseTopics.length?this.value.z2mBaseTopics:["zigbee2mqtt"]}_editTopics(t){this._topicText=t;const e=t.split(/[\r\n,]+/).map(t=>t.trim()).filter(Boolean),s=e.map(R).filter(Boolean);this._invalidTopic=s.length!==e.length,this._invalidTopic?this.requestUpdate():this._emit({...this.value,z2mBaseTopics:[...new Set(s)].slice(0,8)})}_status(t){const e=this._snapshot.states[t];if(!e)return this._t("status_idle");if("loading"===e.phase)return this._t("status_loading");if("error"===e.phase)return this._t(`error_${e.error||"provider"}`);if("ready"!==e.phase||!e.obtainedAt)return this._t("status_idle");const s=new Date(e.obtainedAt).toLocaleTimeString(a(this.hass),{hour:"2-digit",minute:"2-digit"}),i=this._snapshot.topologies.find(e=>"zha"===t?"zha"===e.provider:`z2m:${e.instanceId}`===t),o=!!i&&!!this.registry&&yo(i,this.devices,this.registry).warnings.length>0;return e.partial||o?this._t("status_partial",{time:s}):i&&!i.links.length?this._t("status_no_links",{time:s}):this._t(Date.now()-e.obtainedAt>wo?"status_stale":"status_ready",{time:s})}_busy(t){return"loading"===this._snapshot.states[t]?.phase}async _readZha(){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).readZhaTopology(this.hass)}async _refreshZ2m(t){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).refreshZ2mTopology(this.hass,t)}render(){const t=this._admin,e=this.value.enabled,s=t&&this.savedEnabled,i=this._topics();return h` + .ariaLabel=${this._t("help_aria")}>`:l}async _ensureRuntime(){return this._runtime||(this._runtime=await import("./zigbee-topology-runtime-Dpiom0TO.js"),this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this._release=this._runtime.subscribeZigbeeTopology(this.hass,()=>{this._snapshot=this._runtime.zigbeeTopologyRuntimeSnapshot(this.hass),this.requestUpdate()}),this.requestUpdate()),this._runtime}_emit(t){this._admin&&this.dispatchEvent(new CustomEvent("hp-topology-settings-change",{detail:t,bubbles:!0,composed:!0}))}_topics(){return this.value.z2mBaseTopics.length?this.value.z2mBaseTopics:["zigbee2mqtt"]}_editTopics(t){this._topicText=t;const e=t.split(/[\r\n,]+/).map(t=>t.trim()).filter(Boolean),s=e.map(R).filter(Boolean);this._invalidTopic=s.length!==e.length,this._invalidTopic?this.requestUpdate():this._emit({...this.value,z2mBaseTopics:[...new Set(s)].slice(0,8)})}_status(t){const e=this._snapshot.states[t];if(!e)return this._t("status_idle");if("loading"===e.phase)return this._t("status_loading");if("error"===e.phase)return this._t(`error_${e.error||"provider"}`);if("ready"!==e.phase||!e.obtainedAt)return this._t("status_idle");const s=new Date(e.obtainedAt).toLocaleTimeString(a(this.hass),{hour:"2-digit",minute:"2-digit"}),i=this._snapshot.topologies.find(e=>"zha"===t?"zha"===e.provider:`z2m:${e.instanceId}`===t),o=!!i&&!!this.registry&&yo(i,this.devices,this.registry).warnings.length>0;return e.partial||o?this._t("status_partial",{time:s}):i&&!i.links.length?this._t("status_no_links",{time:s}):this._t(Date.now()-e.obtainedAt>wo?"status_stale":"status_ready",{time:s})}_busy(t){return"loading"===this._snapshot.states[t]?.phase}async _readZha(){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).readZhaTopology(this.hass)}async _refreshZ2m(t){this.savedEnabled&&this._admin&&(await this._ensureRuntime()).refreshZ2mTopology(this.hass,t)}render(){const t=this._admin,e=this.value.enabled,s=t&&this.savedEnabled,i=this._topics();return h`
    ${this._t("title")}${this._help()}
    - `}}const hc=(t,e)=>t[0]*e[1]-t[1]*e[0],cc=(t,e)=>t[0]*e[0]+t[1]*e[1],dc=(t,e)=>[t[0]-e[0],t[1]-e[1]],pc=(t,e,s)=>[t[0]+e[0]*s,t[1]+e[1]*s];function uc(t,e,s){return Math.abs(hc(t,e))<=s}function _c(t,e,s){return Math.abs(hc(dc(t,e),s))}function mc(t,e,s,i,o){const a=e[0]-t[0],n=e[1]-t[1],r=Math.hypot(a,n);if(!(r>o&&s>0))return[];const l=[a/r,n/r];return function(t,e,s){const i=e.map(([e,s])=>[Math.max(0,Math.min(e,s)),Math.min(t,Math.max(e,s))]).filter(([t,e])=>e>t+s).sort((t,e)=>t[0]-e[0]||t[1]-e[1]),o=[];for(const t of i){const e=o[o.length-1];!e||t[0]>e[1]+s?o.push([...t]):e[1]=Math.max(e[1],t[1])}const a=[];let n=0;for(const[t,e]of o)t>n+s&&a.push([n,t]),n=Math.max(n,e);return t>n+s&&a.push([n,t]),a}(r,i.flatMap(e=>{const i=e.b[0]-e.a[0],a=e.b[1]-e.a[1],n=Math.hypot(i,a);if(!(n>o&&uc(l,[i/n,a/n],1e-6)))return[];if(_c(e.a,t,l)>1.1*Math.max(s,o)||_c(e.b,t,l)>1.1*Math.max(s,o))return[];return[[cc(dc(e.a,t),l),cc(dc(e.b,t),l)]]}),o).flatMap(([e,i])=>{const o=Jt({a:pc(t,l,e),b:pc(t,l,i),halfDepth:s});return o?[o]:[]})}function gc(t){const e=t.coordScale??1,s=Math.max(t.epsilon??2e-4*t.gridPitch,1e-9),i=[];for(const s of t.rooms||[]){if(!s?.id)continue;const o=et(t.rooms,s.id,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e);if(!o||o.poly.length<3)continue;const a=Kt(o.poly,o.offsets);!a||a.length<3||i.push({roomId:s.id,profile:o,inner:a})}i.sort((t,e)=>t.roomId.localeCompare(e.roomId));const o=(t.roomOpenings||[]).map(t=>{const e=t.angle*Math.PI/180,s=[Math.cos(e),Math.sin(e)],i=Math.max(0,t.length)/2;return{a:pc([t.x,t.y],s,-i),b:pc([t.x,t.y],s,i)}}),a=[];for(const i of Vt(t.rooms,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e))for(const t of mc(i.a,i.b,i.depthUnits/2,o,s))a.push({body:t});const n=new Map;for(const e of t.partitionCuts||[]){const t=n.get(e.hostId)||[];t.push(e),n.set(e.hostId,t)}for(const e of t.partitions||[]){const i=w(e.cm,t.cellCm,t.gridPitch)/2;for(const t of mc(e.a,e.b,i,n.get(e.id)||[],s))a.push({body:t,partitionId:e.id})}return{rooms:i,boundaries:a,epsilon:s}}function fc(t,e,s,i){const o=t.profile.offsets[e];if(!(o>0))return null;const a=function(t,e){const s=t[e],i=t[(e+1)%t.length],o=i[0]-s[0],a=i[1]-s[1],n=Math.hypot(o,a)||1;return function(t){let e=0;for(let s=0;s=0?[-a/n,o/n]:[a/n,-o/n]}(t.profile.poly,e),n=pc(s.center,a,o),r=[];for(let e=0;ei&&uc(s.axis,[l[0]/h,l[1]/h],1e-6)))continue;if(_c(o,n,s.axis)>i||_c(a,n,s.axis)>i)continue;const c=cc(dc(o,n),s.axis),d=cc(dc(a,n),s.axis);r.push([Math.min(c,d),Math.max(c,d)])}const l=function(t,e){t.sort((t,e)=>t[0]-e[0]||t[1]-e[1]);const s=[];for(const i of t){const t=s[s.length-1];!t||i[0]>t[1]+e?s.push([...i]):t[1]=Math.max(t[1],i[1])}return s}(r,i).find(([t,e])=>t<=i&&e>=-i);if(!l)return null;const[h,c]=l,d=pc(n,s.axis,-s.half),p=pc(n,s.axis,s.half),u=Math.max(0,-s.half-h),_=Math.max(0,c-s.half),m=u>0?pc(n,s.axis,h):d,g=_>0?pc(n,s.axis,c):p,f=cc(a,s.normal)>=0?1:-1,b=(e,i,o)=>({from:e,to:i,label:[(e[0]+i[0])/2,(e[1]+i[1])/2],axis:s.axis,labelNormal:a,distance:o,roomId:t.roomId,roomSide:f,source:"room-face"});return{left:b(d,m,u),right:b(p,g,_)}}function bc(t){const e=pc(t.center,t.axis,-t.half),s=pc(t.center,t.axis,t.half),i=pc(t.center,t.axis,Math.min(-t.half,t.targetLo)),o=pc(t.center,t.axis,Math.max(t.half,t.targetHi)),a=(e,s)=>({from:e,to:s,label:[(e[0]+s[0])/2,(e[1]+s[1])/2],axis:t.axis,labelNormal:t.normal,distance:Math.hypot(s[0]-e[0],s[1]-e[1]),source:"host-end"});return[a(e,i),a(s,o)]}function vc(t,e,s,i){const o=dc(s,e),a=cc(o,o);if(!(a>i*i))return Math.hypot(...dc(t,e))<=i;const n=cc(dc(t,e),o)/a;if(n<-i||n>1+i)return!1;const r=pc(e,o,Math.max(0,Math.min(1,n)));return Math.hypot(...dc(t,r))<=i}function yc(t,e,s){let i=!1;for(let o=0,a=e.length-1;ot[1]!=h>t[1]&&t[0]<(l-n)*(t[1]-r)/(h-r)+n&&(i=!i)}return i}function wc(t,e,s,i,o,a){const n=dc(i,s),r=hc(e,n);if(Math.abs(r)<=a)return null;const l=dc(s,t),h=hc(l,n)/r,c=hc(l,e)/r;return h<-a||h>o+a||c<-a||c>1+a?null:Math.max(0,Math.min(o,h))}function $c(t,e,s){const i=bc(s),o="partition"===t.host?.kind?t.host.id:void 0;return[{base:i[0],direction:[-s.axis[0],-s.axis[1]]},{base:i[1],direction:s.axis}].map(({base:t,direction:s})=>{const i=t.distance,a=function(t,e,s,i,o,a){let n=null;for(const r of i)if(!o||r.partitionId!==o){if(yc(t,r.body,a))return 0;for(let i=0;icc(dc(t,o),s));return{center:o,axis:s,normal:i,half:Math.max(0,t.renderedLength)/2,targetLo:Math.min(...a),targetHi:Math.max(...a)}}(t),i=e.rooms.flatMap(t=>{const i=function(t,e,s){const{profile:i}=t;let o=null;for(let t=0;t0))continue;const a=i.poly[t],n=i.poly[(t+1)%i.poly.length],r=dc(n,a),l=Math.hypot(r[0],r[1]);if(!(l>s&&uc(e.axis,[r[0]/l,r[1]/l],1e-6)))continue;if(_c(a,e.center,e.axis)>s||_c(n,e.center,e.axis)>s)continue;const h=cc(dc(a,e.center),e.axis),c=cc(dc(n,e.center),e.axis),d=Math.min(h,c),p=Math.max(h,c);if(d>-e.half+s||p0?d:p<0?-p:0);(!o||u2)return bc(s);if(i.length){const t=i.map(({room:t,edge:i})=>fc(t,i,s,e.epsilon));if(t.some(t=>!t))return bc(s);const o=t;return[...o.map(t=>t.left),...o.map(t=>t.right)]}return $c(t,e,s)}function xc(t,e,s,i,o){const a=(n=t,JSON.parse(JSON.stringify(n)));var n;const r=[...new Set(i.filter(t=>"string"==typeof t&&t))],l={partitionsMerged:0,partitionsReconciled:0,openingsRehosted:0,changed:!1};if(!r.length||!Array.isArray(a?.partitions))return{space:a,report:l};const h=JSON.stringify(a),c=tl(a.partitions,{pitch:o.pitch,seedIds:r,geometry:sl(a)});c.merged&&(a.partitions=c.partitions);const d=Array.isArray(a.openings)?a.openings:[];c.merged&&el(d,c.partitions,c.openingMoves,{coordScale:o.coordScale,cellCm:o.cellCm,gridPitch:o.gridPitch});const p=function(t,e,s){const i=new Set(t.map(t=>t.id)),o=new Map(s.map(t=>[t.fromId,t.toId]));return[...new Set(e.map(t=>o.get(t)||t).filter(t=>i.has(t)))].sort((t,e)=>t.localeCompare(e))}(c.partitions,r,c.openingMoves),u=gl(a,{rooms:e.rooms,wall_columns:e.wall_columns,partitions:c.partitions.map(t=>({...t,a:[t.a[0]*o.coordScale,t.a[1]*o.coordScale],b:[t.b[0]*o.coordScale,t.b[1]*o.coordScale]}))},a.walls,s,{...o,partitionIds:p});return u.partitionsReconciled&&(u.walls.length?a.walls=u.walls:delete a.walls,u.partitions.length?a.partitions=u.partitions:delete a.partitions,u.openings.length?a.openings=u.openings:delete a.openings),{space:a,report:{partitionsMerged:c.merged,partitionsReconciled:u.partitionsReconciled,openingsRehosted:u.openingsRehosted,changed:JSON.stringify(a)!==h}}}const Sc=t=>void 0===t?t:JSON.parse(JSON.stringify(t)),Mc=(t,e)=>!!t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,e);function Cc(t,e){const s=e?new Set(e):null;return(t||[]).filter(t=>"string"==typeof t?.id&&(!s||s.has(t.id))).map(t=>{const e=t.vacuum;return{markerId:t.id,roomIdPresent:Mc(t,"room_id"),...Mc(t,"room_id")?{roomId:Sc(t.room_id)}:{},vacuumPresent:Mc(t,"vacuum"),segmentMapPresent:Mc(e,"segment_map"),...Mc(e,"segment_map")?{segmentMap:Sc(e?.segment_map)}:{}}}).sort((t,e)=>t.markerId.localeCompare(e.markerId))}function Pc(t,e){const s=Sc([...t||[]]),i=new Set;for(const t of s){if("string"!=typeof t?.id)continue;let s=!1;"delete"===e.kind?t.room_id===e.roomId&&(delete t.room_id,s=!0):t.room_id===e.dropId&&(t.room_id=e.keepId,s=!0);const o=t.vacuum?.segment_map;if(o&&"object"==typeof o&&!Array.isArray(o)){for(const t of Object.keys(o))"delete"===e.kind&&o[t]===e.roomId?(delete o[t],s=!0):"merge"===e.kind&&o[t]===e.dropId&&(o[t]=e.keepId,s=!0);"delete"===e.kind&&0===Object.keys(o).length&&(t.vacuum&&delete t.vacuum.segment_map,t.vacuum&&0===Object.keys(t.vacuum).length&&delete t.vacuum)}s&&i.add(t.id)}const o=[...i].sort((t,e)=>t.localeCompare(e));return{markers:s,before:Cc(t,o),after:Cc(s,o),changed:o.length}}const Dc="1.73.0-beta.2";so.adopt($o,ko);const Ic={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},Tc={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},Rc=2e3,zc=1e3,Fc=(t,e,s,i)=>{for(t.delete(e),t.set(e,s);t.size>i;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},Ac=1e3,Nc=2e3,Hc=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}},Lc="6aa7e85aead059c4d286b3b943bfaf6a4b128ecf5e0a3be2860b34e0069d829a";class Oc{constructor(t){this.host=t,this._junctionBaselineCache=new WeakMap,this._resizePreviewNodes=null,this._resizeBaselineLimits=[],this._resizeBaseFrameStable=!0,this._supportPreviewGeneration=0,this._decorAssetGuardReplace=null,this._undoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();const t=this.host._geometryHistory.undo();t&&(this._applyGeometryState(t.before,!0)?this.host._showToast(this.host._t("history.undone",{name:t.name})):this.host._geometryHistory.clear())},this._redoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();if(this.host._activeWallChainId&&this.host._wallChainRedo.length){const t=this.host._activeWallChainId,e=this.host._path.map(t=>[...t]),s=[...this.host._activeWallChainPartitionIds],i=[...this.host._wallChainSegmentCms],o=[...this.host._wallChainRedo],a=o[o.length-1],n=this.host._geometryHistory.redo();if(!n)return;return this._applyGeometryState(n.after,!0)?(this.host._activeWallChainId=t,this.host._path=[...e,[...a.point]],this.host._activeWallChainPartitionIds=[...s,a.id],this.host._wallChainSegmentCms=[...i,a.cm],this.host._wallChainRedo=o.slice(0,-1),this._clearPlanSnapHover(),void this.host._showToast(this.host._t("history.redone",{name:n.name}))):void this.host._geometryHistory.clear()}const t=this.host._geometryHistory.redo();t&&(this._applyGeometryState(t.after,!0)?this.host._showToast(this.host._t("history.redone",{name:t.name})):this.host._geometryHistory.clear())},this._savePhysicalDialog=()=>{const t=this.host._physicalDialog,e=this.host._curSpaceCfg,s=this.host._spaceModel();if(!t||!e||!s)return;const i=lo(t.cm);if(null==i)return void this._showPhysicalRange("column"===t.kind?Yt:100,"column"===t.kind?1:0);const o=this.host._imperial?2.54*i:i,a="column"===t.kind?Yt:100,n="column"===t.kind?1:0;if(!Number.isFinite(o)||oa)return void this._showPhysicalRange(a,n);if("column"===t.kind){const e=s.wall_columns.find(e=>e.id===t.id);if(!e)return;const i=lo(t.angle||"0");if("circle"!==t.shape&&(null==i||i<0||i>=90))return void this.host._showToast(this.host._t("toast.physical_angle"));const a="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:o}:{id:t.id,shape:"square",center:e.center,cm:o,angle:i};if(s.wall_columns.some(e=>e.id!==t.id&&Xt(e,a,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"))}const r=this._geometrySnapshot();if("partition"===t.kind){const s=(e.partitions||[]).find(e=>e.id===t.id);if(s&&0===o&&Zt(e.openings,{kind:"partition",id:t.id}))return void this.host._showToast(this.host._t("toast.zero_wall_opening_conflict"));s&&(s.cm=o)}else if("column"===t.kind){const s=(e.wall_columns||[]).find(e=>e.id===t.id);s&&(s.cm=Qt(o),s.shape="circle"===t.shape?"circle":"square","square"===s.shape?s.angle=lo(t.angle||"0"):delete s.angle)}const l=this._commitPhysicalGeometry(this.host._t("history.physical_edit"),r);this.host._physicalDialog=null,l||this.host.requestUpdate()},this._deletePhysicalSelection=async()=>{const t=this.host._physicalSel,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();if("partition"===t.kind){const s=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(s.length)return void(this.host._partitionDeleteDialog={id:t.id,openings:s.map(t=>JSON.parse(JSON.stringify(t)))})}const i="partition"===t.kind?"partitions":"wall_columns";e[i]=(e[i]||[]).filter(e=>e.id!==t.id),e[i].length||delete e[i],this.host._activeWallChainPartitionIds.includes(t.id)&&this._cancelPath(),this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._confirmPartitionDelete=()=>{const t=this.host._partitionDeleteDialog,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this.host._partitionDeleteDialog=null,this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._furnShiftListener=t=>{if("Shift"!==t.key)return;const e=this.host._furnPreviewInput;if(!e)return;const s="keydown"===t.type;e.free!==s&&(this.host._furnPreviewInput={...e,free:s},this.host.requestUpdate())},this._furnShiftAttached=!1,this._confirmRoomDelete=t=>{const e=this.host._roomDeleteDialog,s=this.host._curSpaceCfg,i=this.host._spaceModel();if(!e||!s||!i)return;const o=i.rooms.find(t=>t.id===e.roomId);if(!o)return void(this.host._roomDeleteDialog=null);const a=this.host._openCuts(),n=Lh(ct(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac).filter(t=>t.roomId===o.id),i.partitions,this.host._openingsR.map(t=>({...t,x:t.rx,y:t.ry})),.02*this.host._gridPitch),r=new Set(n.materialize.filter(t=>!t.reusePartitionId).map(t=>t.interval.key)).size;if(t&&(s.partitions||[]).length+r>Nc)return void this.host._showToast(this.host._t("toast.physical_limit"));const l=this._geometrySnapshot(),h=Pc(this.host._serverCfg?.markers||[],{kind:"delete",roomId:e.roomId});l&&h.changed&&(l.roomReferences=h.before);const c=te(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac);if(t){s.partitions||=[];const t=new Map,e=new Map,i=t=>{const e=(s.wall_segments||[]).find(e=>{const s=[Number(e.a?.[0])*Ac,Number(e.a?.[1])*Ac],i=[Number(e.b?.[0])*Ac,Number(e.b?.[1])*Ac];return this._samePt(t.a,s)&&this._samePt(t.b,i)||this._samePt(t.a,i)&&this._samePt(t.b,s)});return"string"==typeof e?.id&&e.id?e.id:null},o=Date.now().toString(36);for(const a of n.materialize){let n=a.reusePartitionId?s.partitions.find(t=>t.id===a.reusePartitionId):e.get(a.interval.key);n||(n={id:i(a.interval)||`partition-room-${o}-${e.size}`,a:[a.interval.a[0]/Ac,a.interval.a[1]/Ac],b:[a.interval.b[0]/Ac,a.interval.b[1]/Ac],cm:a.interval.cm},s.partitions.push(n),e.set(a.interval.key,n)),t.set(a.interval.key,n)}for(const e of s.openings||[]){const s=n.openingIntervals.get(e.id),i=s?t.get(s):null,o=this.host._openingsR.find(t=>t.id===e.id);if(!i||!o)continue;const a={a:[i.a[0]*Ac,i.a[1]*Ac],b:[i.b[0]*Ac,i.b[1]*Ac]};e.host={kind:"partition",id:i.id,t:Oh([o.rx,o.ry],a)}}}else if(n.removeOpeningIds.length){const t=new Set(n.removeOpeningIds);s.openings=(s.openings||[]).filter(e=>!t.has(e.id)),s.openings.length||delete s.openings}s.rooms=s.rooms.filter(t=>t.id!==o.id),h.changed&&this.host._serverCfg&&(this.host._serverCfg.markers=h.markers),this.host._cfgEpoch++;const d=this.host._normalizeWalls(c,this.host._openCuts());d.length?s.walls=d:delete s.walls,this.host._roomDeleteDialog=null,this._commitPhysicalGeometry(this.host._t(t?"history.delete_room_keep_walls":"history.delete_room_with_walls"),l),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host.requestUpdate()},this._rebindPartitionOpening=()=>{const t=this.host._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this.host._tool&&(this.host._openingRebindId=e,this.host._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this.host._openingPresetRevision},this.host._openingDialog=null,this.host._openingHoverCandidate=null)},this._deviceInboxTabKey=t=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;const e=this.host._deviceInbox;if(!e)return;const s=["on_plan","available","hidden","readd"],i="ArrowRight"===t.key?1:-1,o=(s.indexOf(e.tab)+i+s.length)%s.length;this.host._deviceInbox={...e,tab:s[o],limit:100,onlyNew:!1},t.preventDefault()},this._keepClosedAsPartitions=()=>{this.host._wallFaceBatch?this._decideWallFace(!1):this.host._contourClosed&&!this.host._pendingSplit&&this.host._curSpaceCfg&&this._finalizeWallChainPartitions(this.host._activeWallChainPartitionIds)&&(this.host._roomDialog=!1,this.host._path=[],this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this.host.requestUpdate())},this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}},this._openSettingsDialog=()=>{if(!this.host._norm)return;const t=this.host._glowRadiusCm,e=this.host._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this.host._settingsDialog={colors:JSON.parse(JSON.stringify(this.host._fillColors)),glowRadius:e,bgColor:ne(this.host._settings,{bgColor:null})||null,northDeg:ae(this.host._settings,{}),bgMode:oe(this.host._settings,{}),sunRays:ie(this.host._settings,{}),showRoomTooltip:se(this.host._settings),zigbeeTopology:ee(this.host._settings),busy:!1}},this._openSupportDialog=()=>{this.host._norm&&this.host._canEdit&&(clearTimeout(this._supportExpiryTimer),this._supportExpiryTimer=void 0,this._supportPreviewGeneration+=1,this.host._supportDialog={draftId:tc("draft"),idempotencyKey:tc("report"),submissionFingerprint:"",contact:"",message:"",attach:!1,status:"idle",preview:null,rawOpen:!1,errorCode:"",reportId:""})},this._openAlignDialog=()=>this._previewAlignDialog(!1),this._toggleOptimizeLivePositions=()=>{const t=this.host._alignDialog;t&&!t.busy&&t.report.liveMissingPositions.length&&this._previewAlignDialog(!t.removeLiveMissingPositions)},this._openBackupExport=()=>{this.host._settingsDialog=null,this.host._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._decorStylePersistTimer=null,this._openRulesDialog=()=>{if(!this.host._norm)return;const t=this.host._settings.icon_rules,e=(t&&t.length?t:re).map(t=>({...t}));this.host._rulesDialog={rules:e,test:"",busy:!1}},this._discoveryPreviewMemo=null,this._decorImages=new lc(t,{decorSnap:(t,e)=>this._decorSnap(t,e),geometrySnapshot:()=>this._geometrySnapshot(),clearFurniturePreview:()=>this._clearFurniturePreview(),recordGeometry:(t,e)=>this._recordGeometry(t,e),saveConfig:()=>this._saveConfig(),saveShape:()=>this._decorSaveShape(),setGuardReplace:t=>{this._decorAssetGuardReplace=t},furnShiftDetach:()=>this._furnShiftDetach(),furnPick:t=>this._furnPick(t),furnFieldValue:t=>this._furnFieldValue(t),furnFieldToCm:t=>this._furnFieldToCm(t)}),t._editorSecondary=new Vh({root:()=>t.renderRoot,requestUpdate:()=>t.requestUpdate(),updateComplete:()=>t.updateComplete,clearTip:()=>{t._tip=null}}),t._resize=new en}_routeLiveEditorUpdate(t,e){const s=qo(this.host,t,e);return!s&&this.host._resize.preview&&(this._resizeBaseFrameStable=!1),s}_commitLiveEditor(){!function(t){const e=t,s=Wo(t);s.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(s.raf),s.raf=0,Vo(s);const i=e.renderRoot?.querySelector("[data-hp-live-editor]");i&&u(l,i);const o=e.renderRoot?.querySelector("[data-hp-live-editor-html]");if(o){const t=e._viewOr(e._baseVb());u(e._renderLiveEditorMeasurements(t),o)}Go(s,s.requestedRevision)}(this.host)}_disposeLiveEditor(){!function(t){Ho(t);const e=Lo.get(t);e&&(e.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(e.raf),Vo(e),Go(e,e.requestedRevision),Lo.delete(t))}(this.host)}async _whenLiveEditorSettled(){await this.host.updateComplete,await function(t){const e=Lo.get(t);if(!e||!e.raf||e.paintedRevision>=e.requestedRevision)return Promise.resolve();const s=e.requestedRevision;return new Promise(t=>e.waiters.push({revision:s,resolve:t}))}(this.host)}_queuePointerMove(t,e){Ao(this.host,t,e)}_flushPointerMove(t){No(this.host,t)}_cancelPointerMove(t){Ho(this.host,t)}_help(t){const e=`${t}.aria`,s=a(this.host.hass,this.host._config?.language);return le(s,t)&&le(s,e)?h``}}const hc=(t,e)=>t[0]*e[1]-t[1]*e[0],cc=(t,e)=>t[0]*e[0]+t[1]*e[1],dc=(t,e)=>[t[0]-e[0],t[1]-e[1]],pc=(t,e,s)=>[t[0]+e[0]*s,t[1]+e[1]*s];function uc(t,e,s){return Math.abs(hc(t,e))<=s}function _c(t,e,s){return Math.abs(hc(dc(t,e),s))}function mc(t,e,s,i,o){const a=e[0]-t[0],n=e[1]-t[1],r=Math.hypot(a,n);if(!(r>o&&s>0))return[];const l=[a/r,n/r];return function(t,e,s){const i=e.map(([e,s])=>[Math.max(0,Math.min(e,s)),Math.min(t,Math.max(e,s))]).filter(([t,e])=>e>t+s).sort((t,e)=>t[0]-e[0]||t[1]-e[1]),o=[];for(const t of i){const e=o[o.length-1];!e||t[0]>e[1]+s?o.push([...t]):e[1]=Math.max(e[1],t[1])}const a=[];let n=0;for(const[t,e]of o)t>n+s&&a.push([n,t]),n=Math.max(n,e);return t>n+s&&a.push([n,t]),a}(r,i.flatMap(e=>{const i=e.b[0]-e.a[0],a=e.b[1]-e.a[1],n=Math.hypot(i,a);if(!(n>o&&uc(l,[i/n,a/n],1e-6)))return[];if(_c(e.a,t,l)>1.1*Math.max(s,o)||_c(e.b,t,l)>1.1*Math.max(s,o))return[];return[[cc(dc(e.a,t),l),cc(dc(e.b,t),l)]]}),o).flatMap(([e,i])=>{const o=Jt({a:pc(t,l,e),b:pc(t,l,i),halfDepth:s});return o?[o]:[]})}function gc(t){const e=t.coordScale??1,s=Math.max(t.epsilon??2e-4*t.gridPitch,1e-9),i=[];for(const s of t.rooms||[]){if(!s?.id)continue;const o=et(t.rooms,s.id,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e);if(!o||o.poly.length<3)continue;const a=Kt(o.poly,o.offsets);!a||a.length<3||i.push({roomId:s.id,profile:o,inner:a})}i.sort((t,e)=>t.roomId.localeCompare(e.roomId));const o=(t.roomOpenings||[]).map(t=>{const e=t.angle*Math.PI/180,s=[Math.cos(e),Math.sin(e)],i=Math.max(0,t.length)/2;return{a:pc([t.x,t.y],s,-i),b:pc([t.x,t.y],s,i)}}),a=[];for(const i of Vt(t.rooms,t.walls,t.openCuts,t.pitch,t.cellCm,t.gridPitch,e))for(const t of mc(i.a,i.b,i.depthUnits/2,o,s))a.push({body:t});const n=new Map;for(const e of t.partitionCuts||[]){const t=n.get(e.hostId)||[];t.push(e),n.set(e.hostId,t)}for(const e of t.partitions||[]){const i=w(e.cm,t.cellCm,t.gridPitch)/2;for(const t of mc(e.a,e.b,i,n.get(e.id)||[],s))a.push({body:t,partitionId:e.id})}return{rooms:i,boundaries:a,epsilon:s}}function fc(t,e,s,i){const o=t.profile.offsets[e];if(!(o>0))return null;const a=function(t,e){const s=t[e],i=t[(e+1)%t.length],o=i[0]-s[0],a=i[1]-s[1],n=Math.hypot(o,a)||1;return function(t){let e=0;for(let s=0;s=0?[-a/n,o/n]:[a/n,-o/n]}(t.profile.poly,e),n=pc(s.center,a,o),r=[];for(let e=0;ei&&uc(s.axis,[l[0]/h,l[1]/h],1e-6)))continue;if(_c(o,n,s.axis)>i||_c(a,n,s.axis)>i)continue;const c=cc(dc(o,n),s.axis),d=cc(dc(a,n),s.axis);r.push([Math.min(c,d),Math.max(c,d)])}const l=function(t,e){t.sort((t,e)=>t[0]-e[0]||t[1]-e[1]);const s=[];for(const i of t){const t=s[s.length-1];!t||i[0]>t[1]+e?s.push([...i]):t[1]=Math.max(t[1],i[1])}return s}(r,i).find(([t,e])=>t<=i&&e>=-i);if(!l)return null;const[h,c]=l,d=pc(n,s.axis,-s.half),p=pc(n,s.axis,s.half),u=Math.max(0,-s.half-h),_=Math.max(0,c-s.half),m=u>0?pc(n,s.axis,h):d,g=_>0?pc(n,s.axis,c):p,f=cc(a,s.normal)>=0?1:-1,b=(e,i,o)=>({from:e,to:i,label:[(e[0]+i[0])/2,(e[1]+i[1])/2],axis:s.axis,labelNormal:a,distance:o,roomId:t.roomId,roomSide:f,source:"room-face"});return{left:b(d,m,u),right:b(p,g,_)}}function bc(t){const e=pc(t.center,t.axis,-t.half),s=pc(t.center,t.axis,t.half),i=pc(t.center,t.axis,Math.min(-t.half,t.targetLo)),o=pc(t.center,t.axis,Math.max(t.half,t.targetHi)),a=(e,s)=>({from:e,to:s,label:[(e[0]+s[0])/2,(e[1]+s[1])/2],axis:t.axis,labelNormal:t.normal,distance:Math.hypot(s[0]-e[0],s[1]-e[1]),source:"host-end"});return[a(e,i),a(s,o)]}function vc(t,e,s,i){const o=dc(s,e),a=cc(o,o);if(!(a>i*i))return Math.hypot(...dc(t,e))<=i;const n=cc(dc(t,e),o)/a;if(n<-i||n>1+i)return!1;const r=pc(e,o,Math.max(0,Math.min(1,n)));return Math.hypot(...dc(t,r))<=i}function yc(t,e,s){let i=!1;for(let o=0,a=e.length-1;ot[1]!=h>t[1]&&t[0]<(l-n)*(t[1]-r)/(h-r)+n&&(i=!i)}return i}function wc(t,e,s,i,o,a){const n=dc(i,s),r=hc(e,n);if(Math.abs(r)<=a)return null;const l=dc(s,t),h=hc(l,n)/r,c=hc(l,e)/r;return h<-a||h>o+a||c<-a||c>1+a?null:Math.max(0,Math.min(o,h))}function $c(t,e,s){const i=bc(s),o="partition"===t.host?.kind?t.host.id:void 0;return[{base:i[0],direction:[-s.axis[0],-s.axis[1]]},{base:i[1],direction:s.axis}].map(({base:t,direction:s})=>{const i=t.distance,a=function(t,e,s,i,o,a){let n=null;for(const r of i)if(!o||r.partitionId!==o){if(yc(t,r.body,a))return 0;for(let i=0;icc(dc(t,o),s));return{center:o,axis:s,normal:i,half:Math.max(0,t.renderedLength)/2,targetLo:Math.min(...a),targetHi:Math.max(...a)}}(t),i=e.rooms.flatMap(t=>{const i=function(t,e,s){const{profile:i}=t;let o=null;for(let t=0;t0))continue;const a=i.poly[t],n=i.poly[(t+1)%i.poly.length],r=dc(n,a),l=Math.hypot(r[0],r[1]);if(!(l>s&&uc(e.axis,[r[0]/l,r[1]/l],1e-6)))continue;if(_c(a,e.center,e.axis)>s||_c(n,e.center,e.axis)>s)continue;const h=cc(dc(a,e.center),e.axis),c=cc(dc(n,e.center),e.axis),d=Math.min(h,c),p=Math.max(h,c);if(d>-e.half+s||p0?d:p<0?-p:0);(!o||u2)return bc(s);if(i.length){const t=i.map(({room:t,edge:i})=>fc(t,i,s,e.epsilon));if(t.some(t=>!t))return bc(s);const o=t;return[...o.map(t=>t.left),...o.map(t=>t.right)]}return $c(t,e,s)}function xc(t,e,s,i,o){const a=(n=t,JSON.parse(JSON.stringify(n)));var n;const r=[...new Set(i.filter(t=>"string"==typeof t&&t))],l={partitionsMerged:0,partitionsReconciled:0,openingsRehosted:0,changed:!1};if(!r.length||!Array.isArray(a?.partitions))return{space:a,report:l};const h=JSON.stringify(a),c=tl(a.partitions,{pitch:o.pitch,seedIds:r,geometry:sl(a)});c.merged&&(a.partitions=c.partitions);const d=Array.isArray(a.openings)?a.openings:[];c.merged&&el(d,c.partitions,c.openingMoves,{coordScale:o.coordScale,cellCm:o.cellCm,gridPitch:o.gridPitch});const p=function(t,e,s){const i=new Set(t.map(t=>t.id)),o=new Map(s.map(t=>[t.fromId,t.toId]));return[...new Set(e.map(t=>o.get(t)||t).filter(t=>i.has(t)))].sort((t,e)=>t.localeCompare(e))}(c.partitions,r,c.openingMoves),u=gl(a,{rooms:e.rooms,wall_columns:e.wall_columns,partitions:c.partitions.map(t=>({...t,a:[t.a[0]*o.coordScale,t.a[1]*o.coordScale],b:[t.b[0]*o.coordScale,t.b[1]*o.coordScale]}))},a.walls,s,{...o,partitionIds:p});return u.partitionsReconciled&&(u.walls.length?a.walls=u.walls:delete a.walls,u.partitions.length?a.partitions=u.partitions:delete a.partitions,u.openings.length?a.openings=u.openings:delete a.openings),{space:a,report:{partitionsMerged:c.merged,partitionsReconciled:u.partitionsReconciled,openingsRehosted:u.openingsRehosted,changed:JSON.stringify(a)!==h}}}const Sc=t=>void 0===t?t:JSON.parse(JSON.stringify(t)),Mc=(t,e)=>!!t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,e);function Cc(t,e){const s=e?new Set(e):null;return(t||[]).filter(t=>"string"==typeof t?.id&&(!s||s.has(t.id))).map(t=>{const e=t.vacuum;return{markerId:t.id,roomIdPresent:Mc(t,"room_id"),...Mc(t,"room_id")?{roomId:Sc(t.room_id)}:{},vacuumPresent:Mc(t,"vacuum"),segmentMapPresent:Mc(e,"segment_map"),...Mc(e,"segment_map")?{segmentMap:Sc(e?.segment_map)}:{}}}).sort((t,e)=>t.markerId.localeCompare(e.markerId))}function Pc(t,e){const s=Sc([...t||[]]),i=new Set;for(const t of s){if("string"!=typeof t?.id)continue;let s=!1;"delete"===e.kind?t.room_id===e.roomId&&(delete t.room_id,s=!0):t.room_id===e.dropId&&(t.room_id=e.keepId,s=!0);const o=t.vacuum?.segment_map;if(o&&"object"==typeof o&&!Array.isArray(o)){for(const t of Object.keys(o))"delete"===e.kind&&o[t]===e.roomId?(delete o[t],s=!0):"merge"===e.kind&&o[t]===e.dropId&&(o[t]=e.keepId,s=!0);"delete"===e.kind&&0===Object.keys(o).length&&(t.vacuum&&delete t.vacuum.segment_map,t.vacuum&&0===Object.keys(t.vacuum).length&&delete t.vacuum)}s&&i.add(t.id)}const o=[...i].sort((t,e)=>t.localeCompare(e));return{markers:s,before:Cc(t,o),after:Cc(s,o),changed:o.length}}const Dc="1.73.0-beta.2";so.adopt($o,ko);const Ic={badge:"display.badge",icon_ripple:"display.icon_ripple",value:"display.value",static_icon:"display.static_icon"},Tc={badge:"marker.display_hint_badge",icon_ripple:"marker.display_hint_icon_ripple",value:"marker.display_hint_value",static_icon:"marker.display_hint_static_icon"},Rc=2e3,zc=1e3,Fc=(t,e,s,i)=>{for(t.delete(e),t.set(e,s);t.size>i;){const e=t.keys().next().value;if(void 0===e)break;t.delete(e)}},Ac=1e3,Nc=2e3,Hc=t=>{try{t.target?.setPointerCapture?.(t.pointerId)}catch{}},Lc="6412fad64699400d6b77fdda3cf1ecebe27c1dc2134d0e63e34fc7ef196a99a0";class Oc{constructor(t){this.host=t,this._junctionBaselineCache=new WeakMap,this._resizePreviewNodes=null,this._resizeBaselineLimits=[],this._resizeBaseFrameStable=!0,this._supportPreviewGeneration=0,this._decorAssetGuardReplace=null,this._undoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();const t=this.host._geometryHistory.undo();t&&(this._applyGeometryState(t.before,!0)?this.host._showToast(this.host._t("history.undone",{name:t.name})):this.host._geometryHistory.clear())},this._redoGeometry=()=>{if(this.host._physicalDrag||this.host._physicalRotate)return void this._cancelPhysicalGesture();if(this.host._decorDraft)return this.host._decorDraft=null,void this.host.requestUpdate();if(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)return void this._cancelDecorGesture();if(this.host._resize.dragging)return void this._rszCancelDrag();if(this.host._activeWallChainId&&this.host._wallChainRedo.length){const t=this.host._activeWallChainId,e=this.host._path.map(t=>[...t]),s=[...this.host._activeWallChainPartitionIds],i=[...this.host._wallChainSegmentCms],o=[...this.host._wallChainRedo],a=o[o.length-1],n=this.host._geometryHistory.redo();if(!n)return;return this._applyGeometryState(n.after,!0)?(this.host._activeWallChainId=t,this.host._path=[...e,[...a.point]],this.host._activeWallChainPartitionIds=[...s,a.id],this.host._wallChainSegmentCms=[...i,a.cm],this.host._wallChainRedo=o.slice(0,-1),this._clearPlanSnapHover(),void this.host._showToast(this.host._t("history.redone",{name:n.name}))):void this.host._geometryHistory.clear()}const t=this.host._geometryHistory.redo();t&&(this._applyGeometryState(t.after,!0)?this.host._showToast(this.host._t("history.redone",{name:t.name})):this.host._geometryHistory.clear())},this._savePhysicalDialog=()=>{const t=this.host._physicalDialog,e=this.host._curSpaceCfg,s=this.host._spaceModel();if(!t||!e||!s)return;const i=lo(t.cm);if(null==i)return void this._showPhysicalRange("column"===t.kind?Yt:100,"column"===t.kind?1:0);const o=this.host._imperial?2.54*i:i,a="column"===t.kind?Yt:100,n="column"===t.kind?1:0;if(!Number.isFinite(o)||oa)return void this._showPhysicalRange(a,n);if("column"===t.kind){const e=s.wall_columns.find(e=>e.id===t.id);if(!e)return;const i=lo(t.angle||"0");if("circle"!==t.shape&&(null==i||i<0||i>=90))return void this.host._showToast(this.host._t("toast.physical_angle"));const a="circle"===t.shape?{id:t.id,shape:"circle",center:e.center,cm:o}:{id:t.id,shape:"square",center:e.center,cm:o,angle:i};if(s.wall_columns.some(e=>e.id!==t.id&&Xt(e,a,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"))}const r=this._geometrySnapshot();if("partition"===t.kind){const s=(e.partitions||[]).find(e=>e.id===t.id);if(s&&0===o&&Zt(e.openings,{kind:"partition",id:t.id}))return void this.host._showToast(this.host._t("toast.zero_wall_opening_conflict"));s&&(s.cm=o)}else if("column"===t.kind){const s=(e.wall_columns||[]).find(e=>e.id===t.id);s&&(s.cm=Qt(o),s.shape="circle"===t.shape?"circle":"square","square"===s.shape?s.angle=lo(t.angle||"0"):delete s.angle)}const l=this._commitPhysicalGeometry(this.host._t("history.physical_edit"),r);this.host._physicalDialog=null,l||this.host.requestUpdate()},this._deletePhysicalSelection=async()=>{const t=this.host._physicalSel,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();if("partition"===t.kind){const s=(e.openings||[]).filter(e=>"partition"===e.host?.kind&&e.host.id===t.id).sort((t,e)=>(t.host?.t||0)-(e.host?.t||0));if(s.length)return void(this.host._partitionDeleteDialog={id:t.id,openings:s.map(t=>JSON.parse(JSON.stringify(t)))})}const i="partition"===t.kind?"partitions":"wall_columns";e[i]=(e[i]||[]).filter(e=>e.id!==t.id),e[i].length||delete e[i],this.host._activeWallChainPartitionIds.includes(t.id)&&this._cancelPath(),this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._confirmPartitionDelete=()=>{const t=this.host._partitionDeleteDialog,e=this.host._curSpaceCfg;if(!t||!e)return;const s=this._geometrySnapshot();e.partitions=(e.partitions||[]).filter(e=>e.id!==t.id),e.partitions.length||delete e.partitions,e.openings=(e.openings||[]).filter(e=>"partition"!==e.host?.kind||e.host.id!==t.id),e.openings.length||delete e.openings,this.host._partitionDeleteDialog=null,this.host._physicalSel=null,this.host._physicalDialog=null,this._commitPhysicalGeometry(this.host._t("history.physical_delete"),s)},this._furnShiftListener=t=>{if("Shift"!==t.key)return;const e=this.host._furnPreviewInput;if(!e)return;const s="keydown"===t.type;e.free!==s&&(this.host._furnPreviewInput={...e,free:s},this.host.requestUpdate())},this._furnShiftAttached=!1,this._confirmRoomDelete=t=>{const e=this.host._roomDeleteDialog,s=this.host._curSpaceCfg,i=this.host._spaceModel();if(!e||!s||!i)return;const o=i.rooms.find(t=>t.id===e.roomId);if(!o)return void(this.host._roomDeleteDialog=null);const a=this.host._openCuts(),n=Lh(ct(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac).filter(t=>t.roomId===o.id),i.partitions,this.host._openingsR.map(t=>({...t,x:t.rx,y:t.ry})),.02*this.host._gridPitch),r=new Set(n.materialize.filter(t=>!t.reusePartitionId).map(t=>t.interval.key)).size;if(t&&(s.partitions||[]).length+r>Nc)return void this.host._showToast(this.host._t("toast.physical_limit"));const l=this._geometrySnapshot(),h=Pc(this.host._serverCfg?.markers||[],{kind:"delete",roomId:e.roomId});l&&h.changed&&(l.roomReferences=h.before);const c=te(i.rooms,this.host._spaceWalls,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac);if(t){s.partitions||=[];const t=new Map,e=new Map,i=t=>{const e=(s.wall_segments||[]).find(e=>{const s=[Number(e.a?.[0])*Ac,Number(e.a?.[1])*Ac],i=[Number(e.b?.[0])*Ac,Number(e.b?.[1])*Ac];return this._samePt(t.a,s)&&this._samePt(t.b,i)||this._samePt(t.a,i)&&this._samePt(t.b,s)});return"string"==typeof e?.id&&e.id?e.id:null},o=Date.now().toString(36);for(const a of n.materialize){let n=a.reusePartitionId?s.partitions.find(t=>t.id===a.reusePartitionId):e.get(a.interval.key);n||(n={id:i(a.interval)||`partition-room-${o}-${e.size}`,a:[a.interval.a[0]/Ac,a.interval.a[1]/Ac],b:[a.interval.b[0]/Ac,a.interval.b[1]/Ac],cm:a.interval.cm},s.partitions.push(n),e.set(a.interval.key,n)),t.set(a.interval.key,n)}for(const e of s.openings||[]){const s=n.openingIntervals.get(e.id),i=s?t.get(s):null,o=this.host._openingsR.find(t=>t.id===e.id);if(!i||!o)continue;const a={a:[i.a[0]*Ac,i.a[1]*Ac],b:[i.b[0]*Ac,i.b[1]*Ac]};e.host={kind:"partition",id:i.id,t:Oh([o.rx,o.ry],a)}}}else if(n.removeOpeningIds.length){const t=new Set(n.removeOpeningIds);s.openings=(s.openings||[]).filter(e=>!t.has(e.id)),s.openings.length||delete s.openings}s.rooms=s.rooms.filter(t=>t.id!==o.id),h.changed&&this.host._serverCfg&&(this.host._serverCfg.markers=h.markers),this.host._cfgEpoch++;const d=this.host._normalizeWalls(c,this.host._openCuts());d.length?s.walls=d:delete s.walls,this.host._roomDeleteDialog=null,this._commitPhysicalGeometry(this.host._t(t?"history.delete_room_keep_walls":"history.delete_room_with_walls"),l),this.host._regSignature="",this.host._maybeRebuildDevices(),this.host.requestUpdate()},this._rebindPartitionOpening=()=>{const t=this.host._openingDialog;if(!t?.id)return;const e=t.id;this._activateMarkupTool("opening"),"opening"===this.host._tool&&(this.host._openingRebindId=e,this.host._openingPreset={type:t.type,lengthCm:t.lengthCm,flipH:t.flipH,flipV:t.flipV,revision:++this.host._openingPresetRevision},this.host._openingDialog=null,this.host._openingHoverCandidate=null)},this._deviceInboxTabKey=t=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;const e=this.host._deviceInbox;if(!e)return;const s=["on_plan","available","hidden","readd"],i="ArrowRight"===t.key?1:-1,o=(s.indexOf(e.tab)+i+s.length)%s.length;this.host._deviceInbox={...e,tab:s[o],limit:100,onlyNew:!1},t.preventDefault()},this._keepClosedAsPartitions=()=>{this.host._wallFaceBatch?this._decideWallFace(!1):this.host._contourClosed&&!this.host._pendingSplit&&this.host._curSpaceCfg&&this._finalizeWallChainPartitions(this.host._activeWallChainPartitionIds)&&(this.host._roomDialog=!1,this.host._path=[],this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this.host.requestUpdate())},this._toggleServerPlans=async()=>{const t=this.host._spaceDialog;if(t)if(t.pickSaved)this.host._spaceDialog={...t,pickSaved:!1};else{this.host._spaceDialog={...t,pickSaved:!0,savedBusy:!0};try{const t=await this.host.hass.callWS({type:"houseplan/plans/list"}),e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:t?.plans||[],savedBusy:!1})}catch(t){const e=this.host._spaceDialog;e&&(this.host._spaceDialog={...e,saved:[],savedBusy:!1}),this.host._showToast(this.host._t("toast.plans_list_failed",{err:this.host._errText(t)}))}}},this._openSettingsDialog=()=>{if(!this.host._norm)return;const t=this.host._glowRadiusCm,e=this.host._imperial?Math.round(t/30.48*10)/10:Math.round(t)/100;this.host._settingsDialog={colors:JSON.parse(JSON.stringify(this.host._fillColors)),glowRadius:e,bgColor:ne(this.host._settings,{bgColor:null})||null,northDeg:ae(this.host._settings,{}),bgMode:oe(this.host._settings,{}),sunRays:ie(this.host._settings,{}),showRoomTooltip:se(this.host._settings),zigbeeTopology:ee(this.host._settings),busy:!1}},this._openSupportDialog=()=>{this.host._norm&&this.host._canEdit&&(clearTimeout(this._supportExpiryTimer),this._supportExpiryTimer=void 0,this._supportPreviewGeneration+=1,this.host._supportDialog={draftId:tc("draft"),idempotencyKey:tc("report"),submissionFingerprint:"",contact:"",message:"",attach:!1,status:"idle",preview:null,rawOpen:!1,errorCode:"",reportId:""})},this._openAlignDialog=()=>this._previewAlignDialog(!1),this._toggleOptimizeLivePositions=()=>{const t=this.host._alignDialog;t&&!t.busy&&t.report.liveMissingPositions.length&&this._previewAlignDialog(!t.removeLiveMissingPositions)},this._openBackupExport=()=>{this.host._settingsDialog=null,this.host._backupExportDialog={kind:"full",planOnly:!1,busy:!1,error:""}},this._decorStylePersistTimer=null,this._openRulesDialog=()=>{if(!this.host._norm)return;const t=this.host._settings.icon_rules,e=(t&&t.length?t:re).map(t=>({...t}));this.host._rulesDialog={rules:e,test:"",busy:!1}},this._discoveryPreviewMemo=null,this._decorImages=new lc(t,{decorSnap:(t,e)=>this._decorSnap(t,e),geometrySnapshot:()=>this._geometrySnapshot(),clearFurniturePreview:()=>this._clearFurniturePreview(),recordGeometry:(t,e)=>this._recordGeometry(t,e),saveConfig:()=>this._saveConfig(),saveShape:()=>this._decorSaveShape(),setGuardReplace:t=>{this._decorAssetGuardReplace=t},furnShiftDetach:()=>this._furnShiftDetach(),furnPick:t=>this._furnPick(t),furnFieldValue:t=>this._furnFieldValue(t),furnFieldToCm:t=>this._furnFieldToCm(t)}),t._editorSecondary=new Vh({root:()=>t.renderRoot,requestUpdate:()=>t.requestUpdate(),updateComplete:()=>t.updateComplete,clearTip:()=>{t._tip=null}}),t._resize=new en}_routeLiveEditorUpdate(t,e){const s=qo(this.host,t,e);return!s&&this.host._resize.preview&&(this._resizeBaseFrameStable=!1),s}_commitLiveEditor(){!function(t){const e=t,s=Wo(t);s.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(s.raf),s.raf=0,Vo(s);const i=e.renderRoot?.querySelector("[data-hp-live-editor]");i&&u(l,i);const o=e.renderRoot?.querySelector("[data-hp-live-editor-html]");if(o){const t=e._viewOr(e._baseVb());u(e._renderLiveEditorMeasurements(t),o)}Go(s,s.requestedRevision)}(this.host)}_disposeLiveEditor(){!function(t){Ho(t);const e=Lo.get(t);e&&(e.raf&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(e.raf),Vo(e),Go(e,e.requestedRevision),Lo.delete(t))}(this.host)}async _whenLiveEditorSettled(){await this.host.updateComplete,await function(t){const e=Lo.get(t);if(!e||!e.raf||e.paintedRevision>=e.requestedRevision)return Promise.resolve();const s=e.requestedRevision;return new Promise(t=>e.waiters.push({revision:s,resolve:t}))}(this.host)}_queuePointerMove(t,e){Ao(this.host,t,e)}_flushPointerMove(t){No(this.host,t)}_cancelPointerMove(t){Ho(this.host,t)}_help(t){const e=`${t}.aria`,s=a(this.host.hass,this.host._config?.language);return le(s,t)&&le(s,e)?h``:l}_setMode(t,e=!0){t!==this.host._mode&&this.host._cancelDangerConfirm(),this.host._endTabDrag(),this._clearFurniturePreview(),this.host._pendingNavMode=null;const s=this.host._spaceModel();if(!s)return this.host._cancelModeTransition(!1),void(this.host._mode="view");if(this.host._kiosk&&"view"!==t)return;if(this.host._mode===t){if(!e&&"view"===t&&this.host._modeTransitionBusy){const e=this.host._currentModeVisual(t),s=this.host._modeTransitionTargetZoom,i=this.host._modeTransitionTargetCenterX,o=this.host._modeTransitionTargetCenterY;this.host._cancelModeTransition(!1),this.host._commitViewModeAtomic(e,s,i,o)}return}if("devices"===this.host._mode&&this.host._cancelDeviceDrag(),this.host._bootSoftCancel(),("plan"===t||"decor"===t)&&!this.host._norm)return void this.host._showToast(this.host._t("toast.markup_needs_server"));if(this.host._wallFaceBatch&&this._roomDialogCancel(),"plan"===this.host._mode&&"draw"===this.host._tool&&!this._finishWallChain())return;this.host._clearTransientHover(!0),this.host._cancelDevicePressFeedback();const i=this.host._mode,o=this.host._effectiveProjection(),a=this.host._currentModeVisual(i),n=this.host._modeTransitionBusy,r=a&&"view"!==i&&"view"!==t?{...a,toolbarContentOpacity:this.host._reducedMotion?1:.35}:a;this.host._cancelModeTransition(!1),this.host._editorSecondary.closeForNavigation(),(this.host._decorMove||this.host._dtDrag||this.host._bdDrag)&&this._cancelDecorGesture();const l=!s.bg&&"view"===t!=("view"===i),h=n&&"view"===i&&"view"!==t?this.host._modeTransitionEditorCamera:null;let c=h?.zoom??(n?this.host._modeTransitionTargetZoom:this.host._zoom),d=h?h.centerX:n?this.host._modeTransitionTargetCenterX:r?.viewport.centerX,p=h?h.centerY:n?this.host._modeTransitionTargetCenterY:r?.viewport.centerY;if("view"===i&&"view"!==t&&!n){const e=this.host._view;if(this.host._viewModeSnap={space:this.host._space,zoom:this.host._zoom,cx:e?this.host._logicalViewCenter(o)?.x:void 0,cy:e?this.host._logicalViewCenter(o)?.y:void 0},"iso"===o){const e=this.host._logicalViewCenter("iso");d=e?.x,p=e?.y,this.host._view=null,this.host._mode=t,this.host._applyView(this.host._zoom,e?.x,e?.y)}l&&(c=1,d=void 0,p=void 0)}if(this.host._mode=t,"devices"===i&&"devices"!==t&&(this.host._showHidden=!1,this.host._deviceInbox=null,this.host._deviceInboxReturn=null,this.host._deviceInboxMemo=null),this.host._editorChromeMode="view"===t?i:t,"view"===t){"view"===i||n||(this.host._modeTransitionEditorCamera={zoom:this.host._zoom,centerX:r?.viewport.centerX,centerY:r?.viewport.centerY});const t=this.host._viewModeSnap;if(t&&t.space===this.host._space){c=t.zoom;const e=this.host._labsIso&&"iso"===this.host._viewPreference[this.host._space]?"iso":"flat",s=null!=t.cx&&null!=t.cy&&"iso"===e?he([t.cx,t.cy],0):null;d=s?.[0]??t.cx,p=s?.[1]??t.cy}else t&&(c=this.host._zoomBySpace[this.host._space]||1,d=void 0,p=void 0)}else this.host._modeTransitionEditorCamera={zoom:c,centerX:d,centerY:p};this.host._modeTransitionTargetZoom=c,this.host._modeTransitionTargetCenterX=d,this.host._modeTransitionTargetCenterY=p,("iso"===o||"view"===t&&this.host._labsIso&&"iso"===this.host._viewPreference[this.host._space])&&(this.host._modeTransitionForceAtomic=!0);const u=++this.host._modeTransitionRequest;e?r?(this.host._modeTransitionPreparing=!0,this.host._modeTransitionVisual=r,this.host._prepareModeTransition(u,r,t,c,d,p)):(this.host._modeTransitionPreparing=!1,this.host._modeTransitionVisual=null,this.host._zoom=c,this.host._view=null,requestAnimationFrame(()=>{this.host.isConnected&&u===this.host._modeTransitionRequest&&this.host._mode===t&&(this.host._applyView(c,d,p),"view"===t&&(this.host._viewModeSnap=null,this.host._modeTransitionEditorCamera=null),this.host.requestUpdate())})):"view"===t&&this.host._commitViewModeAtomic(r,c,d,p),this.host._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!0),this.host._tool="draw",this.host._mergeSel=null,this.host._mergeDialog=null,this.host._splitSel=null,this.host._pendingSplit=null,this.host._selId=null,this.host._physicalSel=null,this.host._physicalDialog=null,this.host._physicalDrag=null,this._rszResetController(),this.host._tip=null,this.host._hoverRoom=null,this.host._decorDraft=null,this.host._decorSel=null,this.host._decorMove=null,this.host._backdropDialog=null,this.host._decorTool="select",this.host._bdDrag=null,this.host._dtDrag=null,this.host._dtBox=null,"plan"===t&&this._primeDrawWallField(),this.host._saveNav()}_primeDrawWallField(){null===this.host._drawWallField&&(this.host._drawWallField=ce(dt,this.host._imperial))}_showPhysicalRange(t=this.host._drawWallMaxCm,e=0){this.host._showToast(this.host._t("toast.physical_range",{min:ce(e,this.host._imperial),max:ce(t,this.host._imperial),unit:this.host._t(this.host._imperial?"wallthick.unit_in":"wallthick.unit_cm")}))}_mergeSpacePartitions(t,e){const s=t?.partitions||[];if(s.length<2)return 0;const i=tl(s,{pitch:O,seedIds:e,geometry:sl(t)});return i.merged?(t.partitions=i.partitions,el(t.openings,t.partitions,i.openingMoves,{coordScale:Ac,cellCm:this.host._cellCm,gridPitch:this.host._gridPitch}),i.merged):0}_finalizeWallChainPartitions(t){if(!t.length)return!0;const e=this.host._curSpaceCfg,s=this.host._spaceModel(),i=this._geometrySnapshot();if(!e||!s||!i)return!1;const o=t.map(t=>or(e,t)).find(Boolean)||null,a={path:this.host._path.map(t=>[...t]),chainId:this.host._activeWallChainId,ids:[...this.host._activeWallChainPartitionIds],cms:[...this.host._wallChainSegmentCms],redo:this.host._wallChainRedo.map(t=>({...t,point:[...t.point]})),closingCm:this.host._closingWallCm};let n;try{n=xc(e,s,this.host._openCuts(),t,{pitch:this.host._wallKeyPitch,cellCm:this.host._cellCm,gridPitch:this.host._gridPitch,coordScale:Ac})}catch{return this.host._showToast(this.host._t("toast.geometry_unsafe")),!1}if(!n.report.changed)return!0;const r=this.host._serverCfg,l=r?.spaces?.findIndex(t=>t.id===i.spaceId)??-1;if(l<0)return!1;r.spaces[l]=n.space;const h=function(t,e,s,i){const{host:o}=t,a=o._serverCfg,n=()=>t._commitPhysicalGeometry(e,s,[],!1);if(!s||!a||!i||10!==Number(a.model_version||0))return n();let r;try{r=En(a).config}catch(e){return t._clearGeometryGesture(),t._restoreGeometryStateLocal(s),t._showWallModelMigrationBlocked(e),!1}const l=r.spaces.find(t=>t.id===s.spaceId),h=JSON.parse(JSON.stringify(a));if(!l||!t._restoreGeometryStateInConfig(h,s))return n();const c=h.spaces.find(t=>t.id===s.spaceId),d=ar(l,i),p=ar(c,i);if(!d||!p)return n();const u={...r,spaces:[d.space]},_={...h,spaces:[p.space]};let m=null,g=!1;try{const t=o._path.length>=2?o._path.map(t=>[t[0]/nr,t[1]/nr]):[];g=bn(l)<=bn(s,t)&&o._checkSpacePhysicalGeometry(u,s.spaceId,t=>{m=t}).ok}catch{g=!1}if(!g)return rr(t,s);const f=t._junctionLimitsIntroduced(u,_,s.spaceId,m,d.roomIds);if(f.length)return t._clearGeometryGesture(),t._restoreGeometryStateLocal(s),o._showToast(t._junctionLimitLabel(f[0])),!1;Wn(a,r);const b=a.spaces.find(t=>t.id===s.spaceId),v=o._pendingPhysicalWrites.get(s.spaceId);return o._pendingPhysicalWrites.set(s.spaceId,{before:v?.before||s,fingerprint:Y(b)}),t._saveConfig(),!0}(this,this.host._t("history.wall_segment"),i,o);return!!h||(this.host._path=a.path,this.host._activeWallChainId=a.chainId,this.host._activeWallChainPartitionIds=a.ids,this.host._wallChainSegmentCms=a.cms,this.host._wallChainRedo=a.redo,this.host._closingWallCm=a.closingCm,!1)}_finishWallChain(){return!("draw"===this.host._tool&&!this.host._wallFaceBatch&&!this.host._roomDialog)||!!this._finalizeWallChainPartitions(this.host._activeWallChainPartitionIds)&&(this.host._path=[],this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this._clearPlanSnapHover(),!0)}_activateMarkupTool(t){t!==this.host._tool&&(this.host._wallFaceBatch&&this._roomDialogCancel(),("draw"!==this.host._tool||this._finishWallChain())&&(this._cancelPath(),"resize"===this.host._tool&&(this.host._resize.dragging?this._rszCancelDrag():this.host._resize.reset()),this.host._tool=t,"resize"===t&&this.host._resize.selectRoom(null),"wallthick"===t&&(this.host._wallDialog=null)))}_limitReached(t){const e=this.host._curSpaceCfg;if(!e)return!0;const s="partition"===t?(e.partitions||[]).length>=Nc:(e.wall_columns||[]).length>=500;return s&&this.host._showToast(this.host._t("toast.physical_limit")),s}_svgPoint(t){const e=this.host.renderRoot.querySelector(".stage").getBoundingClientRect();return this.host._screenToVb(t.clientX-e.left,t.clientY-e.top)}_snap(t){const e=this.host._gridPitch;return[de(pe(t[0],e)),de(pe(t[1],e))]}_snapDrawPoint(t,e=!1){const s=this.host._path[this.host._path.length-1],i=e&&s?ue(s,t,this.host._gridPitch,eo):t;return this._snap(i)}_planSnapOpeningCuts(t,e){if(!this.host._openingsR.length)return[];const s=this.host._openingWallIndexFor(t,e).value,i=[];for(const e of this.host._roomWallOpeningInputs(this.host._openingsR,t)){const t=bt(s,e);if(!t.negative&&!t.positive)continue;const o=e.angle*Math.PI/180,a=Math.cos(o)*e.length/2,n=Math.sin(o)*e.length/2;i.push([e.x-a,e.y-n,e.x+a,e.y+n])}return i}_planSnapGeometrySnapshot(){const t=this.host._spaceModel();if(!t)return{key:`${this.host._space}|empty`,value:{segments:[],endpoints:[]}};const e=[this.host._space,this.host._cfgEpoch,t.rooms.length,t.partitions.length].join("|");if(this.host._planSnapGeometryCache?.key===e)return this.host._planSnapGeometryCache;const s=this.host._openCuts(),i=oh({space:t,roomCuts:this._planSnapOpeningCuts(t,s),partitionCuts:this._partitionOpeningCuts(t),epsilon:2e-4*this.host._gridPitch});return this.host._planSnapGeometryCache={key:e,value:i},this.host._planSnapGeometryCache}_hiddenWallDiagnosticSnapshot(){const t=this.host._spaceModel();if(!t)return{key:`${this.host._space}|hidden-empty`,value:{segments:[],endpoints:[]}};const e=["hidden",this.host._space,this.host._cfgEpoch,t.rooms.length,t.partitions.length].join("|");if(this.host._hiddenWallDiagnosticCache?.key===e)return this.host._hiddenWallDiagnosticCache;const s=ih({space:t,epsilon:2e-4*this.host._gridPitch});return this.host._hiddenWallDiagnosticCache={key:e,value:s},this.host._hiddenWallDiagnosticCache}_planStructuralGeometrySnapshot(){const t=this.host._spaceModel();if(!t)return{key:`${this.host._space}|structural-empty`,value:{segments:[],endpoints:[]}};const e=["structural",this.host._space,this.host._cfgEpoch,t.rooms.length,t.partitions.length].join("|");if(this.host._planStructuralGeometryCache?.key===e)return this.host._planStructuralGeometryCache;const s=oh({space:t,epsilon:2e-4*this.host._gridPitch});return this.host._planStructuralGeometryCache={key:e,value:s},this.host._planStructuralGeometryCache}_planSnapContextKey(t){const e=this.host._path[0],s=this.host._path[this.host._path.length-1];return[t,this.host._tool,this.host._path.length,e?`${e[0]},${e[1]}`:"",s?`${s[0]},${s[1]}`:""].join("|")}_resolvePlanDrawPoint(t,e){const s=this._planSnapGeometrySnapshot(),i=this.host._path[this.host._path.length-1],o="draw"===this.host._tool&&this.host._path.length>=3?[{point:this.host._path[0],key:"closure:first-point"}]:[],a=this.host._path.length>1?this.host._path.slice(1):i?[i]:[],n={tolerance:this._cssPxToRender(12),distinguishTolerance:this._cssPxToRender(8),gridStep:this.host._gridPitch,excludePoints:a,extraEndpoints:o,epsilon:2e-4*this.host._gridPitch},r=e&&i?ch(s.value,t,{...n,anchor:i}):function(t,e,s){if(!(Jl(e)&&s.tolerance>=0))return{kind:"none",candidate:null,conflicts:[]};const i=s.epsilon??Vl,o=s.excludePoints||[],a=lh(rh(t,e,s),s.distinguishTolerance||0);if(a)return a;let n=null;for(const a of t.segments){const t=[a.a[0],a.a[1],a.b[0],a.b[1]],r=Ht([e[0],e[1]],t);if(r>s.tolerance)continue;const l=hh(a,e,s.gridStep);!ah(l,o,i)&&nh(r,a.key,n)&&(n={kind:"line",point:l,key:a.key,distance:r,segment:a})}return n?{kind:"resolved",candidate:n,conflicts:[]}:{kind:"none",candidate:null,conflicts:[]}}(s.value,t,n),l="resolved"===r.kind?r.candidate:null,h=l?[...l.point]:this._snapDrawPoint(t,e),c=i?_e(i,h):h;return{point:c,candidate:l&&V(c,l.point)?l:null,conflicts:"ambiguous"===r.kind?r.conflicts:[],ambiguous:"ambiguous"===r.kind,contextKey:this._planSnapContextKey(s.key)}}_clearPlanSnapHover(t=!0){this.host._planSnapHover=null,this._syncPlanSnapActiveMarker(null),this._syncPlanSnapConflictMarkers([]),t&&(this.host._cursorPt=null)}_samePt(t,e){return V(t,e)}_dropLegacySegments(t=this.host._serverCfg){for(const e of t?.markers||[])"ripple"===e.display&&(e.display="icon_ripple");for(const e of t?.spaces||[]){delete e.segments;const t=new Set,s=e=>"string"==typeof e&&e.length>=1&&e.length<=64&&!t.has(e),i=e=>(t.add(e),!0),o=t=>Array.isArray(t)&&2===t.length&&t.every(t=>Number.isFinite(Number(t))&&Math.abs(Number(t))<=jt);if(Array.isArray(e.partitions)&&(e.partitions=e.partitions.filter(t=>t&&s(t.id)&&o(t.a)&&o(t.b)&&Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1])>1e-9&&i(t.id)).map(t=>({...t,cm:Number.isFinite(Number(t.cm))?Math.max(0,Math.min(100,Number(t.cm))):15})),e.partitions.length||delete e.partitions),Array.isArray(e.wall_columns)&&(e.wall_columns=e.wall_columns.filter(t=>t&&s(t.id)&&o(t.center)&&i(t.id)).map(t=>({id:t.id,shape:"circle"===t.shape?"circle":"square",center:[Number(t.center[0]),Number(t.center[1])],cm:Qt(Number(t.cm)||15),..."circle"===t.shape?{}:{angle:me(t.angle)}})),e.wall_columns.length||delete e.wall_columns),Array.isArray(e.walls)){const t=ge(Rt({spaces:[e]}),e.id),s=t?fe(e,t,Ac,.02*xt).contour.map(t=>t.map(t=>t/Ac)):G(e.open_spans).map(t=>[t.a[0],t.a[1],t.b[0],t.b[1]]);e.walls=St(e.walls,e.rooms||[],O,1,s),e.walls.length||delete e.walls}}}_rollbackRejectedPhysicalWrites(t){if(!this.host._serverCfg||!t.length)return!1;let e=!1;for(const[s]of t){const t=this.host._pendingPhysicalWrites.get(s);t&&(e=this._restoreGeometryStateInConfig(this.host._serverCfg,t.before)||e,this.host._pendingPhysicalWrites.delete(s))}return!!e&&(this._clearGeometryGesture(),this.host._geometryHistory.clear(),this.host._cfgEpoch++,this.host._modelCache=null,this.host._wallUnionCache=null,this.host._physicalBodiesCache=null,this.host._frame=null,this.host._regSignature="",this.host._cfgContentFingerprint=d(this.host._serverCfg),this.host._maybeRebuildDevices(),this.host.requestUpdate(),!0)}async _reloadRejectedPhysicalWrite(){const t=this.host._writeChain;await t.catch(()=>{}),await this.host._reloadConfigOnly(!0)}_prepareConfigCandidate(t){return this._dropLegacySegments(t),be(t)}_writeConfig(t=null){this.host._writesPending++,this.host._writeChain=ve(this.host._writeChain,async()=>{if(!this.host._serverCfg)return;const e=d(this.host._serverCfg),s=this._prepareConfigCandidate(this.host._serverCfg),i=d(s);t&&e===t.attemptedFingerprint&&Object.assign(t,{revision:this.host._cfgRev,attempted:s,attemptedFingerprint:i});const o=[...this.host._pendingPhysicalWrites.entries()];for(const[t,e]of o){const i=s.spaces.find(e=>e.id===t),o=Y(i);if(o===e.fingerprint)continue;let a=!1;try{a=this.host._checkSpacePhysicalGeometry(s,t).ok}catch{a=!1}if(!a)throw this._restoreGeometryStateLocal(e.before),this.host._pendingPhysicalWrites.delete(t),this.host._geometryHistory.clear(),this.host._showToast(this.host._t("toast.geometry_unsafe")),Object.assign(new Error("unsafe wall geometry"),{code:"geometry-unsafe"});e.fingerprint=o}i!==d(this.host._serverCfg)&&(this.host._serverCfg=s),this.host._cfgContentFingerprint=i;try{await this.host._sendConfigCandidate(s)}catch(t){if(!this._rollbackRejectedPhysicalWrites(o))throw t;const e=t&&"object"==typeof t?t:Object.assign(new Error(String(t)),{cause:t});throw e.physicalGeometryRolledBack=!0,e}for(const[t,e]of o)this.host._pendingPhysicalWrites.get(t)?.fingerprint===e.fingerprint&&this.host._pendingPhysicalWrites.delete(t)});return this.host._writeChain.finally(()=>{this.host._writesPending--})}_saveConfig(){this.host._cfgEpoch++,this.host._saveConfigDebounced()}_geometrySnapshotFromConfig(t,e){const s=t?.spaces?.find(t=>t.id===e);if(!s)return null;const i=t=>JSON.parse(JSON.stringify(t)),o={};for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==s[t]&&(o[t]=s[t]);return{spaceId:e,rooms:i(s.rooms||[]),...Array.isArray(s.openings)?{openings:i(s.openings)}:{},...Array.isArray(s.walls)?{walls:i(s.walls)}:{},...Array.isArray(s.wall_segments)?{wall_segments:i(s.wall_segments)}:{},...Array.isArray(s.open_spans)?{open_spans:i(s.open_spans)}:{},...Array.isArray(s.partitions)?{partitions:i(s.partitions)}:{},...Array.isArray(s.wall_columns)?{wall_columns:i(s.wall_columns)}:{},...Array.isArray(s.decor)?{decor:i(s.decor)}:{},plan_transform:o}}_geometrySnapshot(t=this.host._space){return this._geometrySnapshotFromConfig(this.host._serverCfg,t)}_recordGeometry(t,e){if(!e)return;const s=this._geometrySnapshot(e.spaceId);s&&JSON.stringify(e)!==JSON.stringify(s)&&(e.wallChainSeedIds&&(s.wallChainSeedIds=[...this.host._activeWallChainPartitionIds]),e.roomReferences&&(s.roomReferences=Cc(this.host._serverCfg?.markers||[],e.roomReferences.map(t=>t.markerId))),this.host._geometryHistory.push({name:t,before:e,after:s}),this.host.requestUpdate())}_restoreGeometryStateInConfig(t,e,s=!1){const i=t?.spaces?.find(t=>t.id===e.spaceId);if(!i)return!1;const o=t=>JSON.parse(JSON.stringify(t)),a=new Map((i.rooms||[]).map(t=>[t.id,t]));if(i.rooms=o(e.rooms),s)for(const t of i.rooms){const e=a.get(t.id);!Array.isArray(t.wall_ids)&&Array.isArray(e?.wall_ids)&&e.wall_ids.length===t.poly?.length&&(t.wall_ids=o(e.wall_ids))}const n=(t,e)=>{void 0!==e?i[t]=o(e):s&&"wall_segments"===t||delete i[t]},r=new Map((i.openings||[]).map(t=>[t.id,t]));if(n("openings",e.openings),n("walls",e.walls),n("wall_segments",e.wall_segments),n("open_spans",e.open_spans),n("partitions",e.partitions),n("wall_columns",e.wall_columns),n("decor",e.decor),s)for(const t of i.openings||[]){const e=r.get(t.id);t.host||"wall"!==e?.host?.kind||(t.host=o(e.host))}for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])delete i[t];return Object.assign(i,o(e.plan_transform||{})),e.roomReferences&&(t.markers||=[],function(t,e){const s=new Map((t||[]).map(t=>[t?.id,t]));for(const t of e){const e=s.get(t.markerId);e&&(t.roomIdPresent?e.room_id=Sc(t.roomId):delete e.room_id,t.segmentMapPresent?(e.vacuum&&"object"==typeof e.vacuum&&!Array.isArray(e.vacuum)||(e.vacuum={}),e.vacuum.segment_map=Sc(t.segmentMap)||{}):e.vacuum&&"object"==typeof e.vacuum&&!Array.isArray(e.vacuum)&&(delete e.vacuum.segment_map,t.vacuumPresent||0!==Object.keys(e.vacuum).length||delete e.vacuum))}}(t.markers,e.roomReferences)),!0}_canonicalWallChainHistoryState(t){if(this.host._activeWallChainId||!t.wallChainSeedIds?.length)return t;if(!this.host._serverCfg)return null;const e=JSON.parse(JSON.stringify(this.host._serverCfg));if(!this._restoreGeometryStateInConfig(e,t))return null;let s;try{s=En(e).config}catch{return null}const i=s.spaces?.find(e=>e.id===t.spaceId),o=ge(Rt(s),t.spaceId);if(!i||!o)return null;const a=xc(i,o,ye(i,o,xt,Ac),t.wallChainSeedIds,{pitch:O,cellCm:Number(i.cell_cm)>0?Number(i.cell_cm):5,gridPitch:xt,coordScale:Ac}),n=s.spaces.findIndex(e=>e.id===t.spaceId);let r;s.spaces[n]=a.space;try{r=En(s).config}catch{return null}const l=this._geometrySnapshotFromConfig(r,t.spaceId);return l?(l.wallChainSeedIds=[...t.wallChainSeedIds],t.roomReferences&&(l.roomReferences=JSON.parse(JSON.stringify(t.roomReferences))),l):null}_restoreGeometryStateLocal(t){return!!this._restoreGeometryStateInConfig(this.host._serverCfg,t)&&(this.host._cfgEpoch++,this.host._modelCache=null,this.host._wallUnionCache=null,this.host._physicalBodiesCache=null,this.host._frame=null,this.host.requestUpdate(),!0)}_wallModelBlockerLabel(t){const e=t instanceof cn?t.reason:"invalid-room";return this.host._t(`wall_model.reason.${e}`)}_hasLegacyZeroWallFields(t=this.host._serverCfg){return(t?.spaces||[]).some(t=>Array.isArray(t?.open_spans)&&t.open_spans.length>0||(t?.rooms||[]).some(t=>Array.isArray(t?.open_to)&&t.open_to.length>0))}_showWallModelMigrationBlocked(t){const e=this._hasLegacyZeroWallFields()?"toast.zero_wall_migration_blocked":"toast.wall_model_migration_blocked";this.host._showToast(this.host._t(e,{reason:this._wallModelBlockerLabel(t)}))}_limitSegmentsOf(t){const e=[];for(const s of t?.wall_segments||[])s?.a&&s?.b&&e.push({id:String(s.id||""),a:s.a,b:s.b,cm:Number(s.cm)});for(const s of t?.partitions||[])s?.a&&s?.b&&e.push({id:String(s.id||""),a:s.a,b:s.b,cm:Number(s.cm)});return e}_junctionLimitViolations(t,e,s,i){const o=(t?.spaces||[]).find(t=>t?.id===e);return o?function(t,e,s,i,o){const a=(t?.spaces||[]).find(t=>t?.id===e);if(!a)return[];const n=Number(a.cell_cm)>0?Number(a.cell_cm):5,r=[...Pr(s),...zr(s,n,O),...Ar(s,n,O)];let l=i?.multiWallNodes||null;if(!l)try{l=it(a.rooms||[],a.walls||[],[],O,n,O,1)}catch{l=null}const h=i&&"lightweight"!==i.status?i:null;let c="ok"===h?.status||"degraded-extra"===h?.status?h.roomGeom:null;const d=null===i||"lightweight"===i?.status;if(!c&&!d&&l?.nodes.length)try{const t=ot(a.rooms||[],a.walls||[],[],[],O,n,O,1);c="ok"===t?.status||"degraded-extra"===t?.status?t.roomGeom:null}catch{c=null}for(const t of a.rooms||[]){const e=String(t?.id||"");if(!e||o&&!o.has(e))continue;let s=null;try{s=at(a.rooms||[],e,a.walls||[],[],O,n,O,1,d?null:c??void 0,l)}catch{s=null}r.push(...Nr(e,s,n,O))}return r}(t,e,this._limitSegmentsOf(o),s,i):[]}_junctionLimitLabel(t){const e=t=>String(Math.round(10*t)/10);return this.host._t(`junction.limit_${t.rule}`,{actual:e(t.actual),limit:e(t.limit)})}_junctionLimitsIntroduced(t,e,s,i,o){const a=o?.length?new Set(o):void 0;let n;const r=(e.spaces||[]).find(t=>t?.id===s);let l="";try{l=Y(r)}catch{l=""}const h=!a&&e&&"object"==typeof e?this._junctionBaselineCache.get(e):void 0;if(h&&l&&h.fingerprint===l&&h.spaceId===s&&(n=h.violations),!n){try{const t=Number(e?.model_version||0)>=10?e:En(e).config;n=this.host._junctionLimitViolations(t,s,a?null:void 0,a)}catch{return[]}!a&&e&&"object"==typeof e&&l&&this._junctionBaselineCache.set(e,{spaceId:s,fingerprint:l,violations:n})}let c=[],d=n;try{c=this.host._junctionLimitViolations(t,s,i,a),a&&(d=n.filter(t=>"clearance"!==t.rule||a.has(t.subject)))}catch{return[{rule:"check_failed",subject:s,actual:0,limit:0}]}return Hr(c,d)}_commitPhysicalGeometry(t,e,s=[],i=!0){if(!e||!this.host._serverCfg)return!1;const o=this.host._serverCfg,a=t=>{const s=t?.spaces?.find(t=>t.id===e.spaceId);return s?{...t,spaces:[s]}:t},n=this._geometrySnapshotFromConfig(o,e.spaceId),r=o.spaces.find(t=>t.id===e.spaceId);if(!r||Y(e)===Y(r))return!1;let l,h=!1;try{h=this.host._checkSpacePhysicalGeometry(a(o),e.spaceId).ok}catch{h=!1}if(!h)return this._clearGeometryGesture(),this._restoreGeometryStateLocal(e),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1;let c=e;try{if(Number(o.model_version||0)<9){const t=JSON.parse(JSON.stringify(o));if(!this._restoreGeometryStateInConfig(t,e))throw new cn("invalid-room",e.spaceId);const s=En(t).config;c=this._geometrySnapshotFromConfig(s,e.spaceId)||e,c.wallChainSeedIds=e.wallChainSeedIds,c.roomReferences=e.roomReferences;const i=JSON.parse(JSON.stringify(s));if(!n||!this._restoreGeometryStateInConfig(i,n,!0))throw new cn("invalid-room",e.spaceId);const a=s.spaces.find(t=>t.id===e.spaceId),r=i.spaces.find(t=>t.id===e.spaceId);if(!Array.isArray(n.wall_segments)&&JSON.stringify(e.rooms)===JSON.stringify(n.rooms))for(const t of r?.wall_segments||[])t.cm=J(n.walls,t.a,t.b,O,1);const h=((t,e,s)=>{const i=new Map,o=new Map((t?.rooms||[]).map(t=>[t.id,t])),a=new Map((e||[]).map(t=>[t.id,t])),{rooms:n}=Dn(s,Cn(t));for(const t of n){const e=a.get(t.id),n=o.get(t.id),r=B(e),l=(s.rooms||[]).find(e=>e.id===t.id),h=B(l),c=B(n);if(r&&h&&c&&r.length===h.length&&c.length===n?.wall_ids?.length&&t.poly.length===t.wall_ids.length)for(let e=0;e{const o=[];for(let a=0;ahn||yn(r,s,i)>hn)continue;const l=vn(n,s,i),h=vn(r,s,i);l<-1e-9||h>1+hn||h<=l+hn||o.push({start:l,id:e[a]})}return o.sort((t,e)=>t.start-e.start)},o=s(c,n.wall_ids,r[e],r[(e+1)%r.length]),a=s(t.poly,t.wall_ids,h[e],h[(e+1)%h.length]);if(o.length&&o.length===a.length)for(let t=0;tt.id===e.spaceId),i=this.host._path.length>=2?this.host._path.map(t=>[t[0]/Ac,t[1]/Ac]):[];i.push(...s.map(t=>[t[0],t[1]])),d=bn(t)<=bn(c,i)&&this.host._checkSpacePhysicalGeometry(a(l),e.spaceId).ok}catch{d=!1}if(!d)return this._clearGeometryGesture(),this._restoreGeometryStateLocal(e),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1;const p=JSON.parse(JSON.stringify(o));this._restoreGeometryStateInConfig(p,e);const u=this._junctionLimitsIntroduced(l,p,e.spaceId);if(u.length)return this._clearGeometryGesture(),this._restoreGeometryStateLocal(e),this.host._showToast(this._junctionLimitLabel(u[0])),!1;Wn(o,l),i&&this._recordGeometry(t,c);const _=o.spaces.find(t=>t.id===e.spaceId),m=this.host._pendingPhysicalWrites.get(e.spaceId);return this.host._pendingPhysicalWrites.set(e.spaceId,{before:m?.before||c,fingerprint:Y(_)}),this._saveConfig(),!0}_clearGeometryGesture(){this._clearFurniturePreview(),this.host._path=[],this._clearPlanSnapHover(),this._clearOpeningPlacement(!1),this.host._mergeSel=null,this.host._mergeDialog=null,this.host._splitSel=null,this.host._pendingSplit=null,this.host._wallFaceBatch=null,this.host._wallRepairDiagnostic=null,this.host._roomDeleteDialog=null,this.host._wallDialog=null,this.host._physicalDialog=null,this.host._physicalSel=null,this.host._physicalDrag=null,this.host._physicalRotate=null,this.host._activeWallChainId=null,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],this.host._closingWallCm=null,this.host._openingDialog=null,this._rszResetController(),this.host._decorDraft=null,this.host._decorMove=null,this.host._dtDrag=null,this.host._bdDrag=null}_stagePointerCancel(t){return clearTimeout(this.host._kioskHoldTimer),this.host._swipeStart?.id===t.pointerId&&(this.host._swipeStart=null),this.host._furnTouchPending?.pid===t.pointerId?(this._clearFurniturePreview(),this.host._pointers.delete(t.pointerId),void this.host.requestUpdate()):this.host._physicalDrag?.pid!==t.pointerId&&this.host._physicalRotate?.pid!==t.pointerId?this.host._decorDraft?.pid===t.pointerId?(this.host._decorDraft=null,void this.host.requestUpdate()):void(this.host._decorMove?.pid!==t.pointerId&&this.host._dtDrag?.pid!==t.pointerId&&this.host._bdDrag?.pid!==t.pointerId?("opening"===this.host._tool?(this.host._cursorPt=null,this._clearOpeningPlacement(!1)):"draw"===this.host._tool&&this._clearPlanSnapHover(),this.host._pointers.delete(t.pointerId),this.host._pointers.size<2&&(this.host._pinchStart=null),0===this.host._pointers.size&&(this.host._panStart=null,this.host._panLock=null),this.host._viewportGestureDirty&&0===this.host._pointers.size&&(this.host._viewportGestureDirty=!1,this.host.requestUpdate())):this._cancelDecorGesture()):void this._cancelPhysicalGesture()}_applyGeometryState(t,e=!1){const s=this._canonicalWallChainHistoryState(t);if(!s||!this.host._canCommitSpace(s.spaceId))return!1;const i=this._geometrySnapshot(s.spaceId);if(!i||!this._restoreGeometryStateLocal(s))return!1;const o=this.host._serverCfg,a=Y(i)!==Y(s);if(a){let t=!1;try{const i=o?this.host._checkSpacePhysicalGeometry(o,s.spaceId):null;t=!!i?.ok||!(!e||"wall-degraded-extra"!==i?.reason)}catch{t=!1}if(!t)return this._restoreGeometryStateLocal(i),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1}let n;try{n=En(o).config}catch(t){return this._restoreGeometryStateLocal(i),this._showWallModelMigrationBlocked(t),!1}if(a){let t=!1;try{const i=n?this.host._checkSpacePhysicalGeometry(n,s.spaceId):null;t=!!i?.ok||!(!e||"wall-degraded-extra"!==i?.reason)}catch{t=!1}if(!t)return this._restoreGeometryStateLocal(i),this.host._showToast(this.host._t("toast.geometry_unsafe")),!1;Wn(o,n);const a=o?.spaces.find(t=>t.id===s.spaceId),r=this.host._pendingPhysicalWrites.get(s.spaceId);this.host._pendingPhysicalWrites.set(s.spaceId,{before:r?.before||i,fingerprint:Y(a)})}else Wn(o,n);return this._clearGeometryGesture(),this.host._space!==s.spaceId&&(this.host._commitSpace(s.spaceId),this.host._saveNav(),this.host._restoreZoom()),this.host._modelCache=null,this.host._frame=null,this.host._regSignature="",this.host._maybeRebuildDevices(),this._saveConfig(),this.host.requestUpdate(),!0}_roomAt(t){return this.host._spaceModel()?.rooms.find(e=>{const s=B(e);return!!s&&we(t,s)})}_overlapRoom(t){return this.host._spaceModel()?.rooms.find(e=>{const s=B(e);return!!s&&N(t,s)})}_pointInRoom(t,e){return e.poly?$e(t,e.poly):null!=e.x&&t[0]>=e.x&&t[0]<=e.x+e.w&&t[1]>=e.y&&t[1]<=e.y+e.h}_contourSelfIntersects(t){if(!Pa(t))return!0;const e=t.length,s=.001;for(let i=0;i=500)return this.host._showToast(this.host._t("toast.physical_limit")),!1;const t=this.host._curSpaceCfg;return!((t?.partitions||[]).length>=Nc)||(this.host._showToast(this.host._t("toast.physical_limit")),!1)}_markupClick(t){if(this.host._vacFit)return;if(!this.host._markup)return;const e=this.host._spaceModel();if(!e)return void this._clearGeometryGesture();if(this.host._suppressClick)return;if(this.host._drag||this.host._rlResize)return;const s=t.composedPath?.()||[];if(s.some(t=>t?.classList?.contains?.("roomlabel")||t?.classList?.contains?.("rlhandle")))return;if(s.some(t=>t?.classList?.contains?.("physical-hit")))return;const i=this._svgPoint(t);if("select"===this.host._tool)return void(this.host._physicalSel=null);if("resize"===this.host._tool){if(this.host._resize.dragging||s.some(t=>t?.classList?.contains?.("rszhandle")))return;const t=[...e.rooms].reverse().find(t=>this._pointInRoom(i,t));return this.host._resize.selectRoom(t?.id||null),void this.host.requestUpdate()}if("delroom"===this.host._tool)return void this._deleteRoomClick(i);if("opening"===this.host._tool)return void this._openingClick(i);if("merge"===this.host._tool)return void this._mergeClick(i);if("wallthick"===this.host._tool)return void this._wallThickClick(i);if("split"===this.host._tool)return void this._splitClick(i);if("column"===this.host._tool)return void this._columnClick(i);this.host._wallRepairDiagnostic=null;const o=this._resolvePlanDrawPoint(i,t.shiftKey);if(o.ambiguous)return this.host._planSnapHover={contextKey:o.contextKey,candidate:null,conflicts:o.conflicts},this._syncPlanSnapActiveMarker(null),this._syncPlanSnapConflictMarkers(o.conflicts),void this.host._showToast(this.host._t("toast.plan_snap_ambiguous"));let a=o.point;if(t.ctrlKey||t.metaKey){if(t.preventDefault(),this.host._path.length<3)return;a=_e(this.host._path[this.host._path.length-1],this.host._path[0])}if(!this.host._path.length){if(!t.shiftKey&&!o.candidate&&this._offerExistingWallFace(i))return;return this.host._activeWallChainId=`chain-${Date.now().toString(36)}`,this.host._activeWallChainPartitionIds=[],this.host._wallChainSegmentCms=[],this.host._wallChainRedo=[],void(this.host._path=[a])}const n=this.host._path[this.host._path.length-1];if(this._samePt(a,n))return;if(!this._canAppendWallPoint())return;const r=this.host._drawWallCm;if(null==r)return void this._showPhysicalRange(100);const l=this.host._curSpaceCfg;if(!l)return;const h=this.host._path.map(t=>[...t]),c=this.host._activeWallChainId,d=[...this.host._activeWallChainPartitionIds],p=[...this.host._wallChainSegmentCms],u=this._wallGraphSources([]),_=this._geometrySnapshot();_&&(_.wallChainSeedIds=[...d]);const m=`partition-${crypto.randomUUID?.()||`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}`;if(l.partitions||=[],l.partitions.push({id:m,a:[n[0]/Ac,n[1]/Ac],b:[a[0]/Ac,a[1]/Ac],cm:r}),this.host._path=[...this.host._path,a],this.host._wallChainSegmentCms=[...this.host._wallChainSegmentCms,r],this.host._activeWallChainPartitionIds=[...d,m],this.host._wallChainRedo=[],!lr(this,this.host._t("history.wall_segment"),_))return this.host._activeWallChainId=c,this.host._activeWallChainPartitionIds=d,this.host._path=h,void(this.host._wallChainSegmentCms=p);this._offerWallFaces(h,h.length-1,u)}_activeWallSourceKey(t){const e=this.host._activeWallChainPartitionIds[t],s=e?this._planStructuralGeometrySnapshot().value.segments.find(t=>"partition"===t.sourceKind&&t.sourceId===e):null;return s?`static:${s.key}`:`active:${this.host._activeWallChainId||"session"}:${t}`}_wallGraphSources(t){return this._planStructuralGeometrySnapshot().value.segments.map(t=>({a:t.a,b:t.b,key:`static:${t.key}`}))}_wallFaceGraph(t,e){const s=`${this.host._space}|${e}|${JSON.stringify(t)}`,i=this.host._wallFaceGraphCache.findIndex(t=>t.key===s);if(i>=0){const[t]=this.host._wallFaceGraphCache.splice(i,1);return this.host._wallFaceGraphCache.push(t),t.value}const o=Fh(t,e);return this.host._wallFaceGraphCache.push({key:s,value:o}),this.host._wallFaceGraphCache.length>4&&this.host._wallFaceGraphCache.shift(),o}_offerWallFaces(t,e=this.host._path.length-2,s){if(this.host._path.length<2||this.host._wallFaceBatch||this.host._roomDialog)return;const i=this.host._spaceModel();if(!i)return;const o=this._activeWallSourceKey(e),a=2e-4*this.host._gridPitch;let n,r;try{const e=s||this._wallGraphSources(t);r=this._wallGraphSources(this.host._path),n=function(t,e,s){const i=new Set(t.faces.map(t=>t.key));return e.faces.filter(t=>!i.has(t.key)&&t.sourceKeys.includes(s))}(this._wallFaceGraph(e,a),this._wallFaceGraph(r,a),o)}catch{return}if(!n.length){const t=Uh(r,{requiredSourceKey:o,maxDistance:w(2,this.host._cellCm,this.host._gridPitch),gridStep:this.host._gridPitch,epsilon:a});return"ambiguous"===t.kind?(this.host._wallRepairDiagnostic=t.proposals[0]||null,void this.host._showToast(this.host._t(0===this.host._drawWallCm?"toast.zero_wall_ambiguous":"toast.wall_repair_ambiguous"))):void("repair"!==t.kind||this._overlapRoom(t.face.ring)||this._beginWallFaceBatch([{...t.face,repair:t.proposal}]))}for(const t of i.rooms){const e=B(t);if(!t.id||!e)continue;const s=ke(e,this.host._path,.02*this.host._gridPitch);if(!s)continue;const[i,o]=s,a=L(i)>=L(o)?i:o,r=a===i?o:i,l=[...n].sort((t,e)=>Math.abs(t.area-L(r))-Math.abs(e.area-L(r))||t.key.localeCompare(e.key))[0];if(!l)return;return void this._beginWallFaceBatch([{...l,ring:r.map(t=>[t[0],t[1]]),split:{roomId:t.id,mainPoly:a,newPoly:r},consumeAllActive:!0}])}const l=n.filter(t=>!(t.ring.length<3||this._contourSelfIntersects(t.ring))&&!this._overlapRoom(t.ring));l.length&&this._beginWallFaceBatch(l)}_beginWallFaceBatch(t){this.host._wallRepairDiagnostic=null,this.host._wallFaceBatch={candidates:[...t].sort((t,e)=>t.area-e.area||t.key.localeCompare(e.key)),index:0,decisions:[],activePath:this.host._path.map(t=>[...t]),activeCms:[...this.host._wallChainSegmentCms],activePartitionIds:[...this.host._activeWallChainPartitionIds]},this._clearPlanSnapHover(),this.host._nameSel="",this.host._areaSel="",this._resetRoomDialogFields(),this.host._roomDialog=!0}_offerExistingWallFace(t){if(this.host._path.length||this.host._wallFaceBatch||this.host._roomDialog)return!1;const e=2e-4*this.host._gridPitch;try{let s,i=Ah(this._wallFaceGraph(this._wallGraphSources([]),e),t,e);if(!i){const o=Uh(this._wallGraphSources([]),{point:t,maxDistance:w(2,this.host._cellCm,this.host._gridPitch),gridStep:this.host._gridPitch,epsilon:e});if("ambiguous"===o.kind)return this.host._wallRepairDiagnostic=o.proposals[0]||null,this.host._showToast(this.host._t(0===this.host._drawWallCm?"toast.zero_wall_ambiguous":"toast.wall_repair_ambiguous")),!0;if("repair"===o.kind)i=o.face,s=o.proposal;else if("none"===o.kind){const s=Uh(this._wallGraphSources([]),{point:t,maxDistance:this._cssPxToRender(12),gridStep:this.host._gridPitch,epsilon:e});if("repair"===s.kind)return this.host._wallRepairDiagnostic=s.proposal,this.host._showToast(this.host._t("toast.wall_repair_too_large")),!0}}return!(!i||i.ring.length<3||this._contourSelfIntersects(i.ring)||this._overlapRoom(i.ring))&&(this._beginWallFaceBatch([{...i,existing:!s,repair:s}]),!0)}catch{return!1}}_columnClick(t){const e=this._snap(t),s=this.host._drawWallCm;if(null==s)return void this._showPhysicalRange(Yt,1);if(!this.host._curSpaceCfg||this._limitReached("column"))return;const i=this.host._spaceModel();if(!i)return;const o={id:"column-"+Date.now().toString(36),shape:"square",center:e,cm:Qt(s),angle:0},a=(i.wall_columns||[]).find(t=>Xt(t,o,.02*this.host._gridPitch));if(a)return clearTimeout(this.host._duplicateColumnTimer),this.host._duplicateColumnId=a.id,this.host._duplicateColumnTimer=window.setTimeout(()=>{this.host._duplicateColumnId=null},900),void this.host._showToast(this.host._t("toast.column_duplicate"));const n=this._geometrySnapshot(),r=this.host._curSpaceCfg;r.wall_columns||=[],r.wall_columns.push({...o,center:[e[0]/Ac,e[1]/Ac]}),this._commitPhysicalGeometry(this.host._t("history.column_add"),n)}_openPhysicalDialog(t,e){const s=this.host._spaceModel();if(s)if("partition"===t){const i=s.partitions.find(t=>t.id===e);i&&(this.host._physicalDialog={kind:t,id:e,cm:ce(i.cm,this.host._imperial),length:this.host._fmtLen(i.a,i.b)})}else if("column"===t){const i=s.wall_columns.find(t=>t.id===e);i&&(this.host._physicalDialog={kind:t,id:e,cm:ce(i.cm,this.host._imperial),shape:i.shape,angle:this.host._angleField("square"===i.shape?me(i.angle):0)})}}_physicalDown(t,e,s){const i=this.host._spaceModel();if(!i)return;t.stopPropagation(),Hc(t);const o=this._svgPoint(t),a=[];for(const t of[...i.wall_columns].reverse())xe(o,Se(t,this.host._cellCm,this.host._gridPitch))&&a.push({kind:"column",id:t.id});for(const t of[...i.partitions].reverse()){const e=Me(t.a,t.b,t.cm,this.host._cellCm,this.host._gridPitch);e&&xe(o,e)&&a.push({kind:"partition",id:t.id})}a.some(t=>t.kind===e&&t.id===s)||a.unshift({kind:e,id:s});const n=a.map(t=>`${t.kind}:${t.id}`).sort().join("|"),r=performance.now(),l=this.host._physicalPickCycle,h=a.length>1&&l?.signature===n&&r-l.at>380&&r-l.at<=1200&&Math.hypot(t.clientX-l.x,t.clientY-l.y)<=10?(l.index+1)%a.length:Math.max(0,a.findIndex(t=>t.kind===e&&t.id===s));this.host._physicalPickCycle={signature:n,index:h,x:t.clientX,y:t.clientY,at:r},e=a[h].kind,s=a[h].id;const c="partition"===e?i.partitions.find(t=>t.id===s):i.wall_columns.find(t=>t.id===s);c&&(this.host._physicalSel={kind:e,id:s},this.host._physicalDrag={pid:t.pointerId,kind:e,id:s,start:this._svgPoint(t),startClient:[t.clientX,t.clientY],before:this._geometrySnapshot(),moved:!1,base:JSON.parse(JSON.stringify(c)),delta:[0,0]})}_clampPhysicalDelta(t,e,s){const i="partition"===t?[e.a,e.b]:[e.center],o=i.map(t=>t[0]),a=i.map(t=>t[1]);return[Math.max(-jt*Ac-Math.min(...o),Math.min(jt*Ac-Math.max(...o),s[0])),Math.max(-jt*Ac-Math.min(...a),Math.min(jt*Ac-Math.max(...a),s[1]))]}_physicalMove(t){t.stopPropagation(),Ao(this.host,"physical",()=>this._physicalMoveNow(t))}_physicalMoveNow(t){const e=this.host._physicalDrag;if(!e||e.pid!==t.pointerId)return;t.stopPropagation();const s=this._svgPoint(t),i="partition"===e.kind?e.base.a:e.base.center,o=this._snap([i[0]+s[0]-e.start[0],i[1]+s[1]-e.start[1]]),a=this._clampPhysicalDelta(e.kind,e.base,[o[0]-i[0],o[1]-i[1]]);this.host._physicalDrag={...e,delta:a,moved:e.moved||Math.hypot(t.clientX-e.startClient[0],t.clientY-e.startClient[1])>=5}}_physicalUp(t){No(this.host,"physical");const e=this.host._physicalDrag;if(!e||e.pid!==t.pointerId)return;if(t.stopPropagation(),this.host._physicalDrag=null,!e.moved)return void this._registerPhysicalTap(e.kind,e.id);const s=this.host._spaceModel();if(!this.host._curSpaceCfg||!s)return;const i=this.host._curSpaceCfg;if("partition"===e.kind){const t=(i.partitions||[]).find(t=>t.id===e.id),s=e.base;if(t){const o={...s,a:[s.a[0]+e.delta[0],s.a[1]+e.delta[1]],b:[s.b[0]+e.delta[0],s.b[1]+e.delta[1]]};t.a=[o.a[0]/Ac,o.a[1]/Ac],t.b=[o.b[0]/Ac,o.b[1]/Ac];for(const t of i.openings||[]){if("partition"!==t.host?.kind||t.host.id!==e.id)continue;const s=lt(t,[o],Ac,this.host._cellCm,this.host._gridPitch).resolved;s&&Object.assign(t,ht(t,s,Ac))}}}else{const t=(i.wall_columns||[]).find(t=>t.id===e.id),o=e.base,a={...o,center:[o.center[0]+e.delta[0],o.center[1]+e.delta[1]]};if(s.wall_columns.some(t=>t.id!==e.id&&Xt(t,a,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"));t&&(t.center=[(o.center[0]+e.delta[0])/Ac,(o.center[1]+e.delta[1])/Ac])}this._commitPhysicalGeometry(this.host._t("history.physical_move"),e.before)}_registerPhysicalTap(t,e){const s=performance.now(),i=this.host._physicalLastTap?.kind===t&&this.host._physicalLastTap.id===e&&s-this.host._physicalLastTap.at<=360;this.host._physicalLastTap={kind:t,id:e,at:s},i&&(this.host._physicalLastTap=null,this._openPhysicalDialog(t,e))}_cancelPhysicalGesture(){Ho(this.host,"physical"),Ho(this.host,"physical-rotate"),this.host._physicalDrag=null,this.host._physicalRotate=null,this.host.requestUpdate()}_physicalRotateDown(t,e){if("square"!==e.shape||!this.host._spaceModel())return;t.preventDefault(),t.stopPropagation(),Hc(t);const s=this._svgPoint(t);this.host._physicalSel={kind:"column",id:e.id},this.host._physicalRotate={pid:t.pointerId,id:e.id,center:[...e.center],startAngle:180*Math.atan2(s[1]-e.center[1],s[0]-e.center[0])/Math.PI,baseAngle:me(e.angle),angle:me(e.angle),before:this._geometrySnapshot(),moved:!1}}_physicalRotateMove(t){t.preventDefault(),t.stopPropagation(),Ao(this.host,"physical-rotate",()=>this._physicalRotateMoveNow(t))}_physicalRotateMoveNow(t){const e=this.host._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation();const s=this._svgPoint(t),i=180*Math.atan2(s[1]-e.center[1],s[0]-e.center[0])/Math.PI,o=e.baseAngle+i-e.startAngle,a=me(t.shiftKey?o:5*Math.round(o/5));this.host._physicalRotate={...e,angle:a,moved:e.moved||Math.abs(o-e.baseAngle)>=.5}}_physicalRotateUp(t){No(this.host,"physical-rotate");const e=this.host._physicalRotate;if(!e||e.pid!==t.pointerId)return;t.preventDefault(),t.stopPropagation(),this.host._physicalRotate=null;const s=this.host._spaceModel();if(!e.moved||!this.host._curSpaceCfg||!s)return;const i=s.wall_columns.find(t=>t.id===e.id);if(!i||"square"!==i.shape)return;const o={...i,angle:e.angle};if(s.wall_columns.some(t=>t.id!==e.id&&Xt(t,o,.02*this.host._gridPitch)))return void this.host._showToast(this.host._t("toast.column_duplicate"));const a=this.host._curSpaceCfg.wall_columns?.find(t=>t.id===e.id);a&&(a.angle=e.angle,this._commitPhysicalGeometry(this.host._t("history.physical_edit"),e.before))}_rszRooms(){const t=[],e=this.host._spaceModel();if(!e)return t;for(const s of e.rooms){const e=s.id?B(s):null;e&&t.push({id:s.id,poly:e,wall_ids:Array.isArray(s.wall_ids)?[...s.wall_ids]:void 0})}return s=t,i=Math.max(1e-12,1e-12*this.host._gridPitch),s.map(t=>{if(!Array.isArray(t.wall_ids)||t.wall_ids.length!==t.poly.length)return{...t,poly:t.poly.map(t=>[...t])};const e=t.poly.map(t=>[...t]);let s=!0;for(;s&&e.length>3;){s=!1;for(let t=0;t0){e.splice(t,1),s=!0;break}}}return{...t,poly:e}});var s,i}_rszOpenings(){return this.host._openingsR.map(t=>({id:t.id,x:t.rx,y:t.ry,length:t.rlen,hosted:!!t.host,angle:t.angle,type:t.type}))}_rszObstacles(){const t=this.host._spaceModel();if(!t)return[];const e=[];for(const s of t.partitions||[])e.push({kind:"segment",a:[...s.a],b:[...s.b],half:w(s.cm,this.host._cellCm,this.host._gridPitch)/2});for(const s of t.wall_columns||[]){const t=w(s.cm,this.host._cellCm,this.host._gridPitch)/2;e.push({kind:"circle",center:[...s.center],radius:"square"===s.shape?t*Math.SQRT2:t})}return e}_rszOptsFor(t,e){const s=J(this.host._spaceWalls,t,e,this.host._wallKeyPitch,Ac),i=this.host._spaceWalls.filter(t=>Array.isArray(t.a)&&Array.isArray(t.b)&&t.a.length>=2&&t.b.length>=2).map(t=>({wall:t,a:[t.a[0]*Ac,t.a[1]*this.host._spaceH],b:[t.b[0]*Ac,t.b[1]*this.host._spaceH]})),o=Math.abs(t[0]-e[0])<=.05*this.host._gridPitch?"v":Math.abs(t[1]-e[1])<=.05*this.host._gridPitch?"h":null,a=i.filter(s=>!!o&&("h"===o?!(Math.abs(s.a[1]-t[1])>.05*this.host._gridPitch||Math.abs(s.b[1]-t[1])>.05*this.host._gridPitch)&&Math.min(Math.max(t[0],e[0]),Math.max(s.a[0],s.b[0]))-Math.max(Math.min(t[0],e[0]),Math.min(s.a[0],s.b[0]))>.05*this.host._gridPitch:!(Math.abs(s.a[0]-t[0])>.05*this.host._gridPitch||Math.abs(s.b[0]-t[0])>.05*this.host._gridPitch)&&Math.min(Math.max(t[1],e[1]),Math.max(s.a[1],s.b[1]))-Math.max(Math.min(t[1],e[1]),Math.min(s.a[1],s.b[1]))>.05*this.host._gridPitch)),n=new Set(a.map(t=>Number(t.wall.cm)).filter(t=>t>0));return{minDim:this.host._cmToUnits(30),eps:.05*this.host._gridPitch,step:this.host._gridPitch,movingHalf:s>0?w(s,this.host._cellCm,this.host._gridPitch)/2:0,obstacles:this._rszObstacles(),thicknessConflict:n.size>1}}_rszResolution(t,e,s){const i=this.host._resize.snapshotIdentity||s||this._rszSnapshot(),o=`${this.host._space}|${this.host._cellCm}|${this.host._gridPitch}|${i}`,a=`${t}:${e}`;return this.host._resize.resolve(o,a,()=>{const s=[...this.host._resize.rooms||this._rszRooms()],i=s.find(e=>e.id===t),o=i?.poly?.[e]||[0,0],a=i?.poly?.[(e+1)%(i?.poly?.length||1)]||[0,0];return function(t,e,s,i,o){const{eps:a}=o,n=t.find(t=>t.id===s);if(!n||i<0||i>=(n.poly?.length||0)||n.poly.length<4||!Pa(n.poly))return{enabled:!1,reason:"invalid-geometry"};const r=n.poly[i],l=n.poly[(i+1)%n.poly.length],h=Ra(r,l,a);if(!h)return{enabled:!1,reason:"diagonal"};if(!Na(n.poly,i,h,a))return{enabled:!1,reason:"side-angle"};if(o.thicknessConflict)return{enabled:!1,reason:"thickness-conflict"};for(const t of o.obstacles||[])if(Oa(t,r,l,o))return{enabled:!1,reason:"duplicate-physical-wall"};const c=xa(wa(l,r)),d=[],p=new Set;let u=!1,_=!1;for(const e of t)if(e.id!==s)for(let t=0;t1||d.length>1)return{enabled:!1,reason:"multiple-rooms"};const m={[s]:i},g=[s];if(1===d.length){const t=d[0];if(!Pa(t.room.poly))return{enabled:!1,reason:"invalid-geometry"};if(!Na(t.room.poly,t.edge,h,a))return{enabled:!1,reason:"side-angle"};g.push(t.room.id),m[t.room.id]=t.edge}const f=[];for(const t of e)if(!(Ma([t.x,t.y],r,l)>2*a)){if(t.hosted||t.length>c+2*a)return{enabled:!1,reason:"opening-conflict"};f.push(t.id)}const b=Object.fromEntries(g.map(e=>[e,t.find(t=>t.id===e).poly.length])),v=[];for(const e of g){const s=t.find(t=>t.id===e),i=m[e],o=(i-1+s.poly.length)%s.poly.length,n=(i+1)%s.poly.length,r=Wa(t,e,o,1,a),l=Wa(t,e,n,0,a);if(!r||!l)return{enabled:!1,reason:"partial-shared"};v.push(r,l)}const y={roomId:s,edge:i,a:[...r],b:[...l],n:Ca(n.poly,i),roomIds:g,edgeByRoom:m,topology:b,movingOpeningIds:f,sideOwnership:v};if(!Ja(t,e,y,0,o))return{enabled:!1,reason:"invalid-geometry"};const w=Math.abs(Number(o.step));if(Number.isFinite(w)&&w>a){const s=[-w,w];if(!s.some(s=>Ja(t,e,y,s,o))){if(!s.some(s=>qa(Ua(t,e,y,s),y,a)))return{enabled:!1,reason:"partial-shared"};const i={...o,obstacles:[]};return s.some(s=>Ja(t,e,y,s,i))?{enabled:!1,reason:"duplicate-physical-wall"}:e.length&&s.some(e=>Ja(t,[],y,e,o))?{enabled:!1,reason:"opening-conflict"}:{enabled:!1,reason:"invalid-geometry"}}}return{enabled:!0,plan:y}}(s,[...this.host._resize.openings||this._rszOpenings()],t,e,this._rszOptsFor(o,a))})}_rszSnapshot(){return JSON.stringify(this._geometrySnapshot()||{spaceId:this.host._space,rooms:[],openings:[],walls:[],open_spans:[]})}_rszResetController(){const t=null!==this.host._resize.preview;this.host._resize.reset(),t&&this.host._cfgEpoch++}_rszProjectPreview(t,e,s,i,o){this.host._rszLimitViolation=null;const a=this.host._serverCfg?.spaces.find(t=>t.id===this.host._space);if(!a||!this.host._serverCfg)return{ok:!1,reason:"missing-context"};const n=JSON.parse(t),r={...a,rooms:n.rooms,openings:n.openings||[]};for(const t of["walls","wall_segments","open_spans","partitions","wall_columns","decor"])void 0!==n[t]?r[t]=n[t]:delete r[t];for(const t of["plan_x","plan_y","plan_scale","plan_scale_x","plan_scale_y","plan_angle"])void 0!==n.plan_transform?.[t]?r[t]=n.plan_transform[t]:delete r[t];const l=this.host._spaceH;for(const[t,s]of Object.entries(e)){const e=r.rooms.find(e=>e.id===t);e&&(e.poly=s.map(t=>[t[0]/Ac,t[1]/l]),delete e.x,delete e.y,delete e.w,delete e.h)}for(const[t,e]of Object.entries(s)){const s=(r.openings||[]).find(e=>e.id===t);s&&(s.x=e[0]/Ac,s.y=e[1]/l)}const h=[],c=[];for(const t of i){const e=o.find(e=>e.id===t),s=r.rooms.find(e=>e.id===t);if(!e||!s?.poly)continue;const i=s.poly.map(t=>[t[0]*Ac,t[1]*l]);if(e.poly.length!==i.length)continue;const a=Array.isArray(e.wall_ids)?e.wall_ids:[];for(let t=0;tt.id===s):null;o&&(o.a=[i[t][0]/Ac,i[t][1]/Ac],o.b=[i[(t+1)%i.length][0]/Ac,i[(t+1)%i.length][1]/Ac])}}if(h.length&&Array.isArray(r.walls)&&r.walls.length){const t=Ce(r.walls,h,c,this.host._wallKeyPitch,Ac,"fixed-topology");if(t.rejected)return{ok:!1,reason:"wall-metadata"};r.walls=t.walls}const d=[];for(const t of r.rooms||[]){const e=B(t);if(e&&!(e.length<2))for(let t=0;tJSON.stringify([t?.key,t?.cm,t?.a,t?.b]),u=new Map;for(const t of n.walls||[]){const e=p(t);u.set(e,(u.get(e)||0)+1)}const _=[];for(const t of r.walls||[]){const e=p(t),s=u.get(e)||0;s?u.set(e,s-1):_.push(t)}if(Pe(_,d,this.host._wallKeyPitch,Ac,n.walls||[]).length)return{ok:!1,reason:"wall-metadata"};const m=function(t,e,s=1e-8){const i=on(t),o=new Set(e),a=i.flatMap(t=>{if(!o.has(String(t.id||"")))return[];const e=rn(nn(t));return e?[e]:[]});return i.flatMap(t=>{const e=String(t.id||""),i=rn(nn(t)),n=!!i&&a.some(t=>i.minX<=t.maxX+s&&i.maxX+s>=t.minX&&i.minY<=t.maxY+s&&i.maxY+s>=t.minY);return e&&(o.has(e)||n)?[e]:[]})}(r.rooms||[],i),g=ln(r,m);if(!g||!this._rszSpaceCandidateGeometry(this.host._space,g).ok)return{ok:!1,reason:"physical-geometry"};const f={...this.host._serverCfg,spaces:(this.host._serverCfg?.spaces||[]).map(t=>t?.id===this.host._space?r:t)};try{this._resizePreviewNodes=it(g.rooms,g.walls,[],O,this.host._cellCm,this.host._gridPitch,Ac)}catch{this._resizePreviewNodes=null}let b;try{const t=new Set(i),e=this.host._junctionLimitViolations(f,this.host._space,{status:"lightweight",multiWallNodes:this._resizePreviewNodes},t);b=Hr(e,this._resizeBaselineLimits.filter(e=>"clearance"!==e.rule||t.has(e.subject)))}catch{b=[{rule:"check_failed",subject:this.host._space,actual:0,limit:0}]}return b.length?(this.host._rszLimitViolation=b[0],{ok:!1,reason:"junction-limit"}):{ok:!0,value:{preview:{space:this.host._space,sp:r},beforeWalls:n.walls||[],afterWalls:r.walls||[],artifact:null}}}_rszAcceptPreview(t,e){if(this.host._cfgEpoch++,this.host._physicalBodiesCache&&(this.host._physicalBodiesCache.key=`${this.host._space}|${this.host._cfgEpoch}|${this.host._cellCm}|${this.host._gridPitch}`),!t||!e)return;const s=De(e);if(!s)return;const i=`${this.host._space}|${this.host._cfgEpoch}|${t.sp.rooms.length}`;Object.defineProperty(s,"sourceFingerprint",{value:d([t.sp,this.host._cellCm,this.host._gridPitch]),enumerable:!1});const o={key:i,value:s};Fc(this.host._wallUnionPool,i,o,8),this.host._wallUnionCache=o}_rszSpaceCandidateGeometry(t,e){if(!this.host._serverCfg)return{ok:!1,wallGeometry:null};const s={...this.host._serverCfg,spaces:this.host._serverCfg.spaces.map(s=>s.id===t?e:s)};let i=null;try{return{ok:this.host._checkSpacePhysicalGeometry(s,t,t=>{i=t}).ok,wallGeometry:i}}catch{return{ok:!1,wallGeometry:null}}}_rszSpaceCandidateRenderable(t,e){if(!this.host._serverCfg)return!1;try{const s={...this.host._serverCfg,spaces:this.host._serverCfg.spaces.map(s=>s.id===t?e:s)};return this.host._checkSpacePhysicalGeometry(s,t).ok}catch{return!1}}_rszCandidateRenderable(t){return!!t&&t.space===this.host._space&&this._rszSpaceCandidateRenderable(t.space,t.sp)}_rszEdgeDown(t,e,s){if("resize"!==this.host._tool||this.host._resize.dragging)return;this._resizeBaseFrameStable=!0,t.stopPropagation(),t.preventDefault();const i=this._rszRooms(),o=this._rszResolution(e,s);if(!o.enabled)return void this.host._showToast(this._rszReasonText(o.reason));Hc(t);const a=o.plan;try{this._resizeBaselineLimits=this.host._junctionLimitViolations(this.host._serverCfg,this.host._space,null,new Set(a.roomIds))}catch{this._resizeBaselineLimits=[]}const n=this._svgPoint(t),r=`${this.host._space}|${this.host._cfgEpoch}|${i.length}`,l=this.host._wallUnionCache?.key===r?this.host._wallUnionCache.value:null,h=this._rszSnapshot();this.host._resize.begin({pointerId:t.pointerId,start:[n[0],n[1]],roomId:e,plan:a,options:this._rszOptsFor(a.a,a.b),rooms:i,openings:this._rszOpenings(),snapshotIdentity:h,before:JSON.parse(h),wallUnionBefore:l,epochBefore:this.host._cfgEpoch})}_rszReasonText(t){return this.host._t(`resize.disabled.${t}`)}_rszDisabledActivate(t,e){t.stopPropagation(),t.preventDefault(),this.host._showToast(this._rszReasonText(e))}_rszDisabledKey(t,e){"Enter"!==t.key&&" "!==t.key||this._rszDisabledActivate(t,e)}_rszMove(t){this.host._resize.ownsPointer(t.pointerId)&&(t.stopPropagation(),Ao(this.host,"resize",()=>this._rszMoveNow(t)))}_rszMoveNow(t){if(!this.host._resize.ownsPointer(t.pointerId))return;t.stopPropagation();const e=this._svgPoint(t),s=this.host._resize.move({pointerId:t.pointerId,point:[e[0],e[1]],step:this.host._gridPitch,snap:t=>{const e=this._snap(t);return[e[0],e[1]]},project:(t,e,s,i,o)=>this._rszProjectPreview(t,e,s,i,o),publish:(t,e)=>this._rszAcceptPreview(t,e),measure:(t,e)=>this._rszEdgeLabels(t,e)});if("rejected"===s.kind)return s.notify&&this.host._showToast(this.host._rszLimitViolation?`${this.host._t("resize.limit_stopped")} — `+this._junctionLimitLabel(this.host._rszLimitViolation):this.host._t("resize.preview_failed")),void this.host.requestUpdate();"accepted"===s.kind&&this.host.requestUpdate()}_rszUp(t){if(No(this.host,"resize"),!this.host._resize.ownsPointer(t.pointerId))return;t.stopPropagation();const e=this.host._resize.finish({pointerId:t.pointerId,currentSnapshotIdentity:this._rszSnapshot(),validatePreview:t=>this._rszCandidateRenderable(t)});if("no-op"===e.kind)return this.host._cfgEpoch++,void this.host.requestUpdate();if("rejected"===e.kind)return this.host._cfgEpoch++,this.host._showToast(this.host._t("resize.commit_failed")),void this.host.requestUpdate();const s=e.preview,i=this.host._serverCfg?.spaces.find(t=>t.id===s.space);i&&(i.rooms=s.sp.rooms,i.openings=s.sp.openings,Array.isArray(s.sp.walls)&&(s.sp.walls.length?i.walls=s.sp.walls:delete i.walls),Array.isArray(s.sp.wall_segments)&&(i.wall_segments=s.sp.wall_segments)),this.host._suppressClick=!0,setTimeout(()=>this.host._suppressClick=!1,0),this._commitPhysicalGeometry(this.host._t("history.resize_room"),e.before),this.host.requestUpdate()}_rszCancelDrag(t){Ho(this.host,"resize");const e=this.host._resize.cancel(this._rszSnapshot(),t);if("no-op"!==e.kind){if(null!==e.restoreEpoch?this.host._cfgEpoch=e.restoreEpoch:this.host._cfgEpoch++,this.host._physicalBodiesCache&&(this.host._physicalBodiesCache.key=`${this.host._space}|${this.host._cfgEpoch}|${this.host._cellCm}|${this.host._gridPitch}`),e.restoreWallUnion){const t=this.host._spaceModel();if(t){const s=`${this.host._space}|${this.host._cfgEpoch}|${t.rooms.length}`,i={key:s,value:e.restoreWallUnion};Fc(this.host._wallUnionPool,s,i,8),this.host._wallUnionCache=i}}null!==e.restoreEpoch&&"plan"===this.host._mode&&this._resizeBaseFrameStable&&(this.host._terminalFrame=1),this.host.requestUpdate()}}_rszPointerCancel(t){this.host._resize.ownsPointer(t.pointerId)&&(t.stopPropagation(),this._rszCancelDrag(t.pointerId))}_rszEdgeLabels(t,e,s=this.host._resize.rooms){const i=s,o=[],a=t.polys[e.roomId]||i?.find(t=>t.id===e.roomId).poly;if(!a||!i)return o;const n=a.length,r=this._rszInnerSpanCms(e.roomId,a,t.polys);for(const t of function(t,e){const s=t.length;return[(e-1+s)%s,(e+1)%s]}(a,e.edge)){const e=a[t],s=a[(t+1)%n],i=r?.[t];o.push({kind:"length",x:(e[0]+s[0])/2,y:(e[1]+s[1])/2,text:null==i?this.host._fmtLen(e,s):Ie(i,"mi"===this.host.hass?.config?.unit_system?.length),edge:{a:[e[0],e[1]],b:[s[0],s[1]]}})}const l="mi"===this.host.hass?.config?.unit_system?.length,h=e.roomIds,c=this.host._spaceWalls,d=this.host._physicalBodiesR(),p=this.host._baseVb(),u=this.host._view&&this.host._view.w>0&&this.host._view.h>0?this.host._view:{x:p[0],y:p[1],w:p[2],h:p[3]},[_,m]=this.host._lastValidStageSize||[u.w,u.h],g={...u,stageWidth:Math.max(1,_),stageHeight:Math.max(1,m)},f=this.host._spaceModel(),b=this.host._config?.icon_size??2.5,v=f?Te(b>8?2.5:b,f,u.w,this.host._kiosk?this.host._kioskScale.icon:1)*g.stageWidth/100:24,y=Math.max(10,.77*v),w=this.host._t("room.settings_short"),$=y*(1.457+.66*Math.max(1,w.length)*.42);for(const s of h){const a=t.polys[s]||i.find(t=>t.id===s).poly,n=c.length&&f&&at(f.rooms,s,c,this.host._openCuts(),this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac,null,this._resizePreviewNodes)||a,r=d.length?Re(ze(n,d))*Math.pow(this.host._cellCm/this.host._gridPitch,2)/1e4:Fe(n,this.host._gridPitch,this.host._cellCm),h=Ae(r,l),p=cr({poly:a,edge:e.edgeByRoom[s],text:h,view:g,gearCenter:Ne(a),gearWidthPx:$,gearHeightPx:y});o.push({kind:"area",roomId:s,x:p.anchor[0],y:p.anchor[1],text:h,placement:p})}return o}_rszInnerSpanCms(t,e,s){const i=Object.keys(s).length?Object.entries(s).map(([t,e])=>({id:t,poly:e})):this.host._spaceModel()?.rooms;if(!i?.length)return null;const o=this.host._spaceWalls;if(!o.length)return null;const a=this.host._openCuts(),n=He(i,t,o,a,this.host._wallKeyPitch,this.host._cellCm,this.host._gridPitch,Ac);if(!n||n.length!==e.length)return null;const r=this.host._cellCm/this.host._gridPitch;return e.map((t,s)=>Le(e,s,n)*r)}_renderResizeMeasurements(){const t=this.host._resize.liveLabels;if(!t?.length)return l;const e=t.filter(t=>"length"===t.kind),s=t.filter(t=>"area"===t.kind);return _`