4.7 KiB
4.7 KiB
Contributing UI
Reglas base
- todos los componentes públicos propios deben usar prefijo
Rdx; - el código y los identificadores deben estar en inglés;
- la documentación y los comentarios deben estar en español;
- usar TypeScript estricto;
- usar imports de tipos explícitos en cabecera;
- no usar tipos inline tipo
import("react").ReactNode.
Responsabilidad de packages/rdx-ui
Los componentes de rdx-ui:
- no conocen React Query;
- no conocen routing;
- no conocen DTOs;
- no conocen entities;
- no conocen controllers funcionales;
- no contienen lógica de negocio.
Deben recibir props ya preparadas por la capa consumidora.
Tema y color
- todo debe funcionar en
lightydarkdesde el inicio; - usar tokens semánticos;
- no introducir colores físicos sin justificación fuerte y documentada;
- no usar el color como único indicador de estado.
Accesibilidad
- foco visible obligatorio;
- botones de icono con nombre accesible;
- no crear
divclicables; - mantener orden DOM coherente;
- usar controles reales proporcionados por el consumidor;
- evitar wrappers vacíos que compliquen la semántica.
API pública
- mantener una API pequeña y explícita;
- no crear abstracciones genéricas sin repetición real;
classNamees un escape controlado, no la API principal;- no usar
transition-allen nuevos componentes salvo caso excepcional documentado.
Composición de paneles
- no duplicar sombras entre una primitive y su composición;
- no duplicar el control de cierre entre capas;
- las acciones de contexto deben llegar ya construidas desde el consumidor;
- los labels accesibles de acciones de dominio pertenecen al consumidor;
- una primitive reutilizable puede resolver superficie e infraestructura, mientras la composición resuelve jerarquía visual y accesibilidad contextual.
Acciones de fila
RdxRowActionssolo renderiza acciones primarias y overflow;- el consumidor decide qué acciones existen y en qué orden aparecen;
- las acciones destructivas deben ir en overflow salvo excepción justificada por código real;
disabledReasonpertenece al consumidor y debe ser comprensible sin conocimiento de dominio enrdx-ui;- no mover permisos, navegación, dialogs ni entidades dentro de
packages/rdx-ui; - los icon buttons deben mantener
aria-labely tooltip accesible.
Editor simple
- por defecto, las pantallas cuya finalidad principal sea crear, editar o configurar mediante formulario deben usar shell
app-fullscreeny no el shell con sidebar; - usar
PageFormHeadero el header de dominio ya existente para la navegación mínima de salida, sin duplicar una segunda navegación lateral; RdxEditorSectionconvariant="plain"es el patrón por defecto del editor simple;- usar una única superficie editable cuando sea útil separar claramente la página del área de formulario;
- no envolver cada sección en
Cardpor defecto; - no duplicar padding entre shell, layout y superficie editable;
RdxFormGriddebe concentrar la retícula del editor sin acoplarse a RHF;- las diferencias entre create y update no justifican nuevos componentes si solo cambian defaults o wiring.
Editor complejo
RdxEditorPageLayoutdebe reservar elasidepara resumen, metadata o contexto de apoyo;- no mover campos editables al
asidesolo para equilibrar visualmente columnas; - en desktop el layout objetivo del editor complejo es
minmax(0, 1fr) ~22rem; - el
asidedebe apilarse debajo delmaincuando no haya ancho suficiente; - si no existe
aside, no debe reservarse hueco lateral; - mantener una única superficie principal para el formulario, también en editores complejos;
RdxEditorSectionpuede usarvariant="panel"dentro delasidecuando el bloque necesite superficie independiente;RdxFormGriddebe quedarse en grupos de campos y no envolver tablas, line editors ni layouts funcionales especializados;- no mover los totales al
asidepor defecto; - si el editor usa footer sticky inferior, no duplicar
GuardaryCancelarcompletos en el header; RdxEditorStickyFooterno conoce RHF, submit, routing ni dominio; solo compone superficie, orden, separación y responsive;- la región
leadingdel footer puede alojar resumen o contexto, pero ese contenido sigue perteneciendo al dominio consumidor; - coordinar cualquier
stickylateral con el offset del header para evitar clipping y foco oculto.
Sincronización obligatoria
Todo cambio futuro que afecte a la API pública o al comportamiento visual debe actualizar en el mismo cambio:
1. implementación
2. documentación Markdown
3. página interactiva UI Kit
4. tests aplicables
Un cambio queda incompleto si cualquiera de esas cuatro piezas queda desincronizada.