Component Library

Библиотека компонентов — структурированный справочник всех UI-компонентов, входящих в состав дизайн-системы. В документации зафиксирована смысловая архитектура библиотеки: группировка компонентов по назначению, их определения, задачи и обоснование выбора каждого решения.

См. также: states.md — стандарты состояний компонентов, sizes.md — размерная шкала, theming.md — система тематизации на токенах.

Важно! Документ является живым артефактом и обновляется синхронно с развитием библиотеки компонентов. При добавлении, изменении или удалении компонента соответствующая запись в таблице актуализируется.

Детальные спецификации каждого компонента (анатомия, поведение, edge cases) находятся в [components/](../components/).

1. Как пользоваться документом

  • При выборе компонента
    • Найдите нужную группу по типу задачи (отображение, ввод, навигация, компонент поверх контента/обратная связь на действие)
    • Выберите компонент с подходящим назначением
  • При сомнении между компонентами — сравните колонки «Задача» и «Почему используется»: это поможет выбрать точное решение
  • При добавлении нового компонента — убедитесь, что в документе нет существующего компонента с аналогичной задачей, и зафиксируйте новый по той же структуре

2. Структура библиотеки

Компоненты разделены на основные логические группы по типу взаимодействия пользователя с интерфейсом — от отображения данных до обратной связи системы. Каждая группа в свою очередь разделена на логические подгруппы.

  • Actions — компоненты действия
  • Data Display — отображение данных и контента
  • Data Entry — ввод и редактирование данных
  • Navigation — перемещение по контенту
  • Overlay/Feedback — компоненты поверх контента / обратная связь системы

3. Actions / Компоненты действия

3.1 Actions & Buttons / Действия и кнопки

Компоненты для инициирования действий пользователем.

КомпонентОпределениеЗадачаПочему используется
Button (XXS, XS, S, M, L, XL)Интерактивный элемент для выполнения действияЗапустить основное действие в интерфейсеЯвляется primary-паттерном вызова действия — текстовая метка чётко описывает, что произойдёт при нажатии
IconButton (XXS, XS, S, M, L, XL)Кнопка только с иконкойВыполнить действие в условиях ограниченного пространстваЭкономит место в интерфейсах, когда действие однозначно передаётся иконкой
LinkButton (XXS, XS, S, M, L, XL)Кнопка, стилизованная как текстовая ссылкаВыполнить второстепенное действие с минимальным визуальным весомПодходит для вторичных действий, не конкурирует с основной кнопкой визуально
EmbeddedButton (S, M, L)Кнопка, встроенная внутрь другого компонентаВыполнить контекстное действие внутри компонентаРазмещается внутри компонента-контейнера, не нарушая внешний layout и сохраняя контекст действия

4. Data Display / Отображение данных

Компоненты группы Data Display отвечают за представление информации пользователю. Они не принимают пользовательский ввод, а визуализируют данные, структурируют контент и помогают пользователю воспринимать информацию на экране.

4.1 Identity & Status / Идентификация и статус

Компоненты, представляющие сущности и их текущее состояние — пользователей, объекты, статусы и счётчики.

