10 Commits
Author SHA1 Message Date
Greg a654d001ec v0.4.1: add Run button to the toolbar
Sits next to Disable All. Calls queuePromptSafely() — which tries
app.queuePrompt(0) first, then falls back to clicking the canvas-side
Run button if the API shape isn't available.

Distinct green styling (#2d7d46) so it doesn't blend with the blue
Enable/Disable buttons. Queues the prompt using whatever groups are
currently enabled, same as ComfyUI's own Run.
2026-05-25 05:16:59 -05:00
Greg 0861d7ed13 v0.4.0: drag-to-reorder rows + custom order persisted to localStorage
Lets users define a workflow sequence (step 1 → step 2 → ...) by
dragging rows in the panel. Order is independent of rgthree's
auto-sort and persists across reloads.

How it works:
- Each row gets draggable="true" + HTML5 DnD handlers.
- On drop, reorderGroup(moving, target, before|after) computes the new
  ordering, writes it to localStorage (ORDER_KEY), and re-renders.
- Drop indicator: inset top/bottom box-shadow in the accent color
  showing where the dragged row will land.
- sortByCustomOrder() applied at the end of getNavigableGroups so the
  matchColors filtering still happens first.
- Groups not yet in the saved order keep relative order and end up
  after listed ones. New groups auto-append on the next reorder write.

Shortcut badges follow the new order — 1..9 always map to the first 9
rows as they appear in the panel, so dragging a group to the top
assigns it shortcut "1" (assuming no custom override).

Settings panel gains two reset buttons: "Reset row order" (just the
order) and "Reset all settings" (colors + shortcuts + order).
2026-05-25 05:06:26 -05:00
Greg 40394461ad v0.3.3: visual highlight for enabled rows + fix shortcut persistence
Two issues:

1) Enabled rows now have a visual indicator beyond the toggle pill:
   - Bold title text tinted toward the accent color
   - Left edge stripe in the accent color (via inset box-shadow)
   - Subtle gradient wash from the accent color into the row bg
   All driven by --cnv-accent so it picks up the user's custom color.
   Applied at render time AND on every periodic sync so external
   toggles (via the canvas muter directly) update the panel too.

2) Shortcut edits weren't persisting. Root cause: I only attached a
   "change" event listener to the shortcut list, and text inputs only
   fire change on blur. So typing a key char then immediately picking a
   group from the select could lose the unsaved key value when the
   panel closed without the input ever blurring.
   Fix: also attach an "input" listener — fires per keystroke for text
   inputs and on selection for selects. Either path now persists.
2026-05-24 23:30:13 -05:00
Greg fa4e1af5c5 v0.3.2: click anywhere on header to collapse + bigger collapse button
Header now distinguishes click vs drag:
- mousedown → mouseup with <4px total movement = treated as a CLICK,
  toggles collapse (same as clicking the arrow)
- More movement = actual drag, keeps existing behavior
- Threshold avoids accidental toggling during tiny mouse jitters

Also enlarged the collapse arrow button: bigger font, padded box with
border + background tint, easier to hit. Either gesture (header click
or arrow click) does the same thing now.
2026-05-24 16:55:09 -05:00
Greg cf256c64f5 v0.3.1: settings panel with configurable colors + keyboard shortcuts
Click the ⚙ button in the toolbar → settings slide down between toolbar
and group list.

