Skip to content

Студия тем ​

Не хотите ограничиваться предустановками? В студии ниже выберите пресет как отправную точку, настройте каждый токен под свою палитру — область предпросмотра обновится в реальном времени, а на выходе получится scss-файл, который можно поместить прямо в проект — без пересборки библиотеки компонентов.

主色
--lh-primary-color
--lh-primary-color-hover
--lh-primary-color-active
--lh-primary-color-bg
--lh-primary-color-border
主色衍生
--lh-color-on-primary
--lh-selected-color
功能色
--lh-success-color
--lh-warning-color
--lh-danger-color
--lh-info-color
文本
--lh-text-primary
--lh-text-regular
--lh-text-secondary
背景
--lh-bg-color
--lh-bg-color-page
边框
--lh-border-color-base
--lh-border-color-light
实时预览
标签标签标签

主要文字·常规文字·次要文字

编辑的令牌只作用于预览区(与 ConfigProvider 同机制);导出的文件已包含暗色适配。

导出 SCSS

Применение экспортированной темы ​

Экспортированный файл выглядит так (исходник токенов — @lh-ui/share/styles/theme/common/var.scss):

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 в проект и подключите его в точке входа:

ts
// main.ts
import './lh-theme.scss'

@use '@lh-ui/share/styles/index.scss' уже содержит все стили компонентов и тему в виде токенов — достаточно одной строки; тёмный блок имеет тот же источник, что и механизм пресетов share, и автоматически переключается при data-theme="dark".

Способ 2: инъекция во время выполнения — локальное переопределение через проп themeVars компонента LhConfigProvider (ключи — в сокращённом виде, префикс --lh- добавляется автоматически), подходит для параллельного показа нескольких тем на одной странице:

vue
<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-контраст каждого пресета на реальных парах потребления; для собственной темы рекомендуется свериться с комментариями в разделе Предустановленные темы.

Красота традиций — основа кода