Стратегия стилей (Tailwind + DaisyUI)
Связано: Issue #97, часть глобального рефакторинга стилей (#70).
1. Основной выбор
Основа интерфейса — Tailwind CSS + DaisyUI.
- Новый код (страницы, компоненты, виджеты) пишем с использованием утилит Tailwind и компонентов DaisyUI.
- Существующий SCSS и кастомные классы остаются до постепенной миграции; при доработке старых экранов предпочтительно переводить их на Tailwind/DaisyUI по мере возможности.
2. Для нового кода
2.1 Что использовать
- Разметка и утилиты: классы Tailwind (
flex,gap-4,text-base-content,rounded-boxи т.д.). - Компоненты UI: классы DaisyUI (
btn,btn-primary,card,modal,menu,tabs,alertи т.д.). Темы заданы вapp.css: corporate (светлая по умолчанию), business (тёмная поprefers-color-scheme: dark). - Цвета и темы: предпочтительно семантика DaisyUI (
base-content,primary,secondaryи т.д.). Для графиков/Chart.js можно использовать$lib/DaisyUiHelper.ts(получение цветов темы из DOM). - Тёмная тема: используем классы и атрибуты темы DaisyUI (например
data-theme="business", семантические классы цветов). Переход с глобальных переопределений в_dark-theme.scssна миграцию экранов к теме DaisyUI — по плану аудита (styles-cleanup-audit.md, П.3).
2.2 Когда допустимы исключения (SCSS / scoped-стили)
Допускается использовать SCSS (глобальные модули или <style lang="scss"> в компоненте) в случаях:
- Сложные миксины, которые нецелесообразно дублировать утилитами (например компактные сетки, повторяющиеся блоки с вложенностью).
- Специфичные анимации или эффекты (keyframes, сложные transition), если их проще держать в SCSS.
- Легаси или участки, запланированные к миграции позже — до переноса на Tailwind/DaisyUI можно оставлять текущие SCSS-классы.
При добавлении нового SCSS-кода желательно ограничиваться компонентом (<style lang="scss"> с @use общих модулей при необходимости) и не плодить новые глобальные классы без согласования.
3. Общие переменные и миксины
3.1 Текущее разделение (пока устраивает)
- CSS-переменные (цвета, тени, радиусы, z-index, glass-эффекты) задаются в
interface/src/app.cssв:rootи в@media (prefers-color-scheme: dark). Их можно использовать и в Tailwind-разметке (например черезvar(--primary-500)в произвольных значениях), и в SCSS. - Брейкпоинты и прочие SCSS-переменные — в
$lib/styles/base/_variables.scss(выровнены под Tailwind). Подключаются через@useв тех компонентах, где нужны миксины или медиа-запросы на эти переменные. - Миксины (glassmorphism, flex-center, dark-theme-color, compact-points и т.д.) — в
$lib/styles/base/_mixins.scss. Используются только в SCSS (глобальном или в компонентах с@use).
При миграции участков на Tailwind можно заменять использование миксинов эквивалентными утилитами или темами DaisyUI; переменные из app.css при необходимости оставить как общий слой токенов.
3.2 Как подключать в компонентах
- Только Tailwind/DaisyUI: достаточно глобального
app.css(уже в layout); дополнительные импорты не нужны. - SCSS (исключения): в компоненте в
<style lang="scss">использовать@use "$lib/styles/base/variables" as v;и/или@use "$lib/styles/base/mixins" as m;при необходимости. Для существующих блоков (настройки, таблицы, wizard) по-прежнему допускается@useсоответствующих модулей из$lib/styles/...(см. frontend.md).
4. Flowbite-svelte
Итог: зависимости Flowbite удалены. Popover заменён на DaisyUI tooltip (ValveParameters, KpnPopover), Spinner — на DaisyUI loading во всех компонентах, иконки — на Tabler (unplugin-icons). Подробности и история задач — в styles-cleanup-audit.md, п. 5. Новый функционал реализовывать на DaisyUI/Tailwind/Tabler, без Flowbite.
5. Очищенные/удалённые модули
В рамках аудита чистки стилей удалены неиспользуемые SCSS-модули (_buttons.scss, _modals.scss, _tabs.scss, _inputs.scss). Актуальный перечень задач и выполненных этапов — в styles-cleanup-audit.md.
6. Документация и ссылки
- Описание существующих SCSS-классов и миксинов: frontend.md.
- Аудит текущего состояния и план: styles-audit-and-plan.md.
- Аудит для будущей чистки (без изменений в коде): styles-cleanup-audit.md.
Ссылка на эту стратегию добавлена в frontend.md и при необходимости может быть добавлена в README или в общий индекс документации.