Colors (4 pickers, live preview, persist to localStorage):
- Body background      (defaults to rgthree teal #0e283f)
- Header bar           (#1e4f88)
- Accent / toggle ON   (#2864ad)
- Row hover            (#163657)

All panel styling now reads from CSS custom properties so the live
update is just panel.style.setProperty(key, value).

Keyboard shortcuts (overrides defaults):
- Add rows one at a time: type a key char, pick a group from a dropdown
- × button removes a row
- Empty list = defaults restore (1..9 → first 9 groups by order)
- Single-key only (a-z, 0-9). Modifier keys ignored (Ctrl/Meta/Alt).

Reset button wipes both localStorage entries and rebuilds settings UI
with defaults.

Refactored onKeyDown to go through resolveShortcut() so the same code
path handles defaults and user overrides.
2026-05-24 16:43:47 -05:00
Greg 31e4591993 v0.3.0: strip down + toolbar with Enable All / Disable All
Per user feedback:
- REMOVE filter / search input — wasn't useful for 15 groups
- REMOVE color dot — was confusing, looked like a status indicator
  but did nothing
- REMOVE "Enable " prefix on row titles — just show the group name
- REMOVE → jump button per row — clicking the row body already jumps
- REMOVE ⋯ menu per row — its actions weren't pulling weight
- REMOVE right-click context menu — same reason
- ADD toolbar between header and list:
    [Enable All] [Disable All]              [⚙ Settings]
  Enable All / Disable All flip every widget in every muter at once.
  Settings opens an alert stub for now — actual color + shortcut
  customization will land in v0.3.1.

Net result: each row is just `Group Name  [N]  [toggle pill]`.
Click toggle pill = flip. Click anywhere else on the row = jump.

Bumped to 0.3.0 (breaking UI change).
2026-05-24 16:17:29 -05:00
Greg c91f05a9a2 v0.2.1: restyle for closer rgthree muter visual match — flat dark teal body, blue header bar, tighter rows 2026-05-24 13:12:55 -05:00
Greg ffc13469ea v0.2.0: restyle to mirror rgthree Fast Groups Muter aesthetic
After realizing the canvas-Floater approach can't escape canvas zoom
(pinned canvas nodes always scale with ds.scale, making them unusable
when panned out), pivoted back to this DOM-overlay panel. It naturally
renders at constant size regardless of zoom.

This commit just makes the panel LOOK like rgthree's muter so it doesn't
feel like a separate UI:

- Dark blue card with rgthree-style blue header bar
- Each row: color dot + "Enable {Group Name}" + toggle pill + → + ⋯
- Toggle pill is a real pill: rounded rectangle with "no"/"yes" label
  and a glowing knob that pulses when on (matches rgthree muter visuals)
- Alternating row backgrounds for readability
- Toggle pill is bidirectionally wired to the corresponding rgthree
  widget — flip in panel → muter widget toggles → panel pill animates
  (and vice versa via the existing 600ms sync)

Bumped CNV_VERSION to 0.2.0.
2026-05-24 13:06:59 -05:00
Greg c60c42e7c0 v0.1.0: redesign as floating muter mirror
Each row in the panel is now a real two-way toggle wired to the
corresponding widget on rgthree's Fast Groups Muter. Click the checkbox
in the panel → muter widget flips. Toggle the muter widget directly on
the canvas → panel checkbox catches up on the next poll (600ms). Save +
load works because all state still lives in rgthree.

Per row layout:
  [checkbox] [color dot] Group Name [shortcut N] [→ jump] [⋯ menu]

Click body of row = jump. Explicit → button = same jump (visible
affordance). ⋯ opens the same context menu as right-click. Groups with
no managing muter render a dashed placeholder where the checkbox would
be (visual signal: "this group is unmanaged").

Kept: drag-to-reposition, collapse, search, matchColors filter (only
groups in the primary muter render), keyboard 1-9 = jump, version
marker, all rgthree integration (single-muter Solo, all-muter Reset).

Bumped to v0.1.0 since the row contract changed.
2026-05-24 12:14:41 -05:00
Greg c3b1215206 Initial scaffold for comfyui-navigator
JS-only ComfyUI extension. Floating right-anchored panel that:
- Auto-lists every LGraph group in the current workflow
- Click row → animated pan+zoom to fit the group on screen
- Search box at the top filters by title
- Right-click row → Solo run / Center / Reset
- Solo uses rgthree's Fast Groups Muter (driven via widget callbacks)
  when present; otherwise falls back to node.mode = NEVER on every node
  outside the soloed group's bounds
- Keyboard 1-9 jumps to the first nine groups
- Panel is draggable; position + collapsed state persisted to localStorage
- Hidden when graph has < 2 groups

No Python node, no drawNode hooks, no view-filtering — only canvas pan/zoom
+ rgthree widget poking + node.mode flag setting. None of the fragile
internal hooks that comfyui-tabs depended on.
2026-05-24 11:23:18 -05:00