States
Стандарты состояний компонентов SDDS: визуальное отображение и правила комбинирования.
См. также: props-vocabulary.md — свойства состояний, theming.md — токены состояний, validation-model.md — валидация форм.
Важно!
- Дизайн: макеты SDDS предоставляют рекомендуемый набор состояний для компонентов и их визуал. Пользователь может удалять/добавлять состояния в дизайне, а также стилизовать компонент в каждом состоянии под свой продукт.
- Разработка: техническая реализация обеспечивает поддержку всех возможных состояний компонента.
1. Основные принципы
1.1 Консистентность
Рекомендуется использовать единые логику и правила отображения состояний для всех компонентов продукта: одинаковые токены, анимации, длительности переходов.
1.2 Предсказуемость
Для повышения понимания интерфейса пользователем рекомендуется через визуал состояния отображать:
- текущее состояние компонента;
- можно ли взаимодействовать с компонентом;
- произошло ли действие.
1.3 Доступность
В соответствии с принципами инклюзивного дизайна и рекомендациями WCAG состояния должны быть различимы и обеспечиваться независимо от цветового восприятия.
Рекомендуется:
- применять комбинированные индикаторы (цвет + подсказка, цвет + иконка и т.п.);
- гарантировать видимость состояний при клавиатурной навигации (чёткий индикатор фокуса);
- поддерживать семантическую передачу состояний через API доступности (ARIA-роли, состояния и свойства).
2. Категории состояний
В дизайн-системе SDDS состояния компонентов разделены на 7 семантических категорий:
| Категория | Состояния |
|---|---|
| Interaction States | Кратковременные состояния при взаимодействии пользователя с компонентом. Отражают реакцию компонента на действия пользователя |
| Selection States | Состояния выбора. Отражают устойчивое значение компонента, которое сохраняется после взаимодействия |
| Availability States | Состояния доступности. Отражают функциональную доступность компонента (ограничивают или запрещают взаимодействие) |
| Data States | Состояния данных. Отражают статус содержимого компонента |
| Process & Feedback States | Состояния процесса и обратной связи. Информируют о статусе процесса или результате |
| Visibility States | Состояния видимости. Отвечают за отображение и раскрытие контента в компоненте |
| Drag and Drop | Специфическое мульти-состояние с собственной логикой и визуальными паттернами для каждого шага |
2.1 Interaction States
Состояния кратковременного взаимодействия.
| Состояние | Описание | Свойство в дизайне | Примеры компонентов |
|---|---|---|---|
default | Базовое состояние компонента: готов к взаимодействию, стандартные стили | — | Все |
hovered | Показывает пользователю, что компонент интерактивен. Отображается при наведении курсора | В макетах опционально Hovered=True/False (boolean) | Button, Chip, TextField, Link |
focused | Состояние, при котором компонент готов к взаимодействию с клавиатуры или к вводу данных | В макетах опционально Focused=True/False (boolean). Правила отображения фокуса — в accessibility.md | Группа Input Controls (элементы ввода) — фокус, обозначающий готовность к вводу данных; Button, Chip, CheckBox — готовность к взаимодействию |
actived/pressed | Состояние получения системой сигнала о взаимодействии с компонентом (активация компонента в момент нажатия) | В макетах опционально Actived=True/False (boolean) | Button, Chip, Link |
2.2 Selection States
Состояния выбора.
| Состояние | Описание | Свойство в дизайне | Компоненты |
|---|---|---|---|
selected | Состояние визуально подтверждает выбор пользователем компонента или его части (элемента) | Selected=True/False (boolean) | Элементы списков (ListItem) |
checked | Частный случай Selected для контролов или отображением индикацией | Checked=True/False (boolean) | CheckBox, RadioBox |
turnedOn | Включённое состояние (компонент имеет тумблер, переключатель) | TurnedOn=True/False (boolean) | Switch |
2.3 Availability States
Состояния доступности.
| Состояние | Описание | Свойство в дизайне | Компоненты |
|---|---|---|---|
disabled | Компонент недоступен для взаимодействия | Disabled=True/False (boolean) | Группа Input Controls (элементы ввода), Button, Chip |
readOnly | Компонент доступен только для просмотра, нельзя редактировать, но в отличие от disabled данные отправляются на сервер и остаются доступными для копирования | ReadOnly=True/False (boolean) | Группа Input Controls (элементы ввода) |
2.4 Data States
Состояния данных.
| Состояние | Описание | Свойство в дизайне | Компоненты |
|---|---|---|---|
filled | Состояние, обозначающее, что компонент заполнен данными | Filled=True/False (boolean) | Группа Input Controls (элементы ввода) |
emptyState | Пустое состояние компонента (компонент не содержит данных) | EmptyState=True/False (boolean) | Списки (List) |
2.5 Process & Feedback States
Состояния процесса и обратной связи.
| Состояние | Описание | Свойство в дизайне | Компоненты |
|---|---|---|---|
loading | Состояние обработки/загрузки данных | Loading=True/False (boolean) | Button |
undefined | Пустое состояние компонента (компонент не содержит данных) | — | Индикатор прогресса — компонент прогресса инициализирован, но процент выполнения неизвестен |
ValidationState: Error/Success/Warning | Определяют текущий статус выполнения операции и тип обратной связи для пользователя: error — действие не выполнено из-за ошибки; success — действие успешно завершено; warning — действие выполнено, но есть важные условия/ограничения | ValidationState=Error/Success/Warning | Группа Input Controls (элементы ввода) |
2.6 Visibility States
Состояния видимости.
| Состояние | Описание | Свойство в дизайне | Компоненты |
|---|---|---|---|
hidden | Компонент или его элементы скрыты из интерфейса (не отображается) | Hidden=True/False (boolean) | CodeInput, CodeField |
opened | Состояние, отражающее открытие/раскрытие компонента | Opened=True/False (boolean) | DropDown, Select, Accordion |
visible | Состояние отображения контента | — |
2.7 Drag and Drop
| Состояние | Описание | Свойство в дизайне | Компоненты |
|---|---|---|---|
| Drag and Drop | Состояние изменения иерархической структуры списка | Этапы состояния, логика и визуальное отображение шагов описаны в документации | Tree |
3. Комбинирование состояний: правила, исключения и иерархия приоритетов
Примечание. В разделе приведены типовые комбинации и взаимоисключения состояний. Полный перечень состояний и их сочетаний для каждого компонента содержится в его свойствах и вариациях. Взаимоисключаемые состояния нельзя комбинировать на уровне API компонента.
3.1 Комбинирование состояний
Категории состояний можно комбинировать между собой для более точного реагирования интерфейса на действия пользователя.
Примеры возможных комбинаций:
Data + Availability:
- Filled + ReadOnly — состояние «доступен только для чтения» возможно ТОЛЬКО в заполненном данными компоненте
- Filled + Hidden — заполненные скрытые данные
- Filled + Disabled — заполненный, но недоступный для взаимодействия компонент
Interaction + Availability:
- Focused + ReadOnly — состояние «доступен только для чтения» с фокусной рамкой при взаимодействии через клавиатуру
- Selected + ReadOnly — выбранный, но не редактируемый элемент
Interaction + Interaction:
- Selected + Checked — элемент выбран и отмечен контролом или индикацией
- Hovered + Focused — наведён курсор и фокус клавиатуры
Interaction + Feedback:
- Actived + Loading — элемент нажат и данные/действие загружается
3.2 Взаимоисключающие состояния
Комбинирование состояний из одной категории чаще неверно — такие состояния взаимоисключающие, например:
- Availability States: disabled и readOnly — если элемент отключён, он уже не может быть «только для чтения»;
- Visibility States: Hidden и Visible;
- Interaction States: Actived заменяет Hovered в момент клика.
Исключения — нестрого взаимоисключающие состояния, но с приоритетом:
- Hovered и Focused могут быть одновременно, но Active заменяет их в момент клика;
- Selected и Checked взаимоисключаемые на уровне одного простого компонента, но возможны одновременно при компоновке элементов в компоненте, например: элемент списка с чекбоксом.
Недопустимые комбинации состояний компонента нельзя одновременно выбрать в дизайне и коде.
3.3 Приоритет состояний
При конфликте состояний применяется самое высокоприоритетное из них. Нижестоящие состояния либо игнорируются, либо визуально подавляются.
Порядок приоритета групп состояний:
- Visibility States
- Availability States
- Process & Feedback States
- Dropping
- Selection States
- Data States
- Interaction States
Пример: Disabled → Loading → Error → Focus → Hovered → Default