* revert(sidebar): drop drag-link-release menu priority patch
The patch in `web/sidebar/connection_menu.js` was reorder-only — it sorted
existing menu items so curated picks floated to the top. In practice
ComfyUI's drag-link-release menu has its own pre-filter that surfaces only
~4 stock nodes per socket type (e.g. for an IMAGE-compatible drop target:
VAEEncode, VAEEncodeForInpaint, SaveImage, PreviewImage). Most user
picks never appear in that filtered list, so the reorder had nothing to
hoist and the feature was invisible in practice.
A useful version of this would have to ADD picks to the menu — walk the
user's curated picks, type-match each against the dragged socket, inject
matches as new menu items — rather than just reorder. That's a larger
patch and out of scope for tonight; filing as a follow-up rather than
shipping dead code.
Removed: `web/sidebar/connection_menu.js`, the `patchConnectionMenu`
import + call in `web/koolook_sidebar.js`, and the corresponding
[Unreleased] CHANGELOG entry.
Kept: spotlight-on-add, modal drag-out fix, and the `pinExpanded`
buildFolder fix from #76 — all independently useful.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(sidebar): theme-classifier rework + Nodes-row polish
Replaces the previous "category mode" (canonical-segment first-segment
grouping, which produced a fragmented tree of `image` / `images` /
`Image-Save` / `KJNodes/image` / `Koolook/Image` for the same semantic
theme) with a broad keyword classifier that folds anything mentioning
an image-related word into a single "Image" bucket regardless of source
pack or category casing. Picks-only; flat list inside each theme; falls
back to pack-prefix-stripped first segment when no classifier matches.
Five coordinated changes shipped together:
1. Theme classifier (new). `THEME_CLASSIFIERS` is an ordered list of
13 broad themes (Image / Video / Mask / Audio / Model / Sampler /
Conditioning / Text & Prompt / Math & Logic / Pipeline & Batch /
I/O / Camera / Utility) with regex pattern arrays. `extractTheme`
builds a search corpus from packLabel + category + display title +
type ID and walks the classifiers in order — first match wins.
First match for "Image Comparer (rgthree)" is "Image" (not Math)
because Image is earlier in the list. Symbols touched in tree.js:
`gatherNodesByTheme`, `extractTheme`, `classifyTheme`,
`THEME_CLASSIFIERS`, `emitThemeChildren`, `collectFlatFromThemes`,
`countNodesInThemes`. Replaces `gatherNodesByCategory`,
`emitCategoryTreeChildren`, `collectFlatFromCategoryTree`,
`countNodesInCategoryNode`, `ensureSyntheticBucket`.
2. Pack-name badges removed. `makeNodeLeafRow` no longer accepts a
`packBadge` parameter; the badge rendering block is gone; all
callers (3 sites) updated; CSS rule `.koolook-pack-badge` removed
from constants.js. The breadcrumb prefix on search-flatten rows
already conveys origin in a cleaner form, and theme mode by
definition doesn't care about source pack.
3. Mode-toggle icons swapped. Repo mode: `pi-database` -> `pi-sitemap`
(now actually tree-shaped). Theme mode: `pi-sitemap` -> `pi-bars`
(sandwich). Better icon-to-meaning mapping.
4. Default mode flipped to "category" (theme). Newcomers more often
think "where are my image nodes" than "which pack is this from."
Existing users with `koolook.groupMode.v1` already in localStorage
keep their saved choice.
5. Layout polish. `+` button uses a `pi pi-plus` icon at 12px (matches
toolbar icon-button height) with a new dusty-green accent class
`koolook-add-btn-green` (rgba 120/165/100). New divider between the
search field and the Nodes action bar. `koolook-sidebar` gained
`padding-top: 10px` so the Snapshot row no longer hugs the panel
top edge.
CHANGELOG [Unreleased] updated with Changed entries for items 1+2.
Note: a CSS comment containing backticks (`koolook-icon-btn`) inside
a JS template literal silently broke module load on the first attempt —
backticks closed the template early, leaving "koolook-icon-btn" as a
stray identifier the browser rejected with "Unexpected identifier
'koolook'". Fixed by removing the backticks from the comment. `node
--check` did not catch this; the only reliable check is browser-side.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore(sidebar): address fresh-eyes review nits on theme classifier
Three NITs + one IMPORTANT comment from the PR #80 review pass:
- IMPORTANT: Add a code comment on `\bget\b` / `\bset\b` in the Utility
classifier warning future editors not to generalize to unbounded
`/get/` / `/set/`. Current narrow forms are intentional — they're
the last-resort net for trivial getter/setter nodes that didn't hit
any earlier classifier.
- NIT: Fix the `classifyTheme` doc-comment example for "Image Comparer"
to be technically accurate. The previous wording claimed Math's
`/\bcompare\b/i` would match "Comparer" — it wouldn't, because the
trailing word boundary fails on "Comparer". The actual reason it
lands in Image is the `/image/i` substring hit on the "Image" word
in the corpus, not ordering.
- NIT: Drop `.toLowerCase()` on the search corpus in `extractTheme`.
Every classifier pattern carries the `/i` flag, so the explicit
case fold was redundant work.
- NIT: Remove dead `(nc && ...)` defensive checks after the early
return on `!nc`. Per CLAUDE.md "no defensive coding for impossible
cases" — `nc` is guaranteed non-null on the lines below the early
return. Same in `gatherNodesByTheme` where `nc` is fetched after
`extractTheme` already filtered out unresolved picks; added a comment
noting the invariant.
Behavior unchanged. All pure correctness/style polish.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>