Skip to content

Panel fixes: colourless lights, hour-cell status, timeline state tags - #2

Merged
ameesme merged 3 commits into
mainfrom
claude/panel-ui-fixes
Jul 30, 2026
Merged

Panel fixes: colourless lights, hour-cell status, timeline state tags#2
ameesme merged 3 commits into
mainfrom
claude/panel-ui-fixes

Conversation

@ameesme

@ameesme ameesme commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Follow-up fixes to the Status section shipped in #1. Bumps the manifest to 2.1.1.

Status off the hour-cell sheet

The Status section described the light as a whole — control state, last applied values, capabilities — none of which is about the single hour being edited. It now renders only on the light and sun sheets.

Colour controls hidden on lights that have no colour

A light supporting neither a colour temperature nor RGB takes brightness alone: _apply_light builds an empty colour dict for it, so its colour-temperature range does nothing. Those lights now lose the colour-temperature controls in both the per-light editor and the per-hour override, and their timeline row and preview strip render a flat fill instead of the Kelvin gradient — which was implying a warmth curve the bulb cannot produce.

RGB-only lights deliberately keep their colour-temperature controls. The integration renders their temperature as an RGB colour via kelvin_to_rgb, so those settings still drive real output; hiding them would remove working configuration. The shared hasColor() helper keeps that distinction in one place.

_lights_payload now reports supports_color_temp alongside supports_rgb, both from a single supported_modes() call. The dev harness gains a dimmer-only fake light so the colourless path is visible in npm run dev.

Timeline state tags restyled

One pill per row instead of two:

  • An on light shows only its control mode — on is already evident from the row's bars, the mode isn't.
  • An off or unavailable light shows its power state instead, in a quiet outlined variant; its control mode says nothing useful while nothing is being driven.
  • The pill borrows the Status sheet's badge treatment (soft accent fill, strong accent text, full radius, filled danger for Manual) so the same state reads the same way in both places.

Colourless rows moved from --accent to a new --accent-light token — the former is a heavy brown that dominated the Kelvin-tinted rows beside it.

Verification

  • ruff check . clean, python -m pytest 33 passed, npm run build clean with the bundle committed.
  • Driven in the dev harness: colour-temperature controls hidden for the dimmer-only light and present for RGB-only, CT-only and CT+RGB lights; its timeline row renders 1 distinct colour against 6–9 for the others; the hour-cell sheet has no status section.
  • Row heights measured against the same DOM with .tag { display: none } injected, which isolates the tag's contribution: 42px desktop and 77px mobile with and without. That caught a real regression — the badge's padding: 1px 8px pushed the pill past the light name's line box and grew mobile rows by 2px, since the name is its own line there. Now padding: 0 8px.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XdpAyEvqgNcBstA75dQ5wr


Generated by Claude Code

claude added 3 commits July 30, 2026 22:00
Three small corrections to the Status/timeline work:

The hour-cell sheet no longer renders the Status section. It describes the
light as a whole — control state, last applied values, capabilities — none
of which is about the single hour being edited. That belongs on the light
sheet, where it still is.

A light that supports neither a colour temperature nor RGB takes brightness
alone: `_apply_light` builds an empty colour dict for it, so its colour
temperature range does nothing. Its editors now hide the colour-temperature
controls (both the per-light range and the per-hour override), and its
timeline row and preview strip render a flat accent fill instead of the
Kelvin gradient, which was implying a warmth curve the bulb cannot produce.

RGB-only lights deliberately keep their colour-temperature controls: the
integration renders their temperature as an RGB colour via kelvin_to_rgb,
so those settings still drive real output. The shared `hasColor()` helper
encodes that distinction in one place.

`_lights_payload` now reports `supports_color_temp` alongside `supports_rgb`,
both read from a single `supported_modes()` call. The dev harness gains a
dimmer-only fake light so the colourless path is visible in `npm run dev`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XdpAyEvqgNcBstA75dQ5wr
One pill per row instead of two. An on light shows only its control mode —
"on" is already evident from the row's bars, the mode isn't. An off or
unavailable light shows its power state instead, in a quiet outlined
variant: its control mode says nothing useful while nothing is being
driven.

The pill now borrows the Status sheet's badge treatment (soft accent fill,
strong accent text, full radius, filled danger for Manual) so the same
state reads the same way in both places.

Colourless rows and preview strips move from --accent to a new
--accent-light token. The former is a heavy brown that dominated the
Kelvin-tinted rows beside it; the new token sits between --accent and
--accent-soft, bright enough to read as a fill without shouting.

The pill carries no vertical padding: at padding 1px it grew past the light
name's line box and made mobile rows 2px taller, since the name is its own
line there. Verified by measuring rows against the same DOM with the tags
display:none — 42px desktop and 77px mobile either way.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XdpAyEvqgNcBstA75dQ5wr
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XdpAyEvqgNcBstA75dQ5wr
@ameesme
ameesme merged commit 899ab21 into main Jul 30, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants