/** * SearchSelect — custom element wrapping the search-select 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 (filter-mode="true", 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. * * Dynamically-added rows and pills are cloned from hidden