Темы
Слой вёрстки для сайта или панели, подмена страниц и палитра
Тема — полноценный слой вёрстки: она подменяет и убирает страницы ядра, добавляет свои страницы и компоненты, задаёт палитру PrimeVue и собственные стили. Тем может лежать сколько угодно рядом, активная выбирается в панели.
Раскладка
themes/<id>/
theme.json манифест
nuxt.config.ts регистрация компонентов темы
assets/tokens.scss стили вёрстки
components/ компоненты с префиксом из componentPrefix
pages/ страницы темы
locales/{ru,en}.json строки темы с ключами theme.<id>.Манифест
{
"id": "aurora",
"name": { "ru": "Аврора", "en": "Aurora" },
"version": "1.0.0",
"unicoreApi": "^1.3.0",
"side": "client",
"componentPrefix": "Theme",
"primevue": "lara",
"primevueTokens": {
"semantic": {
"primary": { "500": "#7c3aed", "600": "#6d28d9" },
"borderRadius": { "md": "8px" }
}
},
"tokens": "./assets/tokens.scss",
"pages": {
"replace": { "/": "./pages/index.vue" },
"remove": ["/start"]
}
}Prop
Type
Подмена страниц
Только через pages.replace в манифесте. Файл themes/<id>/pages/index.vue сам по себе главную не заменит: Nuxt считает страницы проекта приоритетнее страниц слоя и выкидывает дубль ещё до сборки маршрутов.
"pages": {
"replace": {
"/": "./pages/index.vue",
"/servers": "./pages/servers.vue"
}
}Палитра
Переменные --p-* в CSS не сработают
PrimeVue вставляет свои переменные скриптом при инициализации — позже любого файла стилей и с той же специфичностью. Файл темы их не перебьёт. Цвета, радиусы и прочие токены задаются только через primevue и primevueTokens в манифесте.
Собственная вёрстка темы — отступы, сетки, декоративные элементы — живёт в файле из tokens. Он подключается вместе со слоем.
Светлая и тёмная схемы к темам отношения не имеют: переключатель есть в ядре и работает в любой теме.
Стороны
side говорит, для чего тема: client — сайт, admin — панель управления. Стороны независимы, поэтому сайт и панель могут одновременно работать под разными темами.
Выбор активной темы
Утилиты → Темы. Две секции — темы сайта и темы панели, у каждой свой выбор. Он хранится в themes/state.json.
После смены темы соответствующий фронт нужно пересобрать:
pnpm run build:client
pnpm run build:adminПеременные UNICORE_THEME и UNICORE_ADMIN_THEME в .env жёстко фиксируют тему своей стороны и блокируют выбор из панели — так удобно для стендов и CI.
Строки темы
Лежат в её собственной папке locales/ с ключами theme.<id>.. При старте сервера ключи активной темы попадают в общий словарь и правятся в разделе «Локализация» наравне с остальными.
{
"theme.aurora.hero_title": "Добро пожаловать",
"theme.aurora.hero_button": "Начать игру"
}Публикация
Тема попадает в каталог панели так же, как модуль: релиз на GitHub с архивом <id>-<версия>.zip, внутри — папка темы с theme.json. В репозитории тем UnicoreCMS релиз собирает Actions по тегу вида aurora-v1.1.0; подробности и формат описания релиза — в публикации модуля.