Студия тем
Не хотите ограничиваться предустановками? В студии ниже выберите пресет как отправную точку, настройте каждый токен под свою палитру — область предпросмотра обновится в реальном времени, а на выходе получится scss-файл, который можно поместить прямо в проект — без пересборки библиотеки компонентов.
主要文字·常规文字·次要文字
编辑的令牌只作用于预览区(与 ConfigProvider 同机制);导出的文件已包含暗色适配。
Применение экспортированной темы
Экспортированный файл выглядит так (исходник токенов — @lh-ui/share/styles/theme/common/var.scss):
@use '@lh-ui/share/styles/index.scss';
:root {
--lh-primary-color: #2B4C7C;
/* ... */
}
[data-theme='dark'],
.dark {
--lh-primary-color-bg: color-mix(in srgb, var(--lh-primary-color) 25%, transparent);
--lh-selected-color: color-mix(in srgb, var(--lh-primary-color) 40%, #fff);
}Два способа применения:
Способ 1: статический импорт (рекомендуется) — поместите экспортированный lh-theme.scss в проект и подключите его в точке входа:
// main.ts
import './lh-theme.scss'@use '@lh-ui/share/styles/index.scss' уже содержит все стили компонентов и тему в виде токенов — достаточно одной строки; тёмный блок имеет тот же источник, что и механизм пресетов share, и автоматически переключается при data-theme="dark".
Способ 2: инъекция во время выполнения — локальное переопределение через проп themeVars компонента LhConfigProvider (ключи — в сокращённом виде, префикс --lh- добавляется автоматически), подходит для параллельного показа нескольких тем на одной странице:
<script setup lang="ts">
import { LhConfigProvider, LhButton } from '@lh-ui/vue3'
</script>
<template>
<LhConfigProvider :theme-vars="{ primaryColor: '#2B4C7C', onPrimary: '#FFFFFF' }">
<LhButton type="primary">Основная кнопка</LhButton>
</LhConfigProvider>
</template>В примерах используются npm-имена пакетов (
@lh-ui/vue3/@lh-ui/share) — код готов к копированию; сам сайт документации работает на локальных исходниках семейства, поэтому изменения видны немедленно.
Замечания
- Для светлого основного цвета нужно явно объявлять
--lh-color-on-primary: белый текст на светлом основном цвете не проходит AA-контраст (4.5:1), поэтому в пресетах 松花绿 (сосново-зелёный) / 藤黄 (gamboge) используется текст цвета туши. Поле «Текст на основном цвете» в студии соответствует этому токену. --lh-selected-colorпри пустом значении следует стандартной цепочке--lh-primary-color-active; при светлом основном цвете выбранный текст часто приходится отдельно затемнять (в пресетах это тоже учтено).- Гейт контрастности:
pnpm verify:themeв share пересчитывает AA-контраст каждого пресета на реальных парах потребления; для собственной темы рекомендуется свериться с комментариями в разделе Предустановленные темы.