Componentized filter widget