Skip to content

feat(console): per-channel ⋯ settings popover; slim the Controls card - #39

Merged
bring42 merged 2 commits into
mainfrom
claude/channel-settings-popover
Jul 24, 2026
Merged

feat(console): per-channel ⋯ settings popover; slim the Controls card#39
bring42 merged 2 commits into
mainfrom
claude/channel-settings-popover

Conversation

@bring42

@bring42 bring42 commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Small UX change (console skin, UI-only) — also a test of the atomic OTA path as v1.3.1.

What

  • Each channel tab gets a button → opens a small settings popover: channel identity (CH N + effect), the Start/Length range editor, and Remove Channel.
  • Segment Range block and Remove Channel button leave the Controls card → it's now purely effect + params.
  • Backdrop / Esc close it; ⋯ selects the channel before opening so the popover always targets it.

Safe by construction

  • Range inputs + remove button keep their element ids → existing range-commit / delete wiring unchanged.
  • Verified in-browser (demo mode): ⋯ opens the popover with correct range, backdrop closes, no console errors, Controls card slimmed.

Deferred

  • Segments have no editable name yet (the tab's second line is the effect). Real names = a firmware feature (core + API + NVS persistence) — follow-up, not in this PR.

🤖 Generated with Claude Code

Move segment structure editing out of the Controls card into a per-channel
popover opened by a ⋯ button on each tab: it shows the channel identity
(CH N + effect), the Start/Length range editor, and Remove Channel. The
Controls card is now purely the effect + its params.

Range inputs and the remove button keep their element ids, so the existing
range-commit / delete wiring is unchanged — the popover always targets the
selected channel (⋯ selects it before opening). Backdrop/Esc close it.

Note: segments still have no editable *name* (the tab's second line is the
effect); real names would be a firmware feature — deferred.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 24, 2026 11:02

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the console-euclid-live UI concept to move per-channel range/removal controls out of the main Controls card and into a per-channel ⋯ settings popover, keeping the Controls card focused on effect + params.

Changes:

  • Add per-channel control on each channel tab that opens a settings popover.
  • Move Segment Range editor and Remove Channel button from the Controls card into the popover (keeping existing element ids).
  • Add new CSS for the tab settings control and the popover panel layout.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
ui-concepts/console-euclid-live/styles.css Adds styling for the per-channel ⋯ control and the settings popover panel.
ui-concepts/console-euclid-live/index.html Moves range/remove UI into a new dialog-like popover with a backdrop.
ui-concepts/console-euclid-live/app.js Wires the ⋯ click to select the channel and open/close the popover; closes popover after channel deletion.

Comment on lines 263 to +281
const tab = document.createElement("button");
tab.className = "strip-tab" + (seg.id === engine.state.selectedId ? " active" : "");
tab.type = "button";
tab.innerHTML = `
<div class="tab-id"><span>CH ${seg.id + 1}</span><span>${seg.length}px</span></div>
<div class="tab-id">
<span>CH ${seg.id + 1} · ${seg.length}px</span>
<span class="tab-cog" role="button" tabindex="-1" aria-label="Channel settings">
<svg viewBox="0 0 24 24" fill="currentColor"><circle cx="5" cy="12" r="1.8"/><circle cx="12" cy="12" r="1.8"/><circle cx="19" cy="12" r="1.8"/></svg>
</span>
</div>
<div class="tab-name">${eff ? eff.name : seg.effect}</div>
<div class="tab-bar"><i style="background:${segSwatchCss(seg)}"></i></div>
`;
tab.addEventListener("click", () => engine.selectSegment(seg.id));
tab.querySelector(".tab-cog").addEventListener("click", (e) => {
e.stopPropagation();
engine.selectSegment(seg.id);
openSegPopover(seg.id);
});

<!-- Per-channel settings popover (opened by the ⋯ on a tab) -->
<div class="popover-backdrop" id="segPopBackdrop"></div>
<div class="seg-popover" id="segPopover" role="dialog" aria-label="Channel settings">
The top rail is all flex-shrink:0, so on mobile the nav toggle overflowed
off the right edge (SETTINGS clipped). Shed the decorative model number +
divider below 620px, and tighten padding/gap + the wordmark tracking below
440px, so the wordmark and the toggle always fit. Desktop unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@bring42
bring42 merged commit 66a397a into main Jul 24, 2026
1 check passed
@bring42
bring42 deleted the claude/channel-settings-popover branch July 24, 2026 11:13
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.

3 participants