Diálogo de presentación para solicitar una razón/motivo de confirmación o rechazo; opcionalmente puede solicitar una fecha. No ejecuta la operación confirmada ni llama APIs: emite el resultado y deja al componente padre decidir la acción.
libs/shared/ui/src/lib/modals/components/confirm-reason-modal/confirm-reason-modal.component.ts. Es standalone y utiliza TextareaComponent, ButtonComponent, FieldLabelComponent y DatepickerComponent de nebula-ui-kit.
data: ConfirmReasonData configura título, descripción, etiquetas de botones, obligatoriedad, longitud mínima/máxima, fecha máxima, placeholder/label, modo fecha (isDate) y tipo visual (default o reject). Defaults del componente: título Confirmar, mínimo 2 y máximo 300 caracteres.
confirm: EventEmitter<ConfirmReasonResult> emite { confirmed: true, reason, date? } tras validar.cancelClick: EventEmitter<void> informa cancelación.reason es un model signal; loading, touched y date manejan estado local de la UI.La validación ocurre en el componente: limpia espacios externos y comprueba el mínimo/máximo; en modo fecha verifica que exista fecha. La operación remota y el manejo de error pertenecen al padre.
<app-confirm-reason-modal
[data]="reasonDialogConfig"
(confirm)="confirmarOperacion($event)"
(cancelClick)="cerrarDialogo()"
/>
Los nombres y estructura deben mantenerse alineados con las interfaces del componente; si se abre mediante un DialogService, el adaptador padre debe enlazar la entrada/salidas o usar el contrato estándar de diálogo de la aplicación.
La plantilla contiene mensajes en español directamente. Para alinearse con i18n, reemplazar títulos, mensajes de validación y botones por claves traducibles y agregar TranslatePipe o traducir mediante el servicio común. No agregar HTTP aquí. Como confirmación genérica puede permanecer en shared/ui tras normalizar su contrato y accesibilidad.