02Дизайн-системы
Конвенция имён компонентов
Система имён: Button / IconButton / ButtonGroup, префиксы Base/With/As, namespacing, борьба с MyButton2 и дубликатами.
Действуй как maintainer design system. Спроектируй и применяй конвенцию имён компонентов для {{library_path}} ({{framework}}). Цель — чтобы junior за 30 секунд понял, какой компонент брать, а не плодил MyButton2.
1. Аудит текущего состояния
- Собери список всех компонентов в {{library_path}}: имя, путь, экспорт (default / named).
- Найди подозрительные паттерны:
- Цифры в конце:
Button2,CardNew,ModalV2 - Префиксы автора/команды:
MyButton,AppCard,TempModal - Дубликаты с разной капитализацией:
DropdownиDropDown - Синонимы на одну роль:
Popup/Modal/Dialog/Overlay
- Цифры в конце:
- Сгенерируй таблицу:
компонент | проблема | предлагаемое имя.
2. Правила именования
Базовое имя — существительное, PascalCase
Button,Card,Avatar,Dialog. Без артиклей и глаголов.- Если домен — добавь как префикс:
UserAvatar,OrderCard. Доменные компоненты живут не вui/, а вfeatures/.
Варианты по контенту — суффикс
IconButton— кнопка только с иконкой.SplitButton— кнопка + dropdown.ButtonGroup— контейнер для серии кнопок.ButtonLink— кнопка-ссылка (визуально кнопка, семантически<a>).
Composite / составные — namespace через точку
Card.Header,Card.Body,Card.Footer— части одного компонента.Dialog.Trigger,Dialog.Content,Dialog.Close— связанные роли.- Экспортируем как
Cardс присвоенными свойствами.
Префиксы — только когда нужно различить роль
Base*— низкоуровневый headless:BaseButton,BaseInput. Не используется в продукте напрямую.With*— HOC:WithTooltip,WithAuth. Указывает на функцию-обёртку.As*— рендер-проп / polymorphic:Button as="a", не отдельный компонент.
Запреты
- ❌ Цифры в имени:
Button2,ModalV3. - ❌ Префиксы команды / автора:
MyX,AppX,TempX. - ❌ Префиксы технологии:
ReactCard,TSDialog. - ❌ Аббревиатуры без расшифровки в docs:
DDM,TBR.
3. Что делать с дубликатами
- Если 2 компонента делают одно и то же — выбери канон, второй пометь deprecated (см.
/design/component-deprecation-flow). - Если у компонентов разная семантика, но похожие имена — добавь различающий суффикс:
Modal(блокирующий) vsDrawer(с боку) vsPopover(привязан к якорю). - Если синонимы оправданы — задокументируй в README матрицу: "Когда использовать что".
4. Namespacing для больших систем
- Префикс пакета:
@acme/ui-button,@acme/ui-form-input. - В TS типах:
type ButtonProps,type ButtonVariant— рядом с компонентом. - Для CSS-классов: BEM или
data-component="Button"— чтобы grep поdata-componentнаходил всё.
Формат вывода
- Таблица аудита текущих имён.
- Финальная конвенция (≤ 1 страницы README).
- Список переименований с миграцией:
OldName → NewName+ одна команда codemod. - Cheatsheet: «надо назвать новый компонент → задай 3 вопроса → имя».
Anti-patterns (do NOT)
- ❌ Не используй
New,Old,V2,Final,Realв имени. - ❌ Не называй по визуалу (
BlueButton,BigCard) — визуал меняется, имя нет. - ❌ Не плоди
Button,PrimaryButton,SecondaryButton— это одна сущность с propsvariant. - ❌ Не смешивай домен и UI:
PaymentButtonживёт вfeatures/payment, не вui/. - ❌ Не вводи новую конвенцию без миграции старого — иначе через месяц два мира.
- ❌ Не оставляй
MyButton2«потому что используется в трёх местах». Переименуй сейчас.
Похожие промты
site / audit
Аудит brand-consistency
Прогон интерфейса на согласованность: цвета, spacing, typography, voice, иконки. Найти отклонения от системы.
auditdesign-systembrand
Открыть
Средний30-60 мин
site / audit
Brand guidelines с нуля
Сборка полного гайдлайна: voice, color tokens, типографика, правила логотипа, антипаттерны и примеры. Готовый DESIGN.md.
brandguidelinesdesign-system
Открыть
Продвинутый2-4 часа
design / design-system
Дизайн-токены из референса
Извлечь систему цветов, типографики, теней, радиусов и spacing из примера и оформить как токены.
design-systemtokenscss
Открыть
Средний30-60 мин