From 1e0295a370f80a417e9142404dd7c6fda2b51fde Mon Sep 17 00:00:00 2001 From: Matysh Date: Mon, 3 Aug 2026 01:41:26 +0300 Subject: [PATCH] SUN: adjust pinned dialog inventories + screenshot script smoke_general_settings: the settings dialog now has 14 gsrows and a Sun group; smoke_temp_fill: the space dialog gained the per-space compass field. demo/shot_sun.mjs renders the evening-wedges and compass shots. --- demo/shot_sun.mjs | 52 +++++++++++++++++++++++++++++++++ demo/smoke_general_settings.mjs | 6 ++-- demo/smoke_temp_fill.mjs | 4 +-- 3 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 demo/shot_sun.mjs diff --git a/demo/shot_sun.mjs b/demo/shot_sun.mjs new file mode 100644 index 00000000..45844359 --- /dev/null +++ b/demo/shot_sun.mjs @@ -0,0 +1,52 @@ +// Screenshots for docs/SUN.md: evening wedges over the glow fill + the compass +// dial in the general settings. Usage: node demo/shot_sun.mjs +import { launch } from './serve.mjs'; +const outDir = process.argv[2] || '/tmp'; +const { page, browser } = await launch({ width: 900, height: 860 }, 2); +// instant colors for the still shot: the day/night transition is tens of seconds +await page.emulateMedia({ reducedMotion: 'reduce' }); + +await page.evaluate(async () => { + const c = window.__card; + const sp = c._serverCfg.spaces.find((s) => s.id === 'f1'); + sp.openings = [ + { id: 'wN', type: 'window', x: 0.30, y: 0.14, angle: 0, length: 0.08 }, + { id: 'wE', type: 'window', x: 0.96, y: 0.60, angle: 90, length: 0.08 }, + { id: 'wS', type: 'window', x: 0.30, y: 0.86, angle: 0, length: 0.08 }, + { id: 'wW', type: 'window', x: 0.04, y: 0.30, angle: 90, length: 0.08 }, + { id: 'wW2', type: 'window', x: 0.04, y: 0.72, angle: 90, length: 0.08 }, + ]; + sp.settings = { ...(sp.settings || {}), show_borders: true, fill_mode: 'glow' }; + c._serverCfg.settings = { + ...(c._serverCfg.settings || {}), + north_deg: 0, sun_rays: true, bg_mode: 'daynight', + }; + c._cfgRev = (c._cfgRev || 0) + 1; + // a warm evening: the sun low in the west; the living-room light off so + // the glow pool does not swamp the west wedge + c.hass = { ...c.hass, states: { ...c.hass.states, + 'light.ceiling': { ...c.hass.states['light.ceiling'], state: 'off' }, + 'sun.sun': { + entity_id: 'sun.sun', state: 'above_horizon', attributes: { azimuth: 265, elevation: 3 }, + }, + } }; + c.requestUpdate(); + await c.updateComplete; +}); +await page.waitForTimeout(400); +const stage = await page.evaluateHandle(() => window.__card.shadowRoot.querySelector('.stage')); +await stage.asElement().screenshot({ path: outDir + '/sun_rays.png' }); + +await page.evaluate(async () => { + const c = window.__card; + c._openSettingsDialog(); + c._settingsDialog = { ...c._settingsDialog, northDeg: 330 }; + c.requestUpdate(); + await c.updateComplete; + c.shadowRoot.querySelector('.compass').scrollIntoView({ block: 'center' }); +}); +await page.waitForTimeout(200); +const dlg = await page.evaluateHandle(() => window.__card.shadowRoot.querySelector('.dialog')); +await dlg.asElement().screenshot({ path: outDir + '/sun_compass.png' }); +await browser.close(); +console.log('shots written to ' + outDir); diff --git a/demo/smoke_general_settings.mjs b/demo/smoke_general_settings.mjs index 71cd19ca..1766d185 100644 --- a/demo/smoke_general_settings.mjs +++ b/demo/smoke_general_settings.mjs @@ -4,7 +4,7 @@ const res = await page.evaluate(async () => { const out = {}; const c = window.__card; const sr = () => c.shadowRoot || c.renderRoot; - // 1) диалог общих настроек: 7 цветовых строк, 3 группы + // 1) диалог общих настроек: инвентарь строк и групп (обновлён фичей «Солнце») c._openSettingsDialog(); await c.updateComplete; out.rows = sr().querySelectorAll('.gsrow').length; out.groups = [...sr().querySelectorAll('.dialog .dispsection')].map((l) => l.textContent.trim()); @@ -28,8 +28,8 @@ const res = await page.evaluate(async () => { }); // значения зафиксированы прогоном на v1.43.1 и сверены с кодом (audit T1) checkAll(res, { - "rows": 12, // 10 цветов + радиус свечения + фон вокруг плана - "groups": ["Fill: lights", "Fill: temperature", "Fill: zigbee signal", "Light-sources fill", "Stage background"], + "rows": 14, // 10 цветов + радиус свечения + режим фона + цвет фона + погода (docs/SUN.md) + "groups": ["Fill: lights", "Fill: temperature", "Fill: zigbee signal", "Light-sources fill", "Stage background", "Sun"], "saved": {"c": "#ff00ff", "a": 0.5}, "lqiBefore": 7, "lqiAfter": 0, diff --git a/demo/smoke_temp_fill.mjs b/demo/smoke_temp_fill.mjs index 106ef789..123d6391 100644 --- a/demo/smoke_temp_fill.mjs +++ b/demo/smoke_temp_fill.mjs @@ -32,7 +32,7 @@ checkAll(res, { "cold": ["#4fc3f7", "transparent", "transparent", "transparent"], "hot": ["#ffd45c", "transparent", "transparent", "transparent"], "swapped": ["#66d17a", "transparent", "transparent", "transparent"], - "dialogTempFields": 3, - "dialogHiddenWhenNone": 1, + "dialogTempFields": 4, // масштаб + мин/макс + компас пространства (docs/SUN.md) + "dialogHiddenWhenNone": 2, // мин/макс скрыты; масштаб и компас остаются }); await finish(browser, res);