Архитектура
Назначение и область применения
Этот документ описывает архитектурное проектирование@ui8kit/core, включая трехуровневую иерархию компонентов, систему вариантов, конвейер сборки и организацию модулей. Он объясняет структурные взаимосвязи между примитивами, композитными компонентами и макетами, а также лежащие в основе механизмы стилизации, типобезопасности и распространения.
Для подробной документации API отдельных компонентов и их свойств см. Справочник API. Для инструкций по установке и настройке см. Начало работы. Для рабочих процессов разработки и примеров использования см. Руководство разработчика.
Обзор трехуровневой архитектуры
Библиотека реализует трехуровневую архитектуру, соответствующую принципам атомарного дизайна: атомы (базовые примитивы), молекулы (UI-компоненты) и организмы (шаблоны макетов). Каждый уровень строится на предыдущем через композицию и проброс свойств.Иерархия и зависимости уровней
Уровень 1: Базовые примитивы
Пять фундаментальных строительных блоков, расположенных в src/core/ui/ обеспечивают прямой доступ к системе вариантов CVA. Эти примитивы отрисовываются как семантические HTML-элементы и служат основой для всех компонентов более высокого уровня.| Примитив | Базовый элемент | Основное применение | Ключевые свойства |
|---|---|---|---|
Box | div | Универсальный контейнер | component, все варианты |
Block | section | Семантические блоки | component, все варианты |
Grid | div | Макеты CSS Grid | cols, gap, варианты grid |
Flex | div | Макеты Flexbox | direction, align, justify |
Stack | div | Вертикальное/горизонтальное размещение | gap, align, расширяет Flex |
- Все примитивы поддерживают
forwardRefдля доступа к DOM: src/core/ui/Box.tsx src/core/ui/Block.tsx - Полиморфное свойство
componentпозволяет использовать семантические HTML-теги: src/core/ui/Block.tsx10-15 - Прямое применение вариантов без промежуточной абстракции: src/core/ui/Box.tsx20-30
Уровень 2: UI-компоненты
Пятнадцать композитных компонентов в src/components/ui/ расширяют базовые примитивы через проброс свойств. Эти компоненты добавляют семантическую структуру, составные паттерны и специализированное поведение, наследуя при этом полную систему вариантов.| Компонент | Расширяет | Составные части | Специальные возможности |
|---|---|---|---|
Card | Block | Header, Content, Footer, Title, Description | Паттерн составного компонента |
Button | Box | - | Состояние загрузки, секции (левая/правая) |
Badge | Box | - | Индикатор точки, система вариантов |
Title | Box | - | Иерархия заголовков (h1-h6) |
Text | Box | - | Семантические текстовые элементы (p, span, em, strong) |
Container | Block | - | Адаптивные предустановки max-width |
Group | Flex | - | Помощник горизонтального макета |
Icon | Box | - | Обертка SVG с контролем размера |
Image | Box | - | Соотношение сторон, object-fit |
Sheet | - | - | Панель/лист с переходами |
Accordion | - | Item, Trigger, Content | Расширяемые секции |
Уровень 3: Макеты
Три шаблона макетов в src/layouts/ организуют UI-компоненты в структуры приложений. Эти шаблоны обрабатывают сложные паттерны композиции, такие как изменяемые панели, системы сеток и адаптивные точки останова.| Макет | Основное применение | Ключевые возможности | Зависимости |
|---|---|---|---|
DashLayout | Приложения-панели управления | Боковая панель, заголовок, изменяемые панели | react-resizable-panels |
LayoutBlock | Секции контента | Макет Grid, хуки контента | Примитив Grid |
SplitBlock | Двухколоночные макеты | Адаптивное разделение, изображение/контент | Container, Grid |
LayoutBlock демонстрирует паттерн хуков контента для динамической отрисовки:
Архитектурные принципы
Соответствие атомарному дизайну
Трехуровневая структура напрямую соответствует методологии атомарного дизайна:| Уровень | Уровень атомарного дизайна | Сложность | Композиция |
|---|---|---|---|
| Уровень 1 (Core) | Атомы | Минимальная | Прямое применение вариантов |
| Уровень 2 (UI) | Молекулы | Умеренная | Расширяет атомы, проброс свойств |
| Уровень 3 (Layouts) | Организмы | Сложная | Компонует молекулы в шаблоны |
Философия минимализма
Библиотека достигает своей минималистичной цели через три ключевых ограничения:- 15 композитных компонентов обеспечивают 95% покрытие потребностей UI: README.md370-386
- 12 многократно используемых вариантов устраняют 80% пользовательских классов: README.md170-217
- 5 базовых примитивов служат универсальными строительными блоками: README.md81-103
Паттерн проброса свойств
Все компоненты уровня 2 наследуют свойства вариантов от своих базовых примитивов через явный проброс свойств:- Типобезопасность: TypeScript валидирует все проброшенные свойства
- Наследование вариантов: Компоненты автоматически получают новые варианты, добавленные в примитивы
- Гибкость композиции: Несколько источников вариантов объединяются без конфликтов
Семантический HTML и data-атрибуты
Каждый компонент отрисовывает семантические элементы HTML5 и включает атрибутыdata-class для идентификации:
| Паттерн | Назначение | Пример |
|---|---|---|
| Семантические элементы | Доступность, SEO | <Block component="section">, <Block component="nav"> |
Атрибуты data-class | Таргетирование DOM, тестирование | <div data-class="card">, <div data-class="card-header"> |
| Полиморфные компоненты | Гибкие типы элементов | Свойство component принимает любой валидный HTML-тег |
Взаимосвязи компонентов и структура файлов
Организация директорий
Поток импорта и экспорта компонентов
Паттерны композиции
Библиотека поддерживает пять различных паттернов композиции для разных архитектурных потребностей:- Прямой примитив: Используйте
BoxилиBlockсо свойствомcomponentдля семантического HTML - Составные компоненты: Используйте структурированные компоненты как
Card.Header, обеспечивает гибкую композицию - Проброс свойств: Композитные компоненты объединяют свои собственные варианты с унаследованными базовыми вариантами
- Композиция макета: Шаблоны организуют несколько компонентов в структуры приложений
- Хуки контента: Макеты принимают функции рендеринга для динамической инъекции контента
Архитектура системы вариантов
Интеграция CVA
Система вариантов работает наclass-variance-authority, предоставляя типобезопасные, композируемые утилиты стилизации. Все варианты определены в src/core/variants/ и применяются через базовые примитивы.
12 категорий вариантов:
| Категория | Варианты | Значения | Назначение |
|---|---|---|---|
| Spacing | p, m, px, py, pt, pb, pl, pr, mx, my, mt, mb, ml, mr | none, xs, sm, md, lg, xl, 2xl, auto | Отступы и поля |
| Colors | bg, c, borderColor | Цвета дизайн-системы | Цвета фона, текста, границ |
| Layout | w, h, minH, maxW, position | auto, full, screen, fit, min, max | Ширина, высота, позиционирование |
| Typography | size, weight, align, leading | Размеры и начертания шрифтов | Стилизация текста |
| Effects | rounded, shadow, border | none, sm, md, lg, xl, 2xl, 3xl, full | Визуальные улучшения |
| Display | display | block, inline, flex, grid, none | Режимы отображения |
| Flexbox | direction, align, justify, wrap | Свойства flex | Макеты Flexbox |
| Grid | cols, rows, gap | Свойства grid | Макеты Grid |
| Overflow | overflow, overflowX, overflowY | auto, hidden, scroll, visible | Контроль переполнения |
| Cursor | cursor | pointer, default, move, и т.д. | Стили курсора |
| Opacity | opacity | от 0 до 100 | Прозрачность |
| Z-Index | z | 0, 10, 20, 30, 40, 50 | Порядок наложения |
Конвейер применения вариантов
- Ввод свойств: Разработчик предоставляет свойства вариантов (например,
p='lg') - Разрешение вариантов: Движок CVA разрешает свойства в классы Tailwind, используя определения вариантов
- Генерация классов: Производит строку className (например,
'p-8 rounded-xl shadow-md') - Валидация whitelist: Сгенерированные классы валидируются против src/lib/core-classes.json (618 классов)
- Обработка Tailwind: Tailwind CSS применяет утилитарные классы, используя whitelist как safelist для предотвращения удаления
- Вывод в DOM: Финальный className применяется к отрисованному элементу
Генерация whitelist классов
Скрипт времени сборкиcva-extractor.ts сканирует все определения вариантов для генерации whitelist классов:
Рабочий процесс экстрактора:
- Spacing:
p-0,p-1,p-2, …,p-96,m-0,m-1, …,m-96,mx-auto,my-auto - Rounded:
rounded-none,rounded-sm,rounded-md, …,rounded-full - Shadow:
shadow-none,shadow-sm,shadow-md, …,shadow-2xl - Colors: Все утилиты цветов дизайн-системы
- Layout:
w-full,w-screen,h-full,h-screen, и т.д.
Архитектура времени сборки vs времени выполнения
Система поддерживает строгое разделение между инструментами времени сборки и кодом времени выполнения для оптимизации размера бандла и опыта разработчика.Системы времени сборки
| Команда | Инструмент | Вывод | Назначение |
|---|---|---|---|
bun scripts/cva-extractor.ts | Пользовательский скрипт | core-classes.json | Извлечение классов вариантов |
tsc -p tsconfig.json | TypeScript | директория dist/ | Компиляция в модули ES2022 |
eslint src --ext .ts,.tsx | ESLint | Вывод в консоль | Валидация качества кода |
buildy-ui scan | CLI buildy-ui | registry.json | Метаданные компонентов |
Системы времени выполнения
| Зависимость | Тип | Использование | Компоненты |
|---|---|---|---|
react | Peer | Фреймворк компонентов | Все компоненты |
react-dom | Peer | Отрисовка DOM | Все компоненты |
class-variance-authority | Прямая | Движок вариантов | Базовые примитивы |
lucide-react | Прямая | Иконки | Sheet, Accordion |
react-resizable-panels | Прямая | Изменяемые панели | DashLayout |
Система распространения и модулей
Конфигурация пакета
Файл package.json определяет множественные точки входа и паттерны экспорта: Основные точки входа:- Основной экспорт (
.): Все компоненты, варианты и утилиты тем - Экспорт реестра (
./registry.json): Метаданные компонентов для инструментов - Экспорт классов (
./core-classes.json): Whitelist CSS-классов для конфигурации Tailwind
Методы интеграции
| Метод | Установка | Обновления | Бандл | Случай использования |
|---|---|---|---|---|
| Полная установка NPM | npm install @ui8kit/core | npm update | Полная библиотека | Требуется полная библиотека |
| Покомпонентно | npx buildy-ui add button card | Ручное повторное добавление | Минимальный | Оптимизация бандла |
| Git submodule | git submodule add | git submodule update | Полный исходник | Архитектура монорепо |
| Прямой исходник | Ручное копирование файлов | Ручная синхронизация | Пользовательский | Пользовательские модификации |
Структура реестра компонентов
Файл src/registry.json предоставляет метаданные для автоматизации инструментов: Схема реестра:- Покомпонентную установку через CLI
buildy-ui - Автоматическое разрешение зависимостей
- Программное обнаружение компонентов
- Интеграцию инструментов сборки
Сквозные задачи
Конфигурация TypeScript
Настройка TypeScript балансирует строгую типобезопасность с эргономикой разработчика: Ключевые настройки из tsconfig.json:| Настройка | Значение | Назначение |
|---|---|---|
target | ES2022 | Современные возможности JavaScript |
module | ESNext | Поддержка ES-модулей |
jsx | react-jsx | Трансформация JSX React 17+ |
strict | true | Максимальная типобезопасность |
skipLibCheck | true | Более быстрая компиляция |
declaration | true | Генерация файлов .d.ts |
declarationMap | true | Source map для типов |
outDir | ./dist | Директория вывода сборки |
Система тем
Система тем обеспечивает поддержку темной темы с автоматическим сохранением: Архитектура ThemeProvider:Возможности доступности
Библиотека реализует доступность через семантический HTML и паттерны ARIA: Стратегии доступности:- Семантические элементы HTML5:
<Block component="section">,<Block component="nav"> - Иерархия заголовков:
<Title order={1}>отрисовывает<h1>, обеспечивая правильную структуру документа - Навигация с клавиатуры: Интерактивные компоненты поддерживают Tab, Enter, Space
- Атрибуты ARIA: Компоненты Accordion и Sheet включают правильные метки ARIA
- Управление фокусом: Видимые состояния фокуса и логический порядок табуляции
- Контраст цветов: Цвета дизайн-системы соответствуют стандартам WCAG AA
Ссылки на подразделы
Этот обзор архитектуры обеспечивает основу для понимания структуры библиотеки. Для подробной информации о конкретных подсистемах см. следующие страницы:- Базовые компоненты - Подробная документация 5 базовых примитивов
- Система вариантов - Полные определения вариантов и паттерны использования
- UI-компоненты - Реализации расширенных компонентов и проброс свойств
- Макеты - Паттерны шаблонов макетов и стратегии композиции
- Структура пакета - Экспорты модулей, точки входа и настройка распространения
- Система сборки - Компиляция TypeScript, скрипты сборки и генерация артефактов
- Реестр компонентов - Система реестра, формат метаданных и интеграция инструментов
- Конфигурация TypeScript - Настройка системы типов, алиасы путей и опции компилятора