Un motor de calendario ligero y extensible construido con Preact para renderizar vistas y eventos de forma dinámica.
- Ligero: Construido con Preact (~3KB)
- Modular: Arquitectura basada en hooks y contexto
- Extensible: Vistas dinámicas y eventos personalizables
- Performante: Memoización optimizada y lazy loading
- Themeable: Sistema de temas dark/light incluido
npm install calooprjsimport { h, render } from 'preact';
import { CalendarApp } from 'calooprjs';
const App = () => (
<CalendarApp
initialConfig={{
calendar: { activeView: 'month' },
localization: { locale: 'es-MX' },
}}
/>
);
render(<App />, document.getElementById('app'));useCalendarState- Manejo de estado global del calendariouseCalendarDate- Controlador de fechas y navegaciónuseCalendarActions- Acciones centralizadas (eventos, vistas, UI)useLazyViews- Carga dinámica de componentes de vista
CalendarViewContext- Provider global con estado memoizado y acciones optimizadas
- Month View: Vista mensual completa
- Week View: Vista semanal (próximamente)
- Day View: Vista diaria (próximamente)
/* Variables CSS personalizables */
:root {
--calendar-primary: #007bff;
--calendar-background: #ffffff;
--calendar-text: #333333;
}
/* Temas incluidos */
[data-theme='dark'] {
/* ... */
}
[data-theme='light'] {
/* ... */
}# Instalar dependencias
npm install
# Desarrollo con hot reload
npm run dev
# Build para producción
npm run build
# Limpiar dist
npm run cleansrc/
├── components/ # Componentes UI
│ ├── common/ # Componentes base
│ ├── views/ # Vistas del calendario
│ └── viewsMonth/ # Componentes específicos de vista mensual
├── context/ # Context providers
├── hooks/ # Custom hooks
├── loopr/ # Utilidades del motor del calendario
│ ├── common/ # Días, meses, semanas
│ ├── helpers/ # Constructores de fechas
│ └── utils/ # Utilidades de fecha e intervalo
├── css/ # Estilos modulares
└── utils/ # Configuración y helpers
<CalendarApp
initialConfig={{
calendar: {
activeView: 'month', // 'month' | 'week' | 'day'
weekStartsVisible: true,
showWeekNumbers: false,
},
localization: {
locale: 'es-MX', // Locale del calendario
timezone: 'America/Tijuana', // Zona horaria
firstDayOfWeek: 0, // 0 = Domingo, 1 = Lunes
},
events: {
activeEvents: [], // Array de eventos
},
ui: {
theme: 'light', // 'light' | 'dark'
isLoading: false,
},
}}
/>const {
calendar, // Estado del calendario
currentDate, // Fecha actual
dateController, // Navegación de fechas
events, // Estado de eventos
ui, // Estado de UI
actions, // Acciones disponibles
} = useCalendarViewContext();ISC © Bert0h-dev
Repositorio: github.com/bert0h-dev/CaLooprJS