Слои
- исходные переменные токенов из
@vega-ui/tokens-core - семантические переменные приложения из
@vega-ui/theme-core - локальные переменные компонентов из
packages/ui/src/**/style.module.css
Как слои работают вместе
Пример цепочки:
--color-blue-500определяется в слое токенов- активная тема сопоставляет эту шкалу с семантическими переменными, такими как
--color-blue-accent-500,--text-colorили--fills-primary - компонент затем может предоставлять локальные переменные, такие как
--select-value-colorили--select-size
Поэтому документация компонентов должна различать три уровня переопределения:
- переопределение токена: широкое изменение на уровне системы
- переопределение темы: семантическое изменение на уровне приложения
- переопределение компонента: точечная локальная настройка
Предпочтительный порядок переопределения
Начинайте с самого широкого безопасного уровня:
- меняйте семантику темы, когда изменение должно затронуть много компонентов
- меняйте локальные переменные компонента
--component-*, когда должно измениться только одно семейство компонентов - используйте прямые переопределения стилей, только когда ни токены, ни задокументированные переменные не покрывают случай
Это правило важно, потому что переопределения исходных токенов быстро расходятся по всей системе, тогда как семантические переопределения темы остаются предсказуемыми, а локальные переопределения компонентов — изолированными.
Пример
<Select
style={{
'--select-size': '44px',
'--select-value-color': 'var(--color-primary-700)',
} as React.CSSProperties}
>
{/* parts */}
</Select>В этом примере:
--color-primary-700берётся из семантического слоя темы--select-sizeи--select-value-color— локальные переменные компонента
Рекомендации
- не считайте каждое пользовательское CSS-свойство в исходниках стабильным публичным API
- предпочитайте задокументированные семантические переменные сырым значениям палитры
- держите вопросы темы глобальными, а переопределения компонентов — локальными