Grouped Dual-List
GroupedDualListComponent (included_groups, excluded_groups: array of {name, items}). Modernizes the legacy publisher included/excluded picker (two giant scrolling multi-selects requiring Shift/Cmd-click) into a searchable, category-grouped list with one-click move: no modifier keys, and search auto-filters and expands matching groups.
Included (3)
Tech & Gadgets
TechBargains
GadgetWire
Deals
DealHub
Excluded (19)
Academy
9to5Mac Academy
FossBytes Academy
Skillwise Pro
Design
DesignTAXI
Hongkiat
Popular Photography
SonyAlphaRumors
Health & Fitness
Wellness
FitLife Daily
News & Media
DailyDigest
Mashable Shop
Lifehacker Deals
Software & Productivity
AppSumo Digest
ProductHunt Weekly
SaaSHub Reviews
Typing in either search box filters items within that column and auto-expands any group with a match, so finding one publisher among hundreds doesn't require scrolling through an alphabetical wall of names.
What changed from the legacy picker
- Search box per column instead of scrolling through an unfiltered alphabetical list.
- Per-item and per-category "move" buttons (single click) instead of Shift/Cmd-click multi-select, which is slow and easy to get wrong at scale, and inaccessible to keyboard/screen-reader-only users.
- Sticky group headers stay visible while scrolling a long category.
- Live counts per column and implicitly per group (via item count) instead of only a static "Included Publishers" heading.