/** * SearchSelect widget — a search box paired with a dropdown of options. * Multi-select renders chosen items as removable pills (inline with the search * box), each backed by a hidden . Single-select renders no pill: the * committed label lives inside the search box (which doubles as a combobox — * focus clears it to search, picking an option fills it), with a lone hidden * carrying the value. Both keep hidden inputs so Django validation works. * * Filter mode (data-ss-mode="filter", rendered by FilterSelect): value rows * carry +/− buttons that add include (✓) / exclude (✗) pills, plus pinned * modifier pseudo-options ((Any)/(None)) that are mutually exclusive with value * pills. Filter widgets have no hidden inputs; readSearchSelect serialises their * state into data-included / data-excluded / data-modifier for the filter bar. * * initAll() runs on DOMContentLoaded + htmx:afterSwap, each widget guarded with * el._ssInit. * * Dynamically-added rows and pills are cloned from hidden