feat(editor): перетаскивание кнопки настроек комнаты (#645)

Кнопка сохраняет положение в пределах комнаты только на время сессии редактора,
корректно отменяется при pinch/cancel и учитывается подписями Resize.

Issue: #645
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-09-25 08:33:07 +03:00
parent 27ba3f2ee0
commit 62d0f50593
82 changed files with 1360 additions and 658 deletions
+5
View File
@@ -2,6 +2,11 @@
## Unreleased
- In the Plan editor, the **Room settings** button can now be moved temporarily
within its room when it covers a wall, opening or another element. The
position lasts until the editor is closed and does not change the plan; a
normal click still opens settings
([#645](https://github.com/Matysh/houseplan-card/issues/645)).
- Plan files up to 8 MB now actually upload: the plan is sent over HTTP
instead of the Home Assistant WebSocket, whose message limit used to drop
the connection for any plan above about 3 MB. A file over 8 MB is refused
+5
View File
@@ -8,6 +8,11 @@
## Не выпущено
- В редакторе плана кнопку **«Настройки комнаты»** теперь можно временно
перетащить в другое место внутри комнаты, если она перекрывает стену, проём
или другой элемент. Положение действует до выхода из редактора и не меняет
план; обычный клик по-прежнему открывает настройки
([#645](https://github.com/Matysh/houseplan-card/issues/645)).
- Файлы плана до 8 МБ теперь действительно загружаются: план отправляется по
HTTP, а не через WebSocket Home Assistant, предел сообщения которого рвал
соединение на любом плане больше примерно 3 МБ. Файл больше 8 МБ отклоняется
+2 -1
View File
@@ -108,7 +108,8 @@
sizing.
- **Room settings, tier 3** (v1.42.0): per-room fill/temp-source/label sizes;
the settings button sits at the room's VISUAL centre (inscribed circle +
centroid pull), icon-derived size, zooms with the plan (v1.51.0).
centroid pull), icon-derived size, zooms with the plan (v1.51.0), and can be
moved temporarily inside the room for the current Plan-editor session (#645).
- **Files & plans** (v1.44–v1.50): signed content urls with sandbox CSP,
copy-on-write plan files, "already uploaded" picker + explicit delete
(v1.47.0), store quotas instead of any age-based deletion (v1.49.0),
+6
View File
@@ -558,6 +558,12 @@ shows the final result. A real diagonal remains unchanged. Older invisible
one-grid-step slopes are offered separately by **Optimize plans**, with the
number of walls and maximum movement shown before confirmation.
If **Room settings** covers an element you need, drag anywhere on its capsule.
It stays inside that room and remembers the temporary position until you leave
the Plan editor; zooming, panning or visiting another floor does not reset it.
This is session-only assistance: it writes neither config nor Undo history. A
plain click or tap without a drag still opens Room settings.
### Plan tools at a glance
| Tool | Result | Room area | Light and shadow | Main limit |
+7
View File
@@ -680,6 +680,13 @@ T-соединение входит в проходящую стену без в
Отмена ничего не записывает, подтверждённое исправление можно отменить обычным
Undo оптимизации.
Если кнопка **«Настройки комнаты»** перекрывает нужный элемент, перетащите её
за любое место капсулы. Она движется только внутри этой комнаты и запоминает
место до выхода из редактора плана; зум, перемещение плана и переход на другой
этаж положение не сбрасывают. Это временная помощь для текущей сессии: в
конфиг и Undo ничего не записывается. Обычный клик или тап без перетаскивания
по-прежнему открывает настройки комнаты.
Каждый законченный отрезок цепочки сохраняется сразу. `Esc` завершает принятые
отрезки как независимые стены, оставляет инструмент **Стены** активным и
отцепляется от последней точки; совместимые прямые участки становятся одной
+12 -12
View File
@@ -3,7 +3,7 @@
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"oxipng": "oxipng 10.2.0",
"sourceFingerprint": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceFingerprint": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"captureScriptSha256": "e2d14d89de793011615662af7c83c433768d4761f6cec7f0b3860c797494299e",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -15,7 +15,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "5d1e816c2fde72316809991e9651e242d3cbcd897fb9db0554dc3bde943486f5"
},
"view-touch": {
@@ -26,7 +26,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "bc2001f9cd51715a38ad8d913b1c5a4f2220b3917c8dc03b2de65cfb3f62f808"
},
"space-create": {
@@ -37,7 +37,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "a74330dcdd0d590e2e0008c7030a9dc11df9793682b1a050a7aaa734c651cc30"
},
"room-contour-close": {
@@ -48,7 +48,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "0c354a79f9c3660788b6c5e889a27b6bd78b1f209dc0eef6bb43e2c1344028c4"
},
"plan-context-tray": {
@@ -59,7 +59,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "64169c543291bc4df806dcf8ff484b42c8ea55eb343323d945344e0e28f2ce97"
},
"device-editor": {
@@ -70,7 +70,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "a4c1f55438e669fe7533a01185d50f7396e6fab23a3f2b9c8a669c6a28e6b200"
},
"device-display-preview": {
@@ -81,7 +81,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "8029b1cd7329e3fc921ae9ca19abe6f7f2c7246eb45c891d088baedf9972fac2"
},
"background-editor": {
@@ -92,7 +92,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "375900a29aa62632883ede6727b7dbb8b48cabe9d7d0e16425f9779c837f3dd9"
},
"room-card": {
@@ -103,7 +103,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "c985783769da1bce50c9abe92ce1c6852d62701ce940f6f0a041d634ac21e888"
},
"device-info": {
@@ -114,7 +114,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "19e247d5bf49375b238292d45ae32e9eb38a83f5d1a53f6ddde860ed4adcef42"
},
"pdf-export": {
@@ -125,7 +125,7 @@
},
"theme": "light",
"language": "en",
"sourceSha256": "d0121730561b4c042179725401675031c2ff8fd52217540db357ce52fce7eb77",
"sourceSha256": "fd2a454384eaaf53c16e8d3db85ef73d8abff42af17e7e8834a40b796e845a17",
"imageSha256": "4537692fd57a3ed95528eddd748eee5cb6e456ffab7cc49169853d62459252cd"
}
},