--- title: Архитектура SDK description: Структура папок, границы публичного API и паттерны компоновки в @open-pencil/vue. --- # Архитектура SDK `@open-pencil/vue` — Vue-слой поверх `@open-pencil/core`. Пакет не владеет самой моделью редактора. Он адаптирует движок к Vue через: - Vue-инъекцию - реактивные компосаблы - headless-структурные примитивы - подключение холста и обработку ввода ## Структура папок Пакет организован по доменам. ### Семейства компонентов - `Canvas/` - `ColorPicker/` - `FillPicker/` - `FontPicker/` - `GradientEditor/` - `LayerTree/` - `PageList/` - `PropertyList/` - `ScrubInput/` - `Toolbar/` Содержат структурные/headless-примитивы и локальные вспомогательные функции. ### Controls `controls/` содержит компосаблы для панелей свойств и элементов управления редактора: - `usePosition` - `useLayout` - `useAppearance` - `useTypography` - `useExport` - `useFillControls` - `useStrokeControls` - `useEffectsControls` - `useNodeProps` - `usePropScrub` ### Variables `VariablesEditor/` содержит компосаблы и подключение состояния для домена переменных. ### Selection `selection/` содержит производное состояние редактора и возможности, основанные на выделении. ### Context `context/` содержит хелперы для инъекции редактора: - `EDITOR_KEY` - `provideEditor` - `useEditor` ### Internal `internal/` содержит сквозные утилиты, не предназначенные как основные headless-примитивы. ## Философия публичного API ### Предпочитайте компосаблы Если задача — это преимущественно управляющая логика, вывод состояния или действия редактора, оформите её как компосабл. ### Headless-примитивы — только для значимой структуры Используйте корневые компоненты, когда они координируют структуру, дочерние элементы, слоты или контекст. Примеры: - `PageListRoot` - `PropertyListRoot` - `ToolbarRoot` ### Избегайте широких слотов с дампом контекста Предпочитайте целенаправленные пропы слотов или прямое использование компосаблов — вместо гигантских нагрузок `v-slot="ctx"`. ## Ответственность: приложение vs SDK ### SDK отвечает за - интеграцию с редактором - переиспользуемую headless-логику - переиспользуемую структуру UI без предположений о стилях - интеграцию рендеринга холста ### Приложение отвечает за - стили - оболочки макетов - маршрутизацию - файловые потоки продукта - тосты, меню и UX, специфичный для приложения ## Практическое правило Если кусок логики можно переиспользовать в другом приложении на базе OpenPencil без привнесения стилей — скорее всего, ему место в `@open-pencil/vue`. ## Связанные страницы - [Начало работы с SDK](./getting-started) - [Справочник API](./api/)