Что такое headless UI библиотеки?
Что проверяют
Знаете ли вы, чем библиотека поведения отличается от библиотеки внешнего вида, и умеете ли выбирать между ними осознанно. Вопрос почти всегда ведёт к доступности и к тому, кто в вашем интерфейсе отвечает за клавиатуру, фокус и роли.
Как отвечать
Headless библиотека даёт логику компонента без оформления: состояние (открыт, выбран, активный элемент), обработку клавиатуры, управление фокусом, роли и aria-атрибуты, позиционирование всплывающих слоёв. Разметку и стили пишете вы. Противоположный полюс это готовые наборы с собственной темой, где вид есть сразу, но кастомизация упирается во внутренние классы и в чужие решения.
Назовите примеры того, что раздаёт именно поведение: примитивы с композицией через слоты, хуки под выпадающий список и меню, headless таблица, которая считает сортировку, группировку и постраничность, а разметку table вы пишете сами.
Критерий выбора формулируется просто. Свой дизайн-язык, жёсткие требования к вёрстке и доступности, долгая жизнь продукта: берём headless и строим поверх собственную систему компонентов. Внутренняя админка, маленькая команда, сроки важнее уникальности: готовый набор выигрывает, спорить с его стилями дешевле, чем собирать поведение с нуля.
Где спотыкаются
Продают headless как способ сэкономить. Работа не исчезает, она переезжает в вашу команду: стили, состояния наведения и фокуса, адаптив, тёмная тема. Экономия появляется только там, где свой дизайн всё равно пришлось бы натягивать поверх чужого.
Думают, что доступность включается сама. Примитив даёт роли и клавиатуру, но контраст, видимый фокус, подписи полей и порядок обхода остаются на вас, а привычка убирать обводку фокуса убивает ровно то, ради чего библиотеку и брали.
Смешивают подходы без плана. В проекте одновременно живут готовый набор и примитивы, получаются два механизма всплывающих слоёв, два набора токенов и вес сборки больше, чем при любом одном выборе. Второй вариант той же ошибки это обёртки, которые теряют проброс ссылки и лишних атрибутов, после чего примитив уже не настроить снаружи.