The parent supplies a two-argument patch function that builds a URL from each
slot's sorting and filters. These same values determine the active state.
Counts are computed by the caller, respecting search and the preset filters. Clicking an active
preset reapplies it; it does not toggle it off.
When clear_button is true, the reset icon on the right calls patch.([], [])
to clear all sorting and column filters.