# Control Class Hierarchy

## Confirmed definition

In UnifiedControl, a Control is always a Host-facing UI component. UI-less behavior must not be modeled as a Control. Use Service, Adapter, Registry, Command, Model, Validator, Serializer, or Migrator for non-visual responsibilities.

## Current hierarchy

```text
Control
  ├─ ContentControl
  ├─ DesignerControl
  │    └─ UnifiedControlDesignerControl
  ├─ DocumentControl   // application package side, extends Control directly
  ├─ SheetControl      // application package side, extends Control directly
  └─ SlideControl      // application package side, extends Control directly
```

## Control

`Control` is the official base class for all UI Controls. It owns:

- container / root element management
- mount / destroy lifecycle
- CommandRegistry
- StateStore
- EventBus
- SelectionStore
- i18n and theme service connection
- `exec`, `on`, `off`, `emit`, `getState`, `setState`
- `dialog()` through DialogService

`BaseControl` was intentionally removed during development. No compatibility alias is provided.

## ContentControl

`ContentControl` is the designable composite Control, similar to a UserControl concept. It has a `content` attribute and supports load/save of UnifiedControl `ControlContent`.

Typical descendants:

- FormControl
- PageControl
- DashboardControl

UnifiedForm may adapt `ControlContent` to FormSchema through a FormSchemaAdapter. UnifiedControl itself does not own FormSchema, Validation, Binding, or Submit semantics.

## DesignerControl

`DesignerControl` is a thin designer-specific Control. It may own WorkbenchView, PaletteView, OutlineView, InspectorView, and ControlDesignerCanvasView, but Workbench is not part of the Control inheritance hierarchy.

## Dialog

Dialog is not a Control subclass. Dialog UI is opened from an existing Control:

```javascript
control.dialog({ title: 'Settings', content: '<div>...</div>' });
```

Internally this delegates to DialogService and jQuery UI Dialog when available.
