feat: daylight tz, camera engine, value stream + modal/UI polish

- daylight: new daylight_settings module + daylight-tz frontend helper; expanded daylight_stream behavior
- camera engine: capture path additions plus new test_camera_engine suite
- value stream: schema + processing updates (~178 lines)
- color strip: drop cycle effect (cycle.py / color-cycle.ts removed), tighten static path
- modal CSS: large refactor (+883), components.css polish (+110)
- templates: settings, css-editor, value-source-editor, test-template, display-picker, image-lightbox
- frontend core: state, modal, icons, graph-nodes, app
- frontend features: displays, streams, streams-capture-templates, value-sources, settings, color-strips/cards
- locales: en/ru/zh
- storage: color_strip, picture_source, value_source loaders touched
- preferences/sync_clocks/picture_sources routes; home_assistant + templates schemas
This commit is contained in:
2026-05-01 18:42:43 +03:00
parent 816a27db73
commit fdac26b9d9
64 changed files with 2716 additions and 837 deletions
-16
View File
@@ -135,22 +135,6 @@ class TestColorStripSourceLifecycle:
resp = client.post("/api/v1/color-strip-sources", json=payload)
assert resp.status_code == 400 # duplicate name
def test_color_cycle_source(self, client):
"""Color cycle sources store and return their color list."""
resp = client.post(
"/api/v1/color-strip-sources",
json={
"name": "Rainbow Cycle",
"source_type": "color_cycle",
"colors": [[255, 0, 0], [0, 255, 0], [0, 0, 255]],
"led_count": 30,
},
)
assert resp.status_code == 201
data = resp.json()
assert data["source_type"] == "color_cycle"
assert data["colors"] == [[255, 0, 0], [0, 255, 0], [0, 0, 255]]
def test_effect_source(self, client):
"""Effect sources store their effect parameters."""
resp = client.post(