# Подключение дизайн-системы ## Главный принцип Новый проект не копирует исходники компонентов из Launcher, CMS или этого репозитория. Он устанавливает версию пакетов NODE.DC, импортирует общий CSS и собирает интерфейс из публичных exports. Обновление пакета должно исправлять геометрию во всех подключённых приложениях без повторной ручной вёрстки. `control-c / control-v` допустим только для короткой композиции приложения: какие routes и данные переданы готовым компонентам. CSS, DOM-анатомия header, оконные переходы, media control и accessibility не копируются. ## React consumer Минимальный состав нового оконного приложения: 1. `@nodedc/tokens`, `@nodedc/ui-core` и `@nodedc/ui-react` фиксируются одной версией. 2. Один раз подключаются `tokens.css`, `themes.css` и `@nodedc/ui-core/styles.css`. 3. Theme/accent задаются через `applyNodedcTheme`. 4. Приложение собирает `ApplicationShell` из `AppHeader`, `AdminNavigationPanel` и `ApplicationPanel`. 5. Все состояния shell берутся из `useApplicationWorkspace`. 6. Routes, profile, stage content и бизнес-данные передаются props. Нельзя добавлять local CSS к `AppHeader`, `HeaderNavigation`, `HeaderWorkspace`, `HeaderProfile` и `HeaderAvatar`. Если production Launcher изменяет канон, исправляется preset здесь и выпускается новая версия. ## DOM consumer CMS/BIM подключают те же tokens/core styles и `@nodedc/ui-dom`. `createApplicationWorkspaceController`, `createMediaSourceController`, `createShareLinkController`, `createFloatingLayer` и `createModalController` связывают стабильную DOM-анатомию с тем же поведением, не вводя React в приложение. ## Adapter boundary Общие компоненты не импортируют API конкретного проекта. | Библиотека владеет | Приложение владеет | | --- | --- | | размеры, радиусы, поверхности | маршруты и тексты | | header/window/media DOM anatomy | API, auth и permissions | | open/close/expand state machine | получение и сохранение данных | | file/URL selector и preview | file picker/media library/storage upload | | focus, Escape, portal, responsive flow | доменная валидация и ошибки backend | Например, `MediaSourceField` получает `onFileChange`. Consumer загружает файл, получает URL и возвращает его в контролируемое состояние. Компонент не знает S3, локальный диск, CMS media library или endpoint Launcher. ## Definition of done для нового общего компонента - экспортируется из React или DOM package; - использует tokens/core styles без screen-local geometry; - показан в живом каталоге в ключевых состояниях; - записан в `registry/components.json`; - имеет документированную adapter boundary; - проходит desktop/mobile visual QA; - версия пакета зафиксирована consumer-ом.