build-core-ui-components — Разработка компонентов core-ui
Источник:
ds-skills/core-ui-development-skills/src/skills/build-core-ui-components/SKILL.mdСправочники скилла — вложенные страницы. В вики не выложен, лежит в папке скилла:agents/openai.yaml(подпись скилла для агента OpenAI).
Шапка скилла:
name: build-core-ui-components
description: Создание и изменение React-компонентов библиотеки core-ui, включая публичный TypeScript API, локальные компоненты и утилиты, SCSS-модули, Storybook-документацию и Vitest/RTL-тесты. Использовать при реализации компонента по макету, по контракту дизайна (`components/<slug>.yaml`) или по описанию, расширении существующего компонента и подготовке связанных историй, документации, тестов и экспортов в репозитории core-ui.
Создавать код, согласованный с текущей архитектурой репозитория. Считать актуальный код и конфигурацию источником истины; не переносить абстрактный шаблон механически.
Проверка репозитория
Перед применением убедиться, что текущий workspace является библиотекой core-ui:
- Прочитать корневой
package.jsonи проверить имя пакета, React, Storybook и команды проверки проекта. - Проверить наличие
src/,src/index.ts,src/.storybook/,CONTRIBUTING.mdи характерных компонентов библиотеки. - Не полагаться только на имя директории: оно может отличаться в другой копии репозитория.
- Если признаки не совпадают или репозиторий определить нельзя, не применять эти конвенции автоматически и сообщить пользователю.
Рабочий процесс
- Определить источник задачи. Если на компонент есть контракт дизайна —
components/<slug>.yamlв базеds-docs/component-contracts, — читать его вместо разбора макета глазами: состав, свойства, токены и правила там уже сняты и проверены. Контракта нет — работать по макету обычным порядком. - Определить публичный API, состояния, варианты, интерактивность и требования доступности.
- Прочитать границы изменений и зафиксировать допустимые пути.
- Найти 2–3 ближайших актуальных компонента вне
src/deprecated/и изучить их реализацию, стили, Storybook и тесты. - Прочитать структуру и React/TypeScript-конвенции.
- Загрузить только относящиеся к задаче инструкции:
- при добавлении
utils/— локальные утилиты; - при добавлении
components/— вложенные компоненты; - при выносе свойств вложенного компонента в публичный API — проброшенные свойства;
- при работе со SCSS — стили и токены;
- при работе со Storybook — истории и документация;
- при сборке историй по контракту — истории из контракта;
- при добавлении служебных story-пропсов — исключаемые аргументы Storybook;
- при работе с тестами — тестирование;
- при добавлении skeleton или состояния загрузки — пропсы загрузочных состояний.
- при добавлении
- Проверить существующие токены, миксины, хуки, текстовые компоненты и иконки поиском по репозиторию. Не придумывать отсутствующие API и CSS-переменные. Имя токена из контракта — тоже кандидат на проверку, а не готовая переменная.
- Реализовать минимально необходимый API и переиспользовать подходящие примитивы core-ui.
- Выполнить проверку результата.
Основные правила
- Использовать kebab-case для директорий и файлов, PascalCase для компонентов и типов, lowerCamelCase для переменных и функций, SNAKE_CASE для констант.
- Писать JSDoc и новую документацию на русском языке.
- Не создавать файлы, варианты, состояния и абстракции, которые не нужны текущей задаче.
- Не изменять сестринские компоненты и общую инфраструктуру без явного согласования.
- Не экспортировать локальные
components/иutils/через публичныйindex.tsкомпонента. - Покрывать основной компонент тестами. Не создавать отдельные component-тесты внутри
components/. - Покрывать каждую утилиту из
utils/отдельными unit-тестами. - Не менять версию,
CHANGELOG.md, ветку и историю Git без явного запроса или релизной задачи.
Работа с контрактом
- Контракт — источник фактов, а не пожеланий: что в нём записано, то и снято с макета.
- Раздел
gaps— дыры и подозрительные места. Их не чинить молча: дыра означает вопрос к дизайну, а не свободу выбрать значение. - Чего в контракте нет — того не додумывать. Формат не описывает тени, размытия и параметры анимации; их отсутствие означает «не снято», а не «нет в макете».
- Контракт лежит в чужом репозитории и правится дизайн-стороной. Замечания возвращать текстом, файл не трогать.
- Подробности — контракт компонента как источник задачи.
Работа с макетом
- Отделять подтверждённые требования от предположений.
- Сопоставлять элементы макета с существующими токенами и компонентами библиотеки.
- Сверять публичный API со списком проброшенных вложенных компонентов: не проброшенное наружу не выносить.
- При недоступной или неоднозначной части макета явно описывать допущение.
- Если дизайн требует отсутствующего общего API, применять процедуру
BLOCKER / LIMITATION / IMPROVEMENTиз правил границ.