Архитектура
Назначение и область применения
Этот документ описывает архитектурное проектирование@ui8kit/core, включая трехуровневую иерархию компонентов, систему вариантов, конвейер сборки и организацию модулей. Он объясняет структурные взаимосвязи между примитивами, композитными компонентами и макетами, а также лежащие в основе механизмы стилизации, типобезопасности и распространения.
Для подробной документации API отдельных компонентов и их свойств см. Справочник API. Для инструкций по установке и настройке см. Начало работы. Для рабочих процессов разработки и примеров использования см. Руководство разработчика.
Обзор трехуровневой архитектуры
Библиотека реализует трехуровневую архитектуру, соответствующую принципам атомарного дизайна: атомы (базовые примитивы), молекулы (UI-компоненты) и организмы (шаблоны макетов). Каждый уровень строится на предыдущем через композицию и проброс свойств.Иерархия и зависимости уровней
Уровень 1: Базовые примитивы
Пять фундаментальных строительных блоков, расположенных в src/core/ui/ обеспечивают прямой доступ к системе вариантов CVA. Эти примитивы отрисовываются как семантические HTML-элементы и служат основой для всех компонентов более высокого уровня.
Детали реализации:
- Все примитивы поддерживают
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/ расширяют базовые примитивы через проброс свойств. Эти компоненты добавляют семантическую структуру, составные паттерны и специализированное поведение, наследуя при этом полную систему вариантов.
Паттерн проброса свойств:
Уровень 3: Макеты
Три шаблона макетов в src/layouts/ организуют UI-компоненты в структуры приложений. Эти шаблоны обрабатывают сложные паттерны композиции, такие как изменяемые панели, системы сеток и адаптивные точки останова.
Паттерн хуков контента:
Компонент
LayoutBlock демонстрирует паттерн хуков контента для динамической отрисовки:
Архитектурные принципы
Соответствие атомарному дизайну
Трехуровневая структура напрямую соответствует методологии атомарного дизайна:
Это соответствие обеспечивает организацию компонентов по сложности и возможности повторного использования, делая кодовую базу предсказуемой и поддерживаемой.
Источники: README.md62-79 .devin/wiki.json4
Философия минимализма
Библиотека достигает своей минималистичной цели через три ключевых ограничения:- 15 композитных компонентов обеспечивают 95% покрытие потребностей UI: README.md370-386
- 12 многократно используемых вариантов устраняют 80% пользовательских классов: README.md170-217
- 5 базовых примитивов служат универсальными строительными блоками: README.md81-103
Паттерн проброса свойств
Все компоненты уровня 2 наследуют свойства вариантов от своих базовых примитивов через явный проброс свойств:- Типобезопасность: TypeScript валидирует все проброшенные свойства
- Наследование вариантов: Компоненты автоматически получают новые варианты, добавленные в примитивы
- Гибкость композиции: Несколько источников вариантов объединяются без конфликтов
Семантический HTML и data-атрибуты
Каждый компонент отрисовывает семантические элементы HTML5 и включает атрибутыdata-class для идентификации:
Пример из компонента Card:
Взаимосвязи компонентов и структура файлов
Организация директорий
Поток импорта и экспорта компонентов
Паттерны композиции
Библиотека поддерживает пять различных паттернов композиции для разных архитектурных потребностей:- Прямой примитив: Используйте
BoxилиBlockсо свойствомcomponentдля семантического HTML - Составные компоненты: Используйте структурированные компоненты как
Card.Header, обеспечивает гибкую композицию - Проброс свойств: Композитные компоненты объединяют свои собственные варианты с унаследованными базовыми вариантами
- Композиция макета: Шаблоны организуют несколько компонентов в структуры приложений
- Хуки контента: Макеты принимают функции рендеринга для динамической инъекции контента
Архитектура системы вариантов
Интеграция CVA
Система вариантов работает наclass-variance-authority, предоставляя типобезопасные, композируемые утилиты стилизации. Все варианты определены в src/core/variants/ и применяются через базовые примитивы.
12 категорий вариантов:
Источники: README.md170-217 src/core/variants/
Конвейер применения вариантов
- Ввод свойств: Разработчик предоставляет свойства вариантов (например,
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 времени выполнения
Система поддерживает строгое разделение между инструментами времени сборки и кодом времени выполнения для оптимизации размера бандла и опыта разработчика.Системы времени сборки
Источники: scripts/cva-extractor.ts1-260 package.json19-25
Системы времени выполнения
Источники: package.json42-56 src/themes/providers/ThemeProvider.tsx1-109
Система распространения и модулей
Конфигурация пакета
Файл package.json определяет множественные точки входа и паттерны экспорта: Основные точки входа:- Основной экспорт (
.): Все компоненты, варианты и утилиты тем - Экспорт реестра (
./registry.json): Метаданные компонентов для инструментов - Экспорт классов (
./core-classes.json): Whitelist CSS-классов для конфигурации Tailwind
Методы интеграции
Источники: README.md252-277 src/registry.json2-244
Структура реестра компонентов
Файл src/registry.json предоставляет метаданные для автоматизации инструментов: Схема реестра:- Покомпонентную установку через CLI
buildy-ui - Автоматическое разрешение зависимостей
- Программное обнаружение компонентов
- Интеграцию инструментов сборки
Сквозные задачи
Конфигурация TypeScript
Настройка TypeScript балансирует строгую типобезопасность с эргономикой разработчика: Ключевые настройки из tsconfig.json:
Алиасы путей:
Система тем
Система тем обеспечивает поддержку темной темы с автоматическим сохранением: Архитектура 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 - Настройка системы типов, алиасы путей и опции компилятора