mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 08:28:31 +00:00
ux v1.4.2: grid pitch halved (GRID_N=120), grid dots rendered above plan, dacha rooms snapped to grid nodes (instance data via config/set)
This commit is contained in:
@@ -8,7 +8,7 @@ FRONTEND_URL = "/houseplan_files/houseplan-card.js"
|
||||
PLANS_URL = "/houseplan_files/plans"
|
||||
PLANS_DIR = "houseplan/plans" # относительно каталога конфигурации HA
|
||||
CONF_ADMIN_ONLY = "admin_only"
|
||||
VERSION = "1.4.0"
|
||||
VERSION = "1.4.2"
|
||||
|
||||
DEFAULT_CONFIG: dict = {
|
||||
"spaces": [],
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+8
-6
File diff suppressed because one or more lines are too long
@@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## v1.4.2 — 2026-07-04 (сетка разметки)
|
||||
- Шаг сетки уменьшен в 2 раза: GRID_N 60 → 120 (шаг 8.33 рендер-ед. ≈ 0.83% ширины плана).
|
||||
- Точки сетки рендерятся ПОВЕРХ плана и комнат (grid-rect перенесён из под-плана в верхний
|
||||
markup-слой); точки контрастнее (r=0.14g, обводка).
|
||||
- Данные дачи: границы всех 13 комнат привязаны к узлам сетки (снап рёбер, сдвиги ≤ полшага;
|
||||
правка только конфига инстанса через houseplan/config/set, код не менялся).
|
||||
- Кэш карточки: URL модуля ?v= берётся из const.VERSION — при обновлении фронтенда бампать
|
||||
const.py и рестартовать HA, иначе браузеры держат старый модуль в memory-cache.
|
||||
|
||||
## v1.4.1 — 2026-07-04 (UX разметки)
|
||||
- Esc / Ctrl+Z при рисовании убирают последнюю точку (и её линию, если она была добавлена
|
||||
этим шагом; переиспользованные чужие стены не трогаются).
|
||||
|
||||
@@ -38,6 +38,15 @@ cp dist/houseplan-card.js custom_components/houseplan/frontend/
|
||||
- После деплоя JS — проверить в браузере (Ctrl+F5) и console (не должно быть ошибок из
|
||||
houseplan-card.js; битый бандл роняет все дашборды).
|
||||
|
||||
## Кэш фронтенда и «пустой вид»
|
||||
|
||||
- URL модуля карточки содержит `?v=<VERSION из const.py>`. Браузеры держат ES-модуль в
|
||||
memory-cache: после деплоя нового JS **бампните VERSION в const.py и рестартуйте HA**,
|
||||
иначе обычный F5 оставит старую версию.
|
||||
- После reload страницы HA-фронтенд (с kiosk-mode) иногда оставляет вид пустым
|
||||
(«InvalidStateError: Transition was aborted», hui-view не создаётся 1–2 мин).
|
||||
Лечится повторной SPA-навигацией: pushState + событие location-changed, или подождать.
|
||||
|
||||
## Релиз
|
||||
|
||||
Тег `vX.Y.Z` + GitHub Release → workflow `.github/workflows/release.yml` собирает и прикладывает
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "houseplan-card",
|
||||
"version": "1.4.1",
|
||||
"version": "1.4.2",
|
||||
"description": "Interactive house plan Lovelace card for Home Assistant (dacha Kirillovskoe)",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
|
||||
+10
-8
@@ -12,7 +12,7 @@ import { FLOOR_BG, FLOOR_BG_RECT } from './data/backgrounds';
|
||||
import { EXCLUDED_DOMAINS, GROUP_TITLES, iconFor, DOMAIN_PRIORITY } from './rules';
|
||||
import './editor';
|
||||
|
||||
const CARD_VERSION = '1.4.1';
|
||||
const CARD_VERSION = '1.4.2';
|
||||
const LS_KEY = 'houseplan_card_layout_v1';
|
||||
const NORM_W = 1000; // ширина рендер-пространства для нормированных конфигов
|
||||
|
||||
@@ -33,7 +33,7 @@ interface RoomCfg {
|
||||
poly?: number[][]; // полигон в рендер-единицах (модель) / нормированный (конфиг)
|
||||
}
|
||||
|
||||
const GRID_N = 60; // точек сетки по ширине плана
|
||||
const GRID_N = 120; // точек сетки по ширине плана
|
||||
type MarkupTool = 'draw' | 'erase' | 'delroom';
|
||||
|
||||
interface SpaceModel {
|
||||
@@ -1170,9 +1170,9 @@ class HouseplanCard extends LitElement {
|
||||
return [r.x! + r.w! / 2, r.y! + Math.min(r.w!, r.h!) * 0.1];
|
||||
}
|
||||
|
||||
private _renderMarkupDefs(vb: number[]): TemplateResult {
|
||||
private _renderMarkupDefs(_vb: number[]): TemplateResult {
|
||||
const g = this._gridPitch;
|
||||
const dotR = g * 0.09;
|
||||
const dotR = g * 0.14;
|
||||
return svg`<defs>
|
||||
<pattern id="hp-grid" x="0" y="0" width="${g}" height="${g}" patternUnits="userSpaceOnUse">
|
||||
<circle cx="0" cy="0" r="${dotR}" class="griddot"></circle>
|
||||
@@ -1180,15 +1180,15 @@ class HouseplanCard extends LitElement {
|
||||
<circle cx="0" cy="${g}" r="${dotR}" class="griddot"></circle>
|
||||
<circle cx="${g}" cy="${g}" r="${dotR}" class="griddot"></circle>
|
||||
</pattern>
|
||||
</defs>
|
||||
<rect x="${vb[0]}" y="${vb[1]}" width="${vb[2]}" height="${vb[3]}" fill="url(#hp-grid)" pointer-events="none"></rect>`;
|
||||
</defs>`;
|
||||
}
|
||||
|
||||
private _renderMarkupLayer(_vb: number[]): TemplateResult {
|
||||
private _renderMarkupLayer(vb: number[]): TemplateResult {
|
||||
const segs = this._segments;
|
||||
const path = this._path;
|
||||
const g = this._gridPitch;
|
||||
return svg`
|
||||
<rect x="${vb[0]}" y="${vb[1]}" width="${vb[2]}" height="${vb[3]}" fill="url(#hp-grid)" pointer-events="none"></rect>
|
||||
${segs.map((s) => svg`<line class="seg" x1="${s[0]}" y1="${s[1]}" x2="${s[2]}" y2="${s[3]}"></line>`)}
|
||||
${path.length > 1
|
||||
? svg`<polyline class="pathline" points="${path.map((p) => p.join(',')).join(' ')}"></polyline>`
|
||||
@@ -1487,7 +1487,9 @@ class HouseplanCard extends LitElement {
|
||||
}
|
||||
.griddot {
|
||||
fill: var(--hp-accent);
|
||||
opacity: 0.45;
|
||||
opacity: 0.75;
|
||||
stroke: rgba(0, 0, 0, 0.35);
|
||||
stroke-width: 0.4;
|
||||
}
|
||||
.seg {
|
||||
stroke: var(--hp-accent);
|
||||
|
||||
Reference in New Issue
Block a user