Design

Ecosistema completo para organización y gestión de contenido con interfaces espaciales

Diseño: @libs-core/ui-framework

Arquitectura de componentes UI MÍNIMOS y SIMPLES siguiendo patrones Angular 20 standalone para soporte de módulos de testing.

Objetivos de diseño

Dependencias y límites del módulo

Dependencias internas (MÍNIMAS)

Dependencias externas

Límites del módulo

Arquitectura y componentes

@libs-core/ui-framework
├── components/
│   ├── table/          # GgsTableComponent
│   ├── form/           # GgsInputComponent, GgsButtonComponent, GgsSelectComponent
│   ├── card/           # GgsCardComponent
│   └── chart/          # GgsSimpleChartComponent
├── types/              # Interfaces y tipos
└── styles/             # SCSS base

División de responsabilidades

GgsTableComponent

Form Components

GgsCardComponent

GgsSimpleChartComponent

Contratos y modelos

Interfaces principales

// Interfaces MÍNIMAS y SIMPLES

// Table básica
interface TableColumn {
  key: string;
  label: string;
}

interface TableConfig {
  columns: TableColumn[];
  pageSize: number; // Fijo, sin opcional
}

// Chart básico
interface ChartData {
  label: string;
  value: number;
}

interface ChartConfig {
  data: ChartData[];
  width: number;  // Fijo
  height: number; // Fijo
}

Eventos principales

// Eventos Angular BÁSICOS únicamente

// Eventos de tabla
- `(rowClick)`: Emite data del row clickeado
- `(sortClick)`: Emite string con la columna
- `(pageClick)`: Emite 'next' | 'prev'

// Eventos de formulario
- `(click)`: Click básico de botón
- `(valueChange)`: Valor básico del input/select

Decisiones de diseño

DEC-001: Standalone Components

Decisión: Usar exclusively componentes standalone Alternativa: NgModules tradicionales Justificación: Angular 20 best practices, mejor tree-shaking, menor acoplamiento Impacto: Requiere imports explícitos en cada uso

DEC-002: OnPush Strategy

Decisión: OnPush change detection obligatorio Alternativa: Default change detection Justificación: Performance crítica para tablas grandes (R-007, R-008) Impacto: Requiere immutable data patterns

DEC-003: Canvas para Charts

Decisión: Canvas API nativo para gráficos Alternativa: SVG, librerías como Chart.js Justificación: Sin dependencias externas (R-012), performance Impacto: Implementación manual de gráficos básicos

DEC-004: SCSS Styling

Decisión: SCSS con variables CSS para theming básico Alternativa: CSS-in-JS, styled-components Justificación: Compatibilidad Angular, simplicidad Impacto: Styling mínimo pero extensible

DEC-005: Mínima dependencia de Core Libraries

Decisión: Uso mínimo de @gograb-space/utilities y log-system Alternativa: Máxima reutilización de ecosystem Justificación: Simplicidad, componentes autocontenidos, facilidad de entendimiento Impacto: Código más simple pero posible duplicación mínima

Riesgos y mitigaciones

Estrategia de pruebas y observabilidad

Pruebas

Observabilidad

Mapeo de cobertura

Requerimiento Componente Responsabilidad Core Libraries Used
US-001, R-001, R-002 GgsTableComponent Tabla básica con sorting simple ArrayUtils básico únicamente
US-002, R-003, R-004 Form Components Inputs, botones, selects básicos Ninguna - HTML básico
US-003, R-005 GgsCardComponent Contenedor div simple Ninguna
US-004, R-006 GgsSimpleChartComponent Barras Canvas básicas Ninguna
R-007, R-008 Todos Código simple y directo Mínimo
R-009, R-010 Todos Standalone básico + TypeScript básico Ninguna
R-011 Todos Testing coverage ≥80% -
R-013 Todos Error logging básico log-system mínimo
R-014 Todos Uso mínimo DRY Solo lo esencial