Слои системы
Репозиторий построен как многослойный стек дизайн-системы:
packages/tokensИсходные дизайн-токены: цвета, отступы, скругления, тени, типографика и слои.packages/themeСемантические переменные темы поверх токенов. Здесь определены.lightи.dark.packages/uiReact-компоненты и CSS-модули компонентов, которые используют семантику темы.docs/и Storybook Документация для людей, примеры и рекомендации по интеграции поверх опубликованного API.
Читайте этот стек слева направо:
tokens -> theme -> ui -> stories/tests/docs
Пакеты воркспейса
packages/ui: основной React-пакет, публикуется как@vega-ui/reactpackages/theme: глобальный семантический слой темы, публикуется как@vega-ui/theme-corepackages/tokens: исходные дизайн-токены, публикуются как@vega-ui/tokens-corepackages/icons: ассеты и экспорты иконокpackages/hooks: общие хуки — контролируемое состояние, выделение, отслеживание размеровpackages/utils: низкоуровневые утилиты — слияние пропсов, рефы, даты и небольшие помощники для данныхpackages/react-context: общие помощники для контекста, которые используют составные компонентыpackages/i18n: независимые от фреймворка адаптеры календарных систем, помощники для локалей и форматирования и календарно-зависимые помощники для ISO-дат, публикуется как@vega-ui/i18n(см. Даты и календарные системы)
Модель зависимостей
Важное направление зависимостей:
uiзависит отhooks,i18n,icons,react-contextиutilsthemeзависит отtokens- компоненты в
uiстилизуются через семантические переменные изtheme
Это значит:
- изменения токенов затрагивают всю систему стилей
- изменения темы переназначают семантику, не переписывая каждый компонент
- локальные CSS-переменные компонента должны оставаться локальными и не подменять слой темы
Структура UI-пакета
Большинство компонентов в packages/ui/src/<Component>/ следуют повторяемой структуре:
Component.tsx: публичная реализация компонентаtypes.ts: экспортируемые типы и объединения, когда они нужныindex.ts: публичные экспорты для точки входа пакетаstyle.module.css: локальные стили компонентаcomponents/: экспортируемые дочерние части составных компонентовcontexts/: общий локальный контекст для состояния составного компонента__tests__/*.browser.test.tsx: браузерные тесты взаимодействия*.stories.tsx: примеры использования в виде историй
Пример:
- packages/ui/src/TextField/TextField.tsx
- packages/ui/src/TextField/components/TextFieldInput/TextFieldInput.tsx
- packages/ui/src/TextField/style.module.css
- packages/ui/src/TextField/tests/TextField.browser.test.tsx
Истории, тесты и документация
Эти три слоя служат разным целям и должны оставаться согласованными:
- истории описывают реалистичное поддерживаемое использование и визуальные состояния
- тесты описывают поведение, взаимодействия и пограничные случаи
- документация описывает контракт для потребителя: когда использовать компонент, как его собрать и что обычно ломается
В этом репозитории истории в основном лежат рядом с компонентами в packages/ui/src/**, а конфигурация Storybook — в .storybook/.
Источники истины документации
При документировании компонента придерживайтесь приоритетов:
- исходный код — для публичных экспортов и формы типов
- истории — для поддерживаемых примеров и вариантов
- тесты — для пограничных случаев и гарантий поведения
- CSS-модули — для точек настройки стилей и локальных переменных компонента
Так документация не уходит в паттерны, которые исходный код на самом деле не поддерживает.
Общее определение источника истины — в глоссарии.