Headless UI and Component Libraries
Traditional component libraries give you styled components that you then fight to override. The headless approach inverts that — you get the accessible behavior (keyboard navigation, ARIA attributes, focus management) for free, and the visual layer is entirely yours to control.
Radix UI is the most comprehensive headless library I've worked with. Each primitive handles the hard parts of accessibility that are easy to get wrong — dropdown menus that trap focus correctly, dialogs with proper screen reader announcements, comboboxes with full keyboard support. Headless UI from the Tailwind team covers a similar set of primitives with a slightly simpler API.
shadcn/ui sits at an interesting point in this space. Rather than an npm package you install, it's a CLI that copies component source directly into your project. The components are built on Radix UI and styled with Tailwind, but because you own the code, customization is just editing a file rather than overriding library styles. It's become my default starting point for new projects — the defaults are tasteful and the escape hatch of "just change the source" makes up for any limitation in a configuration API.

