Skip to main content

Архитектура

Назначение и область применения

Этот документ описывает архитектурное проектирование @ui8kit/core, включая трехуровневую иерархию компонентов, систему вариантов, конвейер сборки и организацию модулей. Он объясняет структурные взаимосвязи между примитивами, композитными компонентами и макетами, а также лежащие в основе механизмы стилизации, типобезопасности и распространения. Для подробной документации API отдельных компонентов и их свойств см. Справочник API. Для инструкций по установке и настройке см. Начало работы. Для рабочих процессов разработки и примеров использования см. Руководство разработчика.

Обзор трехуровневой архитектуры

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

Иерархия и зависимости уровней

Источники: README.md62-89 README.md105-168 src/components/README.md9-19

Уровень 1: Базовые примитивы

Пять фундаментальных строительных блоков, расположенных в src/core/ui/ обеспечивают прямой доступ к системе вариантов CVA. Эти примитивы отрисовываются как семантические HTML-элементы и служат основой для всех компонентов более высокого уровня. Детали реализации: Источники: README.md81-103 src/core/ui/ src/components/README.md23-92

Уровень 2: UI-компоненты

Пятнадцать композитных компонентов в src/components/ui/ расширяют базовые примитивы через проброс свойств. Эти компоненты добавляют семантическую структуру, составные паттерны и специализированное поведение, наследуя при этом полную систему вариантов. Паттерн проброса свойств:
Источники: README.md105-145 src/components/ui/ src/components/README.md94-177

Уровень 3: Макеты

Три шаблона макетов в src/layouts/ организуют UI-компоненты в структуры приложений. Эти шаблоны обрабатывают сложные паттерны композиции, такие как изменяемые панели, системы сеток и адаптивные точки останова. Паттерн хуков контента: Компонент LayoutBlock демонстрирует паттерн хуков контента для динамической отрисовки:
Источники: README.md147-168 src/layouts/DashLayout.tsx src/layouts/LayoutBlock.tsx src/layouts/SplitBlock.tsx

Архитектурные принципы

Соответствие атомарному дизайну

Трехуровневая структура напрямую соответствует методологии атомарного дизайна: Это соответствие обеспечивает организацию компонентов по сложности и возможности повторного использования, делая кодовую базу предсказуемой и поддерживаемой. Источники: README.md62-79 .devin/wiki.json4

Философия минимализма

Библиотека достигает своей минималистичной цели через три ключевых ограничения:
  1. 15 композитных компонентов обеспечивают 95% покрытие потребностей UI: README.md370-386
  2. 12 многократно используемых вариантов устраняют 80% пользовательских классов: README.md170-217
  3. 5 базовых примитивов служат универсальными строительными блоками: README.md81-103
Этот дизайн, основанный на ограничениях, уменьшает размер бандла, время разработки, когнитивную нагрузку и сложность CSS. Источники: README.md388-403 .devin/wiki.json8-9

Паттерн проброса свойств

Все компоненты уровня 2 наследуют свойства вариантов от своих базовых примитивов через явный проброс свойств:
Этот паттерн обеспечивает:
  • Типобезопасность: TypeScript валидирует все проброшенные свойства
  • Наследование вариантов: Компоненты автоматически получают новые варианты, добавленные в примитивы
  • Гибкость композиции: Несколько источников вариантов объединяются без конфликтов
Источники: src/components/README.md9-19 .devin/wiki.json12-13

Семантический HTML и data-атрибуты

Каждый компонент отрисовывает семантические элементы HTML5 и включает атрибуты data-class для идентификации: Пример из компонента Card:
Источники: README.md14 src/components/README.md223-235

Взаимосвязи компонентов и структура файлов

Организация директорий

Источники: README.md1-453 package.json1-50

Поток импорта и экспорта компонентов

Точки входа: Основная точка входа src/index.ts реэкспортирует все публичные API:
Источники: src/index.ts package.json30-36

Паттерны композиции

