Contienen primitivos estructurales/headless y helpers locales.
### Controles
`controls/` contiene composables de controles de paneles de propiedades y del editor:
-`usePosition`
-`useLayout`
-`useAppearance`
-`useTypography`
-`useExport`
-`useFillControls`
-`useStrokeControls`
-`useEffectsControls`
-`useNodeProps`
-`usePropScrub`
### Variables
`VariablesEditor/` contiene composables del dominio de variables y el cableado de estado.
### Selección
`selection/` contiene el estado del editor derivado de la selección y sus capacidades.
### Contexto
`context/` contiene helpers de inyección del editor:
-`EDITOR_KEY`
-`provideEditor`
-`useEditor`
### Interno
`internal/` contiene utilidades transversales que no están pensadas como primitivos headless principales.
## Filosofía de la API pública
### Preferir composables
Si el problema es principalmente lógica de control, derivación de estado o acciones del editor, expón un composable.
### Reservar los primitivos headless para estructura significativa
Usa raíces de componentes cuando coordinan estructura, hijos, slots o contexto.
Ejemplos:
-`PageListRoot`
-`PropertyListRoot`
-`ToolbarRoot`
### Evitar slots que vuelquen contexto de forma masiva
Prefiere props de slot enfocados o uso directo de composables en lugar de grandes payloads `v-slot="ctx"`.
## Responsabilidad de la app vs el SDK
### El SDK es responsable de
- integración con el editor
- lógica headless reutilizable
- estructura de UI reutilizable sin suposiciones de estilo
- integración del renderizado del canvas
### La app es responsable de
- estilos
- shells de layout
- enrutamiento
- flujos de archivos del producto
- toasts, menús y UX específica de la app
## Regla práctica
Si una pieza de lógica podría reutilizarse en una app diferente basada en OpenPencil sin llevar consigo los estilos de la app, probablemente pertenece a `@open-pencil/vue`.