Saltar a contenido

ADR 013: Schema SDUI

Estado

Aceptado — 2026-06

Contexto

Cortex emitía widgets CUS sueltos desde builders dispersos (emit.py). Se requiere un árbol unificado para forms, tables, layouts y actions bajo un mismo modelo de composición.

Decisión

  1. SchemaNode en core/cortex_core/spi.py como árbol discriminado (field, column, layout, widget, action).
  2. framework/cortex_framework/schema/SchemaBuilder, emisión JSON, validación.
  3. Widget CUS schema renderizado por SchemaRenderer en @cortex/panel-shadcn.
  4. Builders de alto nivel (ResourceBuilder, FormBuilder, …) siguen generando widgets tipados; Schema es fundamento para layouts y composición.

Leyenda: Árbol SchemaNode unificado para composición SDUI. Actores: core SPI, SchemaBuilder, SchemaRenderer. Estado: Implementado.

flowchart TB
  subgraph core [core SPI]
    Root[SchemaNode root]
    Field[field nodes]
    Col[column nodes]
    Lay[layout nodes]
    Act[action nodes]
    Wid[widget nodes]
  end
  Root --> Field
  Root --> Col
  Root --> Lay
  Lay --> Wid
  Root --> Act

Leyenda: Emisión schema JSON y render en panel. Actores: plugin, API panels, SchemaRenderer. Estado: Implementado.

sequenceDiagram
  participant Plug as Plugin register_resources
  participant Emit as schema emit
  participant API as GET panels manifest
  participant UI as SchemaRenderer
  Plug->>Emit: SchemaBuilder tree
  Emit->>API: dashboard JSON widget schema
  API-->>UI: manifest pantalla
  UI->>UI: render nodos field layout action

Conceptos Schema

Concepto Cortex
Componentes de schema SchemaBuilder.components()
Form fields FormBuilder → widget form
Table columns TableBuilder → widget data-table
Layouts (Grid, Section, Tabs, Wizard) LayoutBuilder + widget wizard
Widgets WidgetDefinition + hook register_widgets

Consecuencias

  • Nuevos layouts y widgets custom deben preferir nodos Schema.
  • api-table / json-form permanecen alias legacy un release más.