Библиотека поддерживает пять различных паттернов композиции для разных архитектурных потребностей:
Детали паттернов:
  1. Прямой примитив: Используйте Box или Block со свойством component для семантического HTML
  2. Составные компоненты: Используйте структурированные компоненты как Card.Header, обеспечивает гибкую композицию
  3. Проброс свойств: Композитные компоненты объединяют свои собственные варианты с унаследованными базовыми вариантами
  4. Композиция макета: Шаблоны организуют несколько компонентов в структуры приложений
  5. Хуки контента: Макеты принимают функции рендеринга для динамической инъекции контента
Источники: src/components/GUIDE_CREATE_FORM.md10-13 src/layouts/LayoutBlock.tsx15-22 src/layouts/DashLayout.tsx72-99

Архитектура системы вариантов

Интеграция CVA

Система вариантов работает на class-variance-authority, предоставляя типобезопасные, композируемые утилиты стилизации. Все варианты определены в src/core/variants/ и применяются через базовые примитивы. 12 категорий вариантов: Источники: README.md170-217 src/core/variants/

Конвейер применения вариантов

Этапы конвейера:
  1. Ввод свойств: Разработчик предоставляет свойства вариантов (например, p='lg')
  2. Разрешение вариантов: Движок CVA разрешает свойства в классы Tailwind, используя определения вариантов
  3. Генерация классов: Производит строку className (например, 'p-8 rounded-xl shadow-md')
  4. Валидация whitelist: Сгенерированные классы валидируются против src/lib/core-classes.json (618 классов)
  5. Обработка Tailwind: Tailwind CSS применяет утилитарные классы, используя whitelist как safelist для предотвращения удаления
  6. Вывод в DOM: Финальный className применяется к отрисованному элементу
Источники: README.md98-124 src/lib/core-classes.json1-619 scripts/cva-extractor.ts223-260

Генерация 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, и т.д.
Источники: scripts/cva-extractor.ts1-260 src/lib/core-classes.json617-619

Архитектура времени сборки 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
Источники: package.json30-42

Методы интеграции

Сравнение интеграции: Источники: README.md252-277 src/registry.json2-244

Структура реестра компонентов

Файл src/registry.json предоставляет метаданные для автоматизации инструментов: Схема реестра:
Пример записи:
Эти метаданные обеспечивают:
  • Покомпонентную установку через CLI buildy-ui
  • Автоматическое разрешение зависимостей
  • Программное обнаружение компонентов
  • Интеграцию инструментов сборки
Источники: src/registry.json1-244 README.md251-276

Сквозные задачи

Конфигурация TypeScript

Настройка TypeScript балансирует строгую типобезопасность с эргономикой разработчика: Ключевые настройки из tsconfig.json: Алиасы путей:
Для подробной конфигурации TypeScript см. Конфигурация TypeScript. Источники: tsconfig.json1-30 package.json19-25

Система тем

Система тем обеспечивает поддержку темной темы с автоматическим сохранением: Архитектура ThemeProvider:
Паттерн использования:
Для подробной реализации темы см. Темная тема. Источники: src/themes/providers/ThemeProvider.tsx1-109 README.md219-249

Возможности доступности

Библиотека реализует доступность через семантический HTML и паттерны ARIA: Стратегии доступности:
  1. Семантические элементы HTML5: <Block component="section">, <Block component="nav">
  2. Иерархия заголовков: <Title order={1}> отрисовывает <h1>, обеспечивая правильную структуру документа
  3. Навигация с клавиатуры: Интерактивные компоненты поддерживают Tab, Enter, Space
  4. Атрибуты ARIA: Компоненты Accordion и Sheet включают правильные метки ARIA
  5. Управление фокусом: Видимые состояния фокуса и логический порядок табуляции
  6. Контраст цветов: Цвета дизайн-системы соответствуют стандартам WCAG AA
Источники: README.md14 src/components/ui/

Ссылки на подразделы

Этот обзор архитектуры обеспечивает основу для понимания структуры библиотеки. Для подробной информации о конкретных подсистемах см. следующие страницы: Для документации API конкретных компонентов и их свойств см. Справочник API. Для рабочих процессов разработки и примеров использования см. Руководство разработчика. Источники: .devin/wiki.json45-133 README.md1-453