메인 콘텐츠로 건너뛰기

프리셋 테마

@lh-ui/share에 5개의 국풍 프리셋 색상 팔레트가 내장되어 있으며, @lh-ui/react는 이를 그대로 사용합니다. 프리셋이 바꾸는 것은 --lh-* 색상 변수이고, 라이트 / 다크 모드(useLhTheme)와 직교합니다.

프리셋 목록​

이름설명
cerblue청록 (기본값)
songhua송화 녹색
zhusha주사(朱砂)
shuimo수묵(水墨)
golden유금(鎏金)

런타임 전환​

useLhPresetTheme로 전환합니다. 프리셋 변수는 <style id="lh-preset-theme">(:root 레벨)에 기록되어 전역에 적용됩니다:

import { useLhPresetTheme } from '@lh-ui/react'

function PresetSwitcher() {
const { preset, setPreset, presets } = useLhPresetTheme()

return (
<select value={preset} onChange={(e) => setPreset(e.target.value as never)}>
{presets.map((p) => (
<option key={p.name} value={p.name}>
{p.name}
</option>
))}
</select>
)
}

반환값:

필드타입설명
presetThemePresetName현재 프리셋 이름
setPreset(name) => void프리셋 전환 (localStorage에 동기화 기록)
presetsThemePreset[]전체 프리셋 목록
themeVarsRecord<string, string>현재 프리셋의 ConfigProvider 호환 변수 (키에서 --lh- 접두사 제거됨)

ConfigProvider와 연동​

themeVars 반환값을 LhConfigProvider에 바로 전달해, 프리셋이 전역이 아니라 하위 트리에만 적용되게 할 수 있습니다:

import { LhConfigProvider, useLhPresetTheme } from '@lh-ui/react'

function App() {
const { themeVars } = useLhPresetTheme({ initialPreset: 'zhusha' })
return (
<LhConfigProvider themeVars={themeVars}>
<YourApp />
</LhConfigProvider>
)
}

깜빡임 방지​

이 사이트는 빌드 시 "프리셋 이름 → 스타일 텍스트"를 HTML head의 동기 스크립트로 직렬화해, 첫 페인트 전에 localStorage에 기억된 프리셋을 적용합니다. 새로고침할 때 기본 색이 먼저 깜빡이고 나서 전환되는 것을 막기 위함입니다. 설정은 docs/docusaurus.config.ts의 PRESET_FOUC_SCRIPT에 있습니다.

인라인 style을 쓸 수 없음

프리셋 변수는 반드시 <style> 요소에만 작성해야 하고, document.documentElement.style에 쓸 수 없습니다: 인라인 스타일의 명시도 1,0,0,0이 항상 스타일시트를 눌러, 런타임에 프리셋을 전환해도 페이지가 여전히 옛 인라인 값을 읽고 var-dark.scss의 다크 변수 전체를 누르기 때문입니다.