Design preference behind Ruby UI: avoid a slots-based API (as popularized by ViewComponent and Web Components) and instead ship many small, reusable, atomic components that callers compose together. Rationale from Seth Horsley: slots are less common in the JavaScript world you may be coming from, and they tightly couple a bit of markup to a single parent component, preventing reuse of those tiny pieces elsewhere.