Frontend parity Batch B: HSV mode, static-segment editor, EffectPicker, daily-backup setting (part of #48) #77

Merged
claude-bot merged 1 commit from fix/48-frontend-parity-b into main 2026-07-16 13:48:39 +00:00
Contributor

Part of #48 (Batch B; issue stays open for Batch C).

  • HSV color mode (§10.1/10.2) — RGB/HSV toggle in ColorSlots.tsx; colors still stored as RGB (HSV is input-only), conversion helpers in new panel/color.ts. 16 new conversion tests.
  • Static-segment editor (§3.2) — when a segment's mode is static, Settings exposes color/effect/speed/intensity/brightness via a typed SegmentStaticConfig (persisted to Segment.static_config).
  • EffectPicker full list — corrected/de-duplicated static WLED effect list + live fetch via api.getWledEffects() (GET /api/v1/wled/effects), gated on controller reachability, with graceful fallback to the static list + Custom-ID input.
  • daily_backup_retain_count control in Settings (from #57), matching the existing backup_retain_count pattern.

Verified via Docker (node:22): eslint (--max-warnings 0), tsc -b, vitest (37/37), vite build — all pass.

Forward-looking follow-ups (backend, not in this PR): add a /wled/effects proxy endpoint (to light up the live effect list — the frontend already calls it and degrades gracefully), and a static_config consumer in scheme_translator (the editor persists a sensible shape; nothing reads it yet). I'll fold these into a small backend task.

Batch C remaining on #48: conflict handling, import-panel overhaul, gradient swatches/month backdrop, preview carousel, quick-push arbitrary-color path, un-gate presets export.

🤖 Generated with Claude Code

Part of #48 (Batch B; issue stays open for Batch C). - **HSV color mode (§10.1/10.2)** — RGB/HSV toggle in `ColorSlots.tsx`; colors still stored as RGB (HSV is input-only), conversion helpers in new `panel/color.ts`. 16 new conversion tests. - **Static-segment editor (§3.2)** — when a segment's mode is `static`, Settings exposes color/effect/speed/intensity/brightness via a typed `SegmentStaticConfig` (persisted to `Segment.static_config`). - **EffectPicker full list** — corrected/de-duplicated static WLED effect list + live fetch via `api.getWledEffects()` (`GET /api/v1/wled/effects`), gated on controller reachability, with graceful fallback to the static list + Custom-ID input. - **`daily_backup_retain_count`** control in Settings (from #57), matching the existing `backup_retain_count` pattern. **Verified via Docker** (`node:22`): eslint (`--max-warnings 0`), `tsc -b`, vitest (37/37), `vite build` — all pass. **Forward-looking follow-ups (backend, not in this PR):** add a `/wled/effects` proxy endpoint (to light up the live effect list — the frontend already calls it and degrades gracefully), and a `static_config` consumer in `scheme_translator` (the editor persists a sensible shape; nothing reads it yet). I'll fold these into a small backend task. Batch C remaining on #48: conflict handling, import-panel overhaul, gradient swatches/month backdrop, preview carousel, quick-push arbitrary-color path, un-gate presets export. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Frontend parity batch B (#48): HSV entry, static-segment editor, full effect list, daily backup retain
All checks were successful
CI / Alembic migration check (pull_request) Successful in 1m9s
CI / Python lint & type-check (pull_request) Successful in 1m31s
CI / Frontend lint, test & build (pull_request) Successful in 1m50s
CI / Dependency audit (pull_request) Successful in 2m9s
CI / Python tests (pull_request) Successful in 2m34s
CI / Docker build, health smoke & E2E (pull_request) Successful in 2m54s
5f152d2acd
- ColorSlots: add RGB/HSV entry toggle for the primary color; HSV↔RGB
  conversions live in new panel/color.ts. Colors still stored as RGB.
- SettingsPage: expose static color/effect config (ColorSlots + EffectPicker
  + speed/intensity/brightness) when a segment's mode is "static", persisted
  into Segment.static_config as a typed SegmentStaticConfig.
- EffectPicker: replace the 30-effect hardcoded list with a corrected,
  de-duplicated static list (panel/effects.ts) and fetch the authoritative
  full list live from the controller via useWledEffects when reachable.
- Settings: expose daily_backup_retain_count next to backup_retain_count;
  add the field to the AppSettings type.
- Add HSV↔RGB conversion unit tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
claude-bot deleted branch fix/48-frontend-parity-b 2026-07-16 13:48:39 +00:00
Sign in to join this conversation.
No description provided.