Una aplicación web para ayudarte a crear, seguir y gestionar tus hábitos diarios.
Ejecuta la aplicación en modo de desarrollo.
Abre http://localhost:3000 para verla en el navegador.
La página se recargará si haces modificaciones.
También verás cualquier error de lint en la consola.
- React: Biblioteca de JavaScript para construir interfaces de usuario.
- TypeScript: Superset de JavaScript que añade tipado estático.
- Tailwind CSS: Framework de CSS utility-first para un diseño rápido.
- Flowbite React: Biblioteca de componentes de interfaz de usuario construida sobre Tailwind CSS.
Además de las dependencias base de Create React App con la plantilla de TypeScript, se instalaron las siguientes:
npm install flowbite flowbite-react npm install -D tailwindcss postcss autoprefixer @tailwindcss/postcss
flowbiteyflowbite-react: Para los componentes de la interfaz de usuario como modales, selects, etc.tailwindcss,postcss,autoprefixer,@tailwindcss/postcss: Para utilizar Tailwind CSS en el proyecto.
- Entrada de nombre: Se muestra un campo de texto (
<input type="text" />) en el componenteAddHabitpara que el usuario ingrese el nombre del nuevo hábito. El valor está controlado por el estadoname, y los cambios se reflejan en este estado mediante el eventoonChange. - Selección de color: Se muestran 5 botones circulares, cada uno con un color diferente, generados al mapear el array
colorsenAddHabit. Al hacer clic en un botón, se actualiza el estadocolordel componente. - Botón "Añadir Hábito": Un botón
<button type="submit">Añadir Hábito</button>dentro del formulario enAddHabit. - Formulario y envío: El componente
AddHabitutiliza un formulario (<form onSubmit={handleSubmit}>). Al hacer clic en el botón "Añadir Hábito", se ejecuta la funciónhandleSubmit, que previene la recarga de la página, crea un nuevo objeto de hábito con los datos ingresados y llama a la funciónonAddproporcionada por el componente padre (App).
- Lista de hábitos en formato de tarjeta: El componente
HabitList(aún no detallado) recibe la lista dehabitsdesde el estado deApp.tsxy los renderiza, probablemente utilizando elementosdivcon estilos para simular tarjetas. - Cada hábito muestra:
- Nombre: La propiedad
namede cada objetohabitse muestra en la interfaz deHabitList. - Color: La propiedad
colorse utiliza para aplicar un estilo visual al hábito enHabitList. - Casillas de verificación semanales (Lun–Dom):
HabitListrenderiza una serie de casillas de verificación (o elementos similares) correspondientes a los días de la semana, vinculadas al arraydaysde cada hábito. - Barra de progreso: (Implementación pendiente) Se calcularía el porcentaje de días completados basado en el array
daysy se mostraría visualmente. - Texto de completado: (Implementación pendiente) Mostraría un texto como "X/7 completados" basado en el estado de los días.
- Nombre: La propiedad
- Casillas/Toggles semanales:
HabitListrenderiza estos elementos, cuyo estado se vincula al arraydaysdel hábito. - Marcar días como completados: Al interactuar con estos elementos en
HabitList, se llama a la funciónonToggleDay(pasada desdeApp.tsx), que actualiza el arraydaysdel hábito correspondiente en el estado deApp.tsx. - Actualización automática del progreso y texto: Cuando el estado
habitsse actualiza, React re-renderizaHabitList, recalculando y mostrando el progreso actualizado.
- Editar nombre y color: Implementado con el componente
EditHabitModaly la lógica enApp.tsxpara abrir/cerrar el modal y guardar los cambios. - Opción de eliminar al pasar el ratón: (Implementación pendiente) Requeriría estilos CSS en
HabitList. - Confirmación antes de eliminar: (Implementación pendiente) Lógica en
HabitListpara mostrar una confirmación.
- Almacenar datos con
localStorage: EnApp.tsx, losuseEffectguardan y cargan la lista dehabitsy el estado del modo oscuro usandolocalStorage. - Persistir hábitos: Los hábitos se guardan automáticamente en
localStoragecada vez que la lista cambia.
- Botón para restablecer casillas: El botón "Reiniciar todos los días" en
App.tsxllama aresetAllDays, que actualiza el estado para marcar todos los días como no completados. - Persistir hábitos: Los hábitos reiniciados se guardan automáticamente en
localStorage.
- Indicador junto al nombre: (Implementación pendiente) Lógica en
HabitListpara verificar si todos los días de un hábito están marcados y mostrar un indicador.
- Layout mobile-first: Se han utilizado algunas clases de Tailwind CSS adaptables.
- Toggle de Modo Oscuro: El componente
DarkModeToggley el estadodarkModeenApp.tsxgestionan el cambio de tema aplicando la clasedarkal<html>. - Filtros y Ordenamiento: El componente
FilterSortpermite filtrar por nombre y ordenar por racha (la lógica de filtrado y ordenamiento se encuentra enApp.tsx).