Skip to content

ADOLF CONTENT FACTORY — Раздел 8: UI/UX Guidelines

Проект: Генерация SEO-контента для карточек товаров Модуль: Content Factory Версия: 1.0 Дата: Февраль 2026


8.1 Назначение

Данный раздел описывает правила и паттерны пользовательского интерфейса для модуля Content Factory. Эти правила обязательны для соблюдения при любых доработках UI.


8.2 Общие принципы

ПринципОписание
МинимализмТолько необходимая информация на экране
КонсистентностьЕдиные паттерны во всех модулях ADOLF
КонтекстностьКнопки и действия релевантны текущей задаче
AI-firstРутина автоматизирована, человек принимает решения
Human-in-the-loopКритические действия требуют подтверждения

8.3 Библиотека компонентов

8.3.1 shadcn-svelte

Все UI-компоненты должны использовать shadcn-svelte — портированную версию shadcn/ui для Svelte.

КомпонентИспользование
ButtonВсе кнопки (навигация, действия, формы)
CardОбёртки контентных блоков
TableТаблицы данных
BadgeСтатусы, теги, метки маркетплейсов
InputТекстовые поля
SliderНастройки (порог качества)

8.3.2 Стили кнопок

ВариантИспользованиеПример
defaultОсновное действие«Утвердить», «Да, поехали»
outlineВторичное действие, кнопки в таблице«Авто», «Ручная», «Перегенерировать»
ghostОтмена, вспомогательные«Отмена», навигация назад
destructiveУдаление, исключениеHover на кнопке ✕

8.3.3 Svelte 5 / Svelte 4 совместимость

КомпонентСобытиеПример
shadcn <Button> (Svelte 5 runes)onclick<Button onclick={handler}>
bits-ui DropdownMenu.Itemonclick<DropdownMenu.Item onclick={handler}>
Нативные элементы (<button>, <div>)on:click<button on:click={handler}>

Важно: Никогда не использовать on:click на shadcn/bits-ui компонентах и onclick на нативных элементах.


8.4 Навигация модулей

8.4.1 Правило: навигация под хедером

Разделы модуля размещаются под хедером по центру, а не в статус-баре (хедере). Хедер содержит только: логотип, название модуля, статистику и кнопку настроек.

┌──────────────────────────────────────────────────────┐
│  [logo] Название модуля       Статистика          ⚙  │  ← Header (фиксированный)
├──────────────────────────────────────────────────────┤
│        [ Раздел 1 ]  [ Раздел 2 ]  [ Раздел N ]     │  ← Nav (центрированный)
├──────────────────────────────────────────────────────┤
│                                                      │
│                  Контент раздела                      │
│                                                      │
└──────────────────────────────────────────────────────┘

8.4.2 Стиль вкладок

  • Активная: variant="default" (заливка)
  • Неактивная: variant="outline" (контур)
  • Размер: size="sm"
  • Текст: text-xs, whitespace-nowrap
  • Отступы: gap-1.5, px-3 py-2.5

8.4.3 Минимальность

Показывать в навигации только реально работающие разделы. Скрытые или недоработанные разделы НЕ выносить в навигацию — они могут быть доступны программно (через кнопки в контенте).


8.5 Иконки

8.5.1 Библиотека: Lucide

Все иконки — из пакета @lucide/svelte (Lucide icons).

8.5.2 Правила

ПравилоОписание
stroke="currentColor"Всегда. Без hardcoded цветов
Размерыsize-3 (12px) в таблицах, size-4 (16px) стандарт, size-7 (28px) крупные
Анимацияanimate-spin для Loader2 (спиннер загрузки)

8.5.3 Иконки модулей ADOLF

МодульИконка Lucide
Knowledgedatabase
Content Factoryshirt
CFOchart-candlestick
Reputationthumbs-up
Logistictruck
Watcherhat-glasses
Marketingtarget
Scoutbinoculars
Lexscale
Officebuilding-2
Shopshopping-cart

8.6 Цветовая схема

8.6.1 Content Factory: Amber

