States

Стандарты состояний компонентов SDDS: визуальное отображение и правила комбинирования.

См. также: props-vocabulary.md — свойства состояний, theming.md — токены состояний, validation-model.md — валидация форм.

Важно!

  1. Дизайн: макеты SDDS предоставляют рекомендуемый набор состояний для компонентов и их визуал. Пользователь может удалять/добавлять состояния в дизайне, а также стилизовать компонент в каждом состоянии под свой продукт.
  2. Разработка: техническая реализация обеспечивает поддержку всех возможных состояний компонента.

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 Приоритет состояний

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

Порядок приоритета групп состояний:

  1. Visibility States
  2. Availability States
  3. Process & Feedback States
  4. Dropping
  5. Selection States
  6. Data States
  7. Interaction States

Пример: Disabled → Loading → Error → Focus → Hovered → Default

Нашли расхождение документации и библиотеки — напишите команде.Сообщить о расхождении