КомпонентОпределениеЗадачаПочему используется
Avatar (S, M, L, XL, XXL, Scalable)Визуальное представление пользователя или сущности в виде изображения, инициалов или иконкиИдентифицировать пользователя или сущность в интерфейсеСоздаёт персональную привязку к контенту, мгновенно распознаётся пользователем как идентификатор личности
AvatarGroup (S, M, L, XL, XXL)Отображение нескольких Avatar-элементов в виде компактной перекрывающейся группыПоказать набор участников, членов команды или пользователей, связанных с объектомКомпактно передаёт принадлежность нескольких людей к одному объекту
Badge (XS, S, M, L)Небольшая метка, накладываемая на другой компонентСообщить о наличии новых событий, уведомлений или статуса объектаНе занимает отдельного места в layout, визуально привязана к объекту, к которому относится
Counter (XXS, XS, S, M, L)Числовой индикатор количестваОтобразить числовое значение — количество уведомлений, сообщений, элементовКомпактно передаёт количественную информацию без развёрнутого описания
Indicator (S, M, L)Точечный или цветовой маркер состоянияОбозначить статус объекта — активен, недоступен, в процессеМинималистичный способ передать состояние без использования текста
Rating (XS, S, M, L, H5, H4, H3, H2, DisplayS, DisplayM, DisplayL)Визуальное отображение оценки в виде звёзд или произвольных элементовПоказать рейтинг или оценку объектаИнтуитивно понятный паттерн оценки, мгновенно считывается пользователем
Chip (XXS, XS, S, M, L, XL)Компактный элемент в виде метки или тега для отображения атрибута, категории или выбранного значенияВизуально представить тег, фильтр или выбранное значение в компактной формеПередаёт принадлежность объекта к категории или статусу компактно и без визуальной перегрузки — в отличие от Badge не накладывается на другой компонент, а существует самостоятельно
ChipGroup (XXS, XS, S, M, L, XL)Контейнер для группы Chip-элементов с управлением расположением и переносомОтобразить набор тегов, фильтров или выбранных значений как единую группуСтандартизирует расположение и отступы между Chip-элементами, управляет переносом на новую строку и консистентностью группы

4.2 Content & Media / Контент и медиа

Компоненты для отображения визуального контента — изображений, галерей и медиа.

КомпонентОпределениеЗадачаПочему используется
ImageКомпонент для отображения изображения с поддержкой состояний загрузки и ошибкиВывести графический контент в интерфейсеСтандартизирует работу с изображениями в системе
GalleryКомпонент для отображения коллекции изображений или медиа-элементовПредставить набор визуальных материалов с возможностью просмотраОрганизует множество медиа-элементов в управляемую структуру с навигацией между ними
Card (S, M, L)Контейнер для группировки связанного контента — изображения, текста и действийПредставить сущность или объект как целостный блок информацииСоздаёт визуально обособленный блок, объединяющий все атрибуты сущности в одном месте
CodeArea (XS, S, M, L, XL)Блок для отображения программного кода с подсветкой синтаксисаПоказать фрагмент кода в читаемом форматированном видеСохраняет форматирование кода, обеспечивает читаемость через моноширинный шрифт и подсветку синтаксиса

4.3 Lists & Structure / Списки и структура

Компоненты для структурирования и отображения наборов данных и списков.

КомпонентОпределениеЗадачаПочему используется
List (XS, S, M, L, XL)Компонент для отображения упорядоченного набора элементов спискомПредставить однотипные данные в виде последовательного перечняОбеспечивает единообразное отображение однотипных элементов с консистентными отступами и разделителями
Accordion (XS, S, M, L, H5, H4, H3, H2)Список со сворачиваемыми секциями контентаПоказать структурированный контент, скрывая второстепенные детали до востребованияЭкономит пространство экрана, позволяя пользователю раскрывать только нужные секции
Note (XS, S, M, L)Компонент для отображения вспомогательной или пояснительной информацииПривлечь внимание к важному замечанию, подсказке или предупреждениюВизуально выделяет информацию из основного потока контента, не прерывая его структуру

4.4 Layout & Dividers / Разметка и разделители

Компоненты для разметки пространства и визуального разделения контента.

КомпонентОпределениеЗадачаПочему используется
DividerРазделительная линияВизуально разделить секции или элементы интерфейсаСоздаёт чёткую границу между блоками контента без использования отступов или цветовых фонов
SplitterИнтерактивный разделитель между двумя панелями с возможностью изменения их размераДать пользователю контроль над размером соседних областей интерфейсаПозволяет гибко перераспределять пространство между панелями в сложных layout-структурах

4.5 Table / Таблицы

КомпонентОпределениеЗадачаПочему используется
Table (XS, S, M, L)Компонент для отображения структурированных данных в виде строк и столбцовПредставить табличные данные с возможностью сортировки, фильтрации и пагинацииОбеспечивает наглядное сравнение данных, упрощает восприятие структурированной информации и позволяет пользователю быстро находить нужные записи

5. Data Entry / Ввод данных

Компоненты группы Data Entry обеспечивают взаимодействие пользователя с системой через ввод, выбор и передачу данных. Они принимают, валидируют и передают пользовательский ввод в систему.

5.1 Text Input / Текстовый ввод

Компоненты для ввода текстовых и числовых данных.

КомпонентОпределениеЗадачаПочему используется
TextField (XS, S, M, L, XL)Однострочное поле для ввода текстаПринять короткий текстовый ввод от пользователя — имя, email, поисковый запрос и т.д.Стандартный паттерн для однострочного ввода, поддерживает валидацию, placeholder и вспомогательный текст
TextArea (XS, S, M, L, XL)Многострочное поле для ввода текстаПринять развёрнутый текстовый ввод — комментарий, описание, сообщениеИспользуется, когда ожидается длинный текст — позволяет пользователю видеть несколько строк одновременно
TextFieldSlider (XS, S, M, L, XL)Текстовое поле со встроенным слайдером для числового вводаПринять числовое значение в заданном диапазоне через ввод или перетаскиваниеКомбинирует точность ручного ввода с наглядностью слайдера для числовых диапазонов
Range (XS, S, M, L, XL)Компонент для ввода диапазона значенийЗадать границы диапазона в одном компактном элементе, не используя два отдельных несвязанных поляИспользуется, когда нужно задать начальное и конечное значение диапазона — например, цену «от» и «до», даты или любые числовые промежутки
Autocomplete (XS, S, M, L, XL)Текстовое поле с выпадающим списком подсказок на основе введённого текстаУскорить ввод за счёт предложения вариантов по мере набораСнижает количество ошибок ввода и ускоряет заполнение форм через подсказки на основе существующих данных
CodeInput (DisplayS, DisplayM, DisplayL)Поле для ввода короткого кода — PIN, OTP, верификационного кодаПринять структурированный короткий код с разбивкой по символамВизуально разделяет символы: горизонтальный ряд графических элементов (точек). Каждая точка вмещает в себя один символ, введённый с клавиатуры
CodeField (S, M, L)Поле для ввода короткого кода — PIN, OTP, верификационного кодаПринять структурированный короткий код с разбивкой по символамВизуально разделяет символы кода на отдельные ячейки, снижая вероятность ошибки ввода

5.2 Selection / Выбор значений

Компоненты для выбора одного или нескольких значений из набора.

КомпонентОпределениеЗадачаПочему используется
CheckBox (XS, S, M, L, XL)Элемент для независимого выбора одного или нескольких вариантовПозволить пользователю выбрать несколько значений из списка независимо друг от другаИспользуется для множественного выбора — каждый чекбокс независим от остальных
RadioBox (XS, S, M, L, XL)Элемент для выбора одного варианта из группы взаимоисключающихПозволить пользователю выбрать ровно один вариант из несколькихИспользуется для взаимоисключающих вариантов — выбор одного автоматически снимает остальные
Segment (XS, S, M, L, XL)Группа элементов для переключения между несколькими категориями или разделами внутри одного экранаОрганизовать навигацию между смысловыми группами контента, не уводя пользователя на другую страницуПомогает структурировать информацию по категориям, быстро переключаться между блоками контента и визуально показывать, какой раздел активен в данный момент
Select (XS, S, M, L, XL)Выпадающий список для выбора одного или нескольких значенийВыбрать значение из списка предопределённых вариантовЭкономит пространство, скрывая список до взаимодействия. Не даёт пользователю возможности вводить значение — только выбор
Combobox (XS, S, M, L, XL)Поле ввода, которое позволяет выбирать значения из выпадающего списка или вводить собственные значенияВыбрать значение из списка или ввести произвольное значениеИспользуется, когда список вариантов не исчерпывающий и пользователь может добавить собственное значение
RatingInput (XS, S, M, L, H5, H4, H3, H2, DisplayS, DisplayM, DisplayL)Интерактивный компонент для выставления оценкиДать пользователю возможность оценить объектИнтуитивный паттерн оценки — пользователь сразу понимает, как взаимодействовать, без дополнительных инструкций
ColorPicker (S, M, L)Интерактивный элемент интерфейса, позволяющий пользователю выбрать цвет из палитры, градиента или ввести значение вручную (HEX, RGB и др.)Предоставить пользователю возможность выбрать или задать цвет в рамках интерфейсаУпрощает ввод цветовых значений, исключает ошибки ручного ввода, визуально демонстрирует результат выбора в режиме реального времени

5.3 Date & Time / Дата и время

Компоненты для выбора дат и временных значений.

КомпонентОпределениеЗадачаПочему используется
CalendarGrid (XS, S, M, L, XL)Сетка календаряОтобразить и выбрать дату или диапазон дат в формате календарной сетки по дням и месяцам, годам, кварталамЯвляется базовым строительным блоком для DatePicker и DateTimePicker — может использоваться самостоятельно
DatePicker (XS, S, M, L, XL)Комбинация текстового поля и выпадающего календаря с возможностью ввода и выбора значенияДать пользователю возможность выбрать дату или диапазон дат посредством ввода текста либо путём выбора даты из календаряСтандартный паттерн для выбора даты — скрывает календарь до взаимодействия, поддерживает ручной ввод и выбор
DateTimePicker (XS, S, M, L, XL)Поле для ввода или выбора даты и времени одновременно с выпадающим календарёмДать пользователю возможность выбрать точный момент времени — дату и время в одном контролеИспользуется, когда нужно задать не просто дату, а конкретный момент — встреча, бронирование, расписание
TimePicker (XS, S, M, L, XL)Поле для выбора времени суток с раскрывающимся списком значенийДать пользователю возможность выбрать конкретное времяСпециализированный контрол для ввода времени — удобнее обычного текстового поля за счёт визуального выбора значений

5.4 File & Media Input / Загрузка файлов

Компоненты для загрузки файлов и медиаконтента.

КомпонентОпределениеЗадачаПочему используется
Attach (XS, S, M, L)Компонент для прикрепления файлаИнициировать выбор и прикрепление файла к форме или сообщениюКомпактный триггер загрузки файла — не занимает много места, встраивается в поля ввода и формы
DropzoneИнтерактивная область, предназначенная для перетаскивания и загрузки файловПринять один или несколько файлов от пользователяПоддерживает drag-and-drop — более удобный способ загрузки файлов, чем стандартный input, особенно для множественной загрузки
File (XS, S, M, L)Компонент для отображения загруженных файловПоказать загруженный файл с возможностью просмотра или удаленияСтандартизирует отображение прикреплённого файла с его атрибутами — имя, размер, тип и действия над ним

5.5 Form & InformationWrapper / Формы

Оболочки для полей ввода и контролов и группировка нескольких полей ввода или элементов управления.

КомпонентОпределениеЗадачаПочему используется
Form (XS, S, M, L)Обёртка для группировки нескольких полей ввода или элементов управления, содержащая Header, FormList и FooterОбъединить набор полей в единую логическую форму с вертикальной или горизонтальной структуройУправляет layout всей формы целиком — позволяет переключаться между FormVertical и FormHorizontal без изменения внутренних компонентов
FormItem (information wrapper) (XS, S, M, L)Компонент-оболочка с набором вариаций и элементами управления формойОбернуть отдельный элемент ввода в единую структуру с подписью, подсказкой и вспомогательными элементамиСтандартизирует отображение каждого поля — лейбл, подсказка и сам контрол всегда собраны в одном контейнере, что упрощает восприятие и валидацию

6. Navigation / Навигация