Акцентный цвет модуля Content Factory — #F59E0B (amber-500).

ЭлементКласс
Слайдер порога качестваaccent-amber-500
Бейдж маркетплейсаcontextual (без amber)
Кнопки действий в таблицеborder-input (без цвета, outline)

8.6.2 Общие правила цветов

  • Нет hardcoded цветов в SVG-иконках — только currentColor
  • Используйте CSS-переменные shadcn: bg-background, text-foreground, border-input, bg-muted
  • Тёмная тема поддерживается автоматически через CSS-переменные
  • Кнопки в таблицах — без цветных фонов, только outline стиль

8.7 Диалоги и модальные окна

8.7.1 Паттерн: ConfirmDialog

Для критических действий (генерация, публикация, удаление) — кастомный диалог подтверждения.

Требования:

  • Модальное окно вне основного scroll-контейнера (отдельный top-level элемент в Svelte)
  • Оверлей: bg-black/60 (без backdrop-blur на оверлее)
  • Карточка: bg-white/95 dark:bg-gray-950/95 backdrop-blur-sm (frosted glass на карточке)
  • Закрытие: клик по оверлею + кнопка ✕ + кнопка «Отмена»
  • Z-index: z-[9999]

Почему вне контейнера: Основной <div> страницы имеет overflow-x-hidden overflow-y-auto transition-all, что ломает position: fixed у вложенных элементов.

8.7.2 Паттерн: Toast

Информационные уведомления (успех, ошибка) — через svelte-sonner (toast). Не требуют взаимодействия пользователя.


8.8 Таблицы

8.8.1 Фиксированная высота

Таблица dashboard всегда отображает 8 строк. Если данных меньше — пустые строки заполняются прочерками ().

8.8.2 Кнопки в таблице

  • Стиль: нативные <button> с классами, имитирующими shadcn outline
  • Размер текста: text-xs
  • Padding: px-2.5 py-1
  • Иконки: size-3 (12px)
  • Событие: on:click|stopPropagation (предотвращение клика по строке)

8.8.3 Бейджи маркетплейсов

МаркетплейсРазмерСтиль
WBsize-7Фиолетовый фон, белый текст
Ozonsize-7Синий фон, белый текст
YMsize-7Жёлтый/красный фон

8.9 Формы

8.9.1 Текстовые поля

  • Счётчики символов: /60 для названия, общий счёт для описания
  • Enter-key support: ввод артикула поддерживает нажатие Enter
  • Взаимоисключающие поля: заполнение одного очищает другое (SKU ↔ URL)

8.9.2 Маркетплейс-селектор

  • Активные маркетплейсы — полноценные кнопки
  • «В разработке» — оверлей bg-background/60 backdrop-blur-[1px] с текстом поверх карточки

8.10 Адаптивность

BreakpointПоведение
MobileSidebar скрыт, гамбургер-меню, одноколоночная раскладка
TabletSidebar коллапсируется, таблица со скроллом
DesktopSidebar виден, двухколоночная раскладка (фото + контент)

PWA

Приложение поддерживает PWA и должно корректно работать в любой ориентации экрана (portrait/landscape).


8.11 Локализация

Все тексты интерфейса — на русском языке.

ЭлементПример
Кнопки навигации«Информация», «Ручная обработка»
Кнопки действий«Авто», «Ручная», «Утвердить», «Перегенерировать»
Диалог подтверждения«Да, поехали», «Отмена»
Подписи«Действие нельзя будет отменить.»
Placeholder«Введите артикул...»
Toast«Автогенерация завершена: {title}»
Ошибки«Ошибка: {message}»

8.12 Static-файлы

При добавлении новых SVG, иконок или статических ресурсов:

  1. Файл должен быть в обеих директориях:
    • static/ (для dev-сервера)
    • backend/open_webui/static/ (для production-сервера)
  2. Production-сервер раздаёт файлы из backend/open_webui/static/

Документ подготовлен: Февраль 2026 Версия: 1.0 Статус: Актуальный

Документация ADOLF Platform