It's not a solved problem. There are maybe two libraries out there that are customizable, performant, and don't break things like keyboard navigation and accessibility
This is the correct answer, if perhaps too optimistic on there being two of them.