We put this library together at
https://team.video after struggling with "button explosion" in previous projects, where we ended up with an endless sea of subtly different button implementations.
Sometimes the differences were totally legitimate and justified for the use case, and other times it was easy to just not remember or realize that the permutation we wanted had already been painstakingly crafted elsewhere.
When we took a systematic approach to catalog how we were using buttons, we settled on that yes, we really do want a lot of options, depending on the scale of the interaction, how much emphasis we wanted to put on the choice, etc -- but not the infinite flexibility (and so low reusability) that comes with a free-for-all.
So this has really worked well for us after settling on this approach. How have others dealt with the trade-offs here?