Desarrollar una "Agenda de contactos" como aplicación web usando JavaScript puro y Pico.css para la presentación.
Important
El trabajo debe presentarse hasta el Lunes 8 de septiembre a la 21hs.
- Implementación sin frameworks: solo HTML, CSS (Pico.css) y JavaScript.
- La interfaz debe ser accesible.
- Evitar dependencias externas (salvo Pico.css por CDN).
- Mantener una estructura simple: un archivo HTML, un JS y un CSS.
- Implementar dos clases: Contacto y Agenda.
- Un Contacto contiene:
id,nombre,apellido,telefono,email. - La Agenda es una colección de
Contactoy administra las operaciones.
- Cabecera con:
- Campo de búsqueda (filtra por nombre, apellido, teléfono o email).
- Botón Agregar para abrir un diálogo de alta.
- Cuerpo con listado de tarjetas (cards) de contactos:
- Muestra todos los contactos o solo los que coinciden con el texto buscado.
- En cada tarjeta, el nombre y apellido deben destacarse.
- Cada tarjeta debe incluir dos iconos: Editar y Borrar.
- Agregar contacto:
- Al presionar "Agregar", se abre un diálogo con un formulario para cargar datos.
- Editar contacto:
- Al presionar el icono de Editar, se abre el mismo diálogo con los datos precargados.
- Borrar contacto:
- Al presionar el icono de Borrar, se elimina directamente el contacto (sin confirmación).
- Datos iniciales:
- Al cargar por primera vez, la aplicación debe mostrar 10 contactos de ejemplo.
- JS en módulo único o IIFE, sin dependencias.
- Uso de Pico.css por CDN para estilos base.
- El render del listado debe ser dinámico a partir de los datos actuales.
- La búsqueda debe ser insensible a mayúsculas y acentos (normalización de texto).
- Ordenamiento por apellido y luego nombre.
- Sin persistencia: los datos viven solo en memoria.
- El modelo y la lógica de negocio deben implementarse usando clases (
AgendayContacto), con métodos paraagregar,actualizaryborrar.
- La UI incluye: buscador, botón Agregar, listado de tarjetas y diálogo de alta/edición.
- Las tarjetas muestran nombre/apellido destacado y los datos de contacto (teléfono y email).
- Los iconos de Editar/Borrar funcionan y el borrado no pide confirmación.
- La búsqueda filtra en tiempo real, sin recargar la página.
- No hay persistencia: al recargar la página, vuelven a aparecer los 10 contactos de ejemplo.
- El código está organizado, legible y con nombres descriptivos.
- Usar un array en memoria para trabajar y sincronizarlo con
localStorage. - Normalizar texto para el filtro con
String.prototype.normalize('NFD')y remover diacríticos. - Para el diálogo, puede usarse
<dialog>nativo de HTML. - Para ordenar, usar
localeComparesobre los campos normalizados.
./tp2/ejercicio.html: página principal de la aplicación../tp2/ejercicio.js: lógica de la aplicación../tp2/ejercicio.css: estilos propios adicionales.
- Abrir el archivo
./tp2/ejercicio.htmlen un navegador moderno. - Opcionalmente, levantar un servidor HTTP local simple.
- Volver a
mainy actualizar el repo local (fetch/pull). - Actualizar el repositorio (fetch/pull).
- Crear una rama (TP2-{Legajo}).
- Implementar la solución en la carpeta correspondiente (
enunciados/tp2/). - Confirmar los cambios realizados (commit).
- Publicar los cambios en GitHub (push).
- Realizar el pull request hacia
maincon el título:TP2 - {Legajo} - {Nombre Apellido}.