Компоненты группы Navigation обеспечивают перемещение пользователя по интерфейсу — между страницами, разделами, экранами и уровнями иерархии. Они формируют структуру приложения и помогают пользователю ориентироваться в пространстве продукта.

6.1 Global Navigation / Глобальная навигация

Компоненты для перемещения между основными разделами продукта.

КомпонентОпределениеЗадачаПочему используется
NavigationBarВерхняя панель с заголовком и действиямиОриентировать пользователя в текущем экране и обеспечивать возврат на предыдущий уровеньСтандартный паттерн мобильных платформ (iOS/Android) — пользователь интуитивно знает, где он находится и как вернуться назад
NavigationDrawerБоковая панель, выезжающая поверх контентаОтобразить навигационное меню или дополнительный контент без смены экранаЭкономит пространство, скрывая навигацию до вызова — особенно эффективен на мобильных и планшетных интерфейсах
DropdownMenu (XS, S, M, L, XL)Выпадающее меню со списком навигационных пунктов или действийПоказать список доступных действий или переходов по триггеруСкрывает вторичные пункты до взаимодействия — уменьшает визуальную нагрузку основного интерфейса
TabBar (M, L)Нижняя панель вкладок для мобильного интерфейсаОбеспечить переключение между основными разделами приложенияПаттерн нижней навигации на мобильных устройствах — доступен большому пальцу, всегда виден на экране
Link (в дизайне компонент отсутствует — может быть стилизован текст любым типографическим токеном системы)Текстовый элемент для перехода на другую страницу, раздел или внешний ресурсОбеспечивать inline-навигацию внутри контента без использования кнопок и панелейМинимально занимает место в интерфейсе — встраивается в текст и не перегружает контент дополнительными элементами управления

6.2 Local Navigation / Локальная навигация

Компоненты для навигации внутри одного экрана или раздела.

КомпонентОпределениеЗадачаПочему используется
Tabs (XS, S, M, L)Горизонтальные вкладки для переключения между разделамиПереключать отображение контента в рамках одного экранаОрганизует контент одного уровня иерархии без перехода на новую страницу — пользователь остаётся в контексте
BreadCrumbs (XS, S, M, L)Цепочка ссылок, отображающая путь пользователя в иерархии разделаПоказать текущее местоположение в структуре и дать быстрый доступ к родительским уровнямПаттерн навигации по иерархии — пользователь всегда знает, где он находится, и может вернуться на любой уровень
Tree (XS, S, M, L, XL)Иерархический список с раскрываемыми узламиНавигация по вложенной иерархической структуреНаглядно передаёт иерархические отношения — подходит для файловых систем, категорий и многоуровневых структур
Steps (XS, S, M, L, XL, Simple)Горизонтальный или вертикальный набор шагов многоэтапного процессаОтображают прогресс через последовательность логических шагов. Также могут использоваться для навигацииНаглядно показывают пользователям этап процесса и сколько осталось до завершения

6.3 Pagination & Scroll / Перелистывание и прокрутка

Компоненты для навигации по контенту — спискам, наборам и длинным страницам.

КомпонентОпределениеЗадачаПочему используется
Pagination (XS, S, M, L)Компонент для постраничной навигации по большому набору данныхРазбить большой набор данных на страницы и обеспечить переход между нимиСтандартный паттерн для работы с большим количеством данных
PaginationDots (S, M)Элементы переключения с индикатором текущей позицииОтображают возможность перемещения между небольшим количеством однородных элементов контентаКомпактный индикатор прогресса для карусели или онбординга — отображает позицию без числовых значений
CarouselКомпонент для горизонтального прокручивания набора элементовОтобразить коллекцию элементов в ограниченном горизонтальном пространствеПозволяет разместить больше контента, чем позволяет область видимости — пользователь листает по одному или группами
ScrollBar (S, M)Кастомный компонент полосы прокруткиОбеспечить прокрутку контента в области с ограниченной высотой или ширинойСтандартизирует внешний вид полосы прокрутки в рамках дизайн-системы — заменяет нативный скроллбар браузера

7. Feedback / Обратная связь

Заметка автора в исходнике: «сейчас Overlay — предлагаю переименовать».

Компоненты группы Feedback обеспечивают обратную связь системы с пользователем. Они появляются поверх основного контента или в специально отведённых областях и сообщают о результатах действий, запрашивают подтверждение, предоставляют дополнительный контекст или отображают прогресс операций.

7.1 Dialogs & Sheets / Диалоги и панели

Компоненты для показа контента поверх основного экрана с блокировкой или без.

КомпонентОпределениеЗадачаПочему используется
ModalДиалоговое окно, блокирующее взаимодействие с основным контентомЗапросить подтверждение действия или показать критически важный контент, требующий реакцииБлокирует фон — используется только для задач, требующих немедленного решения пользователя
BottomSheetПанель, появляющаяся снизу экрана поверх контентаПоказать дополнительные действия или контент на мобильном устройствеПаттерн мобильных интерфейсов — появляется в зоне досягаемости большого пальца, не полностью перекрывает контекст
DrawerБоковая панель, выезжающая поверх основного контентаОтобразить дополнительный контент или форму, не переходя на новую страницуСохраняет контекст основного экрана, позволяя работать с дополнительным контентом в боковой панели
ToolbarПанель инструментов с набором действийПредоставить быстрый доступ к часто используемым инструментам для работы на основном экранеГруппирует связанные действия в единую панель, доступную без навигации к другим разделам

7.2 Notifications & Alerts / Уведомления и оповещения

КомпонентОпределениеЗадачаПочему используется
Popover (S, M)Всплывающий контейнер с расширенным контентом, привязанный к триггеруПоказать дополнительный контент по взаимодействию с триггеромПривязан к триггеру и не блокирует интерфейс
ToastВременное всплывающее уведомлениеСообщить пользователю о результате выполненного действияПоявляется и исчезает автоматически, не блокирует интерфейс — подходит для некритичных уведомлений о статусе операции
NotificationУведомления поверх контента с возможностью закрытияСообщить пользователю о важном событии или состоянии системы, требующем вниманияВ отличие от Toast используется для важных сообщений, которые нельзя пропустить
TooltipНебольшая всплывающая подсказка по наведению или фокусуДать краткое пояснение к элементу интерфейса — иконке, кнопке, полюПоявляется только при наведении — идеален для пояснений без перегрузки интерфейса

7.3 Progress & Loading / Прогресс и загрузка

Компоненты для отображения прогресса операций поверх основного контента.

КомпонентОпределениеЗадачаПочему используется
ProgressBar (XS, S, M, L)Горизонтальная полоса загрузки с известным процентом завершенияПоказать прогресс операции с определённой длительностьюИспользуется, когда известен процент выполнения — даёт пользователю понимание, сколько осталось ждать
ProgressBarCircular (XXS, XS, S, M, L, XL, XXL, Scalable)Круглый индикатор загрузки с известным процентом завершенияПоказать прогресс операции с определённой длительностьюИспользуется, когда известен процент выполнения — даёт пользователю понимание, сколько осталось ждать
LoaderИндикатор загрузки контентаУведомляет пользователей о том, что загрузка контента началасьИспользуется, когда нужно обозначить пользователю загрузку контента
Spinner (XXS, XS, S, M, L, XL, XXL, Scalable)Частный случай Loader в виде крутящегося элемента, который сообщает о самом процессе загрузкиСообщить пользователю, что система обрабатывает запрос неизвестной длительностиИспользуется, когда невозможно предсказать время завершения операции — даёт обратную связь без конкретных цифр
Skeleton (в дизайне компонент отсутствует — элементы интерфейса стилизуются токенами)Индикатор загрузки контентаВизуально показать загрузку контента на страницеСнижает воспринимаемое время ожидания, сохраняет структуру страницы до появления реальных данных
Нашли расхождение документации и библиотеки — напишите команде.Сообщить о расхождении