@telcomdev/ui 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"telcomdev-ui.mjs","sources":["../../../projects/telcomdev-ui/src/lib/telcomdev-ui.ts","../../../projects/telcomdev-ui/src/lib/alerta/td-alerta.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-iconos.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icono-registry.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icon.ts","../../../projects/telcomdev-ui/src/lib/button/td-button.ts","../../../projects/telcomdev-ui/src/lib/form-control/td-form-control.ts","../../../projects/telcomdev-ui/src/lib/checkbox/td-checkbox.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.html","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.ts","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.html","../../../projects/telcomdev-ui/src/lib/date-picker/td-date-picker.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.model.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-ref.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-panel.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-actions.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-close.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.ts","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.html","../../../projects/telcomdev-ui/src/lib/header/td-header.ts","../../../projects/telcomdev-ui/src/lib/header/td-header.html","../../../projects/telcomdev-ui/src/lib/input/td-input.ts","../../../projects/telcomdev-ui/src/lib/input/td-textarea.ts","../../../projects/telcomdev-ui/src/lib/select/td-autocomplete-select.ts","../../../projects/telcomdev-ui/src/lib/select/td-select.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.html","../../../projects/telcomdev-ui/src/lib/tabs/td-tab.ts","../../../projects/telcomdev-ui/src/lib/tabs/td-tabs.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.model.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.service.ts","../../../projects/telcomdev-ui/src/public-api.ts","../../../projects/telcomdev-ui/src/telcomdev-ui.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'td-telcomdev-ui',\n imports: [],\n template: ` <p>telcomdev-ui works!</p> `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: ``,\n})\nexport class TelcomdevUi {}\n","export type TdAlertaTipo = 'exito' | 'error' | 'advertencia' | 'info' | 'pregunta';\r\n\r\nexport interface TdAlertaOpciones {\r\n titulo?: string;\r\n mensaje?: string;\r\n tipo?: TdAlertaTipo;\r\n textoConfirmar?: string;\r\n textoCancelar?: string;\r\n mostrarCancelar?: boolean;\r\n cerrarConEscape?: boolean;\r\n cerrarConFondo?: boolean;\r\n}\r\n\r\nexport class TdAlerta {\r\n private static readonly estiloId = 'td-alerta-estilos';\r\n\r\n static exito(mensaje: string, titulo = '¡Operación exitosa!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'exito',\r\n textoConfirmar: 'Aceptar',\r\n });\r\n }\r\n\r\n static error(mensaje: string, titulo = '¡Error!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'error',\r\n textoConfirmar: 'Cerrar',\r\n });\r\n }\r\n\r\n static errorSistema(mensaje: string, titulo = '¡Error de Sistema!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'error',\r\n textoConfirmar: 'Cerrar',\r\n });\r\n }\r\n\r\n static advertencia(mensaje: string, titulo = '¡Advertencia!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'advertencia',\r\n textoConfirmar: 'Aceptar',\r\n });\r\n }\r\n\r\n static info(mensaje: string, titulo = 'Información'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'info',\r\n textoConfirmar: 'Aceptar',\r\n });\r\n }\r\n\r\n static confirmar(\r\n mensaje: string,\r\n titulo = '¿Estás seguro?',\r\n textoConfirmar = 'Sí, continuar',\r\n textoCancelar = 'Cancelar'\r\n ): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'pregunta',\r\n textoConfirmar,\r\n textoCancelar,\r\n mostrarCancelar: true,\r\n });\r\n }\r\n\r\n static confirmarEliminar(\r\n mensaje = 'Esta acción no se puede deshacer.',\r\n titulo = '¿Eliminar registro?'\r\n ): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'advertencia',\r\n textoConfirmar: 'Sí, eliminar',\r\n textoCancelar: 'Cancelar',\r\n mostrarCancelar: true,\r\n });\r\n }\r\n\r\n static mostrar(opciones: TdAlertaOpciones): Promise<boolean> {\r\n if (typeof document === 'undefined') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.inyectarEstilos();\r\n\r\n const config: Required<TdAlertaOpciones> = {\r\n titulo: opciones.titulo ?? '',\r\n mensaje: opciones.mensaje ?? '',\r\n tipo: opciones.tipo ?? 'info',\r\n textoConfirmar: opciones.textoConfirmar ?? 'Aceptar',\r\n textoCancelar: opciones.textoCancelar ?? 'Cancelar',\r\n mostrarCancelar: opciones.mostrarCancelar ?? false,\r\n cerrarConEscape: opciones.cerrarConEscape ?? true,\r\n cerrarConFondo: opciones.cerrarConFondo ?? false,\r\n };\r\n\r\n return new Promise<boolean>((resolve) => {\r\n const fondo = document.createElement('div');\r\n fondo.className = 'td-alerta-fondo';\r\n\r\n const modal = document.createElement('div');\r\n modal.className = 'td-alerta-modal';\r\n modal.setAttribute('role', 'dialog');\r\n modal.setAttribute('aria-modal', 'true');\r\n\r\n const icono = document.createElement('div');\r\n icono.className = `td-alerta-icono td-alerta-icono--${config.tipo}`;\r\n icono.textContent = this.obtenerIcono(config.tipo);\r\n\r\n const titulo = document.createElement('h2');\r\n titulo.className = 'td-alerta-titulo';\r\n titulo.textContent = config.titulo;\r\n\r\n const mensaje = document.createElement('p');\r\n mensaje.className = 'td-alerta-mensaje';\r\n mensaje.textContent = config.mensaje;\r\n\r\n const acciones = document.createElement('div');\r\n acciones.className = 'td-alerta-acciones';\r\n\r\n const botonConfirmar = document.createElement('button');\r\n botonConfirmar.type = 'button';\r\n botonConfirmar.className = `td-alerta-boton td-alerta-boton--${config.tipo}`;\r\n botonConfirmar.textContent = config.textoConfirmar;\r\n\r\n const botonCancelar = document.createElement('button');\r\n botonCancelar.type = 'button';\r\n botonCancelar.className = 'td-alerta-boton td-alerta-boton--cancelar';\r\n botonCancelar.textContent = config.textoCancelar;\r\n\r\n const cerrar = (resultado: boolean): void => {\r\n document.removeEventListener('keydown', onKeyDown);\r\n fondo.classList.add('td-alerta-saliendo');\r\n\r\n window.setTimeout(() => {\r\n fondo.remove();\r\n resolve(resultado);\r\n }, 140);\r\n };\r\n\r\n const onKeyDown = (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape' && config.cerrarConEscape) {\r\n cerrar(false);\r\n }\r\n };\r\n\r\n botonConfirmar.addEventListener('click', () => cerrar(true));\r\n botonCancelar.addEventListener('click', () => cerrar(false));\r\n\r\n if (config.cerrarConFondo) {\r\n fondo.addEventListener('click', (event) => {\r\n if (event.target === fondo) {\r\n cerrar(false);\r\n }\r\n });\r\n }\r\n\r\n document.addEventListener('keydown', onKeyDown);\r\n\r\n if (config.mostrarCancelar) {\r\n acciones.appendChild(botonCancelar);\r\n }\r\n\r\n acciones.appendChild(botonConfirmar);\r\n\r\n modal.appendChild(icono);\r\n modal.appendChild(titulo);\r\n\r\n if (config.mensaje) {\r\n modal.appendChild(mensaje);\r\n }\r\n\r\n modal.appendChild(acciones);\r\n fondo.appendChild(modal);\r\n document.body.appendChild(fondo);\r\n\r\n botonConfirmar.focus();\r\n });\r\n }\r\n\r\n private static obtenerIcono(tipo: TdAlertaTipo): string {\r\n const iconos: Record<TdAlertaTipo, string> = {\r\n exito: '✓',\r\n error: '!',\r\n advertencia: '!',\r\n info: 'i',\r\n pregunta: '?',\r\n };\r\n\r\n return iconos[tipo];\r\n }\r\n\r\n private static inyectarEstilos(): void {\r\n if (document.getElementById(this.estiloId)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = this.estiloId;\r\n style.textContent = `\r\n .td-alerta-fondo {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 99999;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1rem;\r\n background: rgba(15, 23, 42, 0.52);\r\n animation: td-alerta-fondo-entrada 160ms ease-out;\r\n }\r\n\r\n .td-alerta-modal {\r\n width: min(100%, 430px);\r\n border-radius: 18px;\r\n background: #ffffff;\r\n padding: 1.75rem;\r\n text-align: center;\r\n box-shadow: 0 22px 70px rgba(15, 23, 42, 0.28);\r\n animation: td-alerta-modal-entrada 180ms ease-out;\r\n font-family: var(--td-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n }\r\n\r\n .td-alerta-icono {\r\n width: 4.25rem;\r\n height: 4.25rem;\r\n margin: 0 auto 1rem;\r\n border-radius: 999px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 2.1rem;\r\n font-weight: 800;\r\n }\r\n\r\n .td-alerta-icono--exito {\r\n color: #16a34a;\r\n background: #dcfce7;\r\n }\r\n\r\n .td-alerta-icono--error {\r\n color: #ef4444;\r\n background: #fee2e2;\r\n }\r\n\r\n .td-alerta-icono--advertencia {\r\n color: #f59e0b;\r\n background: #fef3c7;\r\n }\r\n\r\n .td-alerta-icono--info {\r\n color: #2563eb;\r\n background: #dbeafe;\r\n }\r\n\r\n .td-alerta-icono--pregunta {\r\n color: #7c3aed;\r\n background: #ede9fe;\r\n }\r\n\r\n .td-alerta-titulo {\r\n margin: 0;\r\n color: #111827;\r\n font-size: 1.35rem;\r\n line-height: 1.25;\r\n font-weight: 800;\r\n }\r\n\r\n .td-alerta-mensaje {\r\n margin: 0.75rem 0 0;\r\n color: #4b5563;\r\n font-size: 0.96rem;\r\n line-height: 1.55;\r\n }\r\n\r\n .td-alerta-acciones {\r\n display: flex;\r\n justify-content: center;\r\n gap: 0.75rem;\r\n margin-top: 1.5rem;\r\n }\r\n\r\n .td-alerta-boton {\r\n border: 0;\r\n border-radius: 10px;\r\n padding: 0.7rem 1.2rem;\r\n color: #ffffff;\r\n font-size: 0.93rem;\r\n font-weight: 700;\r\n cursor: pointer;\r\n transition: transform 120ms ease, filter 120ms ease, background 120ms ease;\r\n }\r\n\r\n .td-alerta-boton:hover {\r\n filter: brightness(0.96);\r\n }\r\n\r\n .td-alerta-boton:active {\r\n transform: scale(0.98);\r\n }\r\n\r\n .td-alerta-boton:focus {\r\n outline: 3px solid rgba(37, 99, 235, 0.25);\r\n outline-offset: 2px;\r\n }\r\n\r\n .td-alerta-boton--exito {\r\n background: #22c55e;\r\n }\r\n\r\n .td-alerta-boton--error {\r\n background: #ef4444;\r\n }\r\n\r\n .td-alerta-boton--advertencia {\r\n background: #f59e0b;\r\n }\r\n\r\n .td-alerta-boton--info {\r\n background: #2563eb;\r\n }\r\n\r\n .td-alerta-boton--pregunta {\r\n background: #7c3aed;\r\n }\r\n\r\n .td-alerta-boton--cancelar {\r\n background: #6b7280;\r\n }\r\n\r\n .td-alerta-saliendo {\r\n animation: td-alerta-fondo-salida 140ms ease-in forwards;\r\n }\r\n\r\n .td-alerta-saliendo .td-alerta-modal {\r\n animation: td-alerta-modal-salida 140ms ease-in forwards;\r\n }\r\n\r\n @keyframes td-alerta-fondo-entrada {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n\r\n @keyframes td-alerta-modal-entrada {\r\n from {\r\n opacity: 0;\r\n transform: translateY(12px) scale(0.96);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n\r\n @keyframes td-alerta-fondo-salida {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n }\r\n\r\n @keyframes td-alerta-modal-salida {\r\n from {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateY(8px) scale(0.97);\r\n }\r\n }\r\n\r\n @media (max-width: 480px) {\r\n .td-alerta-modal {\r\n padding: 1.4rem;\r\n border-radius: 16px;\r\n }\r\n\r\n .td-alerta-acciones {\r\n flex-direction: column-reverse;\r\n }\r\n\r\n .td-alerta-boton {\r\n width: 100%;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n }\r\n}\n","import { TdIconoDefinicion } from './td-icono.model';\n\nexport const TD_ICONOS = {\n home: {\n path: 'M3 10.5 12 3l9 7.5V21a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1V10.5Z',\n },\n dashboard: {\n path: 'M4 3h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm10 0h6a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm0 8h6a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1ZM4 14h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1Z',\n },\n folder: {\n path: 'M3 5a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Z',\n },\n settings: {\n path: 'M12 8.5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7Zm8.5 3.5c0-.5-.05-.98-.14-1.45l2.02-1.57-2-3.46-2.47 1a8.7 8.7 0 0 0-2.5-1.45L15 2.5h-4l-.4 2.57a8.7 8.7 0 0 0-2.51 1.45l-2.47-1-2 3.46 2.02 1.57a7.7 7.7 0 0 0 0 2.9l-2.02 1.57 2 3.46 2.47-1a8.7 8.7 0 0 0 2.5 1.45L11 21.5h4l.4-2.57a8.7 8.7 0 0 0 2.51-1.45l2.47 1 2-3.46-2.02-1.57c.09-.47.14-.95.14-1.45Z',\n },\n people: {\n path: 'M16 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM6.5 12a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7ZM16 13c-4 0-7 2-7 4.5V21h14v-3.5C23 15 20 13 16 13ZM6.5 14C2.9 14 1 15.8 1 18v3h6v-3.5c0-1.2.48-2.28 1.3-3.16A9.3 9.3 0 0 0 6.5 14Z',\n },\n person: {\n path: 'M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm0 2c-5 0-9 2.5-9 5.5V22h18v-2.5c0-3-4-5.5-9-5.5Z',\n },\n security: {\n path: 'M12 2 4 5v6c0 5.05 3.41 9.74 8 11 4.59-1.26 8-5.95 8-11V5l-8-3Zm-1 14-4-4 1.4-1.4 2.6 2.58 5.6-5.58L18 9l-7 7Z',\n },\n inventory: {\n path: 'm12 2 9 5-9 5-9-5 9-5Zm-7 8.5 6 3.33V22l-6-3.33V10.5Zm8 11.5v-8.17l6-3.33v8.17L13 22Z',\n },\n shopping_cart: {\n path: 'M7 18a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm10 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM6.2 6l.8 2h11.6l-1.9 5H8.1L4.3 3H1v2h2l3.6 9.6A2 2 0 0 0 8.5 16H19v-2H8.5l-.4-1H18a2 2 0 0 0 1.86-1.27L22 6H6.2Z',\n },\n receipt: {\n path: 'M5 2v20l3-2 4 2 4-2 3 2V2l-3 2-4-2-4 2-3-2Zm3 6h8v2H8V8Zm0 4h8v2H8v-2Z',\n },\n assessment: {\n path: 'M4 20h16v2H4a2 2 0 0 1-2-2V4h2v16Zm3-2H5v-6h2v6Zm4 0H9V7h2v11Zm4 0h-2V4h2v14Zm4 0h-2v-9h2v9Z',\n },\n description: {\n path: 'M6 2h8l5 5v15H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm7 1.5V8h4.5L13 3.5ZM8 12v2h8v-2H8Zm0 4v2h8v-2H8Z',\n },\n business: {\n path: 'M3 21V3h10v5h8v13h-7v-4h-2v4H3Zm3-14h2V5H6v2Zm4 0h2V5h-2v2Zm-4 4h2V9H6v2Zm4 0h2V9h-2v2Zm6 1h2v-2h-2v2Zm0 4h2v-2h-2v2Z',\n },\n chevron_left: {\n path: 'M14.7 5.3a1 1 0 0 1 0 1.4L9.4 12l5.3 5.3a1 1 0 1 1-1.4 1.4l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 0 1 1.4 0Z',\n },\n chevron_right: {\n path: 'M9.3 5.3a1 1 0 0 0 0 1.4l5.3 5.3-5.3 5.3a1 1 0 1 0 1.4 1.4l6-6a1 1 0 0 0 0-1.4l-6-6a1 1 0 0 0-1.4 0Z',\n },\n sun: {\n path: 'M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0-5a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1Zm0 17a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0v-2a1 1 0 0 1 1-1ZM2 12a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1Zm17 0a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1ZM4.22 4.22a1 1 0 0 1 1.42 0l1.41 1.42a1 1 0 0 1-1.41 1.41L4.22 5.64a1 1 0 0 1 0-1.42Zm12.73 12.73a1 1 0 0 1 1.41 0l1.42 1.41a1 1 0 0 1-1.42 1.42l-1.41-1.42a1 1 0 0 1 0-1.41Zm2.83-12.73a1 1 0 0 1 0 1.42l-1.42 1.41a1 1 0 0 1-1.41-1.41l1.41-1.42a1 1 0 0 1 1.42 0ZM7.05 16.95a1 1 0 0 1 0 1.41l-1.41 1.42a1 1 0 0 1-1.42-1.42l1.42-1.41a1 1 0 0 1 1.41 0Z',\n },\n moon: {\n path: 'M20.5 15.2A8.5 8.5 0 0 1 8.8 3.5 9 9 0 1 0 20.5 15.2Z',\n },\n alert: {\n path: 'M12 2 1 21h22L12 2Zm-1 7h2v6h-2V9Zm0 8h2v2h-2v-2Z',\n },\n check: {\n path: 'm9.2 16.2-4.4-4.4-1.6 1.6 6 6L21 7.6 19.4 6 9.2 16.2Z',\n },\n close: {\n path: 'M6.4 5 12 10.6 17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6L6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5Z',\n },\n menu: {\n path: 'M3 6h18v2H3V6Zm0 5h18v2H3v-2Zm0 5h18v2H3v-2Z',\n },\n search: {\n path: 'M10.5 3a7.5 7.5 0 1 0 4.73 13.32L20.91 22 22 20.91l-5.68-5.68A7.5 7.5 0 0 0 10.5 3Zm0 2a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11Z',\n },\n visibility: {\n path: 'M12 4.5C6.5 4.5 2.1 8 1 12c1.1 4 5.5 7.5 11 7.5S21.9 16 23 12c-1.1-4-5.5-7.5-11-7.5Zm0 12a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9Zm0-2a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z',\n },\n visibility_off: {\n path: 'm3.3 2 18.7 18.7-1.3 1.3-3.15-3.15A12.2 12.2 0 0 1 12 20C6.5 20 2.1 16.5 1 12a11.6 11.6 0 0 1 3.4-5.2L2 4.3 3.3 2Zm4.42 7.02A4.5 4.5 0 0 0 14.98 16l-1.55-1.55a2.5 2.5 0 0 1-3.88-3.88L7.72 9.02ZM12 4c5.5 0 9.9 3.5 11 8a11.2 11.2 0 0 1-2.53 4.35l-3.3-3.3A5.5 5.5 0 0 0 10.95 6.83L8.58 4.46A13.4 13.4 0 0 1 12 4Z',\n },\n notifications: {\n path: 'M12 22a2.5 2.5 0 0 0 2.45-2h-4.9A2.5 2.5 0 0 0 12 22Zm7-6v-5a7 7 0 0 0-5.5-6.84V3a1.5 1.5 0 0 0-3 0v1.16A7 7 0 0 0 5 11v5l-2 2v1h18v-1l-2-2Z',\n },\n chevron_down: {\n path: 'M5.3 8.3a1 1 0 0 1 1.4 0l5.3 5.3 5.3-5.3a1 1 0 1 1 1.4 1.4l-6 6a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.4Z',\n },\n apps: {\n path: 'M4 3h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM4 15h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Z',\n },\n help: {\n path: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-4.5a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm.2-9.5c-2 0-3.37 1.03-3.7 2.75l1.95.4c.17-.84.77-1.3 1.67-1.3 1 0 1.63.52 1.63 1.35 0 .67-.33 1.03-1.27 1.58-1.12.65-1.48 1.27-1.48 2.47V14h2v-.55c0-.67.2-.94 1.12-1.5 1.18-.72 1.88-1.58 1.88-2.9C16 7.25 14.5 6 12.2 6Z',\n },\n add: {\n path: 'M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6V5Z',\n },\n edit: {\n path: 'm16.86 3.49 3.65 3.65L8.65 19H5v-3.65L16.86 3.49ZM19.73 2.27a1.75 1.75 0 0 0-2.47 0l-1.35 1.35 3.65 3.65 1.35-1.35a1.75 1.75 0 0 0 0-2.47l-1.18-1.18Z',\n },\n delete: {\n path: 'M8 3h8l1 2h4v2H3V5h4l1-2Zm-2 6h12l-1 12H7L6 9Zm4 2v7h2v-7h-2Zm4 0v7h2v-7h-2Z',\n },\n toggle_on: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12Zm0 10a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n toggle_off: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12ZM7 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n inbox: {\n path: 'M4 3h16l3 11v7H1v-7L4 3Zm1.5 2L3 14h5l1 2h6l1-2h5l-2.5-9h-13Z',\n },\n pdf: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M7.1 20v-6.5m0 1.1c.45-.75 1.25-1.15 2.05-1.05 1.25.15 1.85 1.25 1.7 2.65-.15 1.35-.9 2.2-2.05 2.15-.75-.05-1.35-.4-1.7-.95m7.85-5.9V18.4m0-3.8c-.45-.75-1.25-1.15-2.05-1.05-1.25.15-1.85 1.25-1.7 2.65.15 1.35.9 2.2 2.05 2.15.75-.05 1.35-.4 1.7-.95m2.15 1v-5.65c0-1.15.55-1.75 1.65-1.75.35 0 .65.05.9.15m-2.5 3.05h2.1',\n estilo: 'linea',\n grosor: 1.65,\n },\n save: {\n path: 'M5 3h12l4 4v14H3V5a2 2 0 0 1 2-2Zm1 2a1 1 0 0 0-1 1v13h14V8h-4V5H6Zm2 0v5h7V5H8Zm1 8h6a2 2 0 0 1 2 2v4H7v-4a2 2 0 0 1 2-2Z',\n },\n copy: {\n path: 'M8 3h11a2 2 0 0 1 2 2v11h-2V5H8V3ZM5 7h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2Zm0 2v10h10V9H5Z',\n },\n download: {\n path: 'M11 3h2v10.17l3.59-3.58L18 11l-6 6-6-6 1.41-1.41L11 13.17V3ZM4 19h16v2H4v-2Z',\n },\n upload: {\n path: 'm12 3 6 6-1.41 1.41L13 6.83V17h-2V6.83l-3.59 3.58L6 9l6-6ZM4 19h16v2H4v-2Z',\n },\n print: {\n path: 'M7 3h10v4H7V3Zm10 12v6H7v-6h10Zm2-7a3 3 0 0 1 3 3v6h-3v-4H5v4H2v-6a3 3 0 0 1 3-3h14Zm-4 9H9v2h6v-2Zm4-7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z',\n },\n excel: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M8 11h8v7.5H8V11Zm0 3.75h8M11.9 11v7.5',\n estilo: 'linea',\n grosor: 1.65,\n },\n xml: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M9.25 12l-2.5 3 2.5 3m5.5-6 2.5 3-2.5 3m-1.5-7-2.5 8',\n estilo: 'linea',\n grosor: 1.65,\n },\n zip: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M10.25 2.75h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5M12 11.75v3m-1.75 0h3.5v3.5h-3.5v-3.5Z',\n estilo: 'linea',\n grosor: 1.65,\n },\n file: {\n path: 'M6 2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm8 2H6v16h12V8h-4V4Zm2 2 2 2h-2V6Z',\n },\n image: {\n path: 'M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 2v14h16V5H4Zm3.5 2A2.5 2.5 0 1 1 5 9.5 2.5 2.5 0 0 1 7.5 7Zm12 10-4.5-5-3.2 3.5-2.3-2.5L4.5 18h15v-1Z',\n },\n calendar: {\n path: 'M7 2h2v2h6V2h2v2h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2V2ZM5 9v11h14V9H5Zm0-3v1h14V6H5Z',\n },\n clock: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n history: {\n path: 'M12 4a8 8 0 1 1-7.45 5H2l3.5-4L9 9H6.67A6 6 0 1 0 12 6V4Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n filter: {\n path: 'M3 4h18l-7 8v6l-4 2v-8L3 4Zm4.41 2L12 11.25 16.59 6H7.41Z',\n },\n refresh: {\n path: 'M17.65 6.35A7.95 7.95 0 0 0 12 4a8 8 0 1 0 7.75 10h-2.08A6 6 0 1 1 16.2 7.8L13 11h8V3l-3.35 3.35Z',\n },\n sort: {\n path: 'M7 3 3 7h3v11H3l4 4 4-4H8V7h3L7 3Zm10 0-4 4h3v11h-3l4 4 4-4h-3V7h3l-4-4Z',\n },\n more_vertical: {\n path: 'M12 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z',\n },\n more_horizontal: {\n path: 'M8 12a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Z',\n },\n arrow_back: {\n path: 'm11 5-7 7 7 7 1.41-1.41L7.83 13H21v-2H7.83l4.58-4.59L11 5Z',\n },\n arrow_forward: {\n path: 'm13 5-1.41 1.41L16.17 11H3v2h13.17l-4.58 4.59L13 19l7-7-7-7Z',\n },\n login: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n logout: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n lock: {\n path: 'M7 10V7a5 5 0 0 1 10 0v3h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm2 0h6V7a3 3 0 0 0-6 0v3Zm3 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n lock_open: {\n path: 'M7 10V7a5 5 0 0 1 9.9-1H14.8A3 3 0 0 0 9 7v3h9a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm5 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n mail: {\n path: 'M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm0 3.24V18h16V7.24l-8 5-8-5ZM18.53 6H5.47L12 10.08 18.53 6Z',\n },\n phone: {\n path: 'M6.62 2.5 10 6.2 7.9 8.3a15.5 15.5 0 0 0 7.8 7.8l2.1-2.1 3.7 3.38V20a2 2 0 0 1-2 2C9.84 22 2 14.16 2 4.5a2 2 0 0 1 2-2h2.62Z',\n },\n send: {\n path: 'm3 3 19 9-19 9 2-7 10-2-10-2-2-7Zm3.62 5.55.57 2L12 12l-4.81 1.45-.57 2L17.53 12 6.62 8.55Z',\n },\n location: {\n path: 'M12 2a8 8 0 0 1 8 8c0 5.5-8 12-8 12S4 15.5 4 10a8 8 0 0 1 8-8Zm0 2a6 6 0 0 0-6 6c0 3.55 3.92 7.68 6 9.65 2.08-1.97 6-6.1 6-9.65a6 6 0 0 0-6-6Zm0 3a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n language: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm6.92 6h-3.08a15.7 15.7 0 0 0-1.38-3.18A8.05 8.05 0 0 1 18.92 8ZM12 4c-.83 1.2-1.5 2.53-1.84 4h3.68A13.7 13.7 0 0 0 12 4ZM9.54 4.82A15.7 15.7 0 0 0 8.16 8H5.08a8.05 8.05 0 0 1 4.46-3.18ZM4.26 10A8.3 8.3 0 0 0 4 12c0 .69.09 1.36.26 2h3.55a17 17 0 0 1 0-4H4.26Zm5.57 0a14.6 14.6 0 0 0 0 4h4.34a14.6 14.6 0 0 0 0-4H9.83Zm6.36 0a17 17 0 0 1 0 4h3.55A8.3 8.3 0 0 0 20 12c0-.69-.09-1.36-.26-2h-3.55ZM5.08 16h3.08c.3 1.14.77 2.2 1.38 3.18A8.05 8.05 0 0 1 5.08 16Zm5.08 0c.34 1.47 1.01 2.8 1.84 4 .83-1.2 1.5-2.53 1.84-4h-3.68Zm4.3 3.18A15.7 15.7 0 0 0 15.84 16h3.08a8.05 8.05 0 0 1-4.46 3.18Z',\n },\n info: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 6h2v7h-2v-7Zm0-3h2v2h-2V7Z',\n },\n warning: {\n path: 'M12 2 1 21h22L12 2Zm0 4.03L19.53 19H4.47L12 6.03ZM11 10v5h2v-5h-2Zm0 6v2h2v-2h-2Z',\n },\n error: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v7h-2V7Zm0 9h2v2h-2v-2Z',\n },\n check_circle: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1.5 11.5-3-3 1.41-1.41 1.59 1.58 4.59-4.58 1.41 1.41-6 6Z',\n },\n cancel: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-3.3 3.3L12 10.59l3.3-3.3 1.4 1.42-3.29 3.29 3.3 3.3-1.42 1.4L12 13.41l-3.3 3.3-1.4-1.42 3.29-3.29-3.3-3.3L8.7 7.3Z',\n },\n star: {\n path: 'm12 2.5 2.94 5.96 6.58.96-4.76 4.64 1.12 6.56L12 17.53l-5.88 3.09 1.12-6.56-4.76-4.64 6.58-.96L12 2.5Z',\n },\n favorite: {\n path: 'M12 21s-9-5.4-9-12a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 6.6-9 12-9 12Z',\n },\n database: {\n path: 'M12 2C6.48 2 2 3.79 2 6v12c0 2.21 4.48 4 10 4s10-1.79 10-4V6c0-2.21-4.48-4-10-4Zm0 2c4.42 0 8 1.12 8 2s-3.58 2-8 2-8-1.12-8-2 3.58-2 8-2ZM4 9.2c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V12c0 .88-3.58 2-8 2s-8-1.12-8-2V9.2Zm0 6c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V18c0 .88-3.58 2-8 2s-8-1.12-8-2v-2.8Z',\n },\n cloud: {\n path: 'M7.5 20A5.5 5.5 0 0 1 6.3 9.13 7 7 0 0 1 19 11.5h.5a4.25 4.25 0 0 1 0 8.5h-12Zm0-2h12a2.25 2.25 0 0 0 0-4.5h-2.4l-.05-1.2A5 5 0 0 0 7.9 10.1l-.42 1.05-1.12.17A3.5 3.5 0 0 0 7.5 18Z',\n },\n camera: {\n path: 'M8 4h8l1.5 2H21a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.5L8 4Zm4 4a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0 2a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n link: {\n path: 'M10.59 13.41a2 2 0 0 0 2.82 0l3-3a2 2 0 0 0-2.82-2.82l-1.3 1.29-1.41-1.41 1.3-1.3a4 4 0 1 1 5.65 5.66l-3 3a4 4 0 0 1-5.66 0l-.7-.71 1.41-1.41.71.7Zm2.82-2.82a2 2 0 0 0-2.82 0l-3 3a2 2 0 0 0 2.82 2.82l1.3-1.29 1.41 1.41-1.3 1.3a4 4 0 1 1-5.65-5.66l3-3a4 4 0 0 1 5.66 0l.7.71-1.41 1.41-.71-.7Z',\n },\n external_link: {\n path: 'M14 3h7v7h-2V6.41l-8.29 8.3-1.42-1.42L17.59 5H14V3ZM5 5h6v2H5v12h12v-6h2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z',\n },\n} satisfies Record<string, TdIconoDefinicion>;\n\nexport type TdIconoNombre = keyof typeof TD_ICONOS;\n\nexport const TD_ICONOS_NOMBRES = Object.freeze(\n Object.keys(TD_ICONOS) as TdIconoNombre[]\n);\n","import { Injectable } from '@angular/core';\nimport { TdIconoDefinicion, TdIconoPersonalizado } from './td-icono.model';\nimport { TD_ICONOS } from './td-iconos';\n\n@Injectable({ providedIn: 'root' })\nexport class TdIconoRegistry {\n private readonly iconos = new Map<string, TdIconoDefinicion>(\n Object.entries(TD_ICONOS)\n );\n\n registrar(iconos: TdIconoPersonalizado): void {\n for (const [nombre, definicion] of Object.entries(iconos)) {\n const clave = this.normalizar(nombre);\n if (!clave) continue;\n\n this.iconos.set(\n clave,\n typeof definicion === 'string' ? { path: definicion } : definicion\n );\n }\n }\n\n obtener(nombre: string | null | undefined): TdIconoDefinicion {\n return this.iconos.get(this.normalizar(nombre)) ?? this.iconos.get('folder')!;\n }\n\n existe(nombre: string): boolean {\n return this.iconos.has(this.normalizar(nombre));\n }\n\n nombres(): string[] {\n return [...this.iconos.keys()];\n }\n\n private normalizar(nombre: string | null | undefined): string {\n return (nombre ?? '').trim().toLowerCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { TdIconoRegistry } from './td-icono-registry';\n\n@Component({\n selector: 'td-icon',\n template: `\n <svg\n [attr.viewBox]=\"definicion().viewBox || '0 0 24 24'\"\n [attr.aria-hidden]=\"titulo ? null : 'true'\"\n [attr.aria-label]=\"titulo || null\"\n [attr.role]=\"titulo ? 'img' : null\"\n focusable=\"false\"\n >\n <path\n [attr.d]=\"definicion().path\"\n [attr.fill]=\"definicion().estilo === 'linea' ? 'none' : 'currentColor'\"\n [attr.stroke]=\"definicion().estilo === 'linea' ? 'currentColor' : 'none'\"\n [attr.stroke-width]=\"definicion().grosor || null\"\n [attr.stroke-linecap]=\"definicion().estilo === 'linea' ? 'round' : null\"\n [attr.stroke-linejoin]=\"definicion().estilo === 'linea' ? 'round' : null\"\n />\n </svg>\n `,\n styles: `\n :host {\n display: inline-flex;\n width: var(--td-icon-size, 1.25rem);\n height: var(--td-icon-size, 1.25rem);\n flex: 0 0 auto;\n color: inherit;\n line-height: 0;\n vertical-align: middle;\n }\n svg { width: 100%; height: 100%; }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdIcon {\n private readonly registry = inject(TdIconoRegistry);\n\n @Input() nombre = 'folder';\n @Input() titulo = '';\n\n @Input()\n set tamano(value: string | number) {\n this.tamanoCss = typeof value === 'number' ? `${value}px` : value;\n }\n\n protected tamanoCss = '1.25rem';\n\n @HostBinding('style.--td-icon-size')\n protected get tamanoHost(): string {\n return this.tamanoCss;\n }\n\n protected definicion() {\n return this.registry.obtener(this.nombre);\n }\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport type TdButtonVariant = 'solid' | 'soft' | 'outline' | 'ghost';\nexport type TdButtonTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type TdButtonSize = 'sm' | 'md' | 'lg';\nexport type TdButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'td-button',\n imports: [TdIcon],\n template: `\n <button\n class=\"td-button\"\n [class]=\"'td-button td-button--' + variant + ' td-button--' + tone + ' td-button--' + size\"\n [class.td-button--block]=\"block\"\n [class.td-button--loading]=\"loading\"\n [class.td-button--icon-only]=\"isIconOnly\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n (click)=\"handleClick($event)\"\n >\n @if (loading) {\n <span class=\"td-button__spinner\" aria-hidden=\"true\"></span>\n } @else if (icon && iconPosition === 'start') {\n <td-icon [nombre]=\"icon\" />\n }\n\n <span\n #content\n class=\"td-button__content\"\n [class.td-button__content--hidden]=\"isIconOnly\"\n >\n <ng-content />\n </span>\n\n @if (!loading && icon && iconPosition === 'end') {\n <td-icon [nombre]=\"icon\" />\n }\n </button>\n `,\n styleUrl: './td-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdButton implements AfterContentChecked {\n @ViewChild('content', { static: true }) private readonly contentRef?: ElementRef<HTMLElement>;\n\n @Input() variant: TdButtonVariant = 'solid';\n @Input() tone: TdButtonTone = 'primary';\n @Input() size: TdButtonSize = 'md';\n @Input() type: TdButtonType = 'button';\n @Input() icon = '';\n @Input() iconPosition: 'start' | 'end' = 'start';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() block = false;\n @Input({ transform: booleanAttribute }) iconOnly = false;\n @Input({ alias: 'aria-label' }) ariaLabel = '';\n\n @Output() readonly pressed = new EventEmitter<MouseEvent>();\n\n protected hasProjectedContent = false;\n\n protected get isIconOnly(): boolean {\n return !!this.icon && (this.iconOnly || !this.hasProjectedContent);\n }\n\n ngAfterContentChecked(): void {\n const element = this.contentRef?.nativeElement;\n if (!element) return;\n\n this.hasProjectedContent = !!element.textContent?.trim() || element.childElementCount > 0;\n }\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled || this.loading) return;\n this.pressed.emit(event);\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n Injector,\n ModelSignal,\n OutputEmitterRef,\n signal,\n} from '@angular/core';\nimport { FORM_FIELD } from '@angular/forms/signals';\n\nexport interface TdFormControlBridge {\n readonly usesSignalForms: boolean;\n isDisabled(fieldDisabled: boolean): boolean;\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean;\n registerOnTouched(fn: () => void): void;\n setDisabledState(disabled: boolean): void;\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void;\n}\n\nexport type TdErrorDisplay = 'auto' | 'always' | 'touched' | 'dirty' | 'never';\n\n/**\n * Puente reutilizable entre Signal Forms y ControlValueAccessor.\n *\n * Los inputs del contrato se declaran en cada componente porque el compilador\n * de Signal Forms de Angular 21 necesita encontrarlos directamente allí.\n */\nexport function createTdFormControlBridge(): TdFormControlBridge {\n const injector = inject(Injector);\n const cdr = inject(ChangeDetectorRef);\n const cvaDisabled = signal(false);\n let onCvaTouched: () => void = () => undefined;\n\n const usesSignalForms = (): boolean =>\n !!injector.get(FORM_FIELD, null, { self: true, optional: true });\n\n return {\n get usesSignalForms(): boolean {\n return usesSignalForms();\n },\n isDisabled(fieldDisabled: boolean): boolean {\n return usesSignalForms() ? fieldDisabled : fieldDisabled || cvaDisabled();\n },\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean {\n if (displayMode === 'never') return false;\n\n const hasErrorState = invalid || hasErrorMessage;\n if (!hasErrorState) return false;\n\n if (displayMode === 'always') return true;\n if (displayMode === 'touched') return touched;\n if (displayMode === 'dirty') return dirty;\n return touched || dirty;\n },\n registerOnTouched(fn: () => void): void {\n onCvaTouched = fn;\n },\n setDisabledState(disabled: boolean): void {\n if (!usesSignalForms()) cvaDisabled.set(disabled);\n cdr.markForCheck();\n },\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void {\n // Angular prioriza el CVA cuando el control también publica NG_VALUE_ACCESSOR,\n // incluso si está enlazado mediante [formField]. Mantener esta llamada permite\n // que Signal Forms marque el field como touched sin perder compatibilidad clásica.\n onCvaTouched();\n touched.set(true);\n touch.emit();\n },\n };\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet checkboxSequence = 0;\n\n@Component({\n selector: 'td-checkbox',\n imports: [TdIcon],\n template: `\n <label\n class=\"td-checkbox\"\n [class.td-checkbox--checked]=\"checked()\"\n [class.td-checkbox--disabled]=\"isDisabled()\"\n [class.td-checkbox--readonly]=\"readonly()\"\n [class.td-checkbox--error]=\"hasError()\"\n [class.td-checkbox--dark]=\"dark()\"\n [for]=\"inputId\"\n >\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"descriptionId\"\n (change)=\"handleChange($event)\"\n (blur)=\"handleBlur()\"\n (click)=\"handleClick($event)\"\n />\n\n <span class=\"td-checkbox__box\" aria-hidden=\"true\">\n @if (checked()) {\n <td-icon nombre=\"check\" tamano=\".9rem\" />\n }\n </span>\n\n <span class=\"td-checkbox__content\">\n <span class=\"td-checkbox__label\">{{ label() }}</span>\n @if (description()) {\n <span class=\"td-checkbox__description\">{{ description() }}</span>\n }\n </span>\n </label>\n\n @if (displayError() || hint()) {\n <p\n class=\"td-checkbox__message\"\n [class.td-checkbox__message--error]=\"hasError()\"\n [id]=\"descriptionId\"\n >\n {{ displayError() || hint() }}\n </p>\n }\n `,\n styleUrl: './td-checkbox.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdCheckbox),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdCheckbox implements ControlValueAccessor, FormCheckboxControl {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-checkbox-${++checkboxSequence}`;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n readonly id = input('');\n readonly label = input('Opción');\n readonly description = input('');\n readonly hint = input('');\n readonly dark = input(false);\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n\n readonly checked = model(false);\n\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n protected get inputId(): string {\n return this.id() || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.displayError() || this.hint()\n ? `${this.inputId}-description`\n : null;\n }\n\n private onChange: (checked: boolean) => void = () => undefined;\n\n writeValue(value: unknown): void {\n this.checked.set(value === true);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (checked: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleChange(event: Event): void {\n if (this.readonly()) {\n (event.target as HTMLInputElement).checked = this.checked();\n return;\n }\n\n const checked = (event.target as HTMLInputElement).checked === true;\n this.checked.set(checked);\n this.onChange(checked);\n }\n\n protected handleClick(event: MouseEvent): void {\n if (!this.readonly()) return;\n event.preventDefault();\n event.stopPropagation();\n }\n\n protected handleBlur(): void {\n this.formBridge.markTouched(this.touched, this.touch);\n }\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdMenuItem, TdMenuPosicion, TdMenuSeleccion } from './td-menu.model';\n\n@Component({\n selector: 'td-menu',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n templateUrl: './td-menu.html',\n styleUrl: './td-menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdMenu<T = unknown> {\n @Input() items: TdMenuItem<T>[] = [];\n @Input() etiqueta = '';\n @Input() icono = 'more_vertical';\n @Input() posicion: TdMenuPosicion = 'abajo-fin';\n @Input() ancho = '14rem';\n @Input() disabled = false;\n @Input() oscuro = false;\n @Input() ariaLabel = 'Abrir menu';\n\n @Output() readonly seleccion = new EventEmitter<TdMenuSeleccion<T>>();\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n\n protected abierto = false;\n\n protected get itemsVisibles(): TdMenuItem<T>[] {\n return this.items.filter((item) => item.visible ?? true);\n }\n\n protected alternar(): void {\n if (this.disabled) return;\n this.establecerAbierto(!this.abierto);\n }\n\n protected cerrar(): void {\n this.establecerAbierto(false);\n }\n\n protected seleccionar(item: TdMenuItem<T>): void {\n if (item.deshabilitado) return;\n this.seleccion.emit({ item, id: item.id, data: item.data });\n this.cerrar();\n }\n\n protected posiciones(): CdkConnectedOverlay['positions'] {\n const offset = 8;\n const mapa: Record<TdMenuPosicion, CdkConnectedOverlay['positions']> = {\n 'abajo-inicio': [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'abajo-fin': [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'arriba-inicio': [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n 'arriba-fin': [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n };\n\n return mapa[this.posicion];\n }\n\n private establecerAbierto(valor: boolean): void {\n if (this.abierto === valor) return;\n this.abierto = valor;\n this.abiertoChange.emit(valor);\n }\n}\n","<button\n #origen=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"td-menu__trigger\"\n [class.td-menu__trigger--icon-only]=\"!etiqueta\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"abierto\"\n aria-haspopup=\"menu\"\n (click)=\"alternar()\"\n>\n @if (icono) {\n <td-icon [nombre]=\"icono\" />\n }\n @if (etiqueta) {\n <span>{{ etiqueta }}</span>\n <td-icon nombre=\"chevron_down\" tamano=\".95rem\" />\n }\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origen\"\n [cdkConnectedOverlayOpen]=\"abierto\"\n [cdkConnectedOverlayPositions]=\"posiciones()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'td-menu__backdrop'\"\n [cdkConnectedOverlayPanelClass]=\"'td-menu__overlay'\"\n (backdropClick)=\"cerrar()\"\n (detach)=\"cerrar()\"\n>\n <div\n class=\"td-menu\"\n [class.td-menu--oscuro]=\"oscuro\"\n [style.width]=\"ancho\"\n role=\"menu\"\n >\n @for (item of itemsVisibles; track item.id) {\n @if (item.separadorAntes) {\n <span class=\"td-menu__separador\" aria-hidden=\"true\"></span>\n }\n <button\n type=\"button\"\n role=\"menuitem\"\n [class]=\"'td-menu__item td-menu__item--' + (item.tono || 'neutro')\"\n [disabled]=\"item.deshabilitado\"\n (click)=\"seleccionar(item)\"\n >\n @if (item.icono) {\n <span class=\"td-menu__icono\">\n <td-icon [nombre]=\"item.icono\" />\n </span>\n }\n <span class=\"td-menu__texto\">\n <strong>{{ item.etiqueta }}</strong>\n @if (item.descripcion) {\n <small>{{ item.descripcion }}</small>\n }\n </span>\n </button>\n } @empty {\n <div class=\"td-menu__vacio\">\n <td-icon nombre=\"inbox\" />\n <span>Sin opciones disponibles</span>\n </div>\n }\n </div>\n</ng-template>\n","import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TdIcon } from '../iconos';\nimport { TdMenu, TdMenuItem, TdMenuSeleccion } from '../menu';\nimport {\n TdDataTableAccion,\n TdDataTableAccionesPresentacion,\n TdDataTableAccionEvento,\n TdDataTableBoton,\n TdDataTableColumna,\n TdDataTableImagenEvento,\n TdDataTableTono,\n} from './td-data-table.model';\n\ninterface TdDataTableImagenActiva {\n src: string;\n alt: string;\n}\n\n@Component({\n selector: 'td-data-table',\n imports: [FormsModule, NgTemplateOutlet, ScrollingModule, TdIcon, TdMenu],\n templateUrl: './td-data-table.html',\n styleUrl: './td-data-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDataTable<T extends object> implements OnChanges, OnDestroy {\n @ViewChild(CdkVirtualScrollViewport)\n private viewport?: CdkVirtualScrollViewport;\n @ViewChild('imagenDialog')\n private imagenDialog?: ElementRef<HTMLDialogElement>;\n\n @Input() datos: T[] = [];\n @Input() columnas: TdDataTableColumna<T>[] = [];\n @Input() acciones: TdDataTableAccion<T>[] = [];\n @Input() accionesPresentacion: TdDataTableAccionesPresentacion = 'inline';\n @Input() botones: TdDataTableBoton[] = [];\n @Input() total = 0;\n @Input() cargando = false;\n @Input() puedeCargarMas = false;\n @Input() virtualizar = true;\n @Input() virtualizarDesde = 100;\n @Input() itemSize = 65;\n @Input() filasAntesDeCargar = 2;\n @Input() altura = 'min(620px, calc(100dvh - 18rem))';\n @Input() campoId: keyof T & string = 'id' as keyof T & string;\n @Input() oscuro = false;\n @Input() mostrarBusqueda = true;\n @Input() placeholderBusqueda = 'Buscar...';\n @Input() textoVacio = 'No hay registros disponibles';\n @Input() descripcionVacio = 'Prueba cambiando los filtros o vuelve más tarde.';\n @Input() debounceBusqueda = 250;\n\n @Output() readonly busquedaChange = new EventEmitter<string>();\n @Output() readonly accion = new EventEmitter<TdDataTableAccionEvento<T>>();\n @Output() readonly imagenClick = new EventEmitter<TdDataTableImagenEvento<T>>();\n @Output() readonly botonClick = new EventEmitter<TdDataTableBoton>();\n @Output() readonly cargarMas = new EventEmitter<void>();\n\n protected busqueda = '';\n protected imagenActiva: TdDataTableImagenActiva | null = null;\n private timeoutBusqueda: ReturnType<typeof setTimeout> | null = null;\n private datosAnteriores: T[] = [];\n private recalculoPendiente: ReturnType<typeof setTimeout> | null = null;\n private cargaIncrementalHabilitada = true;\n private scrollDeUsuarioPendiente = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['datos']) {\n const datosPrevios = (changes['datos'].previousValue as T[] | undefined) ?? this.datosAnteriores;\n const debeVolverAlInicio = this.debeVolverAlInicio(datosPrevios, this.datos);\n\n this.datosAnteriores = this.datos;\n this.scrollDeUsuarioPendiente = false;\n this.programarRecalculoViewport(debeVolverAlInicio);\n }\n\n if (changes['itemSize'] || changes['altura'] || changes['columnas'] || changes['acciones']) {\n this.programarRecalculoViewport(false);\n }\n }\n\n ngOnDestroy(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n if (this.recalculoPendiente) clearTimeout(this.recalculoPendiente);\n }\n\n protected columnasGrid(): string {\n const columnas = this.columnas.map((columna) => columna.ancho ?? 'minmax(10rem, 1fr)');\n if (this.acciones.length) {\n columnas.push(this.accionesPresentacion === 'menu' ? 'minmax(5rem, auto)' : 'minmax(9rem, auto)');\n }\n return columnas.join(' ');\n }\n\n protected buscar(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.timeoutBusqueda = setTimeout(\n () => this.busquedaChange.emit(this.busqueda.trim()),\n this.debounceBusqueda\n );\n }\n\n protected limpiarBusqueda(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.busqueda = '';\n this.busquedaChange.emit('');\n }\n\n protected valor(fila: T, clave: keyof T & string): unknown {\n return (fila as Record<string, unknown>)[clave];\n }\n\n protected textoCelda(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n if (columna.formatear) return columna.formatear(valor, fila, indice);\n if (valor === null || valor === undefined || valor === '') return '—';\n if (columna.tipo === 'booleano') return valor ? 'Sí' : 'No';\n if (columna.tipo === 'estado') return valor ? 'Activo' : 'Inactivo';\n if (columna.tipo === 'fecha' || columna.tipo === 'fechaHora' || columna.tipo === 'hora') {\n return this.formatearFecha(valor, columna);\n }\n if (\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n ) {\n return this.formatearNumero(valor, columna);\n }\n return String(valor);\n }\n\n protected imagenSrc(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n const src = columna.imagen?.src?.(valor, fila, indice) ?? valor;\n return typeof src === 'string' ? src.trim() : '';\n }\n\n protected imagenAlt(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n return columna.imagen?.alt?.(valor, fila, indice) || this.textoCelda(columna, fila, indice);\n }\n\n protected imagenForma(columna: TdDataTableColumna<T>): string {\n return columna.imagen?.forma ?? 'redondeada';\n }\n\n protected tonoCelda(columna: TdDataTableColumna<T>, fila: T): TdDataTableTono {\n const valor = this.valor(fila, columna.clave);\n if (columna.tono) return columna.tono(valor, fila);\n if (columna.tipo === 'estado') return valor ? 'exito' : 'peligro';\n if (columna.tipo === 'booleano') return valor ? 'exito' : 'neutro';\n return 'neutro';\n }\n\n protected accionesVisibles(fila: T): TdDataTableAccion<T>[] {\n return this.acciones.filter((accion) => {\n if (accion.condicion && !accion.condicion(fila)) return false;\n return accion.visible?.(fila) ?? true;\n });\n }\n\n protected iconoAccion(accion: TdDataTableAccion<T>, fila: T): string {\n return typeof accion.icono === 'function' ? accion.icono(fila) : accion.icono;\n }\n\n protected tonoAccion(accion: TdDataTableAccion<T>, fila: T): TdDataTableTono {\n if (typeof accion.tono === 'function') return accion.tono(fila);\n return accion.tono ?? 'neutro';\n }\n\n protected usarMenuAcciones(fila: T): boolean {\n if (this.accionesPresentacion === 'menu') return true;\n if (this.accionesPresentacion === 'inline') return false;\n return this.accionesVisibles(fila).length > 3;\n }\n\n protected accionesMenu(fila: T): TdMenuItem<TdDataTableAccion<T>>[] {\n return this.accionesVisibles(fila).map((accion) => ({\n id: accion.id,\n etiqueta: accion.etiqueta,\n icono: this.iconoAccion(accion, fila),\n tono: this.tonoAccion(accion, fila),\n deshabilitado: accion.deshabilitada?.(fila) ?? false,\n data: accion,\n }));\n }\n\n protected botonesVisibles(): TdDataTableBoton[] {\n return this.botones.filter((boton) => boton.visible ?? true);\n }\n\n protected usaVirtualizacion(): boolean {\n return this.virtualizar && this.datos.length >= this.virtualizarDesde;\n }\n\n protected ejecutarAccion(\n accion: TdDataTableAccion<T>,\n fila: T,\n indice: number\n ): void {\n if (accion.deshabilitada?.(fila)) return;\n this.accion.emit({ accion, fila, indice });\n }\n\n protected ejecutarAccionMenu(\n evento: TdMenuSeleccion<TdDataTableAccion<T>>,\n fila: T,\n indice: number\n ): void {\n if (!evento.data) return;\n this.ejecutarAccion(evento.data, fila, indice);\n }\n\n protected abrirImagen(columna: TdDataTableColumna<T>, fila: T, indice: number): void {\n const src = this.imagenSrc(columna, fila, indice);\n if (!src || columna.imagen?.clickeable === false) return;\n const alt = this.imagenAlt(columna, fila, indice);\n this.imagenActiva = { src, alt };\n setTimeout(() => {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n });\n this.imagenClick.emit({\n columna,\n fila,\n indice,\n src,\n alt,\n });\n }\n\n protected cerrarImagen(): void {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.imagenActiva = null;\n }\n\n protected cerrarImagenSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrarImagen();\n }\n }\n\n protected marcarScrollUsuario(): void {\n this.scrollDeUsuarioPendiente = true;\n }\n\n protected alDesplazarViewport(): void {\n if (!this.viewport) return;\n\n const distanciaAlFinal = this.viewport.measureScrollOffset('bottom');\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected alDesplazarLista(event: Event): void {\n const elemento = event.currentTarget as HTMLElement | null;\n if (!elemento) return;\n\n const distanciaAlFinal = elemento.scrollHeight - elemento.scrollTop - elemento.clientHeight;\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected readonly trackFila = (_indice: number, fila: T): unknown =>\n (fila as Record<string, unknown>)[this.campoId] ?? fila;\n\n private programarRecalculoViewport(volverAlInicio: boolean): void {\n if (this.recalculoPendiente) {\n clearTimeout(this.recalculoPendiente);\n }\n\n this.recalculoPendiente = setTimeout(() => {\n this.recalculoPendiente = null;\n if (!this.viewport) return;\n\n if (volverAlInicio) {\n this.viewport.scrollToIndex(0, 'auto');\n }\n\n this.viewport.checkViewportSize();\n });\n }\n\n private debeVolverAlInicio(datosPrevios: T[], datosActuales: T[]): boolean {\n if (!datosPrevios.length || !datosActuales.length) {\n return false;\n }\n\n if (datosActuales.length < datosPrevios.length) {\n return true;\n }\n\n return !datosPrevios.every((filaPrevia, indice) =>\n this.claveFila(filaPrevia) === this.claveFila(datosActuales[indice])\n );\n }\n\n private claveFila(fila: T): unknown {\n return (fila as Record<string, unknown>)[this.campoId] ?? fila;\n }\n\n private intentarCargarMas(distanciaAlFinal: number): void {\n const umbralPx = this.itemSize * Math.max(0, this.filasAntesDeCargar);\n const zonaSeguraPx = umbralPx + this.itemSize;\n\n if (distanciaAlFinal > zonaSeguraPx) {\n this.cargaIncrementalHabilitada = true;\n return;\n }\n\n if (\n distanciaAlFinal <= umbralPx &&\n this.datos.length > 0 &&\n this.puedeCargarMas &&\n !this.cargando &&\n this.cargaIncrementalHabilitada &&\n this.scrollDeUsuarioPendiente\n ) {\n this.cargaIncrementalHabilitada = false;\n this.scrollDeUsuarioPendiente = false;\n this.cargarMas.emit();\n }\n }\n\n private formatearFecha(valor: unknown, columna: TdDataTableColumna<T>): string {\n const fecha = this.normalizarFecha(valor);\n if (!fecha) return '—';\n\n const opcionesPorTipo: Record<string, Intl.DateTimeFormatOptions> = {\n fecha: { day: '2-digit', month: '2-digit', year: 'numeric' },\n fechaHora: {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n },\n hora: { hour: '2-digit', minute: '2-digit' },\n };\n\n try {\n return new Intl.DateTimeFormat(\n columna.locale ?? 'es-PE',\n columna.formatoFecha ?? opcionesPorTipo[columna.tipo ?? 'fecha']\n ).format(fecha);\n } catch {\n return String(valor);\n }\n }\n\n private normalizarFecha(valor: unknown): Date | null {\n if (valor instanceof Date) return Number.isNaN(valor.getTime()) ? null : valor;\n if (typeof valor === 'number' || typeof valor === 'string') {\n const fecha = new Date(valor);\n return Number.isNaN(fecha.getTime()) ? null : fecha;\n }\n return null;\n }\n\n private formatearNumero(valor: unknown, columna: TdDataTableColumna<T>): string {\n const numero = typeof valor === 'number' ? valor : Number(valor);\n if (!Number.isFinite(numero)) return String(valor);\n\n const opciones: Intl.NumberFormatOptions = {\n ...(columna.formatoNumero ?? {}),\n };\n\n if (columna.tipo === 'decimal') {\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'moneda') {\n opciones.style = 'currency';\n opciones.currency = columna.moneda ?? 'PEN';\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'porcentaje') {\n opciones.style = 'percent';\n opciones.minimumFractionDigits ??= columna.decimales ?? 0;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n try {\n return new Intl.NumberFormat(columna.locale ?? 'es-PE', opciones).format(numero);\n } catch {\n return String(valor);\n }\n }\n}\n","<section class=\"td-tabla\" [class.td-tabla--oscura]=\"oscuro\">\n <div class=\"td-tabla__toolbar\">\n <div class=\"td-tabla__filtros\">\n @if (mostrarBusqueda) {\n <label class=\"td-tabla__busqueda\">\n <td-icon nombre=\"search\" />\n <input\n type=\"search\"\n [(ngModel)]=\"busqueda\"\n [placeholder]=\"placeholderBusqueda\"\n (input)=\"buscar()\"\n />\n @if (busqueda) {\n <button type=\"button\" title=\"Limpiar búsqueda\" (click)=\"limpiarBusqueda()\">\n <td-icon nombre=\"close\" tamano=\"1rem\" />\n </button>\n }\n </label>\n }\n <ng-content select=\"[tdDataTableFilters]\" />\n </div>\n </div>\n\n <div class=\"td-tabla__superficie\">\n <div class=\"td-tabla__resumen\">\n <span><strong>{{ datos.length }}</strong> de {{ total || datos.length }} registros</span>\n <div class=\"td-tabla__resumen-acciones\">\n <ng-content select=\"[tdDataTableActions]\" />\n @for (boton of botonesVisibles(); track boton.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__boton td-tabla__boton--' + (boton.tono || 'neutro')\"\n [disabled]=\"boton.deshabilitado\"\n (click)=\"botonClick.emit(boton)\"\n >\n <td-icon [nombre]=\"boton.icono\" />\n <span>{{ boton.etiqueta }}</span>\n </button>\n }\n </div>\n </div>\n\n @if (datos.length) {\n <div class=\"td-tabla__scroll-x\">\n <div class=\"td-tabla__contenido\" [style.--td-tabla-columnas]=\"columnasGrid()\">\n <div class=\"td-tabla__encabezado\" role=\"row\">\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"columnheader\"\n [class]=\"'td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n {{ columna.encabezado }}\n </div>\n }\n @if (acciones.length) {\n <div role=\"columnheader\" class=\"td-tabla__alinear--centro\">Acciones</div>\n }\n </div>\n\n @if (usaVirtualizacion()) {\n <cdk-virtual-scroll-viewport\n class=\"td-tabla__viewport\"\n [itemSize]=\"itemSize\"\n [style.height]=\"altura\"\n (scroll)=\"alDesplazarViewport()\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n <ng-container\n *cdkVirtualFor=\"let fila of datos; let indice = index; trackBy: trackFila\"\n >\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n </ng-container>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"td-tabla__viewport td-tabla__viewport--normal\"\n [style.max-height]=\"altura\"\n (scroll)=\"alDesplazarLista($event)\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n @for (fila of datos; track trackFila($index, fila); let indice = $index) {\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n }\n </div>\n }\n </div>\n </div>\n\n <ng-template #filaTemplate let-fila let-indice=\"indice\">\n <div\n class=\"td-tabla__fila\"\n role=\"row\"\n [style.height.px]=\"itemSize\"\n >\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"cell\"\n [class]=\"'td-tabla__celda td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n @if (columna.tipo === 'imagen') {\n @if (imagenSrc(columna, fila, indice); as src) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__imagen td-tabla__imagen--' + imagenForma(columna)\"\n [title]=\"imagenAlt(columna, fila, indice)\"\n (click)=\"abrirImagen(columna, fila, indice)\"\n >\n <img [src]=\"src\" [alt]=\"imagenAlt(columna, fila, indice)\" loading=\"lazy\" />\n </button>\n } @else {\n <span\n [class]=\"'td-tabla__imagen td-tabla__imagen--placeholder td-tabla__imagen--' + imagenForma(columna)\"\n >\n <td-icon [nombre]=\"columna.imagen?.placeholder || 'image'\" />\n </span>\n }\n } @else if (\n columna.tipo === 'estado' ||\n columna.tipo === 'booleano' ||\n columna.tipo === 'chip'\n ) {\n <span [class]=\"'td-tabla__chip td-tabla__chip--' + tonoCelda(columna, fila)\">\n {{ textoCelda(columna, fila, indice) }}\n </span>\n } @else {\n <span\n [class.td-tabla__numero]=\"\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n \"\n >\n {{ textoCelda(columna, fila, indice) }}\n </span>\n }\n </div>\n }\n\n @if (acciones.length) {\n <div class=\"td-tabla__acciones-fila\" role=\"cell\">\n @if (usarMenuAcciones(fila)) {\n <td-menu\n ariaLabel=\"Acciones de fila\"\n icono=\"more_vertical\"\n ancho=\"15rem\"\n [oscuro]=\"oscuro\"\n [items]=\"accionesMenu(fila)\"\n (seleccion)=\"ejecutarAccionMenu($event, fila, indice)\"\n />\n } @else {\n @for (accionFila of accionesVisibles(fila); track accionFila.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__accion td-tabla__accion--' + tonoAccion(accionFila, fila)\"\n [title]=\"accionFila.etiqueta\"\n [disabled]=\"accionFila.deshabilitada?.(fila) ?? false\"\n (click)=\"ejecutarAccion(accionFila, fila, indice)\"\n >\n <td-icon [nombre]=\"iconoAccion(accionFila, fila)\" />\n <span class=\"td-tabla__sr-only\">{{ accionFila.etiqueta }}</span>\n </button>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n @if (cargando) {\n <div class=\"td-tabla__cargando\" role=\"status\" aria-live=\"polite\">\n <i aria-hidden=\"true\"></i>\n <span>Cargando más registros...</span>\n </div>\n }\n } @else if (!cargando) {\n <div class=\"td-tabla__vacio\">\n <span><td-icon nombre=\"inbox\" tamano=\"2.4rem\" /></span>\n <h3>{{ textoVacio }}</h3>\n <p>{{ descripcionVacio }}</p>\n </div>\n }\n\n @if (cargando && !datos.length) {\n <div class=\"td-tabla__skeleton\">\n @for (item of [1, 2, 3, 4, 5]; track item) {\n <span></span>\n }\n </div>\n }\n </div>\n</section>\n\n@if (imagenActiva; as imagen) {\n <dialog\n #imagenDialog\n class=\"td-tabla-imagen\"\n [attr.aria-label]=\"imagen.alt\"\n (click)=\"cerrarImagenSiBackdrop($event)\"\n (cancel)=\"cerrarImagen()\"\n (close)=\"imagenActiva = null\"\n >\n <section class=\"td-tabla-imagen__panel\">\n <header>\n <span>{{ imagen.alt }}</span>\n <button type=\"button\" aria-label=\"Cerrar\" (click)=\"cerrarImagen()\">\n <td-icon nombre=\"close\" />\n </button>\n </header>\n <div>\n <img [src]=\"imagen.src\" [alt]=\"imagen.alt\" />\n </div>\n </section>\n </dialog>\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n input,\n Input,\n model,\n output,\n Output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { inject } from '@angular/core';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdDatePickerMode,\n TdDatePickerValue,\n TdDateRange,\n} from './td-date-picker.model';\n\ninterface CalendarDay {\n iso: string;\n day: number;\n currentMonth: boolean;\n today: boolean;\n disabled: boolean;\n}\n\ntype CalendarView = 'dias' | 'meses' | 'anios';\ntype TdDatePickerLimit = string | number | TdDateRange | null | undefined;\n\nlet datePickerSequence = 0;\n\n@Component({\n selector: 'td-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-date-picker\"\n [class.td-date-picker--open]=\"open\"\n [class.td-date-picker--error]=\"hasError()\"\n [class.td-date-picker--disabled]=\"isDisabled()\"\n [class.td-date-picker--dark]=\"dark\"\n >\n <label [id]=\"labelId\">{{ label }}</label>\n <button\n type=\"button\"\n class=\"td-date-picker__trigger\"\n [disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"labelId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"calendarId\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <td-icon nombre=\"calendar\" />\n <span [class.td-date-picker__placeholder]=\"!displayValue\">\n {{ displayValue || placeholder }}\n </span>\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <span\n class=\"td-date-picker__clear\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Limpiar fecha\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".92rem\" />\n </span>\n }\n <td-icon\n class=\"td-date-picker__chevron\"\n [class.td-date-picker__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </button>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-date-picker__message\" [class.td-date-picker__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayMatchWidth]=\"false\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <section\n class=\"td-calendar\"\n [class.td-calendar--dark]=\"dark\"\n [id]=\"calendarId\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"mode === 'rango' ? 'Seleccionar rango de fechas' : 'Seleccionar fecha'\"\n >\n <header class=\"td-calendar__header\">\n <button type=\"button\" [attr.aria-label]=\"previousLabel\" (click)=\"previousPage()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button\n type=\"button\"\n class=\"td-calendar__period\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"changeCalendarView()\"\n >\n {{ periodLabel }}\n @if (calendarView !== 'anios') {\n <td-icon nombre=\"chevron_down\" tamano=\".85rem\" />\n }\n </button>\n <button type=\"button\" [attr.aria-label]=\"nextLabel\" (click)=\"nextPage()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </header>\n\n @if (mode === 'rango') {\n <div class=\"td-calendar__range-summary\">\n <span><small>Desde</small><strong>{{ rangeStartLabel }}</strong></span>\n <td-icon nombre=\"arrow_forward\" />\n <span><small>Hasta</small><strong>{{ rangeEndLabel }}</strong></span>\n </div>\n }\n\n @if (calendarView === 'dias') {\n <div class=\"td-calendar__weekdays\" aria-hidden=\"true\">\n @for (weekday of weekdays; track weekday) {\n <span>{{ weekday }}</span>\n }\n </div>\n\n <div class=\"td-calendar__grid\">\n @for (date of days; track date.iso) {\n <button\n type=\"button\"\n class=\"td-calendar__day\"\n [class.td-calendar__day--outside]=\"!date.currentMonth\"\n [class.td-calendar__day--today]=\"date.today\"\n [class.td-calendar__day--selected]=\"isSelected(date.iso)\"\n [class.td-calendar__day--range]=\"isInRange(date.iso)\"\n [class.td-calendar__day--range-start]=\"isRangeStart(date.iso)\"\n [class.td-calendar__day--range-end]=\"isRangeEnd(date.iso)\"\n [disabled]=\"date.disabled\"\n [attr.aria-label]=\"formatLong(date.iso)\"\n [attr.aria-pressed]=\"isSelected(date.iso)\"\n (mouseenter)=\"hoveredDate = date.iso\"\n (mouseleave)=\"hoveredDate = null\"\n (click)=\"selectDate(date)\"\n >\n {{ date.day }}\n </button>\n }\n </div>\n } @else if (calendarView === 'meses') {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--months\">\n @for (month of months; track month.index) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"month.index === viewDate.getMonth()\"\n [disabled]=\"month.disabled\"\n (click)=\"selectMonth(month.index)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n } @else {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--years\">\n @for (year of years; track year.value) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"year.value === viewDate.getFullYear()\"\n [class.td-calendar__selector--today]=\"year.value === currentYear\"\n [disabled]=\"year.disabled\"\n (click)=\"selectYear(year.value)\"\n >\n {{ year.value }}\n </button>\n }\n </div>\n }\n\n <footer class=\"td-calendar__footer\">\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"goToday()\">\n Hoy\n </button>\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"close()\">\n Cerrar\n </button>\n </footer>\n </section>\n </ng-template>\n `,\n styleUrl: './td-date-picker.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDatePicker),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDatePicker\n implements ControlValueAccessor, FormValueControl<TdDatePickerValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-date-picker-${++datePickerSequence}`;\n private readonly formatter = new Intl.DateTimeFormat('es-PE', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n });\n private readonly monthFormatter = new Intl.DateTimeFormat('es-PE', {\n month: 'long',\n year: 'numeric',\n });\n private readonly longFormatter = new Intl.DateTimeFormat('es-PE', {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n });\n\n @Input() label = 'Fecha';\n @Input() placeholder = 'Selecciona una fecha';\n @Input() mode: TdDatePickerMode = 'fecha';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input({ alias: 'min' }) minDate: TdDatePickerLimit = null;\n @Input({ alias: 'max' }) maxDate: TdDatePickerLimit = null;\n @Input() clearable = true;\n @Input() dark = false;\n\n readonly value = model<TdDatePickerValue>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n @Output() readonly selectionChange = new EventEmitter<TdDatePickerValue>();\n @Output() readonly openedChange = new EventEmitter<boolean>();\n\n protected open = false;\n protected hoveredDate: string | null = null;\n protected viewDate = this.startOfMonth(new Date());\n protected calendarView: CalendarView = 'dias';\n protected readonly currentYear = new Date().getFullYear();\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get calendarId(): string {\n return `${this.generatedId}-calendar`;\n }\n\n protected get weekdays(): string[] {\n return ['L', 'M', 'X', 'J', 'V', 'S', 'D'];\n }\n\n protected get monthLabel(): string {\n const label = this.monthFormatter.format(this.viewDate);\n return label.charAt(0).toUpperCase() + label.slice(1);\n }\n\n protected get periodLabel(): string {\n if (this.calendarView === 'dias') return this.monthLabel;\n if (this.calendarView === 'meses') return String(this.viewDate.getFullYear());\n return `${this.yearPageStart} – ${this.yearPageStart + 11}`;\n }\n\n protected get periodButtonLabel(): string {\n if (this.calendarView === 'dias') return 'Elegir mes y año';\n if (this.calendarView === 'meses') return 'Elegir año';\n return 'Periodo de años';\n }\n\n protected get previousLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes anterior'\n : this.calendarView === 'meses'\n ? 'Año anterior'\n : 'Años anteriores';\n }\n\n protected get nextLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes siguiente'\n : this.calendarView === 'meses'\n ? 'Año siguiente'\n : 'Años siguientes';\n }\n\n protected get months(): { index: number; label: string; disabled: boolean }[] {\n const formatter = new Intl.DateTimeFormat('es-PE', { month: 'short' });\n const year = this.viewDate.getFullYear();\n return Array.from({ length: 12 }, (_, index) => {\n const label = formatter.format(new Date(year, index, 1)).replace('.', '');\n return {\n index,\n label: label.charAt(0).toUpperCase() + label.slice(1),\n disabled: !this.monthIntersectsLimits(year, index),\n };\n });\n }\n\n protected get years(): { value: number; disabled: boolean }[] {\n return Array.from({ length: 12 }, (_, index) => {\n const value = this.yearPageStart + index;\n return { value, disabled: !this.yearIntersectsLimits(value) };\n });\n }\n\n private get yearPageStart(): number {\n return Math.floor(this.viewDate.getFullYear() / 12) * 12;\n }\n\n protected get days(): CalendarDay[] {\n const first = this.startOfMonth(this.viewDate);\n const mondayOffset = (first.getDay() + 6) % 7;\n const start = new Date(first.getFullYear(), first.getMonth(), 1 - mondayOffset);\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index);\n const iso = this.toIso(date);\n return {\n iso,\n day: date.getDate(),\n currentMonth: date.getMonth() === this.viewDate.getMonth(),\n today: iso === this.toIso(new Date()),\n disabled:\n (typeof this.minDate === 'string' && iso < this.minDate) ||\n (typeof this.maxDate === 'string' && iso > this.maxDate),\n };\n });\n }\n\n protected get displayValue(): string {\n const current = this.value();\n if (typeof current === 'string') return this.format(current);\n if (current && typeof current === 'object') {\n if (!this.isValidIsoDate(current.inicio)) return '';\n return this.isValidIsoDate(current.fin)\n ? `${this.format(current.inicio)} — ${this.format(current.fin)}`\n : this.format(current.inicio);\n }\n return '';\n }\n\n protected get rangeStartLabel(): string {\n const inicio = this.currentRange()?.inicio;\n return this.isValidIsoDate(inicio) ? this.format(inicio) : 'Sin elegir';\n }\n\n protected get rangeEndLabel(): string {\n const fin = this.currentRange()?.fin;\n return this.isValidIsoDate(fin) ? this.format(fin) : 'Sin elegir';\n }\n\n private changed: (value: TdDatePickerValue) => void = () => undefined;\n\n writeValue(value: TdDatePickerValue): void {\n this.value.set(this.normalizeValue(value));\n this.syncViewToValue();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdDatePickerValue) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(): void {\n document.getElementById(this.labelId)?.parentElement?.querySelector<HTMLButtonElement>('button')?.focus();\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.syncViewToValue();\n this.calendarView = 'dias';\n this.open = true;\n this.openedChange.emit(true);\n this.cdr.markForCheck();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.hoveredDate = null;\n this.formBridge.markTouched(this.touched, this.touch);\n this.openedChange.emit(false);\n this.cdr.markForCheck();\n }\n\n protected previousPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() - 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() - 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected nextPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() + 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() + 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected changeCalendarView(): void {\n if (this.calendarView === 'dias') {\n this.calendarView = 'meses';\n } else if (this.calendarView === 'meses') {\n this.calendarView = 'anios';\n }\n }\n\n protected selectMonth(month: number): void {\n this.viewDate = new Date(this.viewDate.getFullYear(), month, 1);\n this.calendarView = 'dias';\n }\n\n protected selectYear(year: number): void {\n this.viewDate = new Date(year, this.viewDate.getMonth(), 1);\n this.calendarView = 'meses';\n }\n\n protected goToday(): void {\n const today = this.toIso(new Date());\n if (\n (typeof this.minDate === 'string' && today < this.minDate) ||\n (typeof this.maxDate === 'string' && today > this.maxDate)\n ) return;\n this.viewDate = this.startOfMonth(new Date());\n this.calendarView = 'dias';\n this.selectDate(this.days.find((day) => day.iso === today) ?? {\n iso: today,\n day: new Date().getDate(),\n currentMonth: true,\n today: true,\n disabled: false,\n });\n }\n\n protected selectDate(date: CalendarDay): void {\n if (date.disabled) return;\n if (!date.currentMonth) {\n const parsed = this.fromIso(date.iso);\n this.viewDate = this.startOfMonth(parsed);\n }\n\n if (this.mode === 'fecha') {\n this.setValue(date.iso);\n this.close();\n return;\n }\n\n const range = this.currentRange();\n if (!range || range.fin) {\n this.setValue({ inicio: date.iso, fin: null });\n return;\n }\n\n this.setValue(\n date.iso < range.inicio\n ? { inicio: date.iso, fin: range.inicio }\n : { inicio: range.inicio, fin: date.iso }\n );\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected isSelected(iso: string): boolean {\n const current = this.value();\n if (typeof current === 'string') return current === iso;\n return !!current && (current.inicio === iso || current.fin === iso);\n }\n\n protected isRangeStart(iso: string): boolean {\n return this.currentRange()?.inicio === iso;\n }\n\n protected isRangeEnd(iso: string): boolean {\n return this.currentRange()?.fin === iso;\n }\n\n protected isInRange(iso: string): boolean {\n const range = this.currentRange();\n if (!range) return false;\n const end = range.fin ?? this.hoveredDate;\n if (!end) return false;\n const start = end < range.inicio ? end : range.inicio;\n const finish = end < range.inicio ? range.inicio : end;\n return iso > start && iso < finish;\n }\n\n protected formatLong(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.longFormatter.format(date) : iso;\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openPanel();\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'PageUp') {\n event.preventDefault();\n this.previousPage();\n } else if (event.key === 'PageDown') {\n event.preventDefault();\n this.nextPage();\n }\n }\n\n private currentRange(): TdDateRange | null {\n const current = this.value();\n return current && typeof current === 'object' ? current : null;\n }\n\n private setValue(value: TdDatePickerValue): void {\n this.value.set(value);\n this.changed(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private syncViewToValue(): void {\n const current = this.value();\n const iso = typeof current === 'string' ? current : current?.inicio;\n if (this.isValidIsoDate(iso)) this.viewDate = this.startOfMonth(this.fromIso(iso));\n }\n\n private normalizeValue(value: TdDatePickerValue): TdDatePickerValue {\n if (!value) return null;\n if (typeof value === 'string') return this.isValidIsoDate(value) ? value : null;\n if (!this.isValidIsoDate(value.inicio)) return null;\n return {\n inicio: value.inicio,\n fin: this.isValidIsoDate(value.fin) ? value.fin : null,\n };\n }\n\n private format(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.formatter.format(date).replace('.', '') : '';\n }\n\n private fromIso(iso: string): Date {\n if (!this.isIsoDateText(iso)) return new Date(Number.NaN);\n const [year, month, day] = iso.split('-').map(Number);\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n )\n ? date\n : new Date(Number.NaN);\n }\n\n private isValidIsoDate(value: unknown): value is string {\n return typeof value === 'string' && this.isValidDate(this.fromIso(value));\n }\n\n private isIsoDateText(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n }\n\n private isValidDate(value: Date): boolean {\n return !Number.isNaN(value.getTime());\n }\n\n private toIso(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n private startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n private monthIntersectsLimits(year: number, month: number): boolean {\n const first = this.toIso(new Date(year, month, 1));\n const last = this.toIso(new Date(year, month + 1, 0));\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n\n private yearIntersectsLimits(year: number): boolean {\n const first = `${year}-01-01`;\n const last = `${year}-12-31`;\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type TdDialogTamano = 'pequeno' | 'mediano' | 'grande' | 'pantalla';\n\nexport interface TdDialogConfig<D = unknown> {\n data?: D;\n titulo?: string;\n subtitulo?: string;\n icono?: string;\n tamano?: TdDialogTamano;\n ancho?: string;\n alto?: string;\n maxAncho?: string;\n maxAlto?: string;\n mostrarCerrar?: boolean;\n cerrarAlNavegar?: boolean;\n deshabilitarCierre?: boolean;\n autoFocus?: 'dialog' | 'first-tabbable' | 'first-heading' | string | boolean;\n restaurarFoco?: boolean;\n oscuro?: boolean;\n draggable?: boolean;\n panelClass?: string | string[];\n ariaLabel?: string;\n}\n\nexport interface TdDialogPanelData<D = unknown> {\n component: Type<unknown>;\n config: TdDialogConfig<D>;\n fullscreen: boolean;\n}\n\nexport const TD_DIALOG_DATA = new InjectionToken<unknown>('TD_DIALOG_DATA');\nexport const TD_DIALOG_CONFIG = new InjectionToken<TdDialogConfig>('TD_DIALOG_CONFIG');\n\nexport interface TdDialogRefLike<R = unknown> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n close(result?: R): void;\n updateSize(width?: string | number, height?: string | number): this;\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { Observable } from 'rxjs';\nimport { TdDialogRefLike } from './td-dialog.model';\n\nexport class TdDialogRef<R = unknown> implements TdDialogRefLike<R> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n\n constructor(private readonly ref: DialogRef<R, unknown>) {\n this.closed = ref.closed;\n this.id = ref.id;\n }\n\n close(result?: R): void {\n this.ref.close(result);\n }\n\n updateSize(width?: string | number, height?: string | number): this {\n this.ref.updateSize(width, height);\n return this;\n }\n}\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Component({\n selector: 'td-dialog-panel',\n imports: [CdkDrag, CdkDragHandle, NgComponentOutlet, TdIcon],\n template: `\n <section\n class=\"td-dialog\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragBoundary=\".cdk-overlay-container\"\n [cdkDragDisabled]=\"!draggableEnabled\"\n [class.td-dialog--oscuro]=\"payload.config.oscuro\"\n [class.td-dialog--pantalla]=\"payload.fullscreen\"\n [class.td-dialog--draggable]=\"draggableEnabled\"\n [attr.aria-label]=\"payload.config.ariaLabel || payload.config.titulo || 'Diálogo'\"\n >\n @if (\n payload.config.titulo ||\n payload.config.subtitulo ||\n payload.config.icono ||\n payload.config.mostrarCerrar !== false\n ) {\n <header class=\"td-dialog__header\">\n <div class=\"td-dialog__drag-zone\" cdkDragHandle>\n @if (payload.config.icono) {\n <span class=\"td-dialog__icono\">\n <td-icon [nombre]=\"payload.config.icono\" tamano=\"1.25rem\" />\n </span>\n }\n <div class=\"td-dialog__titulos\">\n @if (payload.config.titulo) {\n <h2>{{ payload.config.titulo }}</h2>\n }\n @if (payload.config.subtitulo) {\n <p>{{ payload.config.subtitulo }}</p>\n }\n </div>\n </div>\n @if (payload.config.mostrarCerrar !== false) {\n <button\n type=\"button\"\n class=\"td-dialog__cerrar\"\n aria-label=\"Cerrar diálogo\"\n title=\"Cerrar\"\n (click)=\"dialogRef.close()\"\n >\n <td-icon nombre=\"close\" />\n </button>\n }\n </header>\n }\n\n <div class=\"td-dialog__contenido\">\n <ng-container *ngComponentOutlet=\"payload.component\" />\n </div>\n </section>\n `,\n styleUrl: './td-dialog-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogPanel {\n protected readonly payload = inject<TdDialogPanelData>(DIALOG_DATA);\n protected readonly dialogRef = inject(TdDialogRef);\n\n protected get draggableEnabled(): boolean {\n return !!this.payload.config.draggable && !this.payload.fullscreen && !this.isMobileLike();\n }\n\n private isMobileLike(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px), (pointer: coarse)').matches;\n }\n}\n","import { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { Injectable, Type, inject } from '@angular/core';\nimport { TD_DIALOG_CONFIG, TD_DIALOG_DATA, TdDialogConfig, TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogPanel } from './td-dialog-panel';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Injectable({ providedIn: 'root' })\nexport class TdDialog {\n private readonly dialog = inject(Dialog);\n\n open<C, D = unknown, R = unknown>(\n component: Type<C>,\n config: TdDialogConfig<D> = {}\n ): TdDialogRef<R> {\n const size = config.tamano ?? 'mediano';\n const mobile =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px)').matches;\n const fullscreen = size === 'pantalla' || (mobile && size !== 'pequeno');\n const width = fullscreen ? '100%' : config.ancho ?? this.widthFor(size);\n const maxWidth = fullscreen ? '100%' : config.maxAncho ?? 'calc(100vw - 2rem)';\n const maxHeight = fullscreen ? '100dvh' : config.maxAlto ?? 'calc(100dvh - 2rem)';\n let publicRef!: TdDialogRef<R>;\n\n const cdkRef = this.dialog.open<R, TdDialogPanelData<D>, TdDialogPanel>(\n TdDialogPanel,\n {\n data: { component, config, fullscreen },\n width,\n height: fullscreen ? '100dvh' : config.alto,\n maxWidth,\n maxHeight,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: this.panelClasses(config, fullscreen),\n disableClose: config.deshabilitarCierre ?? false,\n closeOnNavigation: config.cerrarAlNavegar ?? true,\n autoFocus: config.autoFocus ?? 'first-tabbable',\n restoreFocus: config.restaurarFoco ?? true,\n ariaLabel: config.ariaLabel ?? config.titulo,\n ariaModal: true,\n providers: (ref: DialogRef<R, TdDialogPanel>) => {\n publicRef = new TdDialogRef<R>(ref as DialogRef<R, unknown>);\n return [\n { provide: TD_DIALOG_DATA, useValue: config.data },\n { provide: TD_DIALOG_CONFIG, useValue: config },\n { provide: TdDialogRef, useValue: publicRef },\n ];\n },\n }\n );\n\n return publicRef ?? new TdDialogRef<R>(cdkRef as DialogRef<R, unknown>);\n }\n\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n private widthFor(size: TdDialogConfig['tamano']): string {\n const widths = {\n pequeno: 'min(28rem, calc(100vw - 2rem))',\n mediano: 'min(40rem, calc(100vw - 2rem))',\n grande: 'min(64rem, calc(100vw - 2rem))',\n pantalla: '100%',\n };\n return widths[size ?? 'mediano'];\n }\n\n private panelClasses(config: TdDialogConfig, fullscreen: boolean): string[] {\n const extra = Array.isArray(config.panelClass)\n ? config.panelClass\n : config.panelClass\n ? [config.panelClass]\n : [];\n return [\n 'td-dialog-overlay',\n `td-dialog-overlay--${config.tamano ?? 'mediano'}`,\n ...(fullscreen ? ['td-dialog-overlay--fullscreen'] : []),\n ...extra,\n ];\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'td-dialog-actions',\n template: `<ng-content />`,\n styles: `\n :host {\n position: sticky;\n z-index: 3;\n bottom: -1.5rem;\n display: flex;\n min-height: 3.7rem;\n flex: 0 0 auto;\n align-items: center;\n justify-content: flex-end;\n gap: .5rem;\n margin: auto -1.5rem -1.5rem;\n margin-top: auto;\n border-top: 1px solid var(--td-dialog-border, #e6e9f0);\n padding: .65rem 1.25rem;\n background: var(--td-dialog-footer, #fafbfc);\n box-shadow: 0 -8px 22px rgba(15, 23, 42, .035);\n }\n\n :host ::ng-deep button {\n display: inline-flex;\n min-height: 2.25rem;\n align-items: center;\n justify-content: center;\n gap: .45rem;\n border: 1px solid var(--td-dialog-border, #dfe3eb);\n border-radius: .6rem;\n padding: .5rem .85rem;\n color: var(--td-dialog-text, #263147);\n background: var(--td-dialog-surface, #fff);\n font: 750 .75rem/1 system-ui, sans-serif;\n cursor: pointer;\n }\n\n :host ::ng-deep button:hover { border-color: #9b91e3; background: #f7f5ff; }\n :host ::ng-deep button[tdDialogPrimary] {\n border-color: transparent;\n color: #fff;\n background: linear-gradient(135deg, #5746d8, #7657df);\n box-shadow: 0 7px 16px rgba(87, 70, 216, .2);\n }\n :host ::ng-deep button:disabled { opacity: .5; cursor: not-allowed; }\n\n @media (max-width: 520px) {\n :host {\n bottom: -1.1rem;\n min-height: auto;\n align-items: stretch;\n flex-direction: column-reverse;\n margin-right: -1.1rem;\n margin-bottom: -1.1rem;\n margin-left: -1.1rem;\n padding: .7rem 1.1rem;\n }\n :host ::ng-deep button { width: 100%; }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogActions {}\n","import { Directive, HostListener, Input, inject } from '@angular/core';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Directive({\n selector: '[tdDialogClose]',\n})\nexport class TdDialogClose {\n private readonly dialogRef = inject(TdDialogRef);\n\n @Input('tdDialogClose') result: unknown;\n\n @HostListener('click')\n protected close(): void {\n this.dialogRef.close(this.result);\n }\n}\n\n@Directive({\n selector: '[tdDialogPrimary]',\n})\nexport class TdDialogPrimary {}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'td-footer',\n templateUrl: './td-footer.html',\n styleUrl: './td-footer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFooter {\n @Input() empresa = 'TelcomDev';\n @Input() texto = 'Todos los derechos reservados.';\n @Input() version = '';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() anio = new Date().getFullYear();\n}\n","<footer\n class=\"td-footer\"\n [class.td-footer--oscuro]=\"oscuro\"\n [class.td-footer--compacto]=\"compacto\"\n>\n <div class=\"td-footer__identidad\">\n <span>© {{ anio }} {{ empresa }}</span>\n @if (texto) {\n <small>{{ texto }}</small>\n }\n </div>\n\n <nav class=\"td-footer__enlaces\" aria-label=\"Enlaces del pie de página\">\n <ng-content select=\"[tdFooterLinks]\" />\n </nav>\n\n <div class=\"td-footer__final\">\n <ng-content select=\"[tdFooterActions]\" />\n @if (version) {\n <span class=\"td-footer__version\">v{{ version }}</span>\n }\n </div>\n</footer>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdFileAttachment, TdFileSource, TdFileViewerArchivo, TdFileViewerKind } from './td-file-viewer.model';\n\ntype PdfJsModule = typeof import('pdfjs-dist');\ntype PdfDocumentProxy = {\n numPages: number;\n getPage(pageNumber: number): Promise<{\n getViewport(options: { scale: number }): { width: number; height: number };\n render(options: { canvasContext: CanvasRenderingContext2D; viewport: object }): PdfRenderTask;\n }>;\n destroy?(): Promise<void>;\n};\ntype PdfRenderTask = { promise: Promise<void>; cancel(): void };\n\n@Component({\n selector: 'td-file-viewer',\n imports: [TdIcon],\n templateUrl: './td-file-viewer.html',\n styleUrl: './td-file-viewer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFileViewer {\n private readonly cdr = inject(ChangeDetectorRef);\n @ViewChild('visorDialog') private visorDialog?: ElementRef<HTMLDialogElement>;\n @ViewChild('pdfCanvas') private pdfCanvas?: ElementRef<HTMLCanvasElement>;\n\n private archivosNormalizados: TdFileAttachment[] = [];\n\n @Input()\n set archivos(value: TdFileViewerArchivo[] | null | undefined) {\n this.archivosNormalizados = (value ?? []).map((archivo, indice) => this.normalizarArchivo(archivo, indice));\n }\n\n get archivos(): TdFileAttachment[] {\n return this.archivosNormalizados;\n }\n\n @Input() titulo = 'Archivos adjuntos';\n @Input() descripcion = 'Visualiza imagenes, PDF y descarga otros formatos.';\n @Input() oscuro = false;\n @Input() compacto = false;\n\n @Output() readonly seleccionar = new EventEmitter<TdFileAttachment>();\n @Output() readonly descargar = new EventEmitter<TdFileAttachment>();\n\n protected seleccionado: TdFileAttachment | null = null;\n protected zoom = 1;\n protected rotacion = 0;\n protected pdfCargando = false;\n protected pdfError = '';\n protected pdfPaginaActual = 1;\n protected pdfTotalPaginas = 0;\n\n private pdfJs?: PdfJsModule;\n private pdfDocumento?: PdfDocumentProxy;\n private pdfRenderTask?: PdfRenderTask;\n private pdfRenderToken = 0;\n\n protected abrir(archivo: TdFileAttachment): void {\n this.limpiarPdf();\n this.seleccionado = archivo;\n this.zoom = 1;\n this.rotacion = 0;\n this.pdfPaginaActual = 1;\n setTimeout(() => {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n if (this.esPdf(archivo)) {\n void this.cargarPdf(archivo);\n }\n });\n this.seleccionar.emit(archivo);\n }\n\n protected cerrar(): void {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.seleccionado = null;\n this.zoom = 1;\n this.rotacion = 0;\n this.limpiarPdf();\n }\n\n protected cerrarSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrar();\n }\n }\n\n protected descargarArchivo(archivo: TdFileAttachment, event?: MouseEvent): void {\n event?.stopPropagation();\n this.descargar.emit(archivo);\n }\n\n protected tipoArchivo(archivo: TdFileAttachment): TdFileViewerKind {\n const tipo = `${archivo.tipo ?? ''} ${archivo.nombre} ${archivo.url}`.toLowerCase();\n if (tipo.includes('image/') || /\\.(png|jpe?g|gif|webp|svg)$/i.test(tipo)) return 'imagen';\n if (tipo.includes('pdf') || /\\.pdf(\\?|#|$)/i.test(tipo)) return 'pdf';\n if (tipo.includes('excel') || tipo.includes('spreadsheet') || /\\.(xls|xlsx|csv)(\\?|#|$)/i.test(tipo)) return 'excel';\n if (tipo.includes('xml') || /\\.xml(\\?|#|$)/i.test(tipo)) return 'xml';\n if (tipo.includes('zip') || /\\.(zip|rar|7z)(\\?|#|$)/i.test(tipo)) return 'zip';\n return 'archivo';\n }\n\n protected iconoArchivo(archivo: TdFileAttachment): string {\n const tipo = this.tipoArchivo(archivo);\n if (tipo === 'imagen') return 'image';\n if (tipo === 'archivo') return 'file';\n return tipo;\n }\n\n protected esImagen(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'imagen';\n }\n\n protected esPdf(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'pdf';\n }\n\n protected tieneVistaPrevia(archivo: TdFileAttachment): boolean {\n return this.esImagen(archivo) || this.esPdf(archivo);\n }\n\n protected indiceSeleccionado(): number {\n return this.seleccionado\n ? this.archivos.findIndex((archivo) => archivo.id === this.seleccionado?.id)\n : -1;\n }\n\n protected seleccionarAnterior(): void {\n const indice = this.indiceSeleccionado();\n if (indice <= 0) return;\n this.abrir(this.archivos[indice - 1]);\n }\n\n protected seleccionarSiguiente(): void {\n const indice = this.indiceSeleccionado();\n if (indice < 0 || indice >= this.archivos.length - 1) return;\n this.abrir(this.archivos[indice + 1]);\n }\n\n protected cambiarZoom(delta: number): void {\n this.zoom = Math.min(2.5, Math.max(0.5, Number((this.zoom + delta).toFixed(2))));\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected restablecerZoom(): void {\n this.zoom = 1;\n this.rotacion = 0;\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected rotar(): void {\n this.rotacion = (this.rotacion + 90) % 360;\n }\n\n protected paginaPdfAnterior(): void {\n if (this.pdfPaginaActual <= 1) return;\n this.pdfPaginaActual -= 1;\n void this.renderizarPaginaPdf();\n }\n\n protected paginaPdfSiguiente(): void {\n if (!this.pdfTotalPaginas || this.pdfPaginaActual >= this.pdfTotalPaginas) return;\n this.pdfPaginaActual += 1;\n void this.renderizarPaginaPdf();\n }\n\n protected tamanoLegible(archivo: TdFileAttachment): string {\n if (archivo.tamano === null || archivo.tamano === undefined || archivo.tamano === '') return '';\n if (typeof archivo.tamano === 'string') return archivo.tamano;\n\n const unidades = ['B', 'KB', 'MB', 'GB'];\n let valor = archivo.tamano;\n let indice = 0;\n while (valor >= 1024 && indice < unidades.length - 1) {\n valor /= 1024;\n indice += 1;\n }\n return `${valor.toFixed(indice ? 1 : 0)} ${unidades[indice]}`;\n }\n\n private async cargarPdf(archivo: TdFileAttachment): Promise<void> {\n const token = ++this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.pdfTotalPaginas = 0;\n this.cdr.markForCheck();\n\n try {\n const pdfjs = await this.obtenerPdfJs();\n const loadingTask = pdfjs.getDocument(this.obtenerFuentePdf(archivo));\n const documento = (await loadingTask.promise) as unknown as PdfDocumentProxy;\n if (token !== this.pdfRenderToken) {\n await documento.destroy?.();\n return;\n }\n\n this.pdfDocumento = documento;\n this.pdfTotalPaginas = documento.numPages;\n this.pdfPaginaActual = Math.min(Math.max(this.pdfPaginaActual, 1), documento.numPages || 1);\n this.pdfCargando = false;\n this.cdr.markForCheck();\n await this.renderizarPaginaPdf();\n } catch {\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo cargar la vista previa del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async renderizarPaginaPdf(): Promise<void> {\n if (!this.pdfDocumento || !this.pdfCanvas) return;\n\n const token = this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.cdr.markForCheck();\n\n try {\n this.pdfRenderTask?.cancel();\n const pagina = await this.pdfDocumento.getPage(this.pdfPaginaActual);\n if (token !== this.pdfRenderToken) return;\n\n const canvas = this.pdfCanvas.nativeElement;\n const contexto = canvas.getContext('2d');\n if (!contexto) throw new Error('Canvas context unavailable');\n\n const dpr = Math.max(window.devicePixelRatio || 1, 1);\n const viewport = pagina.getViewport({ scale: this.zoom });\n canvas.width = Math.floor(viewport.width * dpr);\n canvas.height = Math.floor(viewport.height * dpr);\n canvas.style.width = `${viewport.width}px`;\n canvas.style.height = `${viewport.height}px`;\n\n contexto.setTransform(dpr, 0, 0, dpr, 0, 0);\n contexto.clearRect(0, 0, viewport.width, viewport.height);\n\n const renderTask = pagina.render({ canvasContext: contexto, viewport }) as PdfRenderTask;\n this.pdfRenderTask = renderTask;\n await renderTask.promise;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.cdr.markForCheck();\n } catch (error) {\n if ((error as { name?: string })?.name === 'RenderingCancelledException') return;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo renderizar esta pagina del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async obtenerPdfJs(): Promise<PdfJsModule> {\n if (this.pdfJs) return this.pdfJs;\n\n const pdfjs = await import('pdfjs-dist');\n pdfjs.GlobalWorkerOptions.workerSrc = new URL(\n 'pdfjs-dist/build/pdf.worker.min.mjs',\n import.meta.url\n ).toString();\n this.pdfJs = pdfjs;\n return pdfjs;\n }\n\n private limpiarPdf(): void {\n this.pdfRenderToken += 1;\n this.pdfRenderTask?.cancel();\n this.pdfRenderTask = undefined;\n void this.pdfDocumento?.destroy?.();\n this.pdfDocumento = undefined;\n this.pdfCargando = false;\n this.pdfError = '';\n this.pdfPaginaActual = 1;\n this.pdfTotalPaginas = 0;\n }\n\n private normalizarArchivo(archivo: TdFileViewerArchivo, indice: number): TdFileAttachment {\n if (this.esAdjuntoNormalizado(archivo)) {\n return archivo;\n }\n\n const contentType = archivo.type || archivo.contentType || this.inferirContentType(archivo.fileName, archivo.file);\n const url = this.normalizarFileUrl(archivo.file, contentType);\n\n return {\n id: archivo.id ?? `${archivo.fileName}-${indice}`,\n nombre: archivo.fileName,\n url,\n tipo: contentType,\n tamano: archivo.size,\n descripcion: archivo.description,\n thumbnailUrl: archivo.thumbnailUrl,\n descargable: archivo.downloadable,\n };\n }\n\n private esAdjuntoNormalizado(archivo: TdFileViewerArchivo): archivo is TdFileAttachment {\n return 'nombre' in archivo && 'url' in archivo;\n }\n\n private normalizarFileUrl(file: string, contentType: string): string {\n const value = file.trim();\n if (!value) return '';\n if (/^(https?:|blob:|data:)/i.test(value)) return value;\n return `data:${contentType};base64,${value}`;\n }\n\n private inferirContentType(fileName: string, file: string): string {\n const value = `${fileName} ${file.slice(0, 80)}`.toLowerCase();\n if (value.includes('data:')) {\n const match = file.match(/^data:([^;,]+)/i);\n if (match?.[1]) return match[1];\n }\n if (/\\.(png)$/i.test(fileName)) return 'image/png';\n if (/\\.(jpe?g)$/i.test(fileName)) return 'image/jpeg';\n if (/\\.(gif)$/i.test(fileName)) return 'image/gif';\n if (/\\.(webp)$/i.test(fileName)) return 'image/webp';\n if (/\\.(svg)$/i.test(fileName)) return 'image/svg+xml';\n if (/\\.(pdf)$/i.test(fileName)) return 'application/pdf';\n if (/\\.(xlsx)$/i.test(fileName)) return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (/\\.(xls)$/i.test(fileName)) return 'application/vnd.ms-excel';\n if (/\\.(csv)$/i.test(fileName)) return 'text/csv';\n if (/\\.(xml)$/i.test(fileName)) return 'application/xml';\n if (/\\.(zip)$/i.test(fileName)) return 'application/zip';\n return 'application/octet-stream';\n }\n\n private obtenerFuentePdf(archivo: TdFileAttachment): { url: string } | { data: Uint8Array } {\n const dataUrl = archivo.url.match(/^data:application\\/pdf[^,]*,(.+)$/i);\n if (!dataUrl?.[1]) return { url: archivo.url };\n return { data: this.base64ABytes(dataUrl[1]) };\n }\n\n private base64ABytes(base64: string): Uint8Array {\n const limpio = decodeURIComponent(base64).replace(/\\s/g, '');\n const binario = atob(limpio);\n const bytes = new Uint8Array(binario.length);\n for (let i = 0; i < binario.length; i += 1) {\n bytes[i] = binario.charCodeAt(i);\n }\n return bytes;\n }\n}\n","<section\n class=\"td-file-viewer\"\n [class.td-file-viewer--dark]=\"oscuro\"\n [class.td-file-viewer--compact]=\"compacto\"\n>\n <header class=\"td-file-viewer__header\">\n <div>\n <span>{{ archivos.length }} archivo{{ archivos.length === 1 ? '' : 's' }}</span>\n <h3>{{ titulo }}</h3>\n @if (descripcion) {\n <p>{{ descripcion }}</p>\n }\n </div>\n </header>\n\n @if (archivos.length) {\n <div class=\"td-file-viewer__grid\">\n @for (archivo of archivos; track archivo.id) {\n <button type=\"button\" class=\"td-file-viewer__item\" (click)=\"abrir(archivo)\">\n <span class=\"td-file-viewer__preview\" [class.td-file-viewer__preview--image]=\"tipoArchivo(archivo) === 'imagen'\">\n @if (tipoArchivo(archivo) === 'imagen') {\n <img [src]=\"archivo.thumbnailUrl || archivo.url\" [alt]=\"archivo.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"1.55rem\" />\n }\n </span>\n\n <span class=\"td-file-viewer__meta\">\n <strong>{{ archivo.nombre }}</strong>\n @if (archivo.descripcion) {\n <small>{{ archivo.descripcion }}</small>\n }\n <em>\n {{ tieneVistaPrevia(archivo) ? 'Vista previa disponible' : 'Descarga / apertura externa' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </em>\n </span>\n\n @if (archivo.descargable !== false) {\n <span\n role=\"button\"\n tabindex=\"-1\"\n class=\"td-file-viewer__download\"\n title=\"Descargar\"\n (click)=\"descargarArchivo(archivo, $event)\"\n >\n <td-icon nombre=\"download\" tamano=\"1rem\" />\n </span>\n }\n </button>\n }\n </div>\n } @else {\n <div class=\"td-file-viewer__empty\">\n <td-icon nombre=\"file\" tamano=\"2rem\" />\n <strong>No hay adjuntos</strong>\n <span>Cuando existan archivos apareceran en esta zona.</span>\n </div>\n }\n</section>\n\n@if (seleccionado; as archivo) {\n <dialog\n #visorDialog\n class=\"td-file-viewer-modal\"\n [class.td-file-viewer-modal--dark]=\"oscuro\"\n [attr.aria-label]=\"archivo.nombre\"\n (click)=\"cerrarSiBackdrop($event)\"\n (cancel)=\"cerrar()\"\n (close)=\"seleccionado = null\"\n >\n <section class=\"td-file-viewer-modal__panel\">\n <header class=\"td-file-viewer-modal__topbar\">\n <div class=\"td-file-viewer-modal__title\">\n <span class=\"td-file-viewer-modal__badge\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\".95rem\" />\n {{ tipoArchivo(archivo) }}\n </span>\n <h3>{{ archivo.nombre }}</h3>\n @if (archivo.descripcion || tamanoLegible(archivo)) {\n <p>\n {{ archivo.descripcion || 'Archivo adjunto' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </p>\n }\n </div>\n\n <nav class=\"td-file-viewer-modal__toolbar\" aria-label=\"Acciones del visor\">\n <button type=\"button\" title=\"Anterior\" [disabled]=\"indiceSeleccionado() <= 0\" (click)=\"seleccionarAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button type=\"button\" title=\"Siguiente\" [disabled]=\"indiceSeleccionado() >= archivos.length - 1\" (click)=\"seleccionarSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n\n @if (esImagen(archivo) || esPdf(archivo)) {\n <span class=\"td-file-viewer-modal__divider\"></span>\n <button type=\"button\" title=\"Alejar\" (click)=\"cambiarZoom(-0.1)\">\n <span aria-hidden=\"true\">-</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__zoom\" title=\"Restablecer zoom\" (click)=\"restablecerZoom()\">\n {{ (zoom * 100).toFixed(0) }}%\n </button>\n <button type=\"button\" title=\"Acercar\" (click)=\"cambiarZoom(0.1)\">\n <span aria-hidden=\"true\">+</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Ajustar\" (click)=\"restablecerZoom()\">\n Ajustar\n </button>\n @if (esImagen(archivo)) {\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Rotar\" (click)=\"rotar()\">\n Rotar\n </button>\n }\n }\n\n <span class=\"td-file-viewer-modal__divider\"></span>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\" title=\"Abrir en nueva pestana\">\n <td-icon nombre=\"visibility\" />\n </a>\n @if (archivo.descargable !== false) {\n <a [href]=\"archivo.url\" [download]=\"archivo.nombre\" target=\"_blank\" rel=\"noopener\" title=\"Descargar\">\n <td-icon nombre=\"download\" />\n </a>\n }\n <button type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\" (click)=\"cerrar()\">\n <td-icon nombre=\"close\" />\n </button>\n </nav>\n </header>\n\n <div class=\"td-file-viewer-modal__workspace\">\n <main class=\"td-file-viewer-modal__canvas\">\n @if (esImagen(archivo)) {\n <img\n class=\"td-file-viewer-modal__image\"\n [src]=\"archivo.url\"\n [alt]=\"archivo.nombre\"\n [style.transform]=\"'scale(' + zoom + ') rotate(' + rotacion + 'deg)'\"\n />\n } @else if (esPdf(archivo)) {\n <section class=\"td-file-viewer-modal__pdf-shell\">\n <div class=\"td-file-viewer-modal__pdf-head\">\n <span>\n <td-icon nombre=\"pdf\" />\n Vista PDF\n </span>\n <div class=\"td-file-viewer-modal__pdf-pages\">\n <button type=\"button\" title=\"Pagina anterior\" [disabled]=\"pdfPaginaActual <= 1 || pdfCargando\" (click)=\"paginaPdfAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <small>\n Pagina {{ pdfPaginaActual }} de {{ pdfTotalPaginas || '-' }}\n </small>\n <button type=\"button\" title=\"Pagina siguiente\" [disabled]=\"!pdfTotalPaginas || pdfPaginaActual >= pdfTotalPaginas || pdfCargando\" (click)=\"paginaPdfSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </div>\n </div>\n <div class=\"td-file-viewer-modal__pdf-canvas-wrap\">\n <canvas #pdfCanvas class=\"td-file-viewer-modal__pdf-canvas\"></canvas>\n\n @if (pdfCargando) {\n <div class=\"td-file-viewer-modal__pdf-state\">\n <span class=\"td-file-viewer-modal__spinner\"></span>\n <strong>Cargando PDF</strong>\n <small>Preparando pagina {{ pdfPaginaActual }}...</small>\n </div>\n }\n\n @if (pdfError) {\n <div class=\"td-file-viewer-modal__pdf-state td-file-viewer-modal__pdf-state--error\">\n <td-icon nombre=\"alert\" tamano=\"2rem\" />\n <strong>{{ pdfError }}</strong>\n <small>Prueba abrirlo en una nueva pestaña o descargarlo.</small>\n </div>\n }\n </div>\n </section>\n } @else {\n <div class=\"td-file-viewer-modal__fallback\">\n <span class=\"td-file-viewer-modal__fallback-icon\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"3rem\" />\n </span>\n <h4>Vista previa no disponible</h4>\n <p>Este tipo de archivo debe abrirse o descargarse con una aplicacion compatible.</p>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\">\n Abrir archivo\n </a>\n </div>\n }\n </main>\n\n @if (archivos.length > 1) {\n <footer class=\"td-file-viewer-modal__strip\">\n @for (item of archivos; track item.id) {\n <button\n type=\"button\"\n [class.td-file-viewer-modal__thumb--active]=\"item.id === archivo.id\"\n [title]=\"item.nombre\"\n (click)=\"abrir(item)\"\n >\n @if (tipoArchivo(item) === 'imagen') {\n <img [src]=\"item.thumbnailUrl || item.url\" [alt]=\"item.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(item)\" />\n }\n @if (!tieneVistaPrevia(item)) {\n <span class=\"td-file-viewer-modal__no-preview\">Sin preview</span>\n }\n </button>\n }\n </footer>\n }\n </div>\n </section>\n </dialog>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport interface TdHeaderNotificacion {\n id: string | number;\n titulo: string;\n descripcion?: string;\n fecha?: string;\n icono?: string;\n leida?: boolean;\n}\n\nexport type TdHeaderAccionPerfil = 'perfil' | 'configuracion' | 'salir';\n\n@Component({\n selector: 'td-header',\n imports: [TdIcon],\n templateUrl: './td-header.html',\n styleUrl: './td-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdHeader {\n @Input() menuAbierto = true;\n @Input() mostrarMenu = true;\n @Input() usuario = '';\n @Input() cargo = '';\n @Input() avatarUrl = '';\n @Input() notificaciones: TdHeaderNotificacion[] = [];\n @Input() oscuro = false;\n @Input() fijo = true;\n\n @Output() readonly menuToggle = new EventEmitter<void>();\n @Output() readonly notificacionSeleccionada = new EventEmitter<TdHeaderNotificacion>();\n @Output() readonly verTodasNotificaciones = new EventEmitter<void>();\n @Output() readonly accionPerfil = new EventEmitter<TdHeaderAccionPerfil>();\n\n protected panelNotificacionesAbierto = false;\n protected panelPerfilAbierto = false;\n\n protected alternarMenu(): void {\n this.menuToggle.emit();\n }\n\n protected alternarNotificaciones(): void {\n this.panelNotificacionesAbierto = !this.panelNotificacionesAbierto;\n this.panelPerfilAbierto = false;\n }\n\n protected alternarPerfil(): void {\n this.panelPerfilAbierto = !this.panelPerfilAbierto;\n this.panelNotificacionesAbierto = false;\n }\n\n protected seleccionarNotificacion(notificacion: TdHeaderNotificacion): void {\n this.notificacionSeleccionada.emit(notificacion);\n this.panelNotificacionesAbierto = false;\n }\n\n protected emitirAccionPerfil(accion: TdHeaderAccionPerfil): void {\n this.accionPerfil.emit(accion);\n this.panelPerfilAbierto = false;\n }\n\n protected notificacionesNoLeidas(): number {\n return this.notificaciones.filter((item) => !item.leida).length;\n }\n\n protected inicialesUsuario(): string {\n const partes = this.usuario.trim().split(/\\s+/).filter(Boolean);\n return (\n partes\n .slice(0, 2)\n .map((parte) => parte.charAt(0))\n .join('') || 'U'\n ).toUpperCase();\n }\n\n @HostListener('document:keydown.escape')\n protected cerrarConEscape(): void {\n this.panelNotificacionesAbierto = false;\n this.panelPerfilAbierto = false;\n }\n}\n","<header\n class=\"td-header\"\n [class.td-header--oscuro]=\"oscuro\"\n [class.td-header--fijo]=\"fijo\"\n>\n <div class=\"td-header__inicio\">\n @if (mostrarMenu) {\n <button\n class=\"td-header__boton td-header__menu\"\n type=\"button\"\n [attr.aria-label]=\"menuAbierto ? 'Cerrar sidebar' : 'Abrir sidebar'\"\n [attr.aria-expanded]=\"menuAbierto\"\n (click)=\"alternarMenu()\"\n >\n <td-icon [nombre]=\"menuAbierto ? 'close' : 'menu'\" />\n </button>\n }\n\n <ng-content select=\"[tdHeaderStart]\" />\n </div>\n\n <div class=\"td-header__centro\">\n <ng-content select=\"[tdHeaderCenter]\" />\n </div>\n\n <div class=\"td-header__acciones\">\n <ng-content select=\"[tdHeaderActions]\" />\n\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__boton td-header__notificaciones\"\n type=\"button\"\n aria-label=\"Notificaciones\"\n [attr.aria-expanded]=\"panelNotificacionesAbierto\"\n (click)=\"alternarNotificaciones()\"\n >\n <td-icon nombre=\"notifications\" />\n @if (notificacionesNoLeidas() > 0) {\n <span>{{ notificacionesNoLeidas() > 99 ? '99+' : notificacionesNoLeidas() }}</span>\n }\n </button>\n\n @if (panelNotificacionesAbierto) {\n <section class=\"td-header__panel td-header__panel--notificaciones\">\n <header>\n <div>\n <strong>Notificaciones</strong>\n <small>{{ notificacionesNoLeidas() }} sin leer</small>\n </div>\n <td-icon nombre=\"notifications\" />\n </header>\n\n <div class=\"td-header__lista-notificaciones\">\n @for (notificacion of notificaciones; track notificacion.id) {\n <button\n type=\"button\"\n [class.td-header__notificacion--nueva]=\"!notificacion.leida\"\n (click)=\"seleccionarNotificacion(notificacion)\"\n >\n <span class=\"td-header__notificacion-icono\">\n <td-icon [nombre]=\"notificacion.icono || 'notifications'\" />\n </span>\n <span>\n <strong>{{ notificacion.titulo }}</strong>\n @if (notificacion.descripcion) {\n <small>{{ notificacion.descripcion }}</small>\n }\n @if (notificacion.fecha) {\n <time>{{ notificacion.fecha }}</time>\n }\n </span>\n </button>\n } @empty {\n <p class=\"td-header__vacio\">No tienes notificaciones.</p>\n }\n </div>\n\n @if (notificaciones.length) {\n <button\n class=\"td-header__ver-todas\"\n type=\"button\"\n (click)=\"verTodasNotificaciones.emit(); panelNotificacionesAbierto = false\"\n >\n Ver todas las notificaciones\n </button>\n }\n </section>\n }\n </div>\n\n @if (usuario) {\n <span class=\"td-header__separador\" aria-hidden=\"true\"></span>\n\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__perfil\"\n type=\"button\"\n aria-label=\"Abrir perfil de usuario\"\n [attr.aria-expanded]=\"panelPerfilAbierto\"\n (click)=\"alternarPerfil()\"\n >\n <span class=\"td-header__avatar\">\n @if (avatarUrl) {\n <img [src]=\"avatarUrl\" [alt]=\"usuario\" />\n } @else {\n {{ inicialesUsuario() }}\n }\n </span>\n <span class=\"td-header__usuario\">\n <strong>{{ usuario }}</strong>\n @if (cargo) {\n <small>{{ cargo }}</small>\n }\n </span>\n <td-icon nombre=\"chevron_down\" tamano=\"0.85rem\" />\n </button>\n\n @if (panelPerfilAbierto) {\n <section class=\"td-header__panel td-header__panel--perfil\">\n <div class=\"td-header__perfil-resumen\">\n <span class=\"td-header__avatar td-header__avatar--grande\">{{ inicialesUsuario() }}</span>\n <div>\n <strong>{{ usuario }}</strong>\n <small>{{ cargo || 'Usuario' }}</small>\n </div>\n </div>\n <div class=\"td-header__perfil-opciones\">\n <button type=\"button\" (click)=\"emitirAccionPerfil('perfil')\">\n <td-icon nombre=\"person\" /> Mi perfil\n </button>\n <button type=\"button\" (click)=\"emitirAccionPerfil('configuracion')\">\n <td-icon nombre=\"settings\" /> Configuración\n </button>\n <button class=\"td-header__salir\" type=\"button\" (click)=\"emitirAccionPerfil('salir')\">\n <td-icon nombre=\"close\" /> Cerrar sesión\n </button>\n </div>\n </section>\n }\n </div>\n }\n </div>\n</header>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet inputSequence = 0;\ndeclare const ngDevMode: boolean | undefined;\n\nexport type TdInputValue = string | number | null;\nexport type TdInputEmptyValue = 'auto' | 'null' | 'empty-string';\nexport type TdInputSanitizePreset =\n | 'none'\n | 'digits'\n | 'letters'\n | 'alphanumeric'\n | 'decimal'\n | 'uppercase'\n | 'lowercase'\n | 'trim';\nexport type TdInputSanitize = TdInputSanitizePreset | readonly TdInputSanitizePreset[];\nexport type TdInputMask =\n | 'none'\n | 'time'\n | 'time-seconds'\n | 'decimal'\n | `decimal(${number},${number})`\n | `decimal(${number}.${number})`;\nexport type TdInputSanitizeFn = (value: string) => string;\n\n@Component({\n selector: 'td-input',\n imports: [TdIcon],\n template: `\n <div\n class=\"td-input\"\n [class.td-input--focused]=\"focused()\"\n [class.td-input--error]=\"hasError()\"\n [class.td-input--disabled]=\"isDisabled()\"\n [class.td-input--dark]=\"dark\"\n [class.td-input--floating]=\"labelFloating()\"\n [class.td-input--with-icon]=\"!!icon\"\n [class.td-input--with-prefix]=\"!!prefix\"\n >\n <label [for]=\"inputId\">{{ label }}</label>\n\n <div class=\"td-input__control\">\n @if (icon) {\n <td-icon class=\"td-input__icon\" [nombre]=\"icon\" />\n }\n\n @if (prefix) {\n <span class=\"td-input__affix td-input__affix--prefix\">{{ prefix }}</span>\n }\n\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n [type]=\"resolvedType\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [min]=\"minValue()\"\n [max]=\"maxValue()\"\n [step]=\"step\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.pattern]=\"resolvedPattern()\"\n [attr.inputmode]=\"resolvedInputMode()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n />\n\n @if (suffix) {\n <span class=\"td-input__affix td-input__affix--suffix\">{{ suffix }}</span>\n }\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-input__action\" title=\"Limpiar\" (click)=\"clear()\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n\n @if (type === 'password') {\n <button\n type=\"button\"\n class=\"td-input__action\"\n [title]=\"passwordVisible ? 'Ocultar contraseña' : 'Mostrar contraseña'\"\n (click)=\"passwordVisible = !passwordVisible\"\n >\n <td-icon [nombre]=\"passwordVisible ? 'visibility_off' : 'visibility'\" />\n </button>\n }\n </div>\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-input__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-input__message\"\n [class.td-input__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-input__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-input__counter\"\n [class.td-input__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-input.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdInput),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdInput\n implements ControlValueAccessor, FormValueControl<TdInputValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-input-${++inputSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search' | 'date' | 'time' = 'text';\n @Input() placeholder = '';\n @Input() autocomplete = 'off';\n @Input() icon = '';\n @Input() prefix = '';\n @Input() suffix = '';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() clearable = false;\n @Input() dark = false;\n readonly showCounter = input(true);\n @Input() emptyValue: TdInputEmptyValue = 'auto';\n @Input() sanitize: TdInputSanitize = 'none';\n @Input() sanitizeValue: TdInputSanitizeFn | null = null;\n @Input() mask: TdInputMask = 'none';\n @Input() integerDigits: number | null = null;\n @Input() decimalDigits: number | null = null;\n readonly minValue = input<string | number | null | undefined>(undefined, {\n alias: 'min',\n });\n readonly maxValue = input<string | number | null | undefined>(undefined, {\n alias: 'max',\n });\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n readonly pattern = input<readonly RegExp[]>([]);\n @Input() step: string | number | null = null;\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdInputValue>('');\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && String(currentValue).length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue() || this.type === 'date' || this.type === 'time'\n );\n protected readonly resolvedPattern = computed(() => {\n const patterns = this.pattern();\n if (!patterns.length) return null;\n if (patterns.length === 1) return patterns[0].source;\n return patterns.map((item) => `(?=${item.source})`).join('') + '.*';\n });\n protected readonly resolvedInputMode = computed(() => {\n if (this.mask === 'time' || this.mask === 'time-seconds') return 'numeric';\n if (this.isDecimalMask()) return 'decimal';\n const presets = this.sanitizePresets();\n if (presets.includes('digits')) return 'numeric';\n if (presets.includes('decimal')) return 'decimal';\n return null;\n });\n protected readonly focused = signal(false);\n protected passwordVisible = false;\n\n protected get inputId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.inputId}-description` : null;\n }\n\n protected get resolvedType(): string {\n return this.type === 'password' && this.passwordVisible ? 'text' : this.type;\n }\n\n private onChange: (value: TdInputValue) => void = () => undefined;\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.value.set(null);\n } else if (\n this.type === 'number' &&\n this.formBridge.usesSignalForms &&\n typeof value === 'number'\n ) {\n this.value.set(value);\n } else {\n this.value.set(this.transformTextValue(String(value)));\n }\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdInputValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n const transformedValue = this.transformTextValue(inputElement.value);\n if (inputElement.value !== transformedValue) {\n inputElement.value = transformedValue;\n }\n this.setValue(this.parseInputValue(transformedValue, inputElement));\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.completeMaskOnBlur();\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.setValue(this.resolveEmptyValue());\n }\n\n private parseInputValue(value: string, inputElement: HTMLInputElement): TdInputValue {\n if (!value) {\n return this.resolveEmptyValue();\n }\n\n if (this.type !== 'number' || !this.formBridge.usesSignalForms) {\n return value;\n }\n\n const numericValue = inputElement.valueAsNumber;\n return Number.isNaN(numericValue) ? null : numericValue;\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n\n if (this.formBridge.usesSignalForms && this.type === 'number') return null;\n return this.receivedNullValue ? null : '';\n }\n\n private transformTextValue(value: string): string {\n if (!value) return value;\n const sanitized = this.applySanitize(value);\n return this.applyMask(sanitized);\n }\n\n private applySanitize(value: string): string {\n const customValue = this.sanitizeValue ? this.sanitizeValue(value) : value;\n return this.sanitizePresets().reduce(\n (current, preset) => this.applySanitizePreset(current, preset),\n customValue\n );\n }\n\n private sanitizePresets(): TdInputSanitizePreset[] {\n const sanitize = this.sanitize;\n return typeof sanitize === 'string' ? [sanitize] : [...sanitize];\n }\n\n private applySanitizePreset(value: string, preset: TdInputSanitizePreset): string {\n switch (preset) {\n case 'digits':\n return value.replace(/\\D/g, '');\n case 'letters':\n return value.replace(/[^\\p{L}\\s]/gu, '');\n case 'alphanumeric':\n return value.replace(/[^\\p{L}\\p{N}]/gu, '');\n case 'decimal':\n return this.sanitizeDecimal(value);\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'trim':\n return value.trim();\n default:\n return value;\n }\n }\n\n private sanitizeDecimal(value: string): string {\n const normalized = value.replace(',', '.').replace(/[^\\d.]/g, '');\n const [integerPart, ...decimalParts] = normalized.split('.');\n const integerValue = this.limitDigits(integerPart, this.integerDigits);\n if (!decimalParts.length) return integerValue;\n\n const decimalValue = this.limitDigits(decimalParts.join(''), this.decimalDigits);\n return decimalValue.length || normalized.endsWith('.')\n ? `${integerValue}.${decimalValue}`\n : integerValue;\n }\n\n private limitDigits(value: string, limit: number | null): string {\n if (limit === null || limit === undefined || limit < 0) return value;\n return value.slice(0, limit);\n }\n\n private applyMask(value: string): string {\n if (this.mask === 'time') return this.maskTime(value);\n if (this.mask === 'time-seconds') return this.maskTimeSeconds(value);\n if (this.isDecimalMask()) return this.maskDecimal(value);\n return value;\n }\n\n private maskDecimal(value: string): string {\n const config = this.resolveDecimalMaskConfig();\n const scale = config.decimalDigits;\n const integerLimit = config.integerDigits;\n const maxDigits = integerLimit && integerLimit > 0\n ? integerLimit + scale\n : null;\n const digits = this.limitDigits(\n value.replace(/\\D/g, '').replace(/^0+(?=\\d)/, ''),\n maxDigits\n );\n\n if (!digits) return '';\n if (scale === 0) return this.limitDigits(digits, integerLimit);\n\n const padded = digits.padStart(scale + 1, '0');\n const splitIndex = padded.length - scale;\n const integerPart = this.limitDigits(padded.slice(0, splitIndex), integerLimit);\n const decimalPart = padded.slice(splitIndex);\n\n return `${integerPart || '0'}.${decimalPart}`;\n }\n\n private isDecimalMask(): boolean {\n return this.mask === 'decimal' || this.mask.startsWith('decimal(');\n }\n\n private resolveDecimalMaskConfig(): { integerDigits: number | null; decimalDigits: number } {\n const parsed = this.parseDecimalMask();\n const integerDigits = this.integerDigits ?? parsed?.integerDigits ?? null;\n const decimalDigits = this.decimalDigits ?? parsed?.decimalDigits ?? 2;\n\n return {\n integerDigits: integerDigits !== null ? Math.max(0, Math.trunc(integerDigits)) : null,\n decimalDigits: Math.max(0, Math.trunc(decimalDigits)),\n };\n }\n\n private parseDecimalMask(): { integerDigits: number; decimalDigits: number } | null {\n if (!this.mask.startsWith('decimal(')) return null;\n\n const match = /^decimal\\((\\d+)[,.](\\d+)\\)$/.exec(this.mask.trim());\n if (!match) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `[TdInput] Máscara decimal inválida: \"${this.mask}\". Usa decimal(enteros,decimales), por ejemplo decimal(10,2).`\n );\n }\n return null;\n }\n\n return {\n integerDigits: Number(match[1]),\n decimalDigits: Number(match[2]),\n };\n }\n\n private maskTime(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (digits.length <= 2) return digits;\n return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n }\n\n private maskTimeSeconds(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n return `${digits.slice(0, 2)}:${digits.slice(2, 4)}:${digits.slice(4)}`;\n }\n\n private completeMaskOnBlur(): void {\n if (this.mask !== 'time' && this.mask !== 'time-seconds') return;\n const currentValue = String(this.value() ?? '');\n if (!currentValue) return;\n\n const completedValue = this.mask === 'time'\n ? this.completeTimeValue(currentValue)\n : this.completeTimeSecondsValue(currentValue);\n\n if (completedValue !== currentValue) {\n this.setValue(completedValue);\n if (this.nativeInput) {\n this.nativeInput.nativeElement.value = completedValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n private completeTimeValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}00`\n : digits.padEnd(4, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}`;\n }\n\n private completeTimeSecondsValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}0000`\n : digits.padEnd(6, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n const second = this.clampNumber(Number(padded.slice(4, 6)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}:${this.padTimePart(second)}`;\n }\n\n private clampNumber(value: number, min: number, max: number): number {\n if (Number.isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n }\n\n private padTimePart(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n private setValue(value: TdInputValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n booleanAttribute,\n computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\n\nlet textareaSequence = 0;\n\nexport type TdTextareaValue = string | null;\nexport type TdTextareaEmptyValue = 'auto' | 'null' | 'empty-string';\n\n@Component({\n selector: 'td-textarea',\n template: `\n <div\n class=\"td-textarea\"\n [class.td-textarea--focused]=\"focused()\"\n [class.td-textarea--error]=\"hasError()\"\n [class.td-textarea--disabled]=\"isDisabled()\"\n [class.td-textarea--dark]=\"dark\"\n [class.td-textarea--floating]=\"labelFloating()\"\n >\n <label [for]=\"textareaId\">{{ label }}</label>\n\n <textarea\n #nativeTextarea\n [id]=\"textareaId\"\n [name]=\"name()\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [rows]=\"rows\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n ></textarea>\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-textarea__clear\" title=\"Limpiar\" (click)=\"clear()\">\n ×\n </button>\n }\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-textarea__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-textarea__message\"\n [class.td-textarea__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-textarea__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-textarea__counter\"\n [class.td-textarea__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-textarea.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdTextarea),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTextarea\n implements AfterViewInit, ControlValueAccessor, FormValueControl<TdTextareaValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-textarea-${++textareaSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n\n @ViewChild('nativeTextarea') private nativeTextarea?: ElementRef<HTMLTextAreaElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() placeholder = '';\n @Input() hint = '';\n @Input() rows = 4;\n @Input() dark = false;\n @Input() clearable = false;\n @Input() emptyValue: TdTextareaEmptyValue = 'auto';\n @Input({ transform: booleanAttribute }) autoResize = true;\n @Input() maxAutoRows: number | null = 10;\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n readonly showCounter = input(true);\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdTextareaValue>('');\n protected readonly focused = signal(false);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && currentValue.length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue()\n );\n\n protected get textareaId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.textareaId}-description` : null;\n }\n\n private onChange: (value: TdTextareaValue) => void = () => undefined;\n\n ngAfterViewInit(): void {\n this.resizeTextarea();\n }\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.value.set(null);\n } else {\n this.value.set(String(value));\n }\n queueMicrotask(() => this.resizeTextarea());\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdTextareaValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeTextarea?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.setValue(textarea.value ? textarea.value : this.resolveEmptyValue());\n this.resizeTextarea();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.setValue(this.resolveEmptyValue());\n if (this.nativeTextarea) {\n this.nativeTextarea.nativeElement.value = this.value() ?? '';\n }\n this.resizeTextarea();\n }\n\n private setValue(value: TdTextareaValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n return this.receivedNullValue ? null : '';\n }\n\n private resizeTextarea(): void {\n if (!this.autoResize || !this.nativeTextarea) return;\n\n const textarea = this.nativeTextarea.nativeElement;\n textarea.style.height = 'auto';\n\n const lineHeight = Number.parseFloat(getComputedStyle(textarea).lineHeight || '20');\n const maxHeight = this.maxAutoRows && this.maxAutoRows > 0\n ? lineHeight * this.maxAutoRows\n : Number.POSITIVE_INFINITY;\n const nextHeight = Math.min(textarea.scrollHeight, maxHeight);\n\n textarea.style.height = `${nextHeight}px`;\n textarea.style.overflowY = textarea.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet autocompleteSequence = 0;\n\n@Component({\n selector: 'td-autocomplete-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select td-select--autocomplete\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--floating]=\"labelFloating\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [for]=\"inputId\">{{ label }}</label>\n }\n <div class=\"td-select__trigger\">\n <td-icon class=\"td-select__leading\" nombre=\"search\" />\n <input\n #searchInput\n [id]=\"inputId\"\n type=\"search\"\n autocomplete=\"off\"\n role=\"combobox\"\n [value]=\"search\"\n [placeholder]=\"labelFloating || !hasVisibleLabel ? placeholder : ''\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (focus)=\"handleFocus()\"\n (input)=\"handleInput($event)\"\n (keydown)=\"handleKeydown($event)\"\n (blur)=\"handleBlur()\"\n />\n @if (clearable && (value() !== null || search) && !isDisabled()) {\n <button type=\"button\" class=\"td-select__clear\" title=\"Limpiar\" (click)=\"clear($event)\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!filteredOptions.length) {\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n }\n @for (option of filteredOptions; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdAutocompleteSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdAutocompleteSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-autocomplete-${++autocompleteSequence}`;\n\n @ViewChild('searchInput') private searchInput?: ElementRef<HTMLInputElement>;\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Buscar y seleccionar';\n @Input() placeholder = 'Escribe para buscar...';\n @Input() options: TdSelectOption<T>[] = [];\n @Input() hint = '';\n @Input() hideLabel = false;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No se encontraron resultados';\n @Input() clearable = true;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() minimumCharacters = 0;\n @Input() filterWith: (option: TdSelectOption<T>, search: string) => boolean =\n (option, search) =>\n `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(search);\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n @Output() readonly searchChange = new EventEmitter<string>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected search = '';\n protected open = false;\n protected activeIndex = -1;\n protected readonly focused = signal(false);\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get inputId(): string {\n return `${this.generatedId}-input`;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get filteredOptions(): TdSelectOption<T>[] {\n const normalized = this.search.trim().toLocaleLowerCase();\n if (normalized.length < this.minimumCharacters) return [];\n return this.options.filter((option) => this.filterWith(option, normalized));\n }\n\n protected get labelFloating(): boolean {\n return (\n this.hasVisibleLabel &&\n (this.focused() || this.open || !!this.search.trim() || this.value() !== null)\n );\n }\n\n private changed: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.search =\n this.options.find((option) => this.compare(option.value, this.value()))?.label ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.searchInput?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open = true;\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n this.openPanel();\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n if (!this.search.trim() && this.value() === null) {\n this.close();\n }\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n const selected = this.options.find((option) => this.compare(option.value, this.value()));\n if (selected) this.search = selected.label;\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected handleInput(event: Event): void {\n this.search = (event.target as HTMLInputElement).value;\n this.value.set(null);\n this.changed(null);\n this.searchChange.emit(this.search);\n this.openPanel();\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.value.set(option.value);\n this.search = option.label;\n this.changed(option.value);\n this.selectionChange.emit(option.value);\n this.close();\n this.cdr.markForCheck();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n this.search = '';\n this.changed(null);\n this.selectionChange.emit(null);\n this.searchChange.emit('');\n this.openPanel();\n queueMicrotask(() => this.searchInput?.nativeElement.focus());\n this.cdr.markForCheck();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n } else if (event.key === 'Enter' && this.open && this.activeIndex >= 0) {\n event.preventDefault();\n const option = this.filteredOptions[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private moveActive(direction: number): void {\n const options = this.filteredOptions;\n if (!options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < options.length; index++) {\n next = (next + direction + options.length) % options.length;\n if (!options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.filteredOptions.findIndex((option) => !option.disabled);\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet selectSequence = 0;\n\n@Component({\n selector: 'td-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [id]=\"labelId\">{{ label }}</label>\n }\n <div\n #trigger\n class=\"td-select__trigger\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"hasVisibleLabel ? labelId : null\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (click)=\"toggle()\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (selectedOption?.icon) {\n <td-icon class=\"td-select__leading\" [nombre]=\"selectedOption!.icon!\" />\n }\n <span [class.td-select__placeholder]=\"!selectedOption\">\n {{ selectedOption?.label || placeholder }}\n </span>\n @if (clearable && selectedOption && !isDisabled()) {\n <button\n type=\"button\"\n class=\"td-select__clear\"\n title=\"Limpiar selección\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!options.length) {\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n }\n @for (option of options; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [attr.aria-selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-select-${++selectSequence}`;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('trigger') private trigger?: ElementRef<HTMLElement>;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Seleccionar';\n @Input() placeholder = 'Selecciona una opción';\n @Input() options: TdSelectOption<T>[] = [];\n @Input() hint = '';\n @Input() hideLabel = false;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No hay opciones disponibles';\n @Input() clearable = false;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected open = false;\n protected activeIndex = -1;\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get selectedOption(): TdSelectOption<T> | undefined {\n return this.options.find((option) => this.compare(option.value, this.value()));\n }\n\n private onChange: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.trigger?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.setValue(option.value);\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n return;\n }\n\n const option = this.options[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private openPanel(): void {\n this.open = true;\n const selectedIndex = this.options.findIndex((option) =>\n this.compare(option.value, this.value())\n );\n this.activeIndex = selectedIndex >= 0 ? selectedIndex : this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n private moveActive(direction: number): void {\n if (!this.options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < this.options.length; index++) {\n next = (next + direction + this.options.length) % this.options.length;\n if (!this.options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.options.findIndex((option) => !option.disabled);\n }\n\n private setValue(value: T | null): void {\n this.value.set(value);\n this.onChange(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { TdIcon } from '../iconos';\nimport { MenuSidebar, TdSidebarSeleccion } from './menu-sidebar';\n\nexport type TdSidebarModoCerrado = 'compacto' | 'oculto';\n\n@Component({\n selector: 'td-sidebar',\n imports: [NgTemplateOutlet, RouterLink, RouterLinkActive, TdIcon],\n templateUrl: './td-sidebar.html',\n styleUrl: './td-sidebar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSidebar {\n @Input() titulo = 'Gestión Corporativa';\n @Input() subtitulo = 'Central Platform';\n @Input() etiquetaNavegacion = 'Navegación';\n @Input() logoUrl = '';\n @Input() logoAlt = 'Logo';\n @Input() textoCarga = 'Cargando menú...';\n @Input() mensajeVacio = 'No hay opciones disponibles.';\n @Input() error = '';\n @Input() cargando = false;\n @Input() oscuro = false;\n @Input() modoCerrado: TdSidebarModoCerrado = 'compacto';\n\n @Input()\n set abierto(value: boolean) {\n this.abiertoInterno.set(value);\n }\n get abierto(): boolean {\n return this.abiertoInterno();\n }\n\n @Input()\n set menu(value: MenuSidebar[] | null | undefined) {\n this.menuNormalizado.set(this.normalizarMenu(value ?? []));\n }\n get menu(): MenuSidebar[] {\n return this.menuNormalizado();\n }\n\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n @Output() readonly seleccionar = new EventEmitter<TdSidebarSeleccion>();\n\n protected readonly abiertoInterno = signal(true);\n protected readonly menuNormalizado = signal<MenuSidebar[]>([]);\n protected readonly expandidos = signal<ReadonlySet<string>>(new Set<string>());\n\n protected alternarGrupo(clave: string): void {\n if (!this.abiertoInterno()) {\n this.abiertoInterno.set(true);\n this.abiertoChange.emit(true);\n }\n\n this.expandidos.update((actuales) => {\n const siguientes = new Set(actuales);\n siguientes.has(clave) ? siguientes.delete(clave) : siguientes.add(clave);\n return siguientes;\n });\n }\n\n protected estaExpandido(clave: string): boolean {\n return this.expandidos().has(clave);\n }\n\n protected seleccionarItem(item: MenuSidebar, nivel: number): void {\n this.seleccionar.emit({ item, nivel });\n }\n\n protected claveItem(item: MenuSidebar, padre: string, indice: number): string {\n return `${padre}/${item.nombre}-${indice}`;\n }\n\n protected inicialMarca(): string {\n return (this.titulo.trim().charAt(0) || 'T').toUpperCase();\n }\n\n private normalizarMenu(items: MenuSidebar[]): MenuSidebar[] {\n return [...items]\n .sort((a, b) => a.orden - b.orden)\n .map((item) => ({\n ...item,\n icono: item.icono?.trim() || 'folder',\n subMenus: this.normalizarMenu(item.subMenus ?? []),\n }));\n }\n}\n","<aside\n class=\"td-sidebar\"\n [class.td-sidebar--compacto]=\"!abiertoInterno() && modoCerrado === 'compacto'\"\n [class.td-sidebar--oculto]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n [class.td-sidebar--oscuro]=\"oscuro\"\n [attr.aria-hidden]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n>\n <header class=\"td-sidebar__marca\">\n <div class=\"td-sidebar__logo\">\n @if (logoUrl) {\n <img [src]=\"logoUrl\" [alt]=\"logoAlt\" />\n } @else {\n <span>{{ inicialMarca() }}</span>\n }\n </div>\n\n @if (abiertoInterno()) {\n <div class=\"td-sidebar__marca-texto\">\n <small>{{ subtitulo }}</small>\n <strong>{{ titulo }}</strong>\n </div>\n }\n\n </header>\n\n <div class=\"td-sidebar__encabezado\">\n @if (abiertoInterno()) {\n <span>{{ etiquetaNavegacion }}</span>\n } @else {\n <span aria-hidden=\"true\">•••</span>\n }\n </div>\n\n <nav class=\"td-sidebar__nav\" aria-label=\"Menú principal\">\n @if (cargando) {\n <p class=\"td-sidebar__estado\">{{ textoCarga }}</p>\n } @else if (error) {\n <p class=\"td-sidebar__estado td-sidebar__estado--error\">{{ error }}</p>\n } @else if (!menuNormalizado().length) {\n <p class=\"td-sidebar__estado\">{{ mensajeVacio }}</p>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{ items: menuNormalizado(), nivel: 0, padre: 'raiz' }\"\n />\n }\n </nav>\n</aside>\n\n<ng-template #listaMenu let-items=\"items\" let-nivel=\"nivel\" let-padre=\"padre\">\n <ul class=\"td-sidebar__lista\" [class.td-sidebar__lista--anidada]=\"nivel > 0\">\n @for (item of items; track item) {\n @let clave = claveItem(item, padre, $index);\n @let tieneHijos = item.subMenus.length > 0;\n\n <li class=\"td-sidebar__item\">\n @if (tieneHijos) {\n <button\n class=\"td-sidebar__enlace\"\n type=\"button\"\n [class.td-sidebar__enlace--activo]=\"estaExpandido(clave)\"\n [attr.aria-expanded]=\"estaExpandido(clave)\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"alternarGrupo(clave)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n <td-icon\n class=\"td-sidebar__flecha\"\n [class.td-sidebar__flecha--abierta]=\"estaExpandido(clave)\"\n nombre=\"chevron_right\"\n />\n }\n </button>\n } @else {\n <a\n class=\"td-sidebar__enlace\"\n [routerLink]=\"item.ruta || '/'\"\n routerLinkActive=\"td-sidebar__enlace--ruta-activa\"\n [routerLinkActiveOptions]=\"{ exact: item.ruta === '/' }\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"seleccionarItem(item, nivel)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n }\n </a>\n }\n\n @if (abiertoInterno() && tieneHijos && estaExpandido(clave)) {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{\n items: item.subMenus,\n nivel: nivel + 1,\n padre: clave\n }\"\n />\n }\n </li>\n }\n </ul>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nlet tabSequence = 0;\n\n@Component({\n selector: 'td-tab',\n template: `\n <ng-template>\n <ng-content />\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTab {\n readonly generatedId = `td-tab-${++tabSequence}`;\n\n @Input() id = '';\n @Input() label = 'Tab';\n @Input() icon = '';\n @Input() disabled = false;\n @Input() badge: string | number | null = null;\n\n @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<unknown>;\n\n get resolvedId(): string {\n return this.id || this.generatedId;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TdIcon } from '../iconos';\nimport { TdTab } from './td-tab';\n\nexport type TdTabsVariant = 'linea' | 'pastilla' | 'contenida';\nexport type TdTabsAlignment = 'inicio' | 'centro' | 'fin';\n\n@Component({\n selector: 'td-tabs',\n imports: [NgTemplateOutlet, TdIcon],\n template: `\n <section\n class=\"td-tabs\"\n [class.td-tabs--dark]=\"dark\"\n [class.td-tabs--stretch]=\"stretch\"\n [class]=\"'td-tabs td-tabs--' + variant + ' td-tabs--align-' + alignment +\n (dark ? ' td-tabs--dark' : '') + (stretch ? ' td-tabs--stretch' : '')\"\n >\n <div\n #tabList\n class=\"td-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n (keydown)=\"handleKeydown($event)\"\n >\n @for (tab of tabs; track tab.resolvedId; let index = $index) {\n <button\n #tabButton\n type=\"button\"\n class=\"td-tabs__tab\"\n role=\"tab\"\n [id]=\"tabId(tab)\"\n [class.td-tabs__tab--active]=\"index === activeIndex\"\n [disabled]=\"tab.disabled\"\n [attr.tabindex]=\"index === activeIndex ? 0 : -1\"\n [attr.aria-selected]=\"index === activeIndex\"\n [attr.aria-controls]=\"panelId(tab)\"\n (click)=\"select(index)\"\n >\n @if (tab.icon) {\n <td-icon [nombre]=\"tab.icon\" />\n }\n <span>{{ tab.label }}</span>\n @if (tab.badge !== null) {\n <small>{{ tab.badge }}</small>\n }\n </button>\n }\n </div>\n\n @if (activeTab; as tab) {\n <div\n class=\"td-tabs__panel\"\n role=\"tabpanel\"\n [id]=\"panelId(tab)\"\n [attr.aria-labelledby]=\"tabId(tab)\"\n [attr.tabindex]=\"panelFocusable ? 0 : null\"\n >\n <ng-container [ngTemplateOutlet]=\"tab.content\" />\n </div>\n }\n </section>\n `,\n styleUrl: './td-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTabs implements AfterContentInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private tabsChange?: Subscription;\n private requestedIndex = 0;\n\n @ContentChildren(TdTab) private tabQuery!: QueryList<TdTab>;\n @ViewChild('tabList') private tabList?: ElementRef<HTMLDivElement>;\n @ViewChildren('tabButton') private tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n @Input()\n set selectedIndex(value: number) {\n this.requestedIndex = Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n if (this.tabQuery) this.applyRequestedIndex();\n }\n get selectedIndex(): number {\n return this.activeIndex;\n }\n\n @Input() variant: TdTabsVariant = 'linea';\n @Input() alignment: TdTabsAlignment = 'inicio';\n @Input() stretch = false;\n @Input() dark = false;\n @Input() ariaLabel = 'Pestañas';\n @Input() panelFocusable = false;\n\n @Output() readonly selectedIndexChange = new EventEmitter<number>();\n @Output() readonly tabChange = new EventEmitter<TdTab>();\n\n protected tabs: readonly TdTab[] = [];\n protected activeIndex = 0;\n\n protected get activeTab(): TdTab | null {\n return this.tabs[this.activeIndex] ?? null;\n }\n\n ngAfterContentInit(): void {\n this.syncTabs();\n this.tabsChange = this.tabQuery.changes.subscribe(() => this.syncTabs());\n }\n\n ngOnDestroy(): void {\n this.tabsChange?.unsubscribe();\n }\n\n protected select(index: number, focus = false): void {\n const tab = this.tabs[index];\n if (!tab || tab.disabled || index === this.activeIndex) {\n if (focus && tab && !tab.disabled) this.focusButton(index);\n return;\n }\n\n this.activeIndex = index;\n this.requestedIndex = index;\n this.selectedIndexChange.emit(index);\n this.tabChange.emit(tab);\n this.cdr.markForCheck();\n queueMicrotask(() => {\n this.ensureTabVisible(index, focus ? 'auto' : 'smooth');\n if (focus) this.focusButton(index);\n });\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n const horizontalKeys = ['ArrowLeft', 'ArrowRight'];\n if (!horizontalKeys.includes(event.key) && !['Home', 'End'].includes(event.key)) return;\n\n event.preventDefault();\n if (event.key === 'Home') {\n this.select(this.firstEnabledIndex(), true);\n return;\n }\n if (event.key === 'End') {\n this.select(this.lastEnabledIndex(), true);\n return;\n }\n this.select(this.nextEnabledIndex(event.key === 'ArrowRight' ? 1 : -1), true);\n }\n\n protected tabId(tab: TdTab): string {\n return `${tab.resolvedId}-trigger`;\n }\n\n protected panelId(tab: TdTab): string {\n return `${tab.resolvedId}-panel`;\n }\n\n private syncTabs(): void {\n this.tabs = this.tabQuery.toArray();\n this.applyRequestedIndex();\n this.cdr.markForCheck();\n queueMicrotask(() => this.ensureTabVisible(this.activeIndex, 'auto'));\n }\n\n private applyRequestedIndex(): void {\n if (!this.tabs.length) {\n this.activeIndex = 0;\n return;\n }\n\n const requested = Math.min(this.requestedIndex, this.tabs.length - 1);\n if (!this.tabs[requested]?.disabled) {\n this.activeIndex = requested;\n return;\n }\n\n const firstEnabled = this.firstEnabledIndex();\n this.activeIndex = firstEnabled >= 0 ? firstEnabled : 0;\n }\n\n private nextEnabledIndex(direction: number): number {\n if (!this.tabs.length) return 0;\n let next = this.activeIndex;\n for (let index = 0; index < this.tabs.length; index++) {\n next = (next + direction + this.tabs.length) % this.tabs.length;\n if (!this.tabs[next]?.disabled) return next;\n }\n return this.activeIndex;\n }\n\n private firstEnabledIndex(): number {\n return this.tabs.findIndex((tab) => !tab.disabled);\n }\n\n private lastEnabledIndex(): number {\n for (let index = this.tabs.length - 1; index >= 0; index--) {\n if (!this.tabs[index]?.disabled) return index;\n }\n return this.activeIndex;\n }\n\n private focusButton(index: number): void {\n this.tabButtons.get(index)?.nativeElement.focus();\n }\n\n private ensureTabVisible(index: number, behavior: ScrollBehavior): void {\n const list = this.tabList?.nativeElement;\n const button = this.tabButtons?.get(index)?.nativeElement;\n if (!list || !button || list.scrollWidth <= list.clientWidth) return;\n\n const padding = 8;\n const visibleStart = list.scrollLeft + padding;\n const visibleEnd = list.scrollLeft + list.clientWidth - padding;\n const tabStart = button.offsetLeft;\n const tabEnd = tabStart + button.offsetWidth;\n\n if (tabStart < visibleStart) {\n list.scrollTo({ left: Math.max(0, tabStart - padding), behavior });\n } else if (tabEnd > visibleEnd) {\n list.scrollTo({\n left: tabEnd - list.clientWidth + padding,\n behavior,\n });\n }\n }\n}\n","export type TdThemeMode = 'light' | 'dark' | 'system';\n\nexport interface TdThemePaletteColor {\n name: string;\n cssVariable: string;\n value: string;\n usage: string;\n}\n\nexport const TD_THEME_LIGHT_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#3157A4', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#254680', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#EAF0FB', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#16784A', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#A8660B', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#B93A3A', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#2563A8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#FFFFFF', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#F6F8FB', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#EDF1F6', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#DDE3EE', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#C8D1DF', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#202B3D', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#66758B', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 18px 46px ...', usage: 'Floating panels and overlays.' },\n];\n\nexport const TD_THEME_DARK_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#8AA7E6', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#A8BDF0', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#1F2B45', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#56C28D', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#E2A84D', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#F07878', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#79A9E8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#181B22', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#20242D', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#272D38', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#343B49', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#465164', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#EEF2F8', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#A7B0BE', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 20px 54px ...', usage: 'Floating panels and overlays.' },\n];\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { TdThemeMode } from './td-theme.model';\n\nconst THEME_CLASS_LIGHT = 'td-theme-light';\nconst THEME_CLASS_DARK = 'td-theme-dark';\n\n@Injectable({ providedIn: 'root' })\nexport class TdThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly systemDark = signal(this.readSystemPreference());\n readonly mode = signal<TdThemeMode>('light');\n readonly isDark = computed(() =>\n this.mode() === 'dark' || (this.mode() === 'system' && this.systemDark())\n );\n\n constructor() {\n this.listenSystemPreference();\n effect(() => this.applyThemeClass(this.isDark(), this.mode()));\n }\n\n setMode(mode: TdThemeMode): void {\n this.mode.set(mode);\n }\n\n toggle(): void {\n this.mode.set(this.isDark() ? 'light' : 'dark');\n }\n\n private applyThemeClass(isDark: boolean, mode: TdThemeMode): void {\n const element = this.document.documentElement;\n element.classList.toggle(THEME_CLASS_DARK, isDark);\n element.classList.toggle(THEME_CLASS_LIGHT, !isDark);\n element.dataset['tdTheme'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n\n private listenSystemPreference(): void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const query = window.matchMedia('(prefers-color-scheme: dark)');\n const listener = (event: MediaQueryListEvent): void => this.systemDark.set(event.matches);\n query.addEventListener?.('change', listener);\n }\n}\n","/*\n * Public API Surface of telcomdev-ui\n */\n\nexport * from './lib/telcomdev-ui';\nexport * from './lib/alerta';\nexport * from './lib/button';\nexport * from './lib/checkbox';\nexport * from './lib/data-table';\nexport * from './lib/date-picker';\nexport * from './lib/dialog';\nexport * from './lib/footer';\nexport * from './lib/form-control';\nexport * from './lib/file-viewer';\nexport * from './lib/header';\nexport * from './lib/iconos';\nexport * from './lib/input';\nexport * from './lib/menu';\nexport * from './lib/select';\nexport * from './lib/sidebar';\nexport * from './lib/tabs';\nexport * from './lib/theme';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telcomdev-ui.mjs","sources":["../../../projects/telcomdev-ui/src/lib/telcomdev-ui.ts","../../../projects/telcomdev-ui/src/lib/alerta/td-alerta.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-iconos.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icono-registry.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icon.ts","../../../projects/telcomdev-ui/src/lib/button/td-button.ts","../../../projects/telcomdev-ui/src/lib/form-control/td-form-control.ts","../../../projects/telcomdev-ui/src/lib/checkbox/td-checkbox.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.html","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.ts","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.html","../../../projects/telcomdev-ui/src/lib/date-picker/td-date-picker.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.model.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-ref.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-panel.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-actions.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-close.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.ts","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.service.ts","../../../projects/telcomdev-ui/src/lib/header/td-header.ts","../../../projects/telcomdev-ui/src/lib/header/td-header.html","../../../projects/telcomdev-ui/src/lib/input/td-input.ts","../../../projects/telcomdev-ui/src/lib/input/td-textarea.ts","../../../projects/telcomdev-ui/src/lib/select/td-autocomplete-select.ts","../../../projects/telcomdev-ui/src/lib/select/td-select.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.html","../../../projects/telcomdev-ui/src/lib/tabs/td-tab.ts","../../../projects/telcomdev-ui/src/lib/tabs/td-tabs.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.model.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.service.ts","../../../projects/telcomdev-ui/src/public-api.ts","../../../projects/telcomdev-ui/src/telcomdev-ui.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'td-telcomdev-ui',\n imports: [],\n template: ` <p>telcomdev-ui works!</p> `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: ``,\n})\nexport class TelcomdevUi {}\n","export type TdAlertaTipo = 'exito' | 'error' | 'advertencia' | 'info' | 'pregunta';\r\n\r\nexport interface TdAlertaOpciones {\r\n titulo?: string;\r\n mensaje?: string;\r\n tipo?: TdAlertaTipo;\r\n textoConfirmar?: string;\r\n textoCancelar?: string;\r\n mostrarCancelar?: boolean;\r\n cerrarConEscape?: boolean;\r\n cerrarConFondo?: boolean;\r\n}\r\n\r\nexport class TdAlerta {\r\n private static readonly estiloId = 'td-alerta-estilos';\r\n\r\n static exito(mensaje: string, titulo = '¡Operación exitosa!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'exito',\r\n textoConfirmar: 'Aceptar',\r\n });\r\n }\r\n\r\n static error(mensaje: string, titulo = '¡Error!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'error',\r\n textoConfirmar: 'Cerrar',\r\n });\r\n }\r\n\r\n static errorSistema(mensaje: string, titulo = '¡Error de Sistema!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'error',\r\n textoConfirmar: 'Cerrar',\r\n });\r\n }\r\n\r\n static advertencia(mensaje: string, titulo = '¡Advertencia!'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'advertencia',\r\n textoConfirmar: 'Aceptar',\r\n });\r\n }\r\n\r\n static info(mensaje: string, titulo = 'Información'): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'info',\r\n textoConfirmar: 'Aceptar',\r\n });\r\n }\r\n\r\n static confirmar(\r\n mensaje: string,\r\n titulo = '¿Estás seguro?',\r\n textoConfirmar = 'Sí, continuar',\r\n textoCancelar = 'Cancelar'\r\n ): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'pregunta',\r\n textoConfirmar,\r\n textoCancelar,\r\n mostrarCancelar: true,\r\n });\r\n }\r\n\r\n static confirmarEliminar(\r\n mensaje = 'Esta acción no se puede deshacer.',\r\n titulo = '¿Eliminar registro?'\r\n ): Promise<boolean> {\r\n return this.mostrar({\r\n titulo,\r\n mensaje,\r\n tipo: 'advertencia',\r\n textoConfirmar: 'Sí, eliminar',\r\n textoCancelar: 'Cancelar',\r\n mostrarCancelar: true,\r\n });\r\n }\r\n\r\n static mostrar(opciones: TdAlertaOpciones): Promise<boolean> {\r\n if (typeof document === 'undefined') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.inyectarEstilos();\r\n\r\n const config: Required<TdAlertaOpciones> = {\r\n titulo: opciones.titulo ?? '',\r\n mensaje: opciones.mensaje ?? '',\r\n tipo: opciones.tipo ?? 'info',\r\n textoConfirmar: opciones.textoConfirmar ?? 'Aceptar',\r\n textoCancelar: opciones.textoCancelar ?? 'Cancelar',\r\n mostrarCancelar: opciones.mostrarCancelar ?? false,\r\n cerrarConEscape: opciones.cerrarConEscape ?? true,\r\n cerrarConFondo: opciones.cerrarConFondo ?? false,\r\n };\r\n\r\n return new Promise<boolean>((resolve) => {\r\n const fondo = document.createElement('div');\r\n fondo.className = 'td-alerta-fondo';\r\n\r\n const modal = document.createElement('div');\r\n modal.className = 'td-alerta-modal';\r\n modal.setAttribute('role', 'dialog');\r\n modal.setAttribute('aria-modal', 'true');\r\n\r\n const icono = document.createElement('div');\r\n icono.className = `td-alerta-icono td-alerta-icono--${config.tipo}`;\r\n icono.textContent = this.obtenerIcono(config.tipo);\r\n\r\n const titulo = document.createElement('h2');\r\n titulo.className = 'td-alerta-titulo';\r\n titulo.textContent = config.titulo;\r\n\r\n const mensaje = document.createElement('p');\r\n mensaje.className = 'td-alerta-mensaje';\r\n mensaje.textContent = config.mensaje;\r\n\r\n const acciones = document.createElement('div');\r\n acciones.className = 'td-alerta-acciones';\r\n\r\n const botonConfirmar = document.createElement('button');\r\n botonConfirmar.type = 'button';\r\n botonConfirmar.className = `td-alerta-boton td-alerta-boton--${config.tipo}`;\r\n botonConfirmar.textContent = config.textoConfirmar;\r\n\r\n const botonCancelar = document.createElement('button');\r\n botonCancelar.type = 'button';\r\n botonCancelar.className = 'td-alerta-boton td-alerta-boton--cancelar';\r\n botonCancelar.textContent = config.textoCancelar;\r\n\r\n const cerrar = (resultado: boolean): void => {\r\n document.removeEventListener('keydown', onKeyDown);\r\n fondo.classList.add('td-alerta-saliendo');\r\n\r\n window.setTimeout(() => {\r\n fondo.remove();\r\n resolve(resultado);\r\n }, 140);\r\n };\r\n\r\n const onKeyDown = (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape' && config.cerrarConEscape) {\r\n cerrar(false);\r\n }\r\n };\r\n\r\n botonConfirmar.addEventListener('click', () => cerrar(true));\r\n botonCancelar.addEventListener('click', () => cerrar(false));\r\n\r\n if (config.cerrarConFondo) {\r\n fondo.addEventListener('click', (event) => {\r\n if (event.target === fondo) {\r\n cerrar(false);\r\n }\r\n });\r\n }\r\n\r\n document.addEventListener('keydown', onKeyDown);\r\n\r\n if (config.mostrarCancelar) {\r\n acciones.appendChild(botonCancelar);\r\n }\r\n\r\n acciones.appendChild(botonConfirmar);\r\n\r\n modal.appendChild(icono);\r\n modal.appendChild(titulo);\r\n\r\n if (config.mensaje) {\r\n modal.appendChild(mensaje);\r\n }\r\n\r\n modal.appendChild(acciones);\r\n fondo.appendChild(modal);\r\n document.body.appendChild(fondo);\r\n\r\n botonConfirmar.focus();\r\n });\r\n }\r\n\r\n private static obtenerIcono(tipo: TdAlertaTipo): string {\r\n const iconos: Record<TdAlertaTipo, string> = {\r\n exito: '✓',\r\n error: '!',\r\n advertencia: '!',\r\n info: 'i',\r\n pregunta: '?',\r\n };\r\n\r\n return iconos[tipo];\r\n }\r\n\r\n private static inyectarEstilos(): void {\r\n if (document.getElementById(this.estiloId)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = this.estiloId;\r\n style.textContent = `\r\n .td-alerta-fondo {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 99999;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 1rem;\r\n background: rgba(15, 23, 42, 0.52);\r\n animation: td-alerta-fondo-entrada 160ms ease-out;\r\n }\r\n\r\n .td-alerta-modal {\r\n width: min(100%, 430px);\r\n border-radius: 18px;\r\n background: #ffffff;\r\n padding: 1.75rem;\r\n text-align: center;\r\n box-shadow: 0 22px 70px rgba(15, 23, 42, 0.28);\r\n animation: td-alerta-modal-entrada 180ms ease-out;\r\n font-family: var(--td-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n }\r\n\r\n .td-alerta-icono {\r\n width: 4.25rem;\r\n height: 4.25rem;\r\n margin: 0 auto 1rem;\r\n border-radius: 999px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 2.1rem;\r\n font-weight: 800;\r\n }\r\n\r\n .td-alerta-icono--exito {\r\n color: #16a34a;\r\n background: #dcfce7;\r\n }\r\n\r\n .td-alerta-icono--error {\r\n color: #ef4444;\r\n background: #fee2e2;\r\n }\r\n\r\n .td-alerta-icono--advertencia {\r\n color: #f59e0b;\r\n background: #fef3c7;\r\n }\r\n\r\n .td-alerta-icono--info {\r\n color: #2563eb;\r\n background: #dbeafe;\r\n }\r\n\r\n .td-alerta-icono--pregunta {\r\n color: #7c3aed;\r\n background: #ede9fe;\r\n }\r\n\r\n .td-alerta-titulo {\r\n margin: 0;\r\n color: #111827;\r\n font-size: 1.35rem;\r\n line-height: 1.25;\r\n font-weight: 800;\r\n }\r\n\r\n .td-alerta-mensaje {\r\n margin: 0.75rem 0 0;\r\n color: #4b5563;\r\n font-size: 0.96rem;\r\n line-height: 1.55;\r\n }\r\n\r\n .td-alerta-acciones {\r\n display: flex;\r\n justify-content: center;\r\n gap: 0.75rem;\r\n margin-top: 1.5rem;\r\n }\r\n\r\n .td-alerta-boton {\r\n border: 0;\r\n border-radius: 10px;\r\n padding: 0.7rem 1.2rem;\r\n color: #ffffff;\r\n font-size: 0.93rem;\r\n font-weight: 700;\r\n cursor: pointer;\r\n transition: transform 120ms ease, filter 120ms ease, background 120ms ease;\r\n }\r\n\r\n .td-alerta-boton:hover {\r\n filter: brightness(0.96);\r\n }\r\n\r\n .td-alerta-boton:active {\r\n transform: scale(0.98);\r\n }\r\n\r\n .td-alerta-boton:focus {\r\n outline: 3px solid rgba(37, 99, 235, 0.25);\r\n outline-offset: 2px;\r\n }\r\n\r\n .td-alerta-boton--exito {\r\n background: #22c55e;\r\n }\r\n\r\n .td-alerta-boton--error {\r\n background: #ef4444;\r\n }\r\n\r\n .td-alerta-boton--advertencia {\r\n background: #f59e0b;\r\n }\r\n\r\n .td-alerta-boton--info {\r\n background: #2563eb;\r\n }\r\n\r\n .td-alerta-boton--pregunta {\r\n background: #7c3aed;\r\n }\r\n\r\n .td-alerta-boton--cancelar {\r\n background: #6b7280;\r\n }\r\n\r\n .td-alerta-saliendo {\r\n animation: td-alerta-fondo-salida 140ms ease-in forwards;\r\n }\r\n\r\n .td-alerta-saliendo .td-alerta-modal {\r\n animation: td-alerta-modal-salida 140ms ease-in forwards;\r\n }\r\n\r\n @keyframes td-alerta-fondo-entrada {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n\r\n @keyframes td-alerta-modal-entrada {\r\n from {\r\n opacity: 0;\r\n transform: translateY(12px) scale(0.96);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n\r\n @keyframes td-alerta-fondo-salida {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n }\r\n\r\n @keyframes td-alerta-modal-salida {\r\n from {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateY(8px) scale(0.97);\r\n }\r\n }\r\n\r\n @media (max-width: 480px) {\r\n .td-alerta-modal {\r\n padding: 1.4rem;\r\n border-radius: 16px;\r\n }\r\n\r\n .td-alerta-acciones {\r\n flex-direction: column-reverse;\r\n }\r\n\r\n .td-alerta-boton {\r\n width: 100%;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n }\r\n}\n","import { TdIconoDefinicion } from './td-icono.model';\n\nexport const TD_ICONOS = {\n home: {\n path: 'M3 10.5 12 3l9 7.5V21a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1V10.5Z',\n },\n dashboard: {\n path: 'M4 3h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm10 0h6a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm0 8h6a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1ZM4 14h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1Z',\n },\n folder: {\n path: 'M3 5a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Z',\n },\n settings: {\n path: 'M12 8.5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7Zm8.5 3.5c0-.5-.05-.98-.14-1.45l2.02-1.57-2-3.46-2.47 1a8.7 8.7 0 0 0-2.5-1.45L15 2.5h-4l-.4 2.57a8.7 8.7 0 0 0-2.51 1.45l-2.47-1-2 3.46 2.02 1.57a7.7 7.7 0 0 0 0 2.9l-2.02 1.57 2 3.46 2.47-1a8.7 8.7 0 0 0 2.5 1.45L11 21.5h4l.4-2.57a8.7 8.7 0 0 0 2.51-1.45l2.47 1 2-3.46-2.02-1.57c.09-.47.14-.95.14-1.45Z',\n },\n people: {\n path: 'M16 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM6.5 12a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7ZM16 13c-4 0-7 2-7 4.5V21h14v-3.5C23 15 20 13 16 13ZM6.5 14C2.9 14 1 15.8 1 18v3h6v-3.5c0-1.2.48-2.28 1.3-3.16A9.3 9.3 0 0 0 6.5 14Z',\n },\n person: {\n path: 'M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm0 2c-5 0-9 2.5-9 5.5V22h18v-2.5c0-3-4-5.5-9-5.5Z',\n },\n security: {\n path: 'M12 2 4 5v6c0 5.05 3.41 9.74 8 11 4.59-1.26 8-5.95 8-11V5l-8-3Zm-1 14-4-4 1.4-1.4 2.6 2.58 5.6-5.58L18 9l-7 7Z',\n },\n inventory: {\n path: 'm12 2 9 5-9 5-9-5 9-5Zm-7 8.5 6 3.33V22l-6-3.33V10.5Zm8 11.5v-8.17l6-3.33v8.17L13 22Z',\n },\n shopping_cart: {\n path: 'M7 18a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm10 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM6.2 6l.8 2h11.6l-1.9 5H8.1L4.3 3H1v2h2l3.6 9.6A2 2 0 0 0 8.5 16H19v-2H8.5l-.4-1H18a2 2 0 0 0 1.86-1.27L22 6H6.2Z',\n },\n receipt: {\n path: 'M5 2v20l3-2 4 2 4-2 3 2V2l-3 2-4-2-4 2-3-2Zm3 6h8v2H8V8Zm0 4h8v2H8v-2Z',\n },\n assessment: {\n path: 'M4 20h16v2H4a2 2 0 0 1-2-2V4h2v16Zm3-2H5v-6h2v6Zm4 0H9V7h2v11Zm4 0h-2V4h2v14Zm4 0h-2v-9h2v9Z',\n },\n description: {\n path: 'M6 2h8l5 5v15H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm7 1.5V8h4.5L13 3.5ZM8 12v2h8v-2H8Zm0 4v2h8v-2H8Z',\n },\n business: {\n path: 'M3 21V3h10v5h8v13h-7v-4h-2v4H3Zm3-14h2V5H6v2Zm4 0h2V5h-2v2Zm-4 4h2V9H6v2Zm4 0h2V9h-2v2Zm6 1h2v-2h-2v2Zm0 4h2v-2h-2v2Z',\n },\n chevron_left: {\n path: 'M14.7 5.3a1 1 0 0 1 0 1.4L9.4 12l5.3 5.3a1 1 0 1 1-1.4 1.4l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 0 1 1.4 0Z',\n },\n chevron_right: {\n path: 'M9.3 5.3a1 1 0 0 0 0 1.4l5.3 5.3-5.3 5.3a1 1 0 1 0 1.4 1.4l6-6a1 1 0 0 0 0-1.4l-6-6a1 1 0 0 0-1.4 0Z',\n },\n sun: {\n path: 'M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0-5a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1Zm0 17a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0v-2a1 1 0 0 1 1-1ZM2 12a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1Zm17 0a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1ZM4.22 4.22a1 1 0 0 1 1.42 0l1.41 1.42a1 1 0 0 1-1.41 1.41L4.22 5.64a1 1 0 0 1 0-1.42Zm12.73 12.73a1 1 0 0 1 1.41 0l1.42 1.41a1 1 0 0 1-1.42 1.42l-1.41-1.42a1 1 0 0 1 0-1.41Zm2.83-12.73a1 1 0 0 1 0 1.42l-1.42 1.41a1 1 0 0 1-1.41-1.41l1.41-1.42a1 1 0 0 1 1.42 0ZM7.05 16.95a1 1 0 0 1 0 1.41l-1.41 1.42a1 1 0 0 1-1.42-1.42l1.42-1.41a1 1 0 0 1 1.41 0Z',\n },\n moon: {\n path: 'M20.5 15.2A8.5 8.5 0 0 1 8.8 3.5 9 9 0 1 0 20.5 15.2Z',\n },\n alert: {\n path: 'M12 2 1 21h22L12 2Zm-1 7h2v6h-2V9Zm0 8h2v2h-2v-2Z',\n },\n check: {\n path: 'm9.2 16.2-4.4-4.4-1.6 1.6 6 6L21 7.6 19.4 6 9.2 16.2Z',\n },\n close: {\n path: 'M6.4 5 12 10.6 17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6L6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5Z',\n },\n menu: {\n path: 'M3 6h18v2H3V6Zm0 5h18v2H3v-2Zm0 5h18v2H3v-2Z',\n },\n search: {\n path: 'M10.5 3a7.5 7.5 0 1 0 4.73 13.32L20.91 22 22 20.91l-5.68-5.68A7.5 7.5 0 0 0 10.5 3Zm0 2a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11Z',\n },\n visibility: {\n path: 'M12 4.5C6.5 4.5 2.1 8 1 12c1.1 4 5.5 7.5 11 7.5S21.9 16 23 12c-1.1-4-5.5-7.5-11-7.5Zm0 12a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9Zm0-2a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z',\n },\n visibility_off: {\n path: 'm3.3 2 18.7 18.7-1.3 1.3-3.15-3.15A12.2 12.2 0 0 1 12 20C6.5 20 2.1 16.5 1 12a11.6 11.6 0 0 1 3.4-5.2L2 4.3 3.3 2Zm4.42 7.02A4.5 4.5 0 0 0 14.98 16l-1.55-1.55a2.5 2.5 0 0 1-3.88-3.88L7.72 9.02ZM12 4c5.5 0 9.9 3.5 11 8a11.2 11.2 0 0 1-2.53 4.35l-3.3-3.3A5.5 5.5 0 0 0 10.95 6.83L8.58 4.46A13.4 13.4 0 0 1 12 4Z',\n },\n notifications: {\n path: 'M12 22a2.5 2.5 0 0 0 2.45-2h-4.9A2.5 2.5 0 0 0 12 22Zm7-6v-5a7 7 0 0 0-5.5-6.84V3a1.5 1.5 0 0 0-3 0v1.16A7 7 0 0 0 5 11v5l-2 2v1h18v-1l-2-2Z',\n },\n chevron_down: {\n path: 'M5.3 8.3a1 1 0 0 1 1.4 0l5.3 5.3 5.3-5.3a1 1 0 1 1 1.4 1.4l-6 6a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.4Z',\n },\n apps: {\n path: 'M4 3h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM4 15h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Z',\n },\n help: {\n path: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-4.5a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm.2-9.5c-2 0-3.37 1.03-3.7 2.75l1.95.4c.17-.84.77-1.3 1.67-1.3 1 0 1.63.52 1.63 1.35 0 .67-.33 1.03-1.27 1.58-1.12.65-1.48 1.27-1.48 2.47V14h2v-.55c0-.67.2-.94 1.12-1.5 1.18-.72 1.88-1.58 1.88-2.9C16 7.25 14.5 6 12.2 6Z',\n },\n add: {\n path: 'M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6V5Z',\n },\n edit: {\n path: 'm16.86 3.49 3.65 3.65L8.65 19H5v-3.65L16.86 3.49ZM19.73 2.27a1.75 1.75 0 0 0-2.47 0l-1.35 1.35 3.65 3.65 1.35-1.35a1.75 1.75 0 0 0 0-2.47l-1.18-1.18Z',\n },\n delete: {\n path: 'M8 3h8l1 2h4v2H3V5h4l1-2Zm-2 6h12l-1 12H7L6 9Zm4 2v7h2v-7h-2Zm4 0v7h2v-7h-2Z',\n },\n toggle_on: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12Zm0 10a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n toggle_off: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12ZM7 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n inbox: {\n path: 'M4 3h16l3 11v7H1v-7L4 3Zm1.5 2L3 14h5l1 2h6l1-2h5l-2.5-9h-13Z',\n },\n pdf: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M7.1 20v-6.5m0 1.1c.45-.75 1.25-1.15 2.05-1.05 1.25.15 1.85 1.25 1.7 2.65-.15 1.35-.9 2.2-2.05 2.15-.75-.05-1.35-.4-1.7-.95m7.85-5.9V18.4m0-3.8c-.45-.75-1.25-1.15-2.05-1.05-1.25.15-1.85 1.25-1.7 2.65.15 1.35.9 2.2 2.05 2.15.75-.05 1.35-.4 1.7-.95m2.15 1v-5.65c0-1.15.55-1.75 1.65-1.75.35 0 .65.05.9.15m-2.5 3.05h2.1',\n estilo: 'linea',\n grosor: 1.65,\n },\n save: {\n path: 'M5 3h12l4 4v14H3V5a2 2 0 0 1 2-2Zm1 2a1 1 0 0 0-1 1v13h14V8h-4V5H6Zm2 0v5h7V5H8Zm1 8h6a2 2 0 0 1 2 2v4H7v-4a2 2 0 0 1 2-2Z',\n },\n copy: {\n path: 'M8 3h11a2 2 0 0 1 2 2v11h-2V5H8V3ZM5 7h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2Zm0 2v10h10V9H5Z',\n },\n download: {\n path: 'M11 3h2v10.17l3.59-3.58L18 11l-6 6-6-6 1.41-1.41L11 13.17V3ZM4 19h16v2H4v-2Z',\n },\n upload: {\n path: 'm12 3 6 6-1.41 1.41L13 6.83V17h-2V6.83l-3.59 3.58L6 9l6-6ZM4 19h16v2H4v-2Z',\n },\n print: {\n path: 'M7 3h10v4H7V3Zm10 12v6H7v-6h10Zm2-7a3 3 0 0 1 3 3v6h-3v-4H5v4H2v-6a3 3 0 0 1 3-3h14Zm-4 9H9v2h6v-2Zm4-7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z',\n },\n excel: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M8 11h8v7.5H8V11Zm0 3.75h8M11.9 11v7.5',\n estilo: 'linea',\n grosor: 1.65,\n },\n xml: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M9.25 12l-2.5 3 2.5 3m5.5-6 2.5 3-2.5 3m-1.5-7-2.5 8',\n estilo: 'linea',\n grosor: 1.65,\n },\n zip: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M10.25 2.75h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5M12 11.75v3m-1.75 0h3.5v3.5h-3.5v-3.5Z',\n estilo: 'linea',\n grosor: 1.65,\n },\n file: {\n path: 'M6 2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm8 2H6v16h12V8h-4V4Zm2 2 2 2h-2V6Z',\n },\n image: {\n path: 'M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 2v14h16V5H4Zm3.5 2A2.5 2.5 0 1 1 5 9.5 2.5 2.5 0 0 1 7.5 7Zm12 10-4.5-5-3.2 3.5-2.3-2.5L4.5 18h15v-1Z',\n },\n calendar: {\n path: 'M7 2h2v2h6V2h2v2h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2V2ZM5 9v11h14V9H5Zm0-3v1h14V6H5Z',\n },\n clock: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n history: {\n path: 'M12 4a8 8 0 1 1-7.45 5H2l3.5-4L9 9H6.67A6 6 0 1 0 12 6V4Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n filter: {\n path: 'M3 4h18l-7 8v6l-4 2v-8L3 4Zm4.41 2L12 11.25 16.59 6H7.41Z',\n },\n refresh: {\n path: 'M17.65 6.35A7.95 7.95 0 0 0 12 4a8 8 0 1 0 7.75 10h-2.08A6 6 0 1 1 16.2 7.8L13 11h8V3l-3.35 3.35Z',\n },\n sort: {\n path: 'M7 3 3 7h3v11H3l4 4 4-4H8V7h3L7 3Zm10 0-4 4h3v11h-3l4 4 4-4h-3V7h3l-4-4Z',\n },\n more_vertical: {\n path: 'M12 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z',\n },\n more_horizontal: {\n path: 'M8 12a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Z',\n },\n arrow_back: {\n path: 'm11 5-7 7 7 7 1.41-1.41L7.83 13H21v-2H7.83l4.58-4.59L11 5Z',\n },\n arrow_forward: {\n path: 'm13 5-1.41 1.41L16.17 11H3v2h13.17l-4.58 4.59L13 19l7-7-7-7Z',\n },\n login: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n logout: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n lock: {\n path: 'M7 10V7a5 5 0 0 1 10 0v3h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm2 0h6V7a3 3 0 0 0-6 0v3Zm3 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n lock_open: {\n path: 'M7 10V7a5 5 0 0 1 9.9-1H14.8A3 3 0 0 0 9 7v3h9a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm5 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n mail: {\n path: 'M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm0 3.24V18h16V7.24l-8 5-8-5ZM18.53 6H5.47L12 10.08 18.53 6Z',\n },\n phone: {\n path: 'M6.62 2.5 10 6.2 7.9 8.3a15.5 15.5 0 0 0 7.8 7.8l2.1-2.1 3.7 3.38V20a2 2 0 0 1-2 2C9.84 22 2 14.16 2 4.5a2 2 0 0 1 2-2h2.62Z',\n },\n send: {\n path: 'm3 3 19 9-19 9 2-7 10-2-10-2-2-7Zm3.62 5.55.57 2L12 12l-4.81 1.45-.57 2L17.53 12 6.62 8.55Z',\n },\n location: {\n path: 'M12 2a8 8 0 0 1 8 8c0 5.5-8 12-8 12S4 15.5 4 10a8 8 0 0 1 8-8Zm0 2a6 6 0 0 0-6 6c0 3.55 3.92 7.68 6 9.65 2.08-1.97 6-6.1 6-9.65a6 6 0 0 0-6-6Zm0 3a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n language: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm6.92 6h-3.08a15.7 15.7 0 0 0-1.38-3.18A8.05 8.05 0 0 1 18.92 8ZM12 4c-.83 1.2-1.5 2.53-1.84 4h3.68A13.7 13.7 0 0 0 12 4ZM9.54 4.82A15.7 15.7 0 0 0 8.16 8H5.08a8.05 8.05 0 0 1 4.46-3.18ZM4.26 10A8.3 8.3 0 0 0 4 12c0 .69.09 1.36.26 2h3.55a17 17 0 0 1 0-4H4.26Zm5.57 0a14.6 14.6 0 0 0 0 4h4.34a14.6 14.6 0 0 0 0-4H9.83Zm6.36 0a17 17 0 0 1 0 4h3.55A8.3 8.3 0 0 0 20 12c0-.69-.09-1.36-.26-2h-3.55ZM5.08 16h3.08c.3 1.14.77 2.2 1.38 3.18A8.05 8.05 0 0 1 5.08 16Zm5.08 0c.34 1.47 1.01 2.8 1.84 4 .83-1.2 1.5-2.53 1.84-4h-3.68Zm4.3 3.18A15.7 15.7 0 0 0 15.84 16h3.08a8.05 8.05 0 0 1-4.46 3.18Z',\n },\n info: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 6h2v7h-2v-7Zm0-3h2v2h-2V7Z',\n },\n warning: {\n path: 'M12 2 1 21h22L12 2Zm0 4.03L19.53 19H4.47L12 6.03ZM11 10v5h2v-5h-2Zm0 6v2h2v-2h-2Z',\n },\n error: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v7h-2V7Zm0 9h2v2h-2v-2Z',\n },\n check_circle: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1.5 11.5-3-3 1.41-1.41 1.59 1.58 4.59-4.58 1.41 1.41-6 6Z',\n },\n cancel: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-3.3 3.3L12 10.59l3.3-3.3 1.4 1.42-3.29 3.29 3.3 3.3-1.42 1.4L12 13.41l-3.3 3.3-1.4-1.42 3.29-3.29-3.3-3.3L8.7 7.3Z',\n },\n star: {\n path: 'm12 2.5 2.94 5.96 6.58.96-4.76 4.64 1.12 6.56L12 17.53l-5.88 3.09 1.12-6.56-4.76-4.64 6.58-.96L12 2.5Z',\n },\n favorite: {\n path: 'M12 21s-9-5.4-9-12a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 6.6-9 12-9 12Z',\n },\n database: {\n path: 'M12 2C6.48 2 2 3.79 2 6v12c0 2.21 4.48 4 10 4s10-1.79 10-4V6c0-2.21-4.48-4-10-4Zm0 2c4.42 0 8 1.12 8 2s-3.58 2-8 2-8-1.12-8-2 3.58-2 8-2ZM4 9.2c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V12c0 .88-3.58 2-8 2s-8-1.12-8-2V9.2Zm0 6c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V18c0 .88-3.58 2-8 2s-8-1.12-8-2v-2.8Z',\n },\n cloud: {\n path: 'M7.5 20A5.5 5.5 0 0 1 6.3 9.13 7 7 0 0 1 19 11.5h.5a4.25 4.25 0 0 1 0 8.5h-12Zm0-2h12a2.25 2.25 0 0 0 0-4.5h-2.4l-.05-1.2A5 5 0 0 0 7.9 10.1l-.42 1.05-1.12.17A3.5 3.5 0 0 0 7.5 18Z',\n },\n camera: {\n path: 'M8 4h8l1.5 2H21a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.5L8 4Zm4 4a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0 2a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n link: {\n path: 'M10.59 13.41a2 2 0 0 0 2.82 0l3-3a2 2 0 0 0-2.82-2.82l-1.3 1.29-1.41-1.41 1.3-1.3a4 4 0 1 1 5.65 5.66l-3 3a4 4 0 0 1-5.66 0l-.7-.71 1.41-1.41.71.7Zm2.82-2.82a2 2 0 0 0-2.82 0l-3 3a2 2 0 0 0 2.82 2.82l1.3-1.29 1.41 1.41-1.3 1.3a4 4 0 1 1-5.65-5.66l3-3a4 4 0 0 1 5.66 0l.7.71-1.41 1.41-.71-.7Z',\n },\n external_link: {\n path: 'M14 3h7v7h-2V6.41l-8.29 8.3-1.42-1.42L17.59 5H14V3ZM5 5h6v2H5v12h12v-6h2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z',\n },\n} satisfies Record<string, TdIconoDefinicion>;\n\nexport type TdIconoNombre = keyof typeof TD_ICONOS;\n\nexport const TD_ICONOS_NOMBRES = Object.freeze(\n Object.keys(TD_ICONOS) as TdIconoNombre[]\n);\n","import { Injectable } from '@angular/core';\nimport { TdIconoDefinicion, TdIconoPersonalizado } from './td-icono.model';\nimport { TD_ICONOS } from './td-iconos';\n\n@Injectable({ providedIn: 'root' })\nexport class TdIconoRegistry {\n private readonly iconos = new Map<string, TdIconoDefinicion>(\n Object.entries(TD_ICONOS)\n );\n\n registrar(iconos: TdIconoPersonalizado): void {\n for (const [nombre, definicion] of Object.entries(iconos)) {\n const clave = this.normalizar(nombre);\n if (!clave) continue;\n\n this.iconos.set(\n clave,\n typeof definicion === 'string' ? { path: definicion } : definicion\n );\n }\n }\n\n obtener(nombre: string | null | undefined): TdIconoDefinicion {\n return this.iconos.get(this.normalizar(nombre)) ?? this.iconos.get('folder')!;\n }\n\n existe(nombre: string): boolean {\n return this.iconos.has(this.normalizar(nombre));\n }\n\n nombres(): string[] {\n return [...this.iconos.keys()];\n }\n\n private normalizar(nombre: string | null | undefined): string {\n return (nombre ?? '').trim().toLowerCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { TdIconoRegistry } from './td-icono-registry';\n\n@Component({\n selector: 'td-icon',\n template: `\n <svg\n [attr.viewBox]=\"definicion().viewBox || '0 0 24 24'\"\n [attr.aria-hidden]=\"titulo ? null : 'true'\"\n [attr.aria-label]=\"titulo || null\"\n [attr.role]=\"titulo ? 'img' : null\"\n focusable=\"false\"\n >\n <path\n [attr.d]=\"definicion().path\"\n [attr.fill]=\"definicion().estilo === 'linea' ? 'none' : 'currentColor'\"\n [attr.stroke]=\"definicion().estilo === 'linea' ? 'currentColor' : 'none'\"\n [attr.stroke-width]=\"definicion().grosor || null\"\n [attr.stroke-linecap]=\"definicion().estilo === 'linea' ? 'round' : null\"\n [attr.stroke-linejoin]=\"definicion().estilo === 'linea' ? 'round' : null\"\n />\n </svg>\n `,\n styles: `\n :host {\n display: inline-flex;\n width: var(--td-icon-size, 1.25rem);\n height: var(--td-icon-size, 1.25rem);\n flex: 0 0 auto;\n color: inherit;\n line-height: 0;\n vertical-align: middle;\n }\n svg { width: 100%; height: 100%; }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdIcon {\n private readonly registry = inject(TdIconoRegistry);\n\n @Input() nombre = 'folder';\n @Input() titulo = '';\n\n @Input()\n set tamano(value: string | number) {\n this.tamanoCss = typeof value === 'number' ? `${value}px` : value;\n }\n\n protected tamanoCss = '1.25rem';\n\n @HostBinding('style.--td-icon-size')\n protected get tamanoHost(): string {\n return this.tamanoCss;\n }\n\n protected definicion() {\n return this.registry.obtener(this.nombre);\n }\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport type TdButtonVariant = 'solid' | 'soft' | 'outline' | 'ghost';\nexport type TdButtonTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type TdButtonSize = 'sm' | 'md' | 'lg';\nexport type TdButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'td-button',\n imports: [TdIcon],\n template: `\n <button\n class=\"td-button\"\n [class]=\"'td-button td-button--' + variant + ' td-button--' + tone + ' td-button--' + size\"\n [class.td-button--block]=\"block\"\n [class.td-button--loading]=\"loading\"\n [class.td-button--icon-only]=\"isIconOnly\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n (click)=\"handleClick($event)\"\n >\n @if (loading) {\n <span class=\"td-button__spinner\" aria-hidden=\"true\"></span>\n } @else if (icon && iconPosition === 'start') {\n <td-icon [nombre]=\"icon\" />\n }\n\n <span\n #content\n class=\"td-button__content\"\n [class.td-button__content--hidden]=\"isIconOnly\"\n >\n <ng-content />\n </span>\n\n @if (!loading && icon && iconPosition === 'end') {\n <td-icon [nombre]=\"icon\" />\n }\n </button>\n `,\n styleUrl: './td-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdButton implements AfterContentChecked {\n @ViewChild('content', { static: true }) private readonly contentRef?: ElementRef<HTMLElement>;\n\n @Input() variant: TdButtonVariant = 'solid';\n @Input() tone: TdButtonTone = 'primary';\n @Input() size: TdButtonSize = 'md';\n @Input() type: TdButtonType = 'button';\n @Input() icon = '';\n @Input() iconPosition: 'start' | 'end' = 'start';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() block = false;\n @Input({ transform: booleanAttribute }) iconOnly = false;\n @Input({ alias: 'aria-label' }) ariaLabel = '';\n\n @Output() readonly pressed = new EventEmitter<MouseEvent>();\n\n protected hasProjectedContent = false;\n\n protected get isIconOnly(): boolean {\n return !!this.icon && (this.iconOnly || !this.hasProjectedContent);\n }\n\n ngAfterContentChecked(): void {\n const element = this.contentRef?.nativeElement;\n if (!element) return;\n\n this.hasProjectedContent = !!element.textContent?.trim() || element.childElementCount > 0;\n }\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled || this.loading) return;\n this.pressed.emit(event);\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n Injector,\n ModelSignal,\n OutputEmitterRef,\n signal,\n} from '@angular/core';\nimport { FORM_FIELD } from '@angular/forms/signals';\n\nexport interface TdFormControlBridge {\n readonly usesSignalForms: boolean;\n isDisabled(fieldDisabled: boolean): boolean;\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean;\n registerOnTouched(fn: () => void): void;\n setDisabledState(disabled: boolean): void;\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void;\n}\n\nexport type TdErrorDisplay = 'auto' | 'always' | 'touched' | 'dirty' | 'never';\n\n/**\n * Puente reutilizable entre Signal Forms y ControlValueAccessor.\n *\n * Los inputs del contrato se declaran en cada componente porque el compilador\n * de Signal Forms de Angular 21 necesita encontrarlos directamente allí.\n */\nexport function createTdFormControlBridge(): TdFormControlBridge {\n const injector = inject(Injector);\n const cdr = inject(ChangeDetectorRef);\n const cvaDisabled = signal(false);\n let onCvaTouched: () => void = () => undefined;\n\n const usesSignalForms = (): boolean =>\n !!injector.get(FORM_FIELD, null, { self: true, optional: true });\n\n return {\n get usesSignalForms(): boolean {\n return usesSignalForms();\n },\n isDisabled(fieldDisabled: boolean): boolean {\n return usesSignalForms() ? fieldDisabled : fieldDisabled || cvaDisabled();\n },\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean {\n if (displayMode === 'never') return false;\n\n const hasErrorState = invalid || hasErrorMessage;\n if (!hasErrorState) return false;\n\n if (displayMode === 'always') return true;\n if (displayMode === 'touched') return touched;\n if (displayMode === 'dirty') return dirty;\n return touched || dirty;\n },\n registerOnTouched(fn: () => void): void {\n onCvaTouched = fn;\n },\n setDisabledState(disabled: boolean): void {\n if (!usesSignalForms()) cvaDisabled.set(disabled);\n cdr.markForCheck();\n },\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void {\n // Angular prioriza el CVA cuando el control también publica NG_VALUE_ACCESSOR,\n // incluso si está enlazado mediante [formField]. Mantener esta llamada permite\n // que Signal Forms marque el field como touched sin perder compatibilidad clásica.\n onCvaTouched();\n touched.set(true);\n touch.emit();\n },\n };\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet checkboxSequence = 0;\n\n@Component({\n selector: 'td-checkbox',\n imports: [TdIcon],\n template: `\n <label\n class=\"td-checkbox\"\n [class.td-checkbox--checked]=\"checked()\"\n [class.td-checkbox--disabled]=\"isDisabled()\"\n [class.td-checkbox--readonly]=\"readonly()\"\n [class.td-checkbox--error]=\"hasError()\"\n [class.td-checkbox--dark]=\"dark()\"\n [for]=\"inputId\"\n >\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"descriptionId\"\n (change)=\"handleChange($event)\"\n (blur)=\"handleBlur()\"\n (click)=\"handleClick($event)\"\n />\n\n <span class=\"td-checkbox__box\" aria-hidden=\"true\">\n @if (checked()) {\n <td-icon nombre=\"check\" tamano=\".9rem\" />\n }\n </span>\n\n <span class=\"td-checkbox__content\">\n <span class=\"td-checkbox__label\">{{ label() }}</span>\n @if (description()) {\n <span class=\"td-checkbox__description\">{{ description() }}</span>\n }\n </span>\n </label>\n\n @if (displayError() || hint()) {\n <p\n class=\"td-checkbox__message\"\n [class.td-checkbox__message--error]=\"hasError()\"\n [id]=\"descriptionId\"\n >\n {{ displayError() || hint() }}\n </p>\n }\n `,\n styleUrl: './td-checkbox.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdCheckbox),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdCheckbox implements ControlValueAccessor, FormCheckboxControl {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-checkbox-${++checkboxSequence}`;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n readonly id = input('');\n readonly label = input('Opción');\n readonly description = input('');\n readonly hint = input('');\n readonly dark = input(false);\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n\n readonly checked = model(false);\n\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n protected get inputId(): string {\n return this.id() || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.displayError() || this.hint()\n ? `${this.inputId}-description`\n : null;\n }\n\n private onChange: (checked: boolean) => void = () => undefined;\n\n writeValue(value: unknown): void {\n this.checked.set(value === true);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (checked: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleChange(event: Event): void {\n if (this.readonly()) {\n (event.target as HTMLInputElement).checked = this.checked();\n return;\n }\n\n const checked = (event.target as HTMLInputElement).checked === true;\n this.checked.set(checked);\n this.onChange(checked);\n }\n\n protected handleClick(event: MouseEvent): void {\n if (!this.readonly()) return;\n event.preventDefault();\n event.stopPropagation();\n }\n\n protected handleBlur(): void {\n this.formBridge.markTouched(this.touched, this.touch);\n }\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdMenuItem, TdMenuPosicion, TdMenuSeleccion } from './td-menu.model';\n\n@Component({\n selector: 'td-menu',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n templateUrl: './td-menu.html',\n styleUrl: './td-menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdMenu<T = unknown> {\n @Input() items: TdMenuItem<T>[] = [];\n @Input() etiqueta = '';\n @Input() icono = 'more_vertical';\n @Input() posicion: TdMenuPosicion = 'abajo-fin';\n @Input() ancho = '14rem';\n @Input() disabled = false;\n @Input() oscuro = false;\n @Input() ariaLabel = 'Abrir menu';\n\n @Output() readonly seleccion = new EventEmitter<TdMenuSeleccion<T>>();\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n\n protected abierto = false;\n\n protected get itemsVisibles(): TdMenuItem<T>[] {\n return this.items.filter((item) => item.visible ?? true);\n }\n\n protected alternar(): void {\n if (this.disabled) return;\n this.establecerAbierto(!this.abierto);\n }\n\n protected cerrar(): void {\n this.establecerAbierto(false);\n }\n\n protected seleccionar(item: TdMenuItem<T>): void {\n if (item.deshabilitado) return;\n this.seleccion.emit({ item, id: item.id, data: item.data });\n this.cerrar();\n }\n\n protected posiciones(): CdkConnectedOverlay['positions'] {\n const offset = 8;\n const mapa: Record<TdMenuPosicion, CdkConnectedOverlay['positions']> = {\n 'abajo-inicio': [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'abajo-fin': [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'arriba-inicio': [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n 'arriba-fin': [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n };\n\n return mapa[this.posicion];\n }\n\n private establecerAbierto(valor: boolean): void {\n if (this.abierto === valor) return;\n this.abierto = valor;\n this.abiertoChange.emit(valor);\n }\n}\n","<button\n #origen=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"td-menu__trigger\"\n [class.td-menu__trigger--icon-only]=\"!etiqueta\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"abierto\"\n aria-haspopup=\"menu\"\n (click)=\"alternar()\"\n>\n @if (icono) {\n <td-icon [nombre]=\"icono\" />\n }\n @if (etiqueta) {\n <span>{{ etiqueta }}</span>\n <td-icon nombre=\"chevron_down\" tamano=\".95rem\" />\n }\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origen\"\n [cdkConnectedOverlayOpen]=\"abierto\"\n [cdkConnectedOverlayPositions]=\"posiciones()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'td-menu__backdrop'\"\n [cdkConnectedOverlayPanelClass]=\"'td-menu__overlay'\"\n (backdropClick)=\"cerrar()\"\n (detach)=\"cerrar()\"\n>\n <div\n class=\"td-menu\"\n [class.td-menu--oscuro]=\"oscuro\"\n [style.width]=\"ancho\"\n role=\"menu\"\n >\n @for (item of itemsVisibles; track item.id) {\n @if (item.separadorAntes) {\n <span class=\"td-menu__separador\" aria-hidden=\"true\"></span>\n }\n <button\n type=\"button\"\n role=\"menuitem\"\n [class]=\"'td-menu__item td-menu__item--' + (item.tono || 'neutro')\"\n [disabled]=\"item.deshabilitado\"\n (click)=\"seleccionar(item)\"\n >\n @if (item.icono) {\n <span class=\"td-menu__icono\">\n <td-icon [nombre]=\"item.icono\" />\n </span>\n }\n <span class=\"td-menu__texto\">\n <strong>{{ item.etiqueta }}</strong>\n @if (item.descripcion) {\n <small>{{ item.descripcion }}</small>\n }\n </span>\n </button>\n } @empty {\n <div class=\"td-menu__vacio\">\n <td-icon nombre=\"inbox\" />\n <span>Sin opciones disponibles</span>\n </div>\n }\n </div>\n</ng-template>\n","import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TdIcon } from '../iconos';\nimport { TdMenu, TdMenuItem, TdMenuSeleccion } from '../menu';\nimport {\n TdDataTableAccion,\n TdDataTableAccionesPresentacion,\n TdDataTableAccionEvento,\n TdDataTableBoton,\n TdDataTableColumna,\n TdDataTableImagenEvento,\n TdDataTableTono,\n} from './td-data-table.model';\n\ninterface TdDataTableImagenActiva {\n src: string;\n alt: string;\n}\n\n@Component({\n selector: 'td-data-table',\n imports: [FormsModule, NgTemplateOutlet, ScrollingModule, TdIcon, TdMenu],\n templateUrl: './td-data-table.html',\n styleUrl: './td-data-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDataTable<T extends object> implements OnChanges, OnDestroy {\n @ViewChild(CdkVirtualScrollViewport)\n private viewport?: CdkVirtualScrollViewport;\n @ViewChild('imagenDialog')\n private imagenDialog?: ElementRef<HTMLDialogElement>;\n\n @Input() datos: T[] = [];\n @Input() columnas: TdDataTableColumna<T>[] = [];\n @Input() acciones: TdDataTableAccion<T>[] = [];\n @Input() accionesPresentacion: TdDataTableAccionesPresentacion = 'inline';\n @Input() botones: TdDataTableBoton[] = [];\n @Input() total = 0;\n @Input() cargando = false;\n @Input() puedeCargarMas = false;\n @Input() virtualizar = true;\n @Input() virtualizarDesde = 100;\n @Input() itemSize = 65;\n @Input() filasAntesDeCargar = 2;\n @Input() altura = 'min(620px, calc(100dvh - 18rem))';\n @Input() campoId: keyof T & string = 'id' as keyof T & string;\n @Input() oscuro = false;\n @Input() mostrarBusqueda = true;\n @Input() placeholderBusqueda = 'Buscar...';\n @Input() textoVacio = 'No hay registros disponibles';\n @Input() descripcionVacio = 'Prueba cambiando los filtros o vuelve más tarde.';\n @Input() debounceBusqueda = 250;\n\n @Output() readonly busquedaChange = new EventEmitter<string>();\n @Output() readonly accion = new EventEmitter<TdDataTableAccionEvento<T>>();\n @Output() readonly imagenClick = new EventEmitter<TdDataTableImagenEvento<T>>();\n @Output() readonly botonClick = new EventEmitter<TdDataTableBoton>();\n @Output() readonly cargarMas = new EventEmitter<void>();\n\n protected busqueda = '';\n protected imagenActiva: TdDataTableImagenActiva | null = null;\n private timeoutBusqueda: ReturnType<typeof setTimeout> | null = null;\n private datosAnteriores: T[] = [];\n private recalculoPendiente: ReturnType<typeof setTimeout> | null = null;\n private cargaIncrementalHabilitada = true;\n private scrollDeUsuarioPendiente = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['datos']) {\n const datosPrevios = (changes['datos'].previousValue as T[] | undefined) ?? this.datosAnteriores;\n const debeVolverAlInicio = this.debeVolverAlInicio(datosPrevios, this.datos);\n\n this.datosAnteriores = this.datos;\n this.scrollDeUsuarioPendiente = false;\n this.programarRecalculoViewport(debeVolverAlInicio);\n }\n\n if (changes['itemSize'] || changes['altura'] || changes['columnas'] || changes['acciones']) {\n this.programarRecalculoViewport(false);\n }\n }\n\n ngOnDestroy(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n if (this.recalculoPendiente) clearTimeout(this.recalculoPendiente);\n }\n\n protected columnasGrid(): string {\n const columnas = this.columnas.map((columna) => columna.ancho ?? 'minmax(10rem, 1fr)');\n if (this.acciones.length) {\n columnas.push(this.accionesPresentacion === 'menu' ? 'minmax(5rem, auto)' : 'minmax(9rem, auto)');\n }\n return columnas.join(' ');\n }\n\n protected buscar(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.timeoutBusqueda = setTimeout(\n () => this.busquedaChange.emit(this.busqueda.trim()),\n this.debounceBusqueda\n );\n }\n\n protected limpiarBusqueda(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.busqueda = '';\n this.busquedaChange.emit('');\n }\n\n protected valor(fila: T, clave: keyof T & string): unknown {\n return (fila as Record<string, unknown>)[clave];\n }\n\n protected textoCelda(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n if (columna.formatear) return columna.formatear(valor, fila, indice);\n if (valor === null || valor === undefined || valor === '') return '—';\n if (columna.tipo === 'booleano') return valor ? 'Sí' : 'No';\n if (columna.tipo === 'estado') return valor ? 'Activo' : 'Inactivo';\n if (columna.tipo === 'fecha' || columna.tipo === 'fechaHora' || columna.tipo === 'hora') {\n return this.formatearFecha(valor, columna);\n }\n if (\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n ) {\n return this.formatearNumero(valor, columna);\n }\n return String(valor);\n }\n\n protected imagenSrc(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n const src = columna.imagen?.src?.(valor, fila, indice) ?? valor;\n return typeof src === 'string' ? src.trim() : '';\n }\n\n protected imagenAlt(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n return columna.imagen?.alt?.(valor, fila, indice) || this.textoCelda(columna, fila, indice);\n }\n\n protected imagenForma(columna: TdDataTableColumna<T>): string {\n return columna.imagen?.forma ?? 'redondeada';\n }\n\n protected tonoCelda(columna: TdDataTableColumna<T>, fila: T): TdDataTableTono {\n const valor = this.valor(fila, columna.clave);\n if (columna.tono) return columna.tono(valor, fila);\n if (columna.tipo === 'estado') return valor ? 'exito' : 'peligro';\n if (columna.tipo === 'booleano') return valor ? 'exito' : 'neutro';\n return 'neutro';\n }\n\n protected accionesVisibles(fila: T): TdDataTableAccion<T>[] {\n return this.acciones.filter((accion) => {\n if (accion.condicion && !accion.condicion(fila)) return false;\n return accion.visible?.(fila) ?? true;\n });\n }\n\n protected iconoAccion(accion: TdDataTableAccion<T>, fila: T): string {\n return typeof accion.icono === 'function' ? accion.icono(fila) : accion.icono;\n }\n\n protected tonoAccion(accion: TdDataTableAccion<T>, fila: T): TdDataTableTono {\n if (typeof accion.tono === 'function') return accion.tono(fila);\n return accion.tono ?? 'neutro';\n }\n\n protected usarMenuAcciones(fila: T): boolean {\n if (this.accionesPresentacion === 'menu') return true;\n if (this.accionesPresentacion === 'inline') return false;\n return this.accionesVisibles(fila).length > 3;\n }\n\n protected accionesMenu(fila: T): TdMenuItem<TdDataTableAccion<T>>[] {\n return this.accionesVisibles(fila).map((accion) => ({\n id: accion.id,\n etiqueta: accion.etiqueta,\n icono: this.iconoAccion(accion, fila),\n tono: this.tonoAccion(accion, fila),\n deshabilitado: accion.deshabilitada?.(fila) ?? false,\n data: accion,\n }));\n }\n\n protected botonesVisibles(): TdDataTableBoton[] {\n return this.botones.filter((boton) => boton.visible ?? true);\n }\n\n protected usaVirtualizacion(): boolean {\n return this.virtualizar && this.datos.length >= this.virtualizarDesde;\n }\n\n protected ejecutarAccion(\n accion: TdDataTableAccion<T>,\n fila: T,\n indice: number\n ): void {\n if (accion.deshabilitada?.(fila)) return;\n this.accion.emit({ accion, fila, indice });\n }\n\n protected ejecutarAccionMenu(\n evento: TdMenuSeleccion<TdDataTableAccion<T>>,\n fila: T,\n indice: number\n ): void {\n if (!evento.data) return;\n this.ejecutarAccion(evento.data, fila, indice);\n }\n\n protected abrirImagen(columna: TdDataTableColumna<T>, fila: T, indice: number): void {\n const src = this.imagenSrc(columna, fila, indice);\n if (!src || columna.imagen?.clickeable === false) return;\n const alt = this.imagenAlt(columna, fila, indice);\n this.imagenActiva = { src, alt };\n setTimeout(() => {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n });\n this.imagenClick.emit({\n columna,\n fila,\n indice,\n src,\n alt,\n });\n }\n\n protected cerrarImagen(): void {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.imagenActiva = null;\n }\n\n protected cerrarImagenSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrarImagen();\n }\n }\n\n protected marcarScrollUsuario(): void {\n this.scrollDeUsuarioPendiente = true;\n }\n\n protected alDesplazarViewport(): void {\n if (!this.viewport) return;\n\n const distanciaAlFinal = this.viewport.measureScrollOffset('bottom');\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected alDesplazarLista(event: Event): void {\n const elemento = event.currentTarget as HTMLElement | null;\n if (!elemento) return;\n\n const distanciaAlFinal = elemento.scrollHeight - elemento.scrollTop - elemento.clientHeight;\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected readonly trackFila = (_indice: number, fila: T): unknown =>\n (fila as Record<string, unknown>)[this.campoId] ?? fila;\n\n private programarRecalculoViewport(volverAlInicio: boolean): void {\n if (this.recalculoPendiente) {\n clearTimeout(this.recalculoPendiente);\n }\n\n this.recalculoPendiente = setTimeout(() => {\n this.recalculoPendiente = null;\n if (!this.viewport) return;\n\n if (volverAlInicio) {\n this.viewport.scrollToIndex(0, 'auto');\n }\n\n this.viewport.checkViewportSize();\n });\n }\n\n private debeVolverAlInicio(datosPrevios: T[], datosActuales: T[]): boolean {\n if (!datosPrevios.length || !datosActuales.length) {\n return false;\n }\n\n if (datosActuales.length < datosPrevios.length) {\n return true;\n }\n\n return !datosPrevios.every((filaPrevia, indice) =>\n this.claveFila(filaPrevia) === this.claveFila(datosActuales[indice])\n );\n }\n\n private claveFila(fila: T): unknown {\n return (fila as Record<string, unknown>)[this.campoId] ?? fila;\n }\n\n private intentarCargarMas(distanciaAlFinal: number): void {\n const umbralPx = this.itemSize * Math.max(0, this.filasAntesDeCargar);\n const zonaSeguraPx = umbralPx + this.itemSize;\n\n if (distanciaAlFinal > zonaSeguraPx) {\n this.cargaIncrementalHabilitada = true;\n return;\n }\n\n if (\n distanciaAlFinal <= umbralPx &&\n this.datos.length > 0 &&\n this.puedeCargarMas &&\n !this.cargando &&\n this.cargaIncrementalHabilitada &&\n this.scrollDeUsuarioPendiente\n ) {\n this.cargaIncrementalHabilitada = false;\n this.scrollDeUsuarioPendiente = false;\n this.cargarMas.emit();\n }\n }\n\n private formatearFecha(valor: unknown, columna: TdDataTableColumna<T>): string {\n const fecha = this.normalizarFecha(valor);\n if (!fecha) return '—';\n\n const opcionesPorTipo: Record<string, Intl.DateTimeFormatOptions> = {\n fecha: { day: '2-digit', month: '2-digit', year: 'numeric' },\n fechaHora: {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n },\n hora: { hour: '2-digit', minute: '2-digit' },\n };\n\n try {\n return new Intl.DateTimeFormat(\n columna.locale ?? 'es-PE',\n columna.formatoFecha ?? opcionesPorTipo[columna.tipo ?? 'fecha']\n ).format(fecha);\n } catch {\n return String(valor);\n }\n }\n\n private normalizarFecha(valor: unknown): Date | null {\n if (valor instanceof Date) return Number.isNaN(valor.getTime()) ? null : valor;\n if (typeof valor === 'number' || typeof valor === 'string') {\n const fecha = new Date(valor);\n return Number.isNaN(fecha.getTime()) ? null : fecha;\n }\n return null;\n }\n\n private formatearNumero(valor: unknown, columna: TdDataTableColumna<T>): string {\n const numero = typeof valor === 'number' ? valor : Number(valor);\n if (!Number.isFinite(numero)) return String(valor);\n\n const opciones: Intl.NumberFormatOptions = {\n ...(columna.formatoNumero ?? {}),\n };\n\n if (columna.tipo === 'decimal') {\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'moneda') {\n opciones.style = 'currency';\n opciones.currency = columna.moneda ?? 'PEN';\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'porcentaje') {\n opciones.style = 'percent';\n opciones.minimumFractionDigits ??= columna.decimales ?? 0;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n try {\n return new Intl.NumberFormat(columna.locale ?? 'es-PE', opciones).format(numero);\n } catch {\n return String(valor);\n }\n }\n}\n","<section class=\"td-tabla\" [class.td-tabla--oscura]=\"oscuro\">\n <div class=\"td-tabla__toolbar\">\n <div class=\"td-tabla__filtros\">\n @if (mostrarBusqueda) {\n <label class=\"td-tabla__busqueda\">\n <td-icon nombre=\"search\" />\n <input\n type=\"search\"\n [(ngModel)]=\"busqueda\"\n [placeholder]=\"placeholderBusqueda\"\n (input)=\"buscar()\"\n />\n @if (busqueda) {\n <button type=\"button\" title=\"Limpiar búsqueda\" (click)=\"limpiarBusqueda()\">\n <td-icon nombre=\"close\" tamano=\"1rem\" />\n </button>\n }\n </label>\n }\n <ng-content select=\"[tdDataTableFilters]\" />\n </div>\n </div>\n\n <div class=\"td-tabla__superficie\">\n <div class=\"td-tabla__resumen\">\n <span><strong>{{ datos.length }}</strong> de {{ total || datos.length }} registros</span>\n <div class=\"td-tabla__resumen-acciones\">\n <ng-content select=\"[tdDataTableActions]\" />\n @for (boton of botonesVisibles(); track boton.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__boton td-tabla__boton--' + (boton.tono || 'neutro')\"\n [disabled]=\"boton.deshabilitado\"\n (click)=\"botonClick.emit(boton)\"\n >\n <td-icon [nombre]=\"boton.icono\" />\n <span>{{ boton.etiqueta }}</span>\n </button>\n }\n </div>\n </div>\n\n @if (datos.length) {\n <div class=\"td-tabla__scroll-x\">\n <div class=\"td-tabla__contenido\" [style.--td-tabla-columnas]=\"columnasGrid()\">\n <div class=\"td-tabla__encabezado\" role=\"row\">\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"columnheader\"\n [class]=\"'td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n {{ columna.encabezado }}\n </div>\n }\n @if (acciones.length) {\n <div role=\"columnheader\" class=\"td-tabla__alinear--centro\">Acciones</div>\n }\n </div>\n\n @if (usaVirtualizacion()) {\n <cdk-virtual-scroll-viewport\n class=\"td-tabla__viewport\"\n [itemSize]=\"itemSize\"\n [style.height]=\"altura\"\n (scroll)=\"alDesplazarViewport()\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n <ng-container\n *cdkVirtualFor=\"let fila of datos; let indice = index; trackBy: trackFila\"\n >\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n </ng-container>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"td-tabla__viewport td-tabla__viewport--normal\"\n [style.max-height]=\"altura\"\n (scroll)=\"alDesplazarLista($event)\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n @for (fila of datos; track trackFila($index, fila); let indice = $index) {\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n }\n </div>\n }\n </div>\n </div>\n\n <ng-template #filaTemplate let-fila let-indice=\"indice\">\n <div\n class=\"td-tabla__fila\"\n role=\"row\"\n [style.height.px]=\"itemSize\"\n >\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"cell\"\n [class]=\"'td-tabla__celda td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n @if (columna.tipo === 'imagen') {\n @if (imagenSrc(columna, fila, indice); as src) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__imagen td-tabla__imagen--' + imagenForma(columna)\"\n [title]=\"imagenAlt(columna, fila, indice)\"\n (click)=\"abrirImagen(columna, fila, indice)\"\n >\n <img [src]=\"src\" [alt]=\"imagenAlt(columna, fila, indice)\" loading=\"lazy\" />\n </button>\n } @else {\n <span\n [class]=\"'td-tabla__imagen td-tabla__imagen--placeholder td-tabla__imagen--' + imagenForma(columna)\"\n >\n <td-icon [nombre]=\"columna.imagen?.placeholder || 'image'\" />\n </span>\n }\n } @else if (\n columna.tipo === 'estado' ||\n columna.tipo === 'booleano' ||\n columna.tipo === 'chip'\n ) {\n <span [class]=\"'td-tabla__chip td-tabla__chip--' + tonoCelda(columna, fila)\">\n {{ textoCelda(columna, fila, indice) }}\n </span>\n } @else {\n <span\n [class.td-tabla__numero]=\"\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n \"\n >\n {{ textoCelda(columna, fila, indice) }}\n </span>\n }\n </div>\n }\n\n @if (acciones.length) {\n <div class=\"td-tabla__acciones-fila\" role=\"cell\">\n @if (usarMenuAcciones(fila)) {\n <td-menu\n ariaLabel=\"Acciones de fila\"\n icono=\"more_vertical\"\n ancho=\"15rem\"\n [oscuro]=\"oscuro\"\n [items]=\"accionesMenu(fila)\"\n (seleccion)=\"ejecutarAccionMenu($event, fila, indice)\"\n />\n } @else {\n @for (accionFila of accionesVisibles(fila); track accionFila.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__accion td-tabla__accion--' + tonoAccion(accionFila, fila)\"\n [title]=\"accionFila.etiqueta\"\n [disabled]=\"accionFila.deshabilitada?.(fila) ?? false\"\n (click)=\"ejecutarAccion(accionFila, fila, indice)\"\n >\n <td-icon [nombre]=\"iconoAccion(accionFila, fila)\" />\n <span class=\"td-tabla__sr-only\">{{ accionFila.etiqueta }}</span>\n </button>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n @if (cargando) {\n <div class=\"td-tabla__cargando\" role=\"status\" aria-live=\"polite\">\n <i aria-hidden=\"true\"></i>\n <span>Cargando más registros...</span>\n </div>\n }\n } @else if (!cargando) {\n <div class=\"td-tabla__vacio\">\n <span><td-icon nombre=\"inbox\" tamano=\"2.4rem\" /></span>\n <h3>{{ textoVacio }}</h3>\n <p>{{ descripcionVacio }}</p>\n </div>\n }\n\n @if (cargando && !datos.length) {\n <div class=\"td-tabla__skeleton\">\n @for (item of [1, 2, 3, 4, 5]; track item) {\n <span></span>\n }\n </div>\n }\n </div>\n</section>\n\n@if (imagenActiva; as imagen) {\n <dialog\n #imagenDialog\n class=\"td-tabla-imagen\"\n [attr.aria-label]=\"imagen.alt\"\n (click)=\"cerrarImagenSiBackdrop($event)\"\n (cancel)=\"cerrarImagen()\"\n (close)=\"imagenActiva = null\"\n >\n <section class=\"td-tabla-imagen__panel\">\n <header>\n <span>{{ imagen.alt }}</span>\n <button type=\"button\" aria-label=\"Cerrar\" (click)=\"cerrarImagen()\">\n <td-icon nombre=\"close\" />\n </button>\n </header>\n <div>\n <img [src]=\"imagen.src\" [alt]=\"imagen.alt\" />\n </div>\n </section>\n </dialog>\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n input,\n Input,\n model,\n output,\n Output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { inject } from '@angular/core';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdDatePickerMode,\n TdDatePickerValue,\n TdDateRange,\n} from './td-date-picker.model';\n\ninterface CalendarDay {\n iso: string;\n day: number;\n currentMonth: boolean;\n today: boolean;\n disabled: boolean;\n}\n\ntype CalendarView = 'dias' | 'meses' | 'anios';\ntype TdDatePickerLimit = string | number | TdDateRange | null | undefined;\n\nlet datePickerSequence = 0;\n\n@Component({\n selector: 'td-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-date-picker\"\n [class.td-date-picker--open]=\"open\"\n [class.td-date-picker--error]=\"hasError()\"\n [class.td-date-picker--disabled]=\"isDisabled()\"\n [class.td-date-picker--dark]=\"dark\"\n >\n <label [id]=\"labelId\">{{ label }}</label>\n <button\n type=\"button\"\n class=\"td-date-picker__trigger\"\n [disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"labelId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"calendarId\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <td-icon nombre=\"calendar\" />\n <span [class.td-date-picker__placeholder]=\"!displayValue\">\n {{ displayValue || placeholder }}\n </span>\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <span\n class=\"td-date-picker__clear\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Limpiar fecha\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".92rem\" />\n </span>\n }\n <td-icon\n class=\"td-date-picker__chevron\"\n [class.td-date-picker__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </button>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-date-picker__message\" [class.td-date-picker__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayMatchWidth]=\"false\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <section\n class=\"td-calendar\"\n [class.td-calendar--dark]=\"dark\"\n [id]=\"calendarId\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"mode === 'rango' ? 'Seleccionar rango de fechas' : 'Seleccionar fecha'\"\n >\n <header class=\"td-calendar__header\">\n <button type=\"button\" [attr.aria-label]=\"previousLabel\" (click)=\"previousPage()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button\n type=\"button\"\n class=\"td-calendar__period\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"changeCalendarView()\"\n >\n {{ periodLabel }}\n @if (calendarView !== 'anios') {\n <td-icon nombre=\"chevron_down\" tamano=\".85rem\" />\n }\n </button>\n <button type=\"button\" [attr.aria-label]=\"nextLabel\" (click)=\"nextPage()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </header>\n\n @if (mode === 'rango') {\n <div class=\"td-calendar__range-summary\">\n <span><small>Desde</small><strong>{{ rangeStartLabel }}</strong></span>\n <td-icon nombre=\"arrow_forward\" />\n <span><small>Hasta</small><strong>{{ rangeEndLabel }}</strong></span>\n </div>\n }\n\n @if (calendarView === 'dias') {\n <div class=\"td-calendar__weekdays\" aria-hidden=\"true\">\n @for (weekday of weekdays; track weekday) {\n <span>{{ weekday }}</span>\n }\n </div>\n\n <div class=\"td-calendar__grid\">\n @for (date of days; track date.iso) {\n <button\n type=\"button\"\n class=\"td-calendar__day\"\n [class.td-calendar__day--outside]=\"!date.currentMonth\"\n [class.td-calendar__day--today]=\"date.today\"\n [class.td-calendar__day--selected]=\"isSelected(date.iso)\"\n [class.td-calendar__day--range]=\"isInRange(date.iso)\"\n [class.td-calendar__day--range-start]=\"isRangeStart(date.iso)\"\n [class.td-calendar__day--range-end]=\"isRangeEnd(date.iso)\"\n [disabled]=\"date.disabled\"\n [attr.aria-label]=\"formatLong(date.iso)\"\n [attr.aria-pressed]=\"isSelected(date.iso)\"\n (mouseenter)=\"hoveredDate = date.iso\"\n (mouseleave)=\"hoveredDate = null\"\n (click)=\"selectDate(date)\"\n >\n {{ date.day }}\n </button>\n }\n </div>\n } @else if (calendarView === 'meses') {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--months\">\n @for (month of months; track month.index) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"month.index === viewDate.getMonth()\"\n [disabled]=\"month.disabled\"\n (click)=\"selectMonth(month.index)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n } @else {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--years\">\n @for (year of years; track year.value) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"year.value === viewDate.getFullYear()\"\n [class.td-calendar__selector--today]=\"year.value === currentYear\"\n [disabled]=\"year.disabled\"\n (click)=\"selectYear(year.value)\"\n >\n {{ year.value }}\n </button>\n }\n </div>\n }\n\n <footer class=\"td-calendar__footer\">\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"goToday()\">\n Hoy\n </button>\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"close()\">\n Cerrar\n </button>\n </footer>\n </section>\n </ng-template>\n `,\n styleUrl: './td-date-picker.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDatePicker),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDatePicker\n implements ControlValueAccessor, FormValueControl<TdDatePickerValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-date-picker-${++datePickerSequence}`;\n private readonly formatter = new Intl.DateTimeFormat('es-PE', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n });\n private readonly monthFormatter = new Intl.DateTimeFormat('es-PE', {\n month: 'long',\n year: 'numeric',\n });\n private readonly longFormatter = new Intl.DateTimeFormat('es-PE', {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n });\n\n @Input() label = 'Fecha';\n @Input() placeholder = 'Selecciona una fecha';\n @Input() mode: TdDatePickerMode = 'fecha';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input({ alias: 'min' }) minDate: TdDatePickerLimit = null;\n @Input({ alias: 'max' }) maxDate: TdDatePickerLimit = null;\n @Input() clearable = true;\n @Input() dark = false;\n\n readonly value = model<TdDatePickerValue>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n @Output() readonly selectionChange = new EventEmitter<TdDatePickerValue>();\n @Output() readonly openedChange = new EventEmitter<boolean>();\n\n protected open = false;\n protected hoveredDate: string | null = null;\n protected viewDate = this.startOfMonth(new Date());\n protected calendarView: CalendarView = 'dias';\n protected readonly currentYear = new Date().getFullYear();\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get calendarId(): string {\n return `${this.generatedId}-calendar`;\n }\n\n protected get weekdays(): string[] {\n return ['L', 'M', 'X', 'J', 'V', 'S', 'D'];\n }\n\n protected get monthLabel(): string {\n const label = this.monthFormatter.format(this.viewDate);\n return label.charAt(0).toUpperCase() + label.slice(1);\n }\n\n protected get periodLabel(): string {\n if (this.calendarView === 'dias') return this.monthLabel;\n if (this.calendarView === 'meses') return String(this.viewDate.getFullYear());\n return `${this.yearPageStart} – ${this.yearPageStart + 11}`;\n }\n\n protected get periodButtonLabel(): string {\n if (this.calendarView === 'dias') return 'Elegir mes y año';\n if (this.calendarView === 'meses') return 'Elegir año';\n return 'Periodo de años';\n }\n\n protected get previousLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes anterior'\n : this.calendarView === 'meses'\n ? 'Año anterior'\n : 'Años anteriores';\n }\n\n protected get nextLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes siguiente'\n : this.calendarView === 'meses'\n ? 'Año siguiente'\n : 'Años siguientes';\n }\n\n protected get months(): { index: number; label: string; disabled: boolean }[] {\n const formatter = new Intl.DateTimeFormat('es-PE', { month: 'short' });\n const year = this.viewDate.getFullYear();\n return Array.from({ length: 12 }, (_, index) => {\n const label = formatter.format(new Date(year, index, 1)).replace('.', '');\n return {\n index,\n label: label.charAt(0).toUpperCase() + label.slice(1),\n disabled: !this.monthIntersectsLimits(year, index),\n };\n });\n }\n\n protected get years(): { value: number; disabled: boolean }[] {\n return Array.from({ length: 12 }, (_, index) => {\n const value = this.yearPageStart + index;\n return { value, disabled: !this.yearIntersectsLimits(value) };\n });\n }\n\n private get yearPageStart(): number {\n return Math.floor(this.viewDate.getFullYear() / 12) * 12;\n }\n\n protected get days(): CalendarDay[] {\n const first = this.startOfMonth(this.viewDate);\n const mondayOffset = (first.getDay() + 6) % 7;\n const start = new Date(first.getFullYear(), first.getMonth(), 1 - mondayOffset);\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index);\n const iso = this.toIso(date);\n return {\n iso,\n day: date.getDate(),\n currentMonth: date.getMonth() === this.viewDate.getMonth(),\n today: iso === this.toIso(new Date()),\n disabled:\n (typeof this.minDate === 'string' && iso < this.minDate) ||\n (typeof this.maxDate === 'string' && iso > this.maxDate),\n };\n });\n }\n\n protected get displayValue(): string {\n const current = this.value();\n if (typeof current === 'string') return this.format(current);\n if (current && typeof current === 'object') {\n if (!this.isValidIsoDate(current.inicio)) return '';\n return this.isValidIsoDate(current.fin)\n ? `${this.format(current.inicio)} — ${this.format(current.fin)}`\n : this.format(current.inicio);\n }\n return '';\n }\n\n protected get rangeStartLabel(): string {\n const inicio = this.currentRange()?.inicio;\n return this.isValidIsoDate(inicio) ? this.format(inicio) : 'Sin elegir';\n }\n\n protected get rangeEndLabel(): string {\n const fin = this.currentRange()?.fin;\n return this.isValidIsoDate(fin) ? this.format(fin) : 'Sin elegir';\n }\n\n private changed: (value: TdDatePickerValue) => void = () => undefined;\n\n writeValue(value: TdDatePickerValue): void {\n this.value.set(this.normalizeValue(value));\n this.syncViewToValue();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdDatePickerValue) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(): void {\n document.getElementById(this.labelId)?.parentElement?.querySelector<HTMLButtonElement>('button')?.focus();\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.syncViewToValue();\n this.calendarView = 'dias';\n this.open = true;\n this.openedChange.emit(true);\n this.cdr.markForCheck();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.hoveredDate = null;\n this.formBridge.markTouched(this.touched, this.touch);\n this.openedChange.emit(false);\n this.cdr.markForCheck();\n }\n\n protected previousPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() - 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() - 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected nextPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() + 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() + 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected changeCalendarView(): void {\n if (this.calendarView === 'dias') {\n this.calendarView = 'meses';\n } else if (this.calendarView === 'meses') {\n this.calendarView = 'anios';\n }\n }\n\n protected selectMonth(month: number): void {\n this.viewDate = new Date(this.viewDate.getFullYear(), month, 1);\n this.calendarView = 'dias';\n }\n\n protected selectYear(year: number): void {\n this.viewDate = new Date(year, this.viewDate.getMonth(), 1);\n this.calendarView = 'meses';\n }\n\n protected goToday(): void {\n const today = this.toIso(new Date());\n if (\n (typeof this.minDate === 'string' && today < this.minDate) ||\n (typeof this.maxDate === 'string' && today > this.maxDate)\n ) return;\n this.viewDate = this.startOfMonth(new Date());\n this.calendarView = 'dias';\n this.selectDate(this.days.find((day) => day.iso === today) ?? {\n iso: today,\n day: new Date().getDate(),\n currentMonth: true,\n today: true,\n disabled: false,\n });\n }\n\n protected selectDate(date: CalendarDay): void {\n if (date.disabled) return;\n if (!date.currentMonth) {\n const parsed = this.fromIso(date.iso);\n this.viewDate = this.startOfMonth(parsed);\n }\n\n if (this.mode === 'fecha') {\n this.setValue(date.iso);\n this.close();\n return;\n }\n\n const range = this.currentRange();\n if (!range || range.fin) {\n this.setValue({ inicio: date.iso, fin: null });\n return;\n }\n\n this.setValue(\n date.iso < range.inicio\n ? { inicio: date.iso, fin: range.inicio }\n : { inicio: range.inicio, fin: date.iso }\n );\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected isSelected(iso: string): boolean {\n const current = this.value();\n if (typeof current === 'string') return current === iso;\n return !!current && (current.inicio === iso || current.fin === iso);\n }\n\n protected isRangeStart(iso: string): boolean {\n return this.currentRange()?.inicio === iso;\n }\n\n protected isRangeEnd(iso: string): boolean {\n return this.currentRange()?.fin === iso;\n }\n\n protected isInRange(iso: string): boolean {\n const range = this.currentRange();\n if (!range) return false;\n const end = range.fin ?? this.hoveredDate;\n if (!end) return false;\n const start = end < range.inicio ? end : range.inicio;\n const finish = end < range.inicio ? range.inicio : end;\n return iso > start && iso < finish;\n }\n\n protected formatLong(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.longFormatter.format(date) : iso;\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openPanel();\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'PageUp') {\n event.preventDefault();\n this.previousPage();\n } else if (event.key === 'PageDown') {\n event.preventDefault();\n this.nextPage();\n }\n }\n\n private currentRange(): TdDateRange | null {\n const current = this.value();\n return current && typeof current === 'object' ? current : null;\n }\n\n private setValue(value: TdDatePickerValue): void {\n this.value.set(value);\n this.changed(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private syncViewToValue(): void {\n const current = this.value();\n const iso = typeof current === 'string' ? current : current?.inicio;\n if (this.isValidIsoDate(iso)) this.viewDate = this.startOfMonth(this.fromIso(iso));\n }\n\n private normalizeValue(value: TdDatePickerValue): TdDatePickerValue {\n if (!value) return null;\n if (typeof value === 'string') return this.isValidIsoDate(value) ? value : null;\n if (!this.isValidIsoDate(value.inicio)) return null;\n return {\n inicio: value.inicio,\n fin: this.isValidIsoDate(value.fin) ? value.fin : null,\n };\n }\n\n private format(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.formatter.format(date).replace('.', '') : '';\n }\n\n private fromIso(iso: string): Date {\n if (!this.isIsoDateText(iso)) return new Date(Number.NaN);\n const [year, month, day] = iso.split('-').map(Number);\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n )\n ? date\n : new Date(Number.NaN);\n }\n\n private isValidIsoDate(value: unknown): value is string {\n return typeof value === 'string' && this.isValidDate(this.fromIso(value));\n }\n\n private isIsoDateText(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n }\n\n private isValidDate(value: Date): boolean {\n return !Number.isNaN(value.getTime());\n }\n\n private toIso(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n private startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n private monthIntersectsLimits(year: number, month: number): boolean {\n const first = this.toIso(new Date(year, month, 1));\n const last = this.toIso(new Date(year, month + 1, 0));\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n\n private yearIntersectsLimits(year: number): boolean {\n const first = `${year}-01-01`;\n const last = `${year}-12-31`;\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type TdDialogTamano = 'pequeno' | 'mediano' | 'grande' | 'pantalla';\n\nexport interface TdDialogConfig<D = unknown> {\n data?: D;\n titulo?: string;\n subtitulo?: string;\n icono?: string;\n tamano?: TdDialogTamano;\n ancho?: string;\n alto?: string;\n maxAncho?: string;\n maxAlto?: string;\n mostrarCerrar?: boolean;\n cerrarAlNavegar?: boolean;\n deshabilitarCierre?: boolean;\n autoFocus?: 'dialog' | 'first-tabbable' | 'first-heading' | string | boolean;\n restaurarFoco?: boolean;\n oscuro?: boolean;\n draggable?: boolean;\n panelClass?: string | string[];\n ariaLabel?: string;\n}\n\nexport interface TdDialogPanelData<D = unknown> {\n component: Type<unknown>;\n config: TdDialogConfig<D>;\n fullscreen: boolean;\n}\n\nexport const TD_DIALOG_DATA = new InjectionToken<unknown>('TD_DIALOG_DATA');\nexport const TD_DIALOG_CONFIG = new InjectionToken<TdDialogConfig>('TD_DIALOG_CONFIG');\n\nexport interface TdDialogRefLike<R = unknown> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n close(result?: R): void;\n updateSize(width?: string | number, height?: string | number): this;\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { Observable } from 'rxjs';\nimport { TdDialogRefLike } from './td-dialog.model';\n\nexport class TdDialogRef<R = unknown> implements TdDialogRefLike<R> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n\n constructor(private readonly ref: DialogRef<R, unknown>) {\n this.closed = ref.closed;\n this.id = ref.id;\n }\n\n close(result?: R): void {\n this.ref.close(result);\n }\n\n updateSize(width?: string | number, height?: string | number): this {\n this.ref.updateSize(width, height);\n return this;\n }\n}\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Component({\n selector: 'td-dialog-panel',\n imports: [CdkDrag, CdkDragHandle, NgComponentOutlet, TdIcon],\n template: `\n <section\n class=\"td-dialog\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragBoundary=\".cdk-overlay-container\"\n [cdkDragDisabled]=\"!draggableEnabled\"\n [class.td-dialog--oscuro]=\"payload.config.oscuro\"\n [class.td-dialog--pantalla]=\"payload.fullscreen\"\n [class.td-dialog--draggable]=\"draggableEnabled\"\n [attr.aria-label]=\"payload.config.ariaLabel || payload.config.titulo || 'Diálogo'\"\n >\n @if (\n payload.config.titulo ||\n payload.config.subtitulo ||\n payload.config.icono ||\n payload.config.mostrarCerrar !== false\n ) {\n <header class=\"td-dialog__header\">\n <div class=\"td-dialog__drag-zone\" cdkDragHandle>\n @if (payload.config.icono) {\n <span class=\"td-dialog__icono\">\n <td-icon [nombre]=\"payload.config.icono\" tamano=\"1.25rem\" />\n </span>\n }\n <div class=\"td-dialog__titulos\">\n @if (payload.config.titulo) {\n <h2>{{ payload.config.titulo }}</h2>\n }\n @if (payload.config.subtitulo) {\n <p>{{ payload.config.subtitulo }}</p>\n }\n </div>\n </div>\n @if (payload.config.mostrarCerrar !== false) {\n <button\n type=\"button\"\n class=\"td-dialog__cerrar\"\n aria-label=\"Cerrar diálogo\"\n title=\"Cerrar\"\n (click)=\"dialogRef.close()\"\n >\n <td-icon nombre=\"close\" />\n </button>\n }\n </header>\n }\n\n <div class=\"td-dialog__contenido\">\n <ng-container *ngComponentOutlet=\"payload.component\" />\n </div>\n </section>\n `,\n styleUrl: './td-dialog-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogPanel {\n protected readonly payload = inject<TdDialogPanelData>(DIALOG_DATA);\n protected readonly dialogRef = inject(TdDialogRef);\n\n protected get draggableEnabled(): boolean {\n return !!this.payload.config.draggable && !this.payload.fullscreen && !this.isMobileLike();\n }\n\n private isMobileLike(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px), (pointer: coarse)').matches;\n }\n}\n","import { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { Injectable, Type, inject } from '@angular/core';\nimport { TD_DIALOG_CONFIG, TD_DIALOG_DATA, TdDialogConfig, TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogPanel } from './td-dialog-panel';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Injectable({ providedIn: 'root' })\nexport class TdDialog {\n private readonly dialog = inject(Dialog);\n\n open<C, D = unknown, R = unknown>(\n component: Type<C>,\n config: TdDialogConfig<D> = {}\n ): TdDialogRef<R> {\n const size = config.tamano ?? 'mediano';\n const mobile =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px)').matches;\n const fullscreen = size === 'pantalla' || (mobile && size !== 'pequeno');\n const width = fullscreen ? '100%' : config.ancho ?? this.widthFor(size);\n const maxWidth = fullscreen ? '100%' : config.maxAncho ?? 'calc(100vw - 2rem)';\n const maxHeight = fullscreen ? '100dvh' : config.maxAlto ?? 'calc(100dvh - 2rem)';\n let publicRef!: TdDialogRef<R>;\n\n const cdkRef = this.dialog.open<R, TdDialogPanelData<D>, TdDialogPanel>(\n TdDialogPanel,\n {\n data: { component, config, fullscreen },\n width,\n height: fullscreen ? '100dvh' : config.alto,\n maxWidth,\n maxHeight,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: this.panelClasses(config, fullscreen),\n disableClose: config.deshabilitarCierre ?? false,\n closeOnNavigation: config.cerrarAlNavegar ?? true,\n autoFocus: config.autoFocus ?? 'first-tabbable',\n restoreFocus: config.restaurarFoco ?? true,\n ariaLabel: config.ariaLabel ?? config.titulo,\n ariaModal: true,\n providers: (ref: DialogRef<R, TdDialogPanel>) => {\n publicRef = new TdDialogRef<R>(ref as DialogRef<R, unknown>);\n return [\n { provide: TD_DIALOG_DATA, useValue: config.data },\n { provide: TD_DIALOG_CONFIG, useValue: config },\n { provide: TdDialogRef, useValue: publicRef },\n ];\n },\n }\n );\n\n return publicRef ?? new TdDialogRef<R>(cdkRef as DialogRef<R, unknown>);\n }\n\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n private widthFor(size: TdDialogConfig['tamano']): string {\n const widths = {\n pequeno: 'min(28rem, calc(100vw - 2rem))',\n mediano: 'min(40rem, calc(100vw - 2rem))',\n grande: 'min(64rem, calc(100vw - 2rem))',\n pantalla: '100%',\n };\n return widths[size ?? 'mediano'];\n }\n\n private panelClasses(config: TdDialogConfig, fullscreen: boolean): string[] {\n const extra = Array.isArray(config.panelClass)\n ? config.panelClass\n : config.panelClass\n ? [config.panelClass]\n : [];\n return [\n 'td-dialog-overlay',\n `td-dialog-overlay--${config.tamano ?? 'mediano'}`,\n ...(fullscreen ? ['td-dialog-overlay--fullscreen'] : []),\n ...extra,\n ];\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'td-dialog-actions',\n template: `<ng-content />`,\n styles: `\n :host {\n position: sticky;\n z-index: 3;\n bottom: -1.5rem;\n display: flex;\n min-height: 3.7rem;\n flex: 0 0 auto;\n align-items: center;\n justify-content: flex-end;\n gap: .5rem;\n margin: auto -1.5rem -1.5rem;\n margin-top: auto;\n border-top: 1px solid var(--td-dialog-border, #e6e9f0);\n padding: .65rem 1.25rem;\n background: var(--td-dialog-footer, #fafbfc);\n box-shadow: 0 -8px 22px rgba(15, 23, 42, .035);\n }\n\n :host ::ng-deep button {\n display: inline-flex;\n min-height: 2.25rem;\n align-items: center;\n justify-content: center;\n gap: .45rem;\n border: 1px solid var(--td-dialog-border, #dfe3eb);\n border-radius: .6rem;\n padding: .5rem .85rem;\n color: var(--td-dialog-text, #263147);\n background: var(--td-dialog-surface, #fff);\n font: 750 .75rem/1 system-ui, sans-serif;\n cursor: pointer;\n }\n\n :host ::ng-deep button:hover { border-color: #9b91e3; background: #f7f5ff; }\n :host ::ng-deep button[tdDialogPrimary] {\n border-color: transparent;\n color: #fff;\n background: linear-gradient(135deg, #5746d8, #7657df);\n box-shadow: 0 7px 16px rgba(87, 70, 216, .2);\n }\n :host ::ng-deep button:disabled { opacity: .5; cursor: not-allowed; }\n\n @media (max-width: 520px) {\n :host {\n bottom: -1.1rem;\n min-height: auto;\n align-items: stretch;\n flex-direction: column-reverse;\n margin-right: -1.1rem;\n margin-bottom: -1.1rem;\n margin-left: -1.1rem;\n padding: .7rem 1.1rem;\n }\n :host ::ng-deep button { width: 100%; }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogActions {}\n","import { Directive, HostListener, Input, inject } from '@angular/core';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Directive({\n selector: '[tdDialogClose]',\n})\nexport class TdDialogClose {\n private readonly dialogRef = inject(TdDialogRef);\n\n @Input('tdDialogClose') result: unknown;\n\n @HostListener('click')\n protected close(): void {\n this.dialogRef.close(this.result);\n }\n}\n\n@Directive({\n selector: '[tdDialogPrimary]',\n})\nexport class TdDialogPrimary {}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'td-footer',\n templateUrl: './td-footer.html',\n styleUrl: './td-footer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFooter {\n @Input() empresa = 'TelcomDev';\n @Input() texto = 'Todos los derechos reservados.';\n @Input() version = '';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() anio = new Date().getFullYear();\n}\n","<footer\n class=\"td-footer\"\n [class.td-footer--oscuro]=\"oscuro\"\n [class.td-footer--compacto]=\"compacto\"\n>\n <div class=\"td-footer__identidad\">\n <span>© {{ anio }} {{ empresa }}</span>\n @if (texto) {\n <small>{{ texto }}</small>\n }\n </div>\n\n <nav class=\"td-footer__enlaces\" aria-label=\"Enlaces del pie de página\">\n <ng-content select=\"[tdFooterLinks]\" />\n </nav>\n\n <div class=\"td-footer__final\">\n <ng-content select=\"[tdFooterActions]\" />\n @if (version) {\n <span class=\"td-footer__version\">v{{ version }}</span>\n }\n </div>\n</footer>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdFileAttachment, TdFileSource, TdFileViewerArchivo, TdFileViewerKind } from './td-file-viewer.model';\n\ntype PdfJsModule = typeof import('pdfjs-dist');\ntype PdfDocumentProxy = {\n numPages: number;\n getPage(pageNumber: number): Promise<{\n getViewport(options: { scale: number }): { width: number; height: number };\n render(options: { canvasContext: CanvasRenderingContext2D; viewport: object }): PdfRenderTask;\n }>;\n destroy?(): Promise<void>;\n};\ntype PdfRenderTask = { promise: Promise<void>; cancel(): void };\n\n@Component({\n selector: 'td-file-viewer',\n imports: [TdIcon],\n templateUrl: './td-file-viewer.html',\n styleUrl: './td-file-viewer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFileViewer {\n private readonly cdr = inject(ChangeDetectorRef);\n @ViewChild('visorDialog') private visorDialog?: ElementRef<HTMLDialogElement>;\n @ViewChild('pdfCanvas') private pdfCanvas?: ElementRef<HTMLCanvasElement>;\n\n private archivosNormalizados: TdFileAttachment[] = [];\n\n @Input()\n set archivos(value: TdFileViewerArchivo[] | null | undefined) {\n this.archivosNormalizados = (value ?? []).map((archivo, indice) => this.normalizarArchivo(archivo, indice));\n }\n\n get archivos(): TdFileAttachment[] {\n return this.archivosNormalizados;\n }\n\n @Input() titulo = 'Archivos adjuntos';\n @Input() descripcion = 'Visualiza imagenes, PDF y descarga otros formatos.';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() showList = true;\n\n @Output() readonly seleccionar = new EventEmitter<TdFileAttachment>();\n @Output() readonly descargar = new EventEmitter<TdFileAttachment>();\n @Output() readonly closed = new EventEmitter<void>();\n\n protected seleccionado: TdFileAttachment | null = null;\n protected zoom = 1;\n protected rotacion = 0;\n protected pdfCargando = false;\n protected pdfError = '';\n protected pdfPaginaActual = 1;\n protected pdfTotalPaginas = 0;\n\n private pdfJs?: PdfJsModule;\n private pdfDocumento?: PdfDocumentProxy;\n private pdfRenderTask?: PdfRenderTask;\n private pdfRenderToken = 0;\n\n open(archivo: TdFileViewerArchivo): void {\n const normalizado = this.esAdjuntoNormalizado(archivo)\n ? archivo\n : this.normalizarArchivo(archivo, this.archivos.length);\n\n const existe = this.archivos.some((item) => item.id === normalizado.id);\n if (!existe) {\n this.archivosNormalizados = [normalizado, ...this.archivosNormalizados];\n }\n\n this.abrir(normalizado);\n }\n\n openByIndex(index: number): void {\n const archivo = this.archivos[index];\n if (!archivo) return;\n this.abrir(archivo);\n }\n\n close(): void {\n this.cerrar();\n }\n\n protected abrir(archivo: TdFileAttachment): void {\n this.limpiarPdf();\n this.seleccionado = archivo;\n this.zoom = 1;\n this.rotacion = 0;\n this.pdfPaginaActual = 1;\n setTimeout(() => {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n if (this.esPdf(archivo)) {\n void this.cargarPdf(archivo);\n }\n });\n this.seleccionar.emit(archivo);\n }\n\n protected cerrar(): void {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.seleccionado = null;\n this.zoom = 1;\n this.rotacion = 0;\n this.limpiarPdf();\n this.closed.emit();\n }\n\n protected cerrarSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrar();\n }\n }\n\n protected descargarArchivo(archivo: TdFileAttachment, event?: MouseEvent): void {\n event?.stopPropagation();\n this.descargar.emit(archivo);\n }\n\n protected tipoArchivo(archivo: TdFileAttachment): TdFileViewerKind {\n const tipo = `${archivo.tipo ?? ''} ${archivo.nombre} ${archivo.url}`.toLowerCase();\n if (tipo.includes('image/') || /\\.(png|jpe?g|gif|webp|svg)$/i.test(tipo)) return 'imagen';\n if (tipo.includes('pdf') || /\\.pdf(\\?|#|$)/i.test(tipo)) return 'pdf';\n if (tipo.includes('excel') || tipo.includes('spreadsheet') || /\\.(xls|xlsx|csv)(\\?|#|$)/i.test(tipo)) return 'excel';\n if (tipo.includes('xml') || /\\.xml(\\?|#|$)/i.test(tipo)) return 'xml';\n if (tipo.includes('zip') || /\\.(zip|rar|7z)(\\?|#|$)/i.test(tipo)) return 'zip';\n return 'archivo';\n }\n\n protected iconoArchivo(archivo: TdFileAttachment): string {\n const tipo = this.tipoArchivo(archivo);\n if (tipo === 'imagen') return 'image';\n if (tipo === 'archivo') return 'file';\n return tipo;\n }\n\n protected esImagen(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'imagen';\n }\n\n protected esPdf(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'pdf';\n }\n\n protected tieneVistaPrevia(archivo: TdFileAttachment): boolean {\n return this.esImagen(archivo) || this.esPdf(archivo);\n }\n\n protected indiceSeleccionado(): number {\n return this.seleccionado\n ? this.archivos.findIndex((archivo) => archivo.id === this.seleccionado?.id)\n : -1;\n }\n\n protected seleccionarAnterior(): void {\n const indice = this.indiceSeleccionado();\n if (indice <= 0) return;\n this.abrir(this.archivos[indice - 1]);\n }\n\n protected seleccionarSiguiente(): void {\n const indice = this.indiceSeleccionado();\n if (indice < 0 || indice >= this.archivos.length - 1) return;\n this.abrir(this.archivos[indice + 1]);\n }\n\n protected cambiarZoom(delta: number): void {\n this.zoom = Math.min(2.5, Math.max(0.5, Number((this.zoom + delta).toFixed(2))));\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected restablecerZoom(): void {\n this.zoom = 1;\n this.rotacion = 0;\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected rotar(): void {\n this.rotacion = (this.rotacion + 90) % 360;\n }\n\n protected paginaPdfAnterior(): void {\n if (this.pdfPaginaActual <= 1) return;\n this.pdfPaginaActual -= 1;\n void this.renderizarPaginaPdf();\n }\n\n protected paginaPdfSiguiente(): void {\n if (!this.pdfTotalPaginas || this.pdfPaginaActual >= this.pdfTotalPaginas) return;\n this.pdfPaginaActual += 1;\n void this.renderizarPaginaPdf();\n }\n\n protected tamanoLegible(archivo: TdFileAttachment): string {\n if (archivo.tamano === null || archivo.tamano === undefined || archivo.tamano === '') return '';\n if (typeof archivo.tamano === 'string') return archivo.tamano;\n\n const unidades = ['B', 'KB', 'MB', 'GB'];\n let valor = archivo.tamano;\n let indice = 0;\n while (valor >= 1024 && indice < unidades.length - 1) {\n valor /= 1024;\n indice += 1;\n }\n return `${valor.toFixed(indice ? 1 : 0)} ${unidades[indice]}`;\n }\n\n private async cargarPdf(archivo: TdFileAttachment): Promise<void> {\n const token = ++this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.pdfTotalPaginas = 0;\n this.cdr.markForCheck();\n\n try {\n const pdfjs = await this.obtenerPdfJs();\n const loadingTask = pdfjs.getDocument(this.obtenerFuentePdf(archivo));\n const documento = (await loadingTask.promise) as unknown as PdfDocumentProxy;\n if (token !== this.pdfRenderToken) {\n await documento.destroy?.();\n return;\n }\n\n this.pdfDocumento = documento;\n this.pdfTotalPaginas = documento.numPages;\n this.pdfPaginaActual = Math.min(Math.max(this.pdfPaginaActual, 1), documento.numPages || 1);\n this.pdfCargando = false;\n this.cdr.markForCheck();\n await this.renderizarPaginaPdf();\n } catch {\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo cargar la vista previa del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async renderizarPaginaPdf(): Promise<void> {\n if (!this.pdfDocumento || !this.pdfCanvas) return;\n\n const token = this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.cdr.markForCheck();\n\n try {\n this.pdfRenderTask?.cancel();\n const pagina = await this.pdfDocumento.getPage(this.pdfPaginaActual);\n if (token !== this.pdfRenderToken) return;\n\n const canvas = this.pdfCanvas.nativeElement;\n const contexto = canvas.getContext('2d');\n if (!contexto) throw new Error('Canvas context unavailable');\n\n const dpr = Math.max(window.devicePixelRatio || 1, 1);\n const viewport = pagina.getViewport({ scale: this.zoom });\n canvas.width = Math.floor(viewport.width * dpr);\n canvas.height = Math.floor(viewport.height * dpr);\n canvas.style.width = `${viewport.width}px`;\n canvas.style.height = `${viewport.height}px`;\n\n contexto.setTransform(dpr, 0, 0, dpr, 0, 0);\n contexto.clearRect(0, 0, viewport.width, viewport.height);\n\n const renderTask = pagina.render({ canvasContext: contexto, viewport }) as PdfRenderTask;\n this.pdfRenderTask = renderTask;\n await renderTask.promise;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.cdr.markForCheck();\n } catch (error) {\n if ((error as { name?: string })?.name === 'RenderingCancelledException') return;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo renderizar esta pagina del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async obtenerPdfJs(): Promise<PdfJsModule> {\n if (this.pdfJs) return this.pdfJs;\n\n const pdfjs = await import('pdfjs-dist');\n pdfjs.GlobalWorkerOptions.workerSrc = new URL(\n 'pdfjs-dist/build/pdf.worker.min.mjs',\n import.meta.url\n ).toString();\n this.pdfJs = pdfjs;\n return pdfjs;\n }\n\n private limpiarPdf(): void {\n this.pdfRenderToken += 1;\n this.pdfRenderTask?.cancel();\n this.pdfRenderTask = undefined;\n void this.pdfDocumento?.destroy?.();\n this.pdfDocumento = undefined;\n this.pdfCargando = false;\n this.pdfError = '';\n this.pdfPaginaActual = 1;\n this.pdfTotalPaginas = 0;\n }\n\n private normalizarArchivo(archivo: TdFileViewerArchivo, indice: number): TdFileAttachment {\n if (this.esAdjuntoNormalizado(archivo)) {\n return archivo;\n }\n\n const contentType = archivo.type || archivo.contentType || this.inferirContentType(archivo.fileName, archivo.file);\n const url = this.normalizarFileUrl(archivo.file, contentType);\n\n return {\n id: archivo.id ?? `${archivo.fileName}-${indice}`,\n nombre: archivo.fileName,\n url,\n tipo: contentType,\n tamano: archivo.size,\n descripcion: archivo.description,\n thumbnailUrl: archivo.thumbnailUrl,\n descargable: archivo.downloadable,\n };\n }\n\n private esAdjuntoNormalizado(archivo: TdFileViewerArchivo): archivo is TdFileAttachment {\n return 'nombre' in archivo && 'url' in archivo;\n }\n\n private normalizarFileUrl(file: string, contentType: string): string {\n const value = file.trim();\n if (!value) return '';\n if (/^(https?:|blob:|data:)/i.test(value)) return value;\n return `data:${contentType};base64,${value}`;\n }\n\n private inferirContentType(fileName: string, file: string): string {\n const value = `${fileName} ${file.slice(0, 80)}`.toLowerCase();\n if (value.includes('data:')) {\n const match = file.match(/^data:([^;,]+)/i);\n if (match?.[1]) return match[1];\n }\n if (/\\.(png)$/i.test(fileName)) return 'image/png';\n if (/\\.(jpe?g)$/i.test(fileName)) return 'image/jpeg';\n if (/\\.(gif)$/i.test(fileName)) return 'image/gif';\n if (/\\.(webp)$/i.test(fileName)) return 'image/webp';\n if (/\\.(svg)$/i.test(fileName)) return 'image/svg+xml';\n if (/\\.(pdf)$/i.test(fileName)) return 'application/pdf';\n if (/\\.(xlsx)$/i.test(fileName)) return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (/\\.(xls)$/i.test(fileName)) return 'application/vnd.ms-excel';\n if (/\\.(csv)$/i.test(fileName)) return 'text/csv';\n if (/\\.(xml)$/i.test(fileName)) return 'application/xml';\n if (/\\.(zip)$/i.test(fileName)) return 'application/zip';\n return 'application/octet-stream';\n }\n\n private obtenerFuentePdf(archivo: TdFileAttachment): { url: string } | { data: Uint8Array } {\n const dataUrl = archivo.url.match(/^data:application\\/pdf[^,]*,(.+)$/i);\n if (!dataUrl?.[1]) return { url: archivo.url };\n return { data: this.base64ABytes(dataUrl[1]) };\n }\n\n private base64ABytes(base64: string): Uint8Array {\n const limpio = decodeURIComponent(base64).replace(/\\s/g, '');\n const binario = atob(limpio);\n const bytes = new Uint8Array(binario.length);\n for (let i = 0; i < binario.length; i += 1) {\n bytes[i] = binario.charCodeAt(i);\n }\n return bytes;\n }\n}\n","@if (showList) {\n <section\n class=\"td-file-viewer\"\n [class.td-file-viewer--dark]=\"oscuro\"\n [class.td-file-viewer--compact]=\"compacto\"\n >\n <header class=\"td-file-viewer__header\">\n <div>\n <span>{{ archivos.length }} archivo{{ archivos.length === 1 ? '' : 's' }}</span>\n <h3>{{ titulo }}</h3>\n @if (descripcion) {\n <p>{{ descripcion }}</p>\n }\n </div>\n </header>\n\n @if (archivos.length) {\n <div class=\"td-file-viewer__grid\">\n @for (archivo of archivos; track archivo.id) {\n <button type=\"button\" class=\"td-file-viewer__item\" (click)=\"abrir(archivo)\">\n <span class=\"td-file-viewer__preview\" [class.td-file-viewer__preview--image]=\"tipoArchivo(archivo) === 'imagen'\">\n @if (tipoArchivo(archivo) === 'imagen') {\n <img [src]=\"archivo.thumbnailUrl || archivo.url\" [alt]=\"archivo.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"1.55rem\" />\n }\n </span>\n\n <span class=\"td-file-viewer__meta\">\n <strong>{{ archivo.nombre }}</strong>\n @if (archivo.descripcion) {\n <small>{{ archivo.descripcion }}</small>\n }\n <em>\n {{ tieneVistaPrevia(archivo) ? 'Vista previa disponible' : 'Descarga / apertura externa' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </em>\n </span>\n\n @if (archivo.descargable !== false) {\n <span\n role=\"button\"\n tabindex=\"-1\"\n class=\"td-file-viewer__download\"\n title=\"Descargar\"\n (click)=\"descargarArchivo(archivo, $event)\"\n >\n <td-icon nombre=\"download\" tamano=\"1rem\" />\n </span>\n }\n </button>\n }\n </div>\n } @else {\n <div class=\"td-file-viewer__empty\">\n <td-icon nombre=\"file\" tamano=\"2rem\" />\n <strong>No hay adjuntos</strong>\n <span>Cuando existan archivos apareceran en esta zona.</span>\n </div>\n }\n </section>\n}\n\n@if (seleccionado; as archivo) {\n <dialog\n #visorDialog\n class=\"td-file-viewer-modal\"\n [class.td-file-viewer-modal--dark]=\"oscuro\"\n [attr.aria-label]=\"archivo.nombre\"\n (click)=\"cerrarSiBackdrop($event)\"\n (cancel)=\"cerrar()\"\n (close)=\"seleccionado = null\"\n >\n <section class=\"td-file-viewer-modal__panel\">\n <header class=\"td-file-viewer-modal__topbar\">\n <div class=\"td-file-viewer-modal__title\">\n <span class=\"td-file-viewer-modal__badge\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\".95rem\" />\n {{ tipoArchivo(archivo) }}\n </span>\n <h3>{{ archivo.nombre }}</h3>\n @if (archivo.descripcion || tamanoLegible(archivo)) {\n <p>\n {{ archivo.descripcion || 'Archivo adjunto' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </p>\n }\n </div>\n\n <nav class=\"td-file-viewer-modal__toolbar\" aria-label=\"Acciones del visor\">\n <button type=\"button\" title=\"Anterior\" [disabled]=\"indiceSeleccionado() <= 0\" (click)=\"seleccionarAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button type=\"button\" title=\"Siguiente\" [disabled]=\"indiceSeleccionado() >= archivos.length - 1\" (click)=\"seleccionarSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n\n @if (esImagen(archivo) || esPdf(archivo)) {\n <span class=\"td-file-viewer-modal__divider\"></span>\n <button type=\"button\" title=\"Alejar\" (click)=\"cambiarZoom(-0.1)\">\n <span aria-hidden=\"true\">-</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__zoom\" title=\"Restablecer zoom\" (click)=\"restablecerZoom()\">\n {{ (zoom * 100).toFixed(0) }}%\n </button>\n <button type=\"button\" title=\"Acercar\" (click)=\"cambiarZoom(0.1)\">\n <span aria-hidden=\"true\">+</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Ajustar\" (click)=\"restablecerZoom()\">\n Ajustar\n </button>\n @if (esImagen(archivo)) {\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Rotar\" (click)=\"rotar()\">\n Rotar\n </button>\n }\n }\n\n <span class=\"td-file-viewer-modal__divider\"></span>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\" title=\"Abrir en nueva pestana\">\n <td-icon nombre=\"visibility\" />\n </a>\n @if (archivo.descargable !== false) {\n <a [href]=\"archivo.url\" [download]=\"archivo.nombre\" target=\"_blank\" rel=\"noopener\" title=\"Descargar\">\n <td-icon nombre=\"download\" />\n </a>\n }\n <button type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\" (click)=\"cerrar()\">\n <td-icon nombre=\"close\" />\n </button>\n </nav>\n </header>\n\n <div class=\"td-file-viewer-modal__workspace\">\n <main class=\"td-file-viewer-modal__canvas\">\n @if (esImagen(archivo)) {\n <img\n class=\"td-file-viewer-modal__image\"\n [src]=\"archivo.url\"\n [alt]=\"archivo.nombre\"\n [style.transform]=\"'scale(' + zoom + ') rotate(' + rotacion + 'deg)'\"\n />\n } @else if (esPdf(archivo)) {\n <section class=\"td-file-viewer-modal__pdf-shell\">\n <div class=\"td-file-viewer-modal__pdf-head\">\n <span>\n <td-icon nombre=\"pdf\" />\n Vista PDF\n </span>\n <div class=\"td-file-viewer-modal__pdf-pages\">\n <button type=\"button\" title=\"Pagina anterior\" [disabled]=\"pdfPaginaActual <= 1 || pdfCargando\" (click)=\"paginaPdfAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <small>\n Pagina {{ pdfPaginaActual }} de {{ pdfTotalPaginas || '-' }}\n </small>\n <button type=\"button\" title=\"Pagina siguiente\" [disabled]=\"!pdfTotalPaginas || pdfPaginaActual >= pdfTotalPaginas || pdfCargando\" (click)=\"paginaPdfSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </div>\n </div>\n <div class=\"td-file-viewer-modal__pdf-canvas-wrap\">\n <canvas #pdfCanvas class=\"td-file-viewer-modal__pdf-canvas\"></canvas>\n\n @if (pdfCargando) {\n <div class=\"td-file-viewer-modal__pdf-state\">\n <span class=\"td-file-viewer-modal__spinner\"></span>\n <strong>Cargando PDF</strong>\n <small>Preparando pagina {{ pdfPaginaActual }}...</small>\n </div>\n }\n\n @if (pdfError) {\n <div class=\"td-file-viewer-modal__pdf-state td-file-viewer-modal__pdf-state--error\">\n <td-icon nombre=\"alert\" tamano=\"2rem\" />\n <strong>{{ pdfError }}</strong>\n <small>Prueba abrirlo en una nueva pestaña o descargarlo.</small>\n </div>\n }\n </div>\n </section>\n } @else {\n <div class=\"td-file-viewer-modal__fallback\">\n <span class=\"td-file-viewer-modal__fallback-icon\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"3rem\" />\n </span>\n <h4>Vista previa no disponible</h4>\n <p>Este tipo de archivo debe abrirse o descargarse con una aplicacion compatible.</p>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\">\n Abrir archivo\n </a>\n </div>\n }\n </main>\n\n @if (archivos.length > 1) {\n <footer class=\"td-file-viewer-modal__strip\">\n @for (item of archivos; track item.id) {\n <button\n type=\"button\"\n [class.td-file-viewer-modal__thumb--active]=\"item.id === archivo.id\"\n [title]=\"item.nombre\"\n (click)=\"abrir(item)\"\n >\n @if (tipoArchivo(item) === 'imagen') {\n <img [src]=\"item.thumbnailUrl || item.url\" [alt]=\"item.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(item)\" />\n }\n @if (!tieneVistaPrevia(item)) {\n <span class=\"td-file-viewer-modal__no-preview\">Sin preview</span>\n }\n </button>\n }\n </footer>\n }\n </div>\n </section>\n </dialog>\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, EnvironmentInjector, Injectable, inject } from '@angular/core';\nimport { take } from 'rxjs';\nimport { TdFileViewer } from './td-file-viewer';\nimport { TdFileViewerArchivo, TdFileViewerOpenOptions } from './td-file-viewer.model';\n\n@Injectable({ providedIn: 'root' })\nexport class TdFileViewerService {\n private readonly overlay = inject(Overlay);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private overlayRef?: OverlayRef;\n private componentRef?: ComponentRef<TdFileViewer>;\n\n open(\n archivo: TdFileViewerArchivo | TdFileViewerArchivo[],\n opciones: TdFileViewerOpenOptions = {}\n ): TdFileViewer {\n this.dispose();\n\n const archivos = Array.isArray(archivo) ? archivo : [archivo];\n const index = Math.min(Math.max(opciones.index ?? 0, 0), Math.max(archivos.length - 1, 0));\n\n this.overlayRef = this.overlay.create({\n disposeOnNavigation: true,\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n this.componentRef = this.overlayRef.attach(\n new ComponentPortal(TdFileViewer, null, this.environmentInjector)\n );\n\n this.componentRef.setInput('archivos', archivos);\n this.componentRef.setInput('showList', false);\n\n if (opciones.titulo !== undefined) this.componentRef.setInput('titulo', opciones.titulo);\n if (opciones.descripcion !== undefined) {\n this.componentRef.setInput('descripcion', opciones.descripcion);\n }\n if (opciones.oscuro !== undefined) this.componentRef.setInput('oscuro', opciones.oscuro);\n if (opciones.compacto !== undefined) this.componentRef.setInput('compacto', opciones.compacto);\n\n this.componentRef.instance.closed.pipe(take(1)).subscribe(() => this.dispose());\n\n queueMicrotask(() => this.componentRef?.instance.openByIndex(index));\n\n return this.componentRef.instance;\n }\n\n close(): void {\n this.componentRef?.instance.close();\n this.dispose();\n }\n\n private dispose(): void {\n this.componentRef?.destroy();\n this.componentRef = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport interface TdHeaderNotificacion {\n id: string | number;\n titulo: string;\n descripcion?: string;\n fecha?: string;\n icono?: string;\n leida?: boolean;\n}\n\nexport type TdHeaderAccionPerfil = 'perfil' | 'configuracion' | 'salir';\n\n@Component({\n selector: 'td-header',\n imports: [TdIcon],\n templateUrl: './td-header.html',\n styleUrl: './td-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdHeader {\n @Input() menuAbierto = true;\n @Input() mostrarMenu = true;\n @Input() usuario = '';\n @Input() cargo = '';\n @Input() avatarUrl = '';\n @Input() notificaciones: TdHeaderNotificacion[] = [];\n @Input() oscuro = false;\n @Input() fijo = true;\n\n @Output() readonly menuToggle = new EventEmitter<void>();\n @Output() readonly notificacionSeleccionada = new EventEmitter<TdHeaderNotificacion>();\n @Output() readonly verTodasNotificaciones = new EventEmitter<void>();\n @Output() readonly accionPerfil = new EventEmitter<TdHeaderAccionPerfil>();\n\n protected panelNotificacionesAbierto = false;\n protected panelPerfilAbierto = false;\n\n protected alternarMenu(): void {\n this.menuToggle.emit();\n }\n\n protected alternarNotificaciones(): void {\n this.panelNotificacionesAbierto = !this.panelNotificacionesAbierto;\n this.panelPerfilAbierto = false;\n }\n\n protected alternarPerfil(): void {\n this.panelPerfilAbierto = !this.panelPerfilAbierto;\n this.panelNotificacionesAbierto = false;\n }\n\n protected seleccionarNotificacion(notificacion: TdHeaderNotificacion): void {\n this.notificacionSeleccionada.emit(notificacion);\n this.panelNotificacionesAbierto = false;\n }\n\n protected emitirAccionPerfil(accion: TdHeaderAccionPerfil): void {\n this.accionPerfil.emit(accion);\n this.panelPerfilAbierto = false;\n }\n\n protected notificacionesNoLeidas(): number {\n return this.notificaciones.filter((item) => !item.leida).length;\n }\n\n protected inicialesUsuario(): string {\n const partes = this.usuario.trim().split(/\\s+/).filter(Boolean);\n return (\n partes\n .slice(0, 2)\n .map((parte) => parte.charAt(0))\n .join('') || 'U'\n ).toUpperCase();\n }\n\n @HostListener('document:keydown.escape')\n protected cerrarConEscape(): void {\n this.panelNotificacionesAbierto = false;\n this.panelPerfilAbierto = false;\n }\n}\n","<header\n class=\"td-header\"\n [class.td-header--oscuro]=\"oscuro\"\n [class.td-header--fijo]=\"fijo\"\n>\n <div class=\"td-header__inicio\">\n @if (mostrarMenu) {\n <button\n class=\"td-header__boton td-header__menu\"\n type=\"button\"\n [attr.aria-label]=\"menuAbierto ? 'Cerrar sidebar' : 'Abrir sidebar'\"\n [attr.aria-expanded]=\"menuAbierto\"\n (click)=\"alternarMenu()\"\n >\n <td-icon [nombre]=\"menuAbierto ? 'close' : 'menu'\" />\n </button>\n }\n\n <ng-content select=\"[tdHeaderStart]\" />\n </div>\n\n <div class=\"td-header__centro\">\n <ng-content select=\"[tdHeaderCenter]\" />\n </div>\n\n <div class=\"td-header__acciones\">\n <ng-content select=\"[tdHeaderActions]\" />\n\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__boton td-header__notificaciones\"\n type=\"button\"\n aria-label=\"Notificaciones\"\n [attr.aria-expanded]=\"panelNotificacionesAbierto\"\n (click)=\"alternarNotificaciones()\"\n >\n <td-icon nombre=\"notifications\" />\n @if (notificacionesNoLeidas() > 0) {\n <span>{{ notificacionesNoLeidas() > 99 ? '99+' : notificacionesNoLeidas() }}</span>\n }\n </button>\n\n @if (panelNotificacionesAbierto) {\n <section class=\"td-header__panel td-header__panel--notificaciones\">\n <header>\n <div>\n <strong>Notificaciones</strong>\n <small>{{ notificacionesNoLeidas() }} sin leer</small>\n </div>\n <td-icon nombre=\"notifications\" />\n </header>\n\n <div class=\"td-header__lista-notificaciones\">\n @for (notificacion of notificaciones; track notificacion.id) {\n <button\n type=\"button\"\n [class.td-header__notificacion--nueva]=\"!notificacion.leida\"\n (click)=\"seleccionarNotificacion(notificacion)\"\n >\n <span class=\"td-header__notificacion-icono\">\n <td-icon [nombre]=\"notificacion.icono || 'notifications'\" />\n </span>\n <span>\n <strong>{{ notificacion.titulo }}</strong>\n @if (notificacion.descripcion) {\n <small>{{ notificacion.descripcion }}</small>\n }\n @if (notificacion.fecha) {\n <time>{{ notificacion.fecha }}</time>\n }\n </span>\n </button>\n } @empty {\n <p class=\"td-header__vacio\">No tienes notificaciones.</p>\n }\n </div>\n\n @if (notificaciones.length) {\n <button\n class=\"td-header__ver-todas\"\n type=\"button\"\n (click)=\"verTodasNotificaciones.emit(); panelNotificacionesAbierto = false\"\n >\n Ver todas las notificaciones\n </button>\n }\n </section>\n }\n </div>\n\n @if (usuario) {\n <span class=\"td-header__separador\" aria-hidden=\"true\"></span>\n\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__perfil\"\n type=\"button\"\n aria-label=\"Abrir perfil de usuario\"\n [attr.aria-expanded]=\"panelPerfilAbierto\"\n (click)=\"alternarPerfil()\"\n >\n <span class=\"td-header__avatar\">\n @if (avatarUrl) {\n <img [src]=\"avatarUrl\" [alt]=\"usuario\" />\n } @else {\n {{ inicialesUsuario() }}\n }\n </span>\n <span class=\"td-header__usuario\">\n <strong>{{ usuario }}</strong>\n @if (cargo) {\n <small>{{ cargo }}</small>\n }\n </span>\n <td-icon nombre=\"chevron_down\" tamano=\"0.85rem\" />\n </button>\n\n @if (panelPerfilAbierto) {\n <section class=\"td-header__panel td-header__panel--perfil\">\n <div class=\"td-header__perfil-resumen\">\n <span class=\"td-header__avatar td-header__avatar--grande\">{{ inicialesUsuario() }}</span>\n <div>\n <strong>{{ usuario }}</strong>\n <small>{{ cargo || 'Usuario' }}</small>\n </div>\n </div>\n <div class=\"td-header__perfil-opciones\">\n <button type=\"button\" (click)=\"emitirAccionPerfil('perfil')\">\n <td-icon nombre=\"person\" /> Mi perfil\n </button>\n <button type=\"button\" (click)=\"emitirAccionPerfil('configuracion')\">\n <td-icon nombre=\"settings\" /> Configuración\n </button>\n <button class=\"td-header__salir\" type=\"button\" (click)=\"emitirAccionPerfil('salir')\">\n <td-icon nombre=\"close\" /> Cerrar sesión\n </button>\n </div>\n </section>\n }\n </div>\n }\n </div>\n</header>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet inputSequence = 0;\ndeclare const ngDevMode: boolean | undefined;\n\nexport type TdInputValue = string | number | null;\nexport type TdInputEmptyValue = 'auto' | 'null' | 'empty-string';\nexport type TdInputSanitizePreset =\n | 'none'\n | 'digits'\n | 'letters'\n | 'alphanumeric'\n | 'decimal'\n | 'uppercase'\n | 'lowercase'\n | 'trim';\nexport type TdInputSanitize = TdInputSanitizePreset | readonly TdInputSanitizePreset[];\nexport type TdInputMask =\n | 'none'\n | 'time'\n | 'time-seconds'\n | 'decimal'\n | `decimal(${number},${number})`\n | `decimal(${number}.${number})`;\nexport type TdInputSanitizeFn = (value: string) => string;\n\n@Component({\n selector: 'td-input',\n imports: [TdIcon],\n template: `\n <div\n class=\"td-input\"\n [class.td-input--focused]=\"focused()\"\n [class.td-input--error]=\"hasError()\"\n [class.td-input--disabled]=\"isDisabled()\"\n [class.td-input--dark]=\"dark\"\n [class.td-input--floating]=\"labelFloating()\"\n [class.td-input--with-icon]=\"!!icon\"\n [class.td-input--with-prefix]=\"!!prefix\"\n >\n <label [for]=\"inputId\">{{ label }}</label>\n\n <div class=\"td-input__control\">\n @if (icon) {\n <td-icon class=\"td-input__icon\" [nombre]=\"icon\" />\n }\n\n @if (prefix) {\n <span class=\"td-input__affix td-input__affix--prefix\">{{ prefix }}</span>\n }\n\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n [type]=\"resolvedType\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [min]=\"minValue()\"\n [max]=\"maxValue()\"\n [step]=\"step\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.pattern]=\"resolvedPattern()\"\n [attr.inputmode]=\"resolvedInputMode()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n />\n\n @if (suffix) {\n <span class=\"td-input__affix td-input__affix--suffix\">{{ suffix }}</span>\n }\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-input__action\" title=\"Limpiar\" (click)=\"clear()\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n\n @if (type === 'password') {\n <button\n type=\"button\"\n class=\"td-input__action\"\n [title]=\"passwordVisible ? 'Ocultar contraseña' : 'Mostrar contraseña'\"\n (click)=\"passwordVisible = !passwordVisible\"\n >\n <td-icon [nombre]=\"passwordVisible ? 'visibility_off' : 'visibility'\" />\n </button>\n }\n </div>\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-input__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-input__message\"\n [class.td-input__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-input__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-input__counter\"\n [class.td-input__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-input.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdInput),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdInput\n implements ControlValueAccessor, FormValueControl<TdInputValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-input-${++inputSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search' | 'date' | 'time' = 'text';\n @Input() placeholder = '';\n @Input() autocomplete = 'off';\n @Input() icon = '';\n @Input() prefix = '';\n @Input() suffix = '';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() clearable = false;\n @Input() dark = false;\n readonly showCounter = input(true);\n @Input() emptyValue: TdInputEmptyValue = 'auto';\n @Input() sanitize: TdInputSanitize = 'none';\n @Input() sanitizeValue: TdInputSanitizeFn | null = null;\n @Input() mask: TdInputMask = 'none';\n @Input() integerDigits: number | null = null;\n @Input() decimalDigits: number | null = null;\n readonly minValue = input<string | number | null | undefined>(undefined, {\n alias: 'min',\n });\n readonly maxValue = input<string | number | null | undefined>(undefined, {\n alias: 'max',\n });\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n readonly pattern = input<readonly RegExp[]>([]);\n @Input() step: string | number | null = null;\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdInputValue>('');\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && String(currentValue).length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue() || this.type === 'date' || this.type === 'time'\n );\n protected readonly resolvedPattern = computed(() => {\n const patterns = this.pattern();\n if (!patterns.length) return null;\n if (patterns.length === 1) return patterns[0].source;\n return patterns.map((item) => `(?=${item.source})`).join('') + '.*';\n });\n protected readonly resolvedInputMode = computed(() => {\n if (this.mask === 'time' || this.mask === 'time-seconds') return 'numeric';\n if (this.isDecimalMask()) return 'decimal';\n const presets = this.sanitizePresets();\n if (presets.includes('digits')) return 'numeric';\n if (presets.includes('decimal')) return 'decimal';\n return null;\n });\n protected readonly focused = signal(false);\n protected passwordVisible = false;\n\n protected get inputId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.inputId}-description` : null;\n }\n\n protected get resolvedType(): string {\n return this.type === 'password' && this.passwordVisible ? 'text' : this.type;\n }\n\n private onChange: (value: TdInputValue) => void = () => undefined;\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.value.set(null);\n } else if (\n this.type === 'number' &&\n this.formBridge.usesSignalForms &&\n typeof value === 'number'\n ) {\n this.value.set(value);\n } else {\n this.value.set(this.transformTextValue(String(value)));\n }\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdInputValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n const transformedValue = this.transformTextValue(inputElement.value);\n if (inputElement.value !== transformedValue) {\n inputElement.value = transformedValue;\n }\n this.setValue(this.parseInputValue(transformedValue, inputElement));\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.completeMaskOnBlur();\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.setValue(this.resolveEmptyValue());\n }\n\n private parseInputValue(value: string, inputElement: HTMLInputElement): TdInputValue {\n if (!value) {\n return this.resolveEmptyValue();\n }\n\n if (this.type !== 'number' || !this.formBridge.usesSignalForms) {\n return value;\n }\n\n const numericValue = inputElement.valueAsNumber;\n return Number.isNaN(numericValue) ? null : numericValue;\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n\n if (this.formBridge.usesSignalForms && this.type === 'number') return null;\n return this.receivedNullValue ? null : '';\n }\n\n private transformTextValue(value: string): string {\n if (!value) return value;\n const sanitized = this.applySanitize(value);\n return this.applyMask(sanitized);\n }\n\n private applySanitize(value: string): string {\n const customValue = this.sanitizeValue ? this.sanitizeValue(value) : value;\n return this.sanitizePresets().reduce(\n (current, preset) => this.applySanitizePreset(current, preset),\n customValue\n );\n }\n\n private sanitizePresets(): TdInputSanitizePreset[] {\n const sanitize = this.sanitize;\n return typeof sanitize === 'string' ? [sanitize] : [...sanitize];\n }\n\n private applySanitizePreset(value: string, preset: TdInputSanitizePreset): string {\n switch (preset) {\n case 'digits':\n return value.replace(/\\D/g, '');\n case 'letters':\n return value.replace(/[^\\p{L}\\s]/gu, '');\n case 'alphanumeric':\n return value.replace(/[^\\p{L}\\p{N}]/gu, '');\n case 'decimal':\n return this.sanitizeDecimal(value);\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'trim':\n return value.trim();\n default:\n return value;\n }\n }\n\n private sanitizeDecimal(value: string): string {\n const normalized = value.replace(',', '.').replace(/[^\\d.]/g, '');\n const [integerPart, ...decimalParts] = normalized.split('.');\n const integerValue = this.limitDigits(integerPart, this.integerDigits);\n if (!decimalParts.length) return integerValue;\n\n const decimalValue = this.limitDigits(decimalParts.join(''), this.decimalDigits);\n return decimalValue.length || normalized.endsWith('.')\n ? `${integerValue}.${decimalValue}`\n : integerValue;\n }\n\n private limitDigits(value: string, limit: number | null): string {\n if (limit === null || limit === undefined || limit < 0) return value;\n return value.slice(0, limit);\n }\n\n private applyMask(value: string): string {\n if (this.mask === 'time') return this.maskTime(value);\n if (this.mask === 'time-seconds') return this.maskTimeSeconds(value);\n if (this.isDecimalMask()) return this.maskDecimal(value);\n return value;\n }\n\n private maskDecimal(value: string): string {\n const config = this.resolveDecimalMaskConfig();\n const scale = config.decimalDigits;\n const integerLimit = config.integerDigits;\n const maxDigits = integerLimit && integerLimit > 0\n ? integerLimit + scale\n : null;\n const digits = this.limitDigits(\n value.replace(/\\D/g, '').replace(/^0+(?=\\d)/, ''),\n maxDigits\n );\n\n if (!digits) return '';\n if (scale === 0) return this.limitDigits(digits, integerLimit);\n\n const padded = digits.padStart(scale + 1, '0');\n const splitIndex = padded.length - scale;\n const integerPart = this.limitDigits(padded.slice(0, splitIndex), integerLimit);\n const decimalPart = padded.slice(splitIndex);\n\n return `${integerPart || '0'}.${decimalPart}`;\n }\n\n private isDecimalMask(): boolean {\n return this.mask === 'decimal' || this.mask.startsWith('decimal(');\n }\n\n private resolveDecimalMaskConfig(): { integerDigits: number | null; decimalDigits: number } {\n const parsed = this.parseDecimalMask();\n const integerDigits = this.integerDigits ?? parsed?.integerDigits ?? null;\n const decimalDigits = this.decimalDigits ?? parsed?.decimalDigits ?? 2;\n\n return {\n integerDigits: integerDigits !== null ? Math.max(0, Math.trunc(integerDigits)) : null,\n decimalDigits: Math.max(0, Math.trunc(decimalDigits)),\n };\n }\n\n private parseDecimalMask(): { integerDigits: number; decimalDigits: number } | null {\n if (!this.mask.startsWith('decimal(')) return null;\n\n const match = /^decimal\\((\\d+)[,.](\\d+)\\)$/.exec(this.mask.trim());\n if (!match) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `[TdInput] Máscara decimal inválida: \"${this.mask}\". Usa decimal(enteros,decimales), por ejemplo decimal(10,2).`\n );\n }\n return null;\n }\n\n return {\n integerDigits: Number(match[1]),\n decimalDigits: Number(match[2]),\n };\n }\n\n private maskTime(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (digits.length <= 2) return digits;\n return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n }\n\n private maskTimeSeconds(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n return `${digits.slice(0, 2)}:${digits.slice(2, 4)}:${digits.slice(4)}`;\n }\n\n private completeMaskOnBlur(): void {\n if (this.mask !== 'time' && this.mask !== 'time-seconds') return;\n const currentValue = String(this.value() ?? '');\n if (!currentValue) return;\n\n const completedValue = this.mask === 'time'\n ? this.completeTimeValue(currentValue)\n : this.completeTimeSecondsValue(currentValue);\n\n if (completedValue !== currentValue) {\n this.setValue(completedValue);\n if (this.nativeInput) {\n this.nativeInput.nativeElement.value = completedValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n private completeTimeValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}00`\n : digits.padEnd(4, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}`;\n }\n\n private completeTimeSecondsValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}0000`\n : digits.padEnd(6, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n const second = this.clampNumber(Number(padded.slice(4, 6)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}:${this.padTimePart(second)}`;\n }\n\n private clampNumber(value: number, min: number, max: number): number {\n if (Number.isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n }\n\n private padTimePart(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n private setValue(value: TdInputValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n booleanAttribute,\n computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\n\nlet textareaSequence = 0;\n\nexport type TdTextareaValue = string | null;\nexport type TdTextareaEmptyValue = 'auto' | 'null' | 'empty-string';\n\n@Component({\n selector: 'td-textarea',\n template: `\n <div\n class=\"td-textarea\"\n [class.td-textarea--focused]=\"focused()\"\n [class.td-textarea--error]=\"hasError()\"\n [class.td-textarea--disabled]=\"isDisabled()\"\n [class.td-textarea--dark]=\"dark\"\n [class.td-textarea--floating]=\"labelFloating()\"\n >\n <label [for]=\"textareaId\">{{ label }}</label>\n\n <textarea\n #nativeTextarea\n [id]=\"textareaId\"\n [name]=\"name()\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [rows]=\"rows\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n ></textarea>\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-textarea__clear\" title=\"Limpiar\" (click)=\"clear()\">\n ×\n </button>\n }\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-textarea__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-textarea__message\"\n [class.td-textarea__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-textarea__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-textarea__counter\"\n [class.td-textarea__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-textarea.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdTextarea),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTextarea\n implements AfterViewInit, ControlValueAccessor, FormValueControl<TdTextareaValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-textarea-${++textareaSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n\n @ViewChild('nativeTextarea') private nativeTextarea?: ElementRef<HTMLTextAreaElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() placeholder = '';\n @Input() hint = '';\n @Input() rows = 4;\n @Input() dark = false;\n @Input() clearable = false;\n @Input() emptyValue: TdTextareaEmptyValue = 'auto';\n @Input({ transform: booleanAttribute }) autoResize = true;\n @Input() maxAutoRows: number | null = 10;\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n readonly showCounter = input(true);\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdTextareaValue>('');\n protected readonly focused = signal(false);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && currentValue.length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue()\n );\n\n protected get textareaId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.textareaId}-description` : null;\n }\n\n private onChange: (value: TdTextareaValue) => void = () => undefined;\n\n ngAfterViewInit(): void {\n this.resizeTextarea();\n }\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.value.set(null);\n } else {\n this.value.set(String(value));\n }\n queueMicrotask(() => this.resizeTextarea());\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdTextareaValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeTextarea?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.setValue(textarea.value ? textarea.value : this.resolveEmptyValue());\n this.resizeTextarea();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.setValue(this.resolveEmptyValue());\n if (this.nativeTextarea) {\n this.nativeTextarea.nativeElement.value = this.value() ?? '';\n }\n this.resizeTextarea();\n }\n\n private setValue(value: TdTextareaValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n return this.receivedNullValue ? null : '';\n }\n\n private resizeTextarea(): void {\n if (!this.autoResize || !this.nativeTextarea) return;\n\n const textarea = this.nativeTextarea.nativeElement;\n textarea.style.height = 'auto';\n\n const lineHeight = Number.parseFloat(getComputedStyle(textarea).lineHeight || '20');\n const maxHeight = this.maxAutoRows && this.maxAutoRows > 0\n ? lineHeight * this.maxAutoRows\n : Number.POSITIVE_INFINITY;\n const nextHeight = Math.min(textarea.scrollHeight, maxHeight);\n\n textarea.style.height = `${nextHeight}px`;\n textarea.style.overflowY = textarea.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet autocompleteSequence = 0;\n\n@Component({\n selector: 'td-autocomplete-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select td-select--autocomplete\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--floating]=\"labelFloating\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [for]=\"inputId\">{{ label }}</label>\n }\n <div class=\"td-select__trigger\">\n <td-icon class=\"td-select__leading\" nombre=\"search\" />\n <input\n #searchInput\n [id]=\"inputId\"\n type=\"search\"\n autocomplete=\"off\"\n role=\"combobox\"\n [value]=\"search\"\n [placeholder]=\"labelFloating || !hasVisibleLabel ? placeholder : ''\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (focus)=\"handleFocus()\"\n (input)=\"handleInput($event)\"\n (keydown)=\"handleKeydown($event)\"\n (blur)=\"handleBlur()\"\n />\n @if (clearable && (value() !== null || search) && !isDisabled()) {\n <button type=\"button\" class=\"td-select__clear\" title=\"Limpiar\" (click)=\"clear($event)\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!filteredOptions.length) {\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n }\n @for (option of filteredOptions; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdAutocompleteSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdAutocompleteSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-autocomplete-${++autocompleteSequence}`;\n\n @ViewChild('searchInput') private searchInput?: ElementRef<HTMLInputElement>;\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Buscar y seleccionar';\n @Input() placeholder = 'Escribe para buscar...';\n @Input() options: TdSelectOption<T>[] = [];\n @Input() hint = '';\n @Input() hideLabel = false;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No se encontraron resultados';\n @Input() clearable = true;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() minimumCharacters = 0;\n @Input() filterWith: (option: TdSelectOption<T>, search: string) => boolean =\n (option, search) =>\n `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(search);\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n @Output() readonly searchChange = new EventEmitter<string>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected search = '';\n protected open = false;\n protected activeIndex = -1;\n protected readonly focused = signal(false);\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get inputId(): string {\n return `${this.generatedId}-input`;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get filteredOptions(): TdSelectOption<T>[] {\n const normalized = this.search.trim().toLocaleLowerCase();\n if (normalized.length < this.minimumCharacters) return [];\n return this.options.filter((option) => this.filterWith(option, normalized));\n }\n\n protected get labelFloating(): boolean {\n return (\n this.hasVisibleLabel &&\n (this.focused() || this.open || !!this.search.trim() || this.value() !== null)\n );\n }\n\n private changed: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.search =\n this.options.find((option) => this.compare(option.value, this.value()))?.label ?? '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.searchInput?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open = true;\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n this.openPanel();\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n if (!this.search.trim() && this.value() === null) {\n this.close();\n }\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n const selected = this.options.find((option) => this.compare(option.value, this.value()));\n if (selected) this.search = selected.label;\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected handleInput(event: Event): void {\n this.search = (event.target as HTMLInputElement).value;\n this.value.set(null);\n this.changed(null);\n this.searchChange.emit(this.search);\n this.openPanel();\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.value.set(option.value);\n this.search = option.label;\n this.changed(option.value);\n this.selectionChange.emit(option.value);\n this.close();\n this.cdr.markForCheck();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n this.search = '';\n this.changed(null);\n this.selectionChange.emit(null);\n this.searchChange.emit('');\n this.openPanel();\n queueMicrotask(() => this.searchInput?.nativeElement.focus());\n this.cdr.markForCheck();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n } else if (event.key === 'Enter' && this.open && this.activeIndex >= 0) {\n event.preventDefault();\n const option = this.filteredOptions[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private moveActive(direction: number): void {\n const options = this.filteredOptions;\n if (!options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < options.length; index++) {\n next = (next + direction + options.length) % options.length;\n if (!options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.filteredOptions.findIndex((option) => !option.disabled);\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet selectSequence = 0;\n\n@Component({\n selector: 'td-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [id]=\"labelId\">{{ label }}</label>\n }\n <div\n #trigger\n class=\"td-select__trigger\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"hasVisibleLabel ? labelId : null\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (click)=\"toggle()\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (selectedOption?.icon) {\n <td-icon class=\"td-select__leading\" [nombre]=\"selectedOption!.icon!\" />\n }\n <span [class.td-select__placeholder]=\"!selectedOption\">\n {{ selectedOption?.label || placeholder }}\n </span>\n @if (clearable && selectedOption && !isDisabled()) {\n <button\n type=\"button\"\n class=\"td-select__clear\"\n title=\"Limpiar selección\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!options.length) {\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n }\n @for (option of options; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [attr.aria-selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-select-${++selectSequence}`;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('trigger') private trigger?: ElementRef<HTMLElement>;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Seleccionar';\n @Input() placeholder = 'Selecciona una opción';\n @Input() options: TdSelectOption<T>[] = [];\n @Input() hint = '';\n @Input() hideLabel = false;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No hay opciones disponibles';\n @Input() clearable = false;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected open = false;\n protected activeIndex = -1;\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get selectedOption(): TdSelectOption<T> | undefined {\n return this.options.find((option) => this.compare(option.value, this.value()));\n }\n\n private onChange: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.trigger?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.setValue(option.value);\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n return;\n }\n\n const option = this.options[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private openPanel(): void {\n this.open = true;\n const selectedIndex = this.options.findIndex((option) =>\n this.compare(option.value, this.value())\n );\n this.activeIndex = selectedIndex >= 0 ? selectedIndex : this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n private moveActive(direction: number): void {\n if (!this.options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < this.options.length; index++) {\n next = (next + direction + this.options.length) % this.options.length;\n if (!this.options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.options.findIndex((option) => !option.disabled);\n }\n\n private setValue(value: T | null): void {\n this.value.set(value);\n this.onChange(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { TdIcon } from '../iconos';\nimport { MenuSidebar, TdSidebarSeleccion } from './menu-sidebar';\n\nexport type TdSidebarModoCerrado = 'compacto' | 'oculto';\n\n@Component({\n selector: 'td-sidebar',\n imports: [NgTemplateOutlet, RouterLink, RouterLinkActive, TdIcon],\n templateUrl: './td-sidebar.html',\n styleUrl: './td-sidebar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSidebar {\n @Input() titulo = 'Gestión Corporativa';\n @Input() subtitulo = 'Central Platform';\n @Input() etiquetaNavegacion = 'Navegación';\n @Input() logoUrl = '';\n @Input() logoAlt = 'Logo';\n @Input() textoCarga = 'Cargando menú...';\n @Input() mensajeVacio = 'No hay opciones disponibles.';\n @Input() error = '';\n @Input() cargando = false;\n @Input() oscuro = false;\n @Input() modoCerrado: TdSidebarModoCerrado = 'compacto';\n\n @Input()\n set abierto(value: boolean) {\n this.abiertoInterno.set(value);\n }\n get abierto(): boolean {\n return this.abiertoInterno();\n }\n\n @Input()\n set menu(value: MenuSidebar[] | null | undefined) {\n this.menuNormalizado.set(this.normalizarMenu(value ?? []));\n }\n get menu(): MenuSidebar[] {\n return this.menuNormalizado();\n }\n\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n @Output() readonly seleccionar = new EventEmitter<TdSidebarSeleccion>();\n\n protected readonly abiertoInterno = signal(true);\n protected readonly menuNormalizado = signal<MenuSidebar[]>([]);\n protected readonly expandidos = signal<ReadonlySet<string>>(new Set<string>());\n\n protected alternarGrupo(clave: string): void {\n if (!this.abiertoInterno()) {\n this.abiertoInterno.set(true);\n this.abiertoChange.emit(true);\n }\n\n this.expandidos.update((actuales) => {\n const siguientes = new Set(actuales);\n siguientes.has(clave) ? siguientes.delete(clave) : siguientes.add(clave);\n return siguientes;\n });\n }\n\n protected estaExpandido(clave: string): boolean {\n return this.expandidos().has(clave);\n }\n\n protected seleccionarItem(item: MenuSidebar, nivel: number): void {\n this.seleccionar.emit({ item, nivel });\n }\n\n protected claveItem(item: MenuSidebar, padre: string, indice: number): string {\n return `${padre}/${item.nombre}-${indice}`;\n }\n\n protected inicialMarca(): string {\n return (this.titulo.trim().charAt(0) || 'T').toUpperCase();\n }\n\n private normalizarMenu(items: MenuSidebar[]): MenuSidebar[] {\n return [...items]\n .sort((a, b) => a.orden - b.orden)\n .map((item) => ({\n ...item,\n icono: item.icono?.trim() || 'folder',\n subMenus: this.normalizarMenu(item.subMenus ?? []),\n }));\n }\n}\n","<aside\n class=\"td-sidebar\"\n [class.td-sidebar--compacto]=\"!abiertoInterno() && modoCerrado === 'compacto'\"\n [class.td-sidebar--oculto]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n [class.td-sidebar--oscuro]=\"oscuro\"\n [attr.aria-hidden]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n>\n <header class=\"td-sidebar__marca\">\n <div class=\"td-sidebar__logo\">\n @if (logoUrl) {\n <img [src]=\"logoUrl\" [alt]=\"logoAlt\" />\n } @else {\n <span>{{ inicialMarca() }}</span>\n }\n </div>\n\n @if (abiertoInterno()) {\n <div class=\"td-sidebar__marca-texto\">\n <small>{{ subtitulo }}</small>\n <strong>{{ titulo }}</strong>\n </div>\n }\n\n </header>\n\n <div class=\"td-sidebar__encabezado\">\n @if (abiertoInterno()) {\n <span>{{ etiquetaNavegacion }}</span>\n } @else {\n <span aria-hidden=\"true\">•••</span>\n }\n </div>\n\n <nav class=\"td-sidebar__nav\" aria-label=\"Menú principal\">\n @if (cargando) {\n <p class=\"td-sidebar__estado\">{{ textoCarga }}</p>\n } @else if (error) {\n <p class=\"td-sidebar__estado td-sidebar__estado--error\">{{ error }}</p>\n } @else if (!menuNormalizado().length) {\n <p class=\"td-sidebar__estado\">{{ mensajeVacio }}</p>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{ items: menuNormalizado(), nivel: 0, padre: 'raiz' }\"\n />\n }\n </nav>\n</aside>\n\n<ng-template #listaMenu let-items=\"items\" let-nivel=\"nivel\" let-padre=\"padre\">\n <ul class=\"td-sidebar__lista\" [class.td-sidebar__lista--anidada]=\"nivel > 0\">\n @for (item of items; track item) {\n @let clave = claveItem(item, padre, $index);\n @let tieneHijos = item.subMenus.length > 0;\n\n <li class=\"td-sidebar__item\">\n @if (tieneHijos) {\n <button\n class=\"td-sidebar__enlace\"\n type=\"button\"\n [class.td-sidebar__enlace--activo]=\"estaExpandido(clave)\"\n [attr.aria-expanded]=\"estaExpandido(clave)\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"alternarGrupo(clave)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n <td-icon\n class=\"td-sidebar__flecha\"\n [class.td-sidebar__flecha--abierta]=\"estaExpandido(clave)\"\n nombre=\"chevron_right\"\n />\n }\n </button>\n } @else {\n <a\n class=\"td-sidebar__enlace\"\n [routerLink]=\"item.ruta || '/'\"\n routerLinkActive=\"td-sidebar__enlace--ruta-activa\"\n [routerLinkActiveOptions]=\"{ exact: item.ruta === '/' }\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"seleccionarItem(item, nivel)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n }\n </a>\n }\n\n @if (abiertoInterno() && tieneHijos && estaExpandido(clave)) {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{\n items: item.subMenus,\n nivel: nivel + 1,\n padre: clave\n }\"\n />\n }\n </li>\n }\n </ul>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nlet tabSequence = 0;\n\n@Component({\n selector: 'td-tab',\n template: `\n <ng-template>\n <ng-content />\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTab {\n readonly generatedId = `td-tab-${++tabSequence}`;\n\n @Input() id = '';\n @Input() label = 'Tab';\n @Input() icon = '';\n @Input() disabled = false;\n @Input() badge: string | number | null = null;\n\n @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<unknown>;\n\n get resolvedId(): string {\n return this.id || this.generatedId;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TdIcon } from '../iconos';\nimport { TdTab } from './td-tab';\n\nexport type TdTabsVariant = 'linea' | 'pastilla' | 'contenida';\nexport type TdTabsAlignment = 'inicio' | 'centro' | 'fin';\n\n@Component({\n selector: 'td-tabs',\n imports: [NgTemplateOutlet, TdIcon],\n template: `\n <section\n class=\"td-tabs\"\n [class.td-tabs--dark]=\"dark\"\n [class.td-tabs--stretch]=\"stretch\"\n [class]=\"'td-tabs td-tabs--' + variant + ' td-tabs--align-' + alignment +\n (dark ? ' td-tabs--dark' : '') + (stretch ? ' td-tabs--stretch' : '')\"\n >\n <div\n #tabList\n class=\"td-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n (keydown)=\"handleKeydown($event)\"\n >\n @for (tab of tabs; track tab.resolvedId; let index = $index) {\n <button\n #tabButton\n type=\"button\"\n class=\"td-tabs__tab\"\n role=\"tab\"\n [id]=\"tabId(tab)\"\n [class.td-tabs__tab--active]=\"index === activeIndex\"\n [disabled]=\"tab.disabled\"\n [attr.tabindex]=\"index === activeIndex ? 0 : -1\"\n [attr.aria-selected]=\"index === activeIndex\"\n [attr.aria-controls]=\"panelId(tab)\"\n (click)=\"select(index)\"\n >\n @if (tab.icon) {\n <td-icon [nombre]=\"tab.icon\" />\n }\n <span>{{ tab.label }}</span>\n @if (tab.badge !== null) {\n <small>{{ tab.badge }}</small>\n }\n </button>\n }\n </div>\n\n @if (activeTab; as tab) {\n <div\n class=\"td-tabs__panel\"\n role=\"tabpanel\"\n [id]=\"panelId(tab)\"\n [attr.aria-labelledby]=\"tabId(tab)\"\n [attr.tabindex]=\"panelFocusable ? 0 : null\"\n >\n <ng-container [ngTemplateOutlet]=\"tab.content\" />\n </div>\n }\n </section>\n `,\n styleUrl: './td-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTabs implements AfterContentInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private tabsChange?: Subscription;\n private requestedIndex = 0;\n\n @ContentChildren(TdTab) private tabQuery!: QueryList<TdTab>;\n @ViewChild('tabList') private tabList?: ElementRef<HTMLDivElement>;\n @ViewChildren('tabButton') private tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n @Input()\n set selectedIndex(value: number) {\n this.requestedIndex = Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n if (this.tabQuery) this.applyRequestedIndex();\n }\n get selectedIndex(): number {\n return this.activeIndex;\n }\n\n @Input() variant: TdTabsVariant = 'linea';\n @Input() alignment: TdTabsAlignment = 'inicio';\n @Input() stretch = false;\n @Input() dark = false;\n @Input() ariaLabel = 'Pestañas';\n @Input() panelFocusable = false;\n\n @Output() readonly selectedIndexChange = new EventEmitter<number>();\n @Output() readonly tabChange = new EventEmitter<TdTab>();\n\n protected tabs: readonly TdTab[] = [];\n protected activeIndex = 0;\n\n protected get activeTab(): TdTab | null {\n return this.tabs[this.activeIndex] ?? null;\n }\n\n ngAfterContentInit(): void {\n this.syncTabs();\n this.tabsChange = this.tabQuery.changes.subscribe(() => this.syncTabs());\n }\n\n ngOnDestroy(): void {\n this.tabsChange?.unsubscribe();\n }\n\n protected select(index: number, focus = false): void {\n const tab = this.tabs[index];\n if (!tab || tab.disabled || index === this.activeIndex) {\n if (focus && tab && !tab.disabled) this.focusButton(index);\n return;\n }\n\n this.activeIndex = index;\n this.requestedIndex = index;\n this.selectedIndexChange.emit(index);\n this.tabChange.emit(tab);\n this.cdr.markForCheck();\n queueMicrotask(() => {\n this.ensureTabVisible(index, focus ? 'auto' : 'smooth');\n if (focus) this.focusButton(index);\n });\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n const horizontalKeys = ['ArrowLeft', 'ArrowRight'];\n if (!horizontalKeys.includes(event.key) && !['Home', 'End'].includes(event.key)) return;\n\n event.preventDefault();\n if (event.key === 'Home') {\n this.select(this.firstEnabledIndex(), true);\n return;\n }\n if (event.key === 'End') {\n this.select(this.lastEnabledIndex(), true);\n return;\n }\n this.select(this.nextEnabledIndex(event.key === 'ArrowRight' ? 1 : -1), true);\n }\n\n protected tabId(tab: TdTab): string {\n return `${tab.resolvedId}-trigger`;\n }\n\n protected panelId(tab: TdTab): string {\n return `${tab.resolvedId}-panel`;\n }\n\n private syncTabs(): void {\n this.tabs = this.tabQuery.toArray();\n this.applyRequestedIndex();\n this.cdr.markForCheck();\n queueMicrotask(() => this.ensureTabVisible(this.activeIndex, 'auto'));\n }\n\n private applyRequestedIndex(): void {\n if (!this.tabs.length) {\n this.activeIndex = 0;\n return;\n }\n\n const requested = Math.min(this.requestedIndex, this.tabs.length - 1);\n if (!this.tabs[requested]?.disabled) {\n this.activeIndex = requested;\n return;\n }\n\n const firstEnabled = this.firstEnabledIndex();\n this.activeIndex = firstEnabled >= 0 ? firstEnabled : 0;\n }\n\n private nextEnabledIndex(direction: number): number {\n if (!this.tabs.length) return 0;\n let next = this.activeIndex;\n for (let index = 0; index < this.tabs.length; index++) {\n next = (next + direction + this.tabs.length) % this.tabs.length;\n if (!this.tabs[next]?.disabled) return next;\n }\n return this.activeIndex;\n }\n\n private firstEnabledIndex(): number {\n return this.tabs.findIndex((tab) => !tab.disabled);\n }\n\n private lastEnabledIndex(): number {\n for (let index = this.tabs.length - 1; index >= 0; index--) {\n if (!this.tabs[index]?.disabled) return index;\n }\n return this.activeIndex;\n }\n\n private focusButton(index: number): void {\n this.tabButtons.get(index)?.nativeElement.focus();\n }\n\n private ensureTabVisible(index: number, behavior: ScrollBehavior): void {\n const list = this.tabList?.nativeElement;\n const button = this.tabButtons?.get(index)?.nativeElement;\n if (!list || !button || list.scrollWidth <= list.clientWidth) return;\n\n const padding = 8;\n const visibleStart = list.scrollLeft + padding;\n const visibleEnd = list.scrollLeft + list.clientWidth - padding;\n const tabStart = button.offsetLeft;\n const tabEnd = tabStart + button.offsetWidth;\n\n if (tabStart < visibleStart) {\n list.scrollTo({ left: Math.max(0, tabStart - padding), behavior });\n } else if (tabEnd > visibleEnd) {\n list.scrollTo({\n left: tabEnd - list.clientWidth + padding,\n behavior,\n });\n }\n }\n}\n","export type TdThemeMode = 'light' | 'dark' | 'system';\n\nexport interface TdThemePaletteColor {\n name: string;\n cssVariable: string;\n value: string;\n usage: string;\n}\n\nexport const TD_THEME_LIGHT_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#3157A4', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#254680', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#EAF0FB', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#16784A', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#A8660B', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#B93A3A', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#2563A8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#FFFFFF', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#F6F8FB', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#EDF1F6', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#DDE3EE', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#C8D1DF', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#202B3D', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#66758B', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 18px 46px ...', usage: 'Floating panels and overlays.' },\n];\n\nexport const TD_THEME_DARK_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#8AA7E6', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#A8BDF0', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#1F2B45', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#56C28D', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#E2A84D', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#F07878', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#79A9E8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#181B22', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#20242D', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#272D38', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#343B49', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#465164', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#EEF2F8', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#A7B0BE', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 20px 54px ...', usage: 'Floating panels and overlays.' },\n];\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { TdThemeMode } from './td-theme.model';\n\nconst THEME_CLASS_LIGHT = 'td-theme-light';\nconst THEME_CLASS_DARK = 'td-theme-dark';\n\n@Injectable({ providedIn: 'root' })\nexport class TdThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly systemDark = signal(this.readSystemPreference());\n readonly mode = signal<TdThemeMode>('light');\n readonly isDark = computed(() =>\n this.mode() === 'dark' || (this.mode() === 'system' && this.systemDark())\n );\n\n constructor() {\n this.listenSystemPreference();\n effect(() => this.applyThemeClass(this.isDark(), this.mode()));\n }\n\n setMode(mode: TdThemeMode): void {\n this.mode.set(mode);\n }\n\n toggle(): void {\n this.mode.set(this.isDark() ? 'light' : 'dark');\n }\n\n private applyThemeClass(isDark: boolean, mode: TdThemeMode): void {\n const element = this.document.documentElement;\n element.classList.toggle(THEME_CLASS_DARK, isDark);\n element.classList.toggle(THEME_CLASS_LIGHT, !isDark);\n element.dataset['tdTheme'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n\n private listenSystemPreference(): void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const query = window.matchMedia('(prefers-color-scheme: dark)');\n const listener = (event: MediaQueryListEvent): void => this.systemDark.set(event.matches);\n query.addEventListener?.('change', listener);\n }\n}\n","/*\n * Public API Surface of telcomdev-ui\n */\n\nexport * from './lib/telcomdev-ui';\nexport * from './lib/alerta';\nexport * from './lib/button';\nexport * from './lib/checkbox';\nexport * from './lib/data-table';\nexport * from './lib/date-picker';\nexport * from './lib/dialog';\nexport * from './lib/footer';\nexport * from './lib/form-control';\nexport * from './lib/file-viewer';\nexport * from './lib/header';\nexport * from './lib/iconos';\nexport * from './lib/input';\nexport * from './lib/menu';\nexport * from './lib/select';\nexport * from './lib/sidebar';\nexport * from './lib/tabs';\nexport * from './lib/theme';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}