ADR 012: Cortex UI Kit¶
Estado¶
Aceptado — 2026-06
Contexto¶
Los plugins declaraban UI como JSON CUS manual (ui/dashboards/*.json) con widgets genéricos (api-table, json-form). Faltaba una API fluida en Python y contratos tipados para forms, tables, actions, resources y calendar.
Decisión¶
- Builders Python en
framework/cortex_framework/ui/generan CUS JSON al registrar. - Hook
register_resources(registry)orquesta manifest + dashboards + forms. - Widgets CUS tipados:
data-table,form,infolist,stat-card,stats-overview,chart,calendar,actions-bar,section. - Frontend
@cortex/panel-shadcnimplementa widgets;api-table/json-formquedan como alias legacy.
Conceptos del UI Kit¶
| Concepto | Implementación Cortex |
|---|---|
| Panel / host | PanelBuilder + hosts (cortex.panels) |
| Extensión del panel | register_panel_plugins + PanelPluginRegistry |
| Render hooks | register_render_hooks + slots en PanelShell |
| Schema (fields, layouts, actions) | SchemaNode + SchemaBuilder + widget schema |
| Resource | ResourceBuilder + register_resources |
| Form fields | FormBuilder / FieldBuilder |
| Table columns / filters / bulk | TableBuilder / FilterBuilder / BulkActionBuilder |
| Actions (modales) | ActionBuilder → opensModal + ActionModal |
| Infolist | InfolistBuilder → widget infolist |
| Layouts (tabs, wizard, section) | LayoutBuilder + nodos wizard / section |
| Widgets (stats, charts) | StatCardBuilder, StatsOverviewBuilder, emit_chart_widget + register_widgets |
| Settings pages | SettingsBuilder + register_settings + API tenant |
| Reports | ReportBuilder + register_reports |
| Relation managers | RelationBuilder + widget relation |
| Global search | SearchRegistry + GET /panels/{id}/search |
| Calendar | CalendarBuilder + @fullcalendar/react |
Guía de uso: Plugins — Recursos.
Ver también ADR 013, ADR 014, ADR 015.
Consecuencias¶
- Plugins migran de JSON manual a
register_resourcesdonde aplique. - Validación en
panel/validate.pyexigeconfigmínimo por tipo de widget.