---
id: 0007
title: Type Editor panel — CRUD de tipos desde la app
status: completed
priority: medium
created: 2026-04-30
completed: 2026-05-01
depends_on: [0005, 0006]
---

## Objetivo

Panel "Types" dockeable que permita editar el `types.yaml` del proyecto
activo desde dentro de la app. Cosmetica (color/shape/icon) y schema de
campos (lista de fields con tipo). Save reescribe el yaml y dispara
`apply_types_yaml` + reload del grafo.

## UI

- Tabs: "Entities" / "Relations".
- Lista a la izquierda con los tipos. Botones `+` (anadir), `-` (borrar), drag para reordenar.
- Panel derecho con la edicion del tipo seleccionado:
  - Entities: name, color (color picker), shape (combo), icon (input + preview), principal_field (combo entre los fields).
  - Relations: name, color, style.
  - Sub-seccion **Fields** (solo entities): tabla con name / type / required / values (para enum). Botones para anadir/quitar/reordenar fila.
- Footer: `Save to types.yaml` (deshabilitado si no hay cambios) + `Reload from disk` (descarta cambios).

## Cambios en codigo

- `views.{h,cpp}`: nueva fn `views_type_editor(AppState&)` + entrada en panels menu.
- `app_state`: anade `ParsedTypes types_draft;` y `bool types_dirty;`.
- Usa `types_save_yaml` de 0005 para persistir.
- Tras Save: `apply_types_yaml(graph, types_draft)` + rebuild del IconAtlas.

## Notas

- Borrar un tipo NO toca las entidades existentes con ese `type_ref` — se quedan con un tipo "huerfano" hasta que el usuario las cambie. Mostrar warning antes del delete con conteo de entidades afectadas.
- Cambiar `principal_field` de un tipo regenera los labels visibles.

## Definicion de hecho

- Crear, editar y borrar entity/relation types desde la UI.
- Editar fields (anadir, cambiar type, marcar required, definir enum values).
- Save persiste a `projects/<activo>/types.yaml` y aplica al grafo en vivo.
- Reload from disk descarta cambios.
