Теми
Налаштуйте вигляд і відчуття вашого застосунку за допомогою вбудованих тем, кольорів і підтримки темного режиму.
Доступні теми
Volt UI постачається з кількома готовими кольоровими темами. Кожна тема дає власну палітру для основного, другорядного, акцентного та семантичних кольорів.
Volt
Синя тема за замовчуванням
Ember
Тепла помаранчева тема
Sage
Природна зелена тема
Dusk
Фіолетова присмеркова тема
Glacier
Холодна блакитна тема
Налаштування теми
Додайте провайдер теми до конфігурації свого застосунку:
Кольорові варіанти
'volt'— синій (за замовчуванням)'ember'— помаранчевий/червоний'sage'— зелений'dusk'— фіолетовий'glacier'— блакитний
'sharp'— малий радіус, пласкі тіні (за замовчуванням)'soft'— великий радіус, розсіяні тіні'brutal'— без радіуса, жорсткі зміщені тіні, товсті рамки'ghost'— без рамок, без тіней'retro'— вигляд у стилі Y2K
API під час виконання
@voltui/components керують темою під час виконання. Обидві лише виставляють data-color , data-style і клас .dark на <html> — прихованого стану немає, тож результат можна будь-коли переглянути чи перевизначити звичайними DOM API.
appConfig.providers , щоб задати тему під час запуску — і на сервері, і на клієнті. DOCUMENT від Angular, а не глобальний document , тож атрибути теми присутні вже у відрендереному на сервері HTML — без спалаху теми за замовчуванням під час гідратації клієнтського бандла.
document не визначено). Передайте явний аргумент doc , щоб націлитися на інший документ, наприклад у тесті.
Стратегія темного режиму
.dark до <html> перемикає кожен компонент на його темні значення токенів (див. @custom-variant dark у core.css ). Volt не читає prefers-color-scheme автоматично: dark за замовчуванням світлий, доки ви не передасте dark: true або не викличете applyVoltTheme самі, тож вибір завжди явний і не зміниться мовчки, якщо відвідувач змінить тему своєї системи.
localStorage і застосовує його невеликим вбудованим скриптом у <head> файлу index.html , ще до завантаження будь-якої таблиці стилів — див. src/app/components/theme-switcher.ts як зразкову реалізацію, якщо хочете таку саму поведінку без спалаху на клієнті.
CSS-змінні
oklch() . Компоненти беруть їх через утиліти Tailwind ( bg-primary , text-muted-foreground ), зіставлені через @theme inline у core.css , і ніколи через сирий var(--primary) . Це повний перелік того, що може визначити пресет; шаблони для копіювання — у двох посібниках нижче.
/* Color tokens — one block per data-color, one per .dark[data-color] */ --background / --foreground --surface / --surface-foreground /* cards, popovers, dropdowns */ --muted / --muted-foreground --border / --input / --ring /* --input is the form-control border */ --primary / --primary-foreground --secondary / --secondary-foreground --destructive / --destructive-foreground /* shared by all colors, only in core.css */ --success / --success-foreground --warning / --warning-foreground --error / --error-foreground --info / --info-foreground /* Style tokens — one block per data-style */ --radius --border-width / --border-style --ring-width / --ring-offset-width --volt-shadow-sm / --volt-shadow / --volt-shadow-md / --volt-shadow-lg --spacing-component / --spacing-gap --volt-font-weight-base / --volt-font-weight-heading / --volt-font-weight-label
Створити власний кольоровий пресет
data-color . Скопіюйте цей шаблон, замініть 'mytheme' та значення, а тоді імпортуйте файл після @voltui/components/themes.css у своїй глобальній таблиці стилів.
:root[data-color='mytheme'] {
--primary: oklch(0.58 0.2 265);
--primary-foreground: oklch(0.98 0 0);
--secondary: oklch(0.96 0.01 265);
--secondary-foreground: oklch(0.15 0.01 265);
--background: oklch(1 0 0);
--foreground: oklch(0.15 0.01 265);
--surface: oklch(1 0 0);
--surface-foreground: oklch(0.15 0.01 265);
--muted: oklch(0.96 0.005 265);
--muted-foreground: oklch(0.5 0.02 265);
--border: oklch(0.9 0.01 265);
--input: oklch(0.65 0.02 265);
--ring: oklch(0.58 0.2 265);
--success: oklch(0.5 0.14 150);
--success-foreground: oklch(0.98 0 0);
--warning: oklch(0.7 0.16 70);
--warning-foreground: oklch(0.2 0.05 70);
--error: oklch(0.55 0.22 25);
--error-foreground: oklch(0.98 0 0);
--info: oklch(0.55 0.14 240);
--info-foreground: oklch(0.98 0 0);
}
.dark[data-color='mytheme'] {
/* same tokens, tuned for a dark --background/--surface */
}--ring та --input щодо --background ) — точну перевірку, яку цей проєкт запускає на власних пресетах, дивіться у scripts/contrast-audit.mjs . Інструмент
Створити власний пресет стилю
data-style і застосовується до всіх кольорів одразу.
:root[data-style='mystyle'] {
--radius: 0.5rem;
--border-width: 1px;
--border-style: solid;
--ring-width: 2px;
--ring-offset-width: 2px;
--volt-shadow-sm: 0 1px 2px 0 oklch(0 0 0 / 0.05);
--volt-shadow: 0 1px 3px 0 oklch(0 0 0 / 0.1);
--volt-shadow-md: 0 4px 6px -1px oklch(0 0 0 / 0.1);
--volt-shadow-lg: 0 10px 15px -3px oklch(0 0 0 / 0.1);
--spacing-component: 1;
--spacing-gap: 0.5rem;
--volt-font-weight-base: 400;
--volt-font-weight-heading: 600;
--volt-font-weight-label: 500;
}@voltui/components/themes.css , а тоді задайте data-style="mystyle" через provideVoltTheme або applyVoltTheme .