Шаблон — страница компонента
Один компонент — три страницы, а не одна. У Carbon это вкладки Guidelines · Specifications · Accessibility; у нас — вложенные страницы, дерево это уже умеет.
Зачем делить: дизайнер не пролистывает таблицы токенов, разработчик не пролистывает картинки «так — не так». Сейчас одна страница держит всё сразу, и лишнее листают оба.
Компонент
├── Применение ← дизайнер
├── Спецификация ← разработчик
└── Доступность ← оба
Что откуда берётся
Главная таблица для интеграции. «Сервис» — заполняется из контракта компонента, человек не трогает. «Человек» — решение, из контракта не выводится.
| Шапка: ссылка на макет | source: файл и id набора, двоеточие в дефис | сервис |
| Шапка: версия, статус, дата | версия контракта | сервис |
| Применение · назначение одной фразой | — | человек |
| Применение · когда использовать | — | человек |
| Применение · когда не использовать | — | человек |
| Применение · анатомия: номера на картинке | картинка — человек, перечень частей — anatomy | оба |
| Применение · состав деревом | anatomy | сервис |
| Применение · варианты: чем отличаются | axes + variants | сервис |
| Применение · конструкции, если их несколько | forms | сервис |
| Применение · пары «так — не так» | — | человек |
| Спецификация · свойства | axes, props: имя, значения, по умолчанию | сервис |
| Спецификация · подмены и что принимают | slots, accepts | сервис |
| Спецификация · решётка вариантов | masters: сколько есть, сколько дала бы полная, какие сочетания существуют | сервис |
| Спецификация · цвет | tokens + bindings | сервис |
| Спецификация · типографика | anatomy: имя текстового стиля | сервис |
| Спецификация · размеры и отступы | anatomy: раскладка, размеры | сервис |
| Доступность · виброотклик | interaction | сервис |
| Доступность · клавиатура, скринридер | — | человек |
| Доступность · что должен дизайнер | — | человек |
| Любая страница · открытые вопросы | gaps: GAP — в макете нет, SUSPECT — есть, но подозрительно | сервис |
Четыре раздела из двадцати пишет человек. Остальное — данные, которые уже сняты и проверены сверкой. Это и есть смысл затеи: страница перестаёт расходиться с макетом сама по себе.
Про открытые вопросы надо решить отдельно. Контракт честно хранит дыры макета. Показывать их читателю полезно — видно, где описание неполно и почему. Но это внутренняя кухня, и выносить её наружу или держать в закрытой части — ваше решение, не моё. В каркасе ниже раздел есть; уберите, если не надо.
Применение
Для дизайнера. Ни токенов, ни CSS.
- **Версия:** · **Статус:** · **Дата:** · **Макет:** ссылка
## Назначение
Одна фраза: что это и для чего. Без «компонент предназначен для».
## Когда использовать
- признак
- признак
## Когда не использовать
- признак, и чем пользоваться вместо
## Анатомия
_картинка с номерами_
| № | Часть | Зачем |
|---|---|---|
| 1 | | |
## Варианты
| Свойство | Значения | Что меняет |
|---|---|---|
### <Свойство>
Чем отличается от базового вида. Списком, не прозой.
| Так | Не так |
|---|---|
| _картинка_ | _картинка_ |
| подпись | подпись |
## Рядом
-
«Когда использовать» и «Когда не использовать» — главный раздел страницы. Его нет ни в контракте, ни в макете, и придумать его сервис не может. Именно он останавливает неправильное применение, пока человек не начал рисовать.
Спецификация
Для разработчика. Почти одни таблицы, колонки фиксированы и не меняются от компонента к компоненту — как у Carbon.
## Свойства
| Свойство | Тип | Значения | По умолчанию | Что делает |
|---|---|---|---|---|
## Решётка вариантов
Мастеров: N. Полная решётка дала бы M. Существующие сочетания:
| Условие | Доступные значения |
|---|---|
## Цвет
| Элемент | Свойство | Токен |
|---|---|---|
## Типографика
| Элемент | Текстовый стиль |
|---|---|
## Размеры и отступы
| Элемент | Свойство | Значение | Токен |
|---|---|---|---|
## Состав
Дерево слоёв.
## Подмены
| Слот | Что принимает |
|---|---|
## Открытые вопросы
| Что | Вид |
|---|---|
Число вместо имени токена — не значение, а дыра. Если в таблице стоит 6 там, где ждёшь space-*, у макета там привязки нет. Подбирать токен по значению нельзя: это вопрос к дизайну, и он уже записан в «Открытых вопросах».
Решётка — не формальность. Полная решётка почти всегда больше фактической: часть сочетаний не существует. Воспроизводить их в коде не надо.
Доступность
## Что система даёт сама
- встроенное поведение
## Виброотклик
| Жест | Событие | Отклик | Включён |
|---|---|---|---|
## Что должен дизайнер
- обязанность
## Что должен разработчик
- чек-лист
## Статус проверок
| Проверка | Статус |
|---|---|
| Клавиатура | |
| Скринридер | |
| Контраст | |
| Крупный шрифт | |
Таблица статуса проверок — приём Carbon: видно не только требование, но и проверяли ли его вообще. Пустой статус честнее отсутствия таблицы.
Чего в контракте нет и не будет
Чтобы сервис этого не ждал:
- тени, размытия, параметры анимации — формат их не описывает;
defaultVariant— какой мастер в наборе главный, контракт не снимает;- клавиатура и скринридер — в макете этого нет;
- смысл компонента. Контракт знает, как он устроен, но не знает, зачем он нужен.
Отсутствие этого в контракте не значит, что в макете его нет. Значит, что оно не снято, и додумывать нельзя.