Widget de Calendario
Widget de calendario interactivo con gestión de eventos, selección de fechas y múltiples modos de vista para programación y planificación.
Diseño Responsivo
Sí
Soporte para Modo Oscuro
No
líneas
1233
Compatibilidad del Navegador
Chrome · Firefox · Safari · Edge
Vista Previa en Vivo
Interactúa con el componente sin salir de la página.
HTML
162
líneas
CSS
634
líneas
JavaScript
437
líneas
<div class="calendar-container">
<div class="calendar-header">
<h1 class="calendar-title">Widget de Calendario Interactivo</h1>
<p class="calendar-subtitle">Calendario completo con gestión de eventos y múltiples modos de vista</p>
</div>
<div class="calendar-widget">
<div class="calendar-controls">
<div class="calendar-nav">
<button class="nav-btn" id="prevMonth">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
</svg>
</button>
<div class="current-month">
<h2 id="currentMonth">Enero 2025</h2>
<button class="today-btn" id="todayBtn">Hoy</button>
</div>
<button class="nav-btn" id="nextMonth">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
</svg>
</button>
</div>
<div class="view-controls">
<div class="view-buttons">
<button class="view-btn active" data-view="month">Mes</button>
<button class="view-btn" data-view="week">Semana</button>
<button class="view-btn" data-view="day">Día</button>
</div>
<button class="add-event-btn" id="addEventBtn">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
</svg>
Agregar Evento
</button>
</div>
</div>
<div class="calendar-main">
<div class="calendar-grid" id="calendarGrid">
<div class="weekdays">
<div class="weekday">Dom</div>
<div class="weekday">Lun</div>
<div class="weekday">Mar</div>
<div class="weekday">Mié</div>
<div class="weekday">Jue</div>
<div class="weekday">Vie</div>
<div class="weekday">Sáb</div>
</div>
<div class="calendar-days" id="calendarDays">
<!-- Days will be generated by JavaScript -->
</div>
</div>
<div class="calendar-sidebar">
<div class="mini-calendar">
<h3>Navegación Rápida</h3>
<div class="mini-months" id="miniMonths">
<!-- Mini months will be generated -->
</div>
</div>
<div class="upcoming-events">
<h3>Próximos Eventos</h3>
<div class="events-list" id="eventsList">
<!-- Events will be populated -->
</div>
</div>
<div class="calendar-stats">
<h3>Estadísticas</h3>
<div class="stats-grid">
<div class="stat-item">
<span class="stat-number" id="totalEvents">0</span>
<span class="stat-label">Total Eventos</span>
</div>
<div class="stat-item">
<span class="stat-number" id="thisMonth">0</span>
<span class="stat-label">Este Mes</span>
</div>
<div class="stat-item">
<span class="stat-number" id="todayEvents">0</span>
<span class="stat-label">Hoy</span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Event Modal -->
<div class="modal-overlay" id="eventModal">
<div class="modal-content">
<div class="modal-header">
<h3 id="modalTitle">Agregar Nuevo Evento</h3>
<button class="modal-close" id="modalClose">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
</svg>
</button>
</div>
<form class="event-form" id="eventForm">
<div class="form-group">
<label for="eventTitle">Título del Evento</label>
<input type="text" id="eventTitle" required placeholder="Ingresa el título del evento">
</div>
<div class="form-row">
<div class="form-group">
<label for="eventDate">Fecha</label>
<input type="date" id="eventDate" required>
</div>
<div class="form-group">
<label for="eventTime">Hora</label>
<input type="time" id="eventTime">
</div>
</div>
<div class="form-group">
<label for="eventDescription">Descripción</label>
<textarea id="eventDescription" placeholder="Descripción del evento (opcional)"></textarea>
</div>
<div class="form-row">
<div class="form-group">
<label for="eventCategory">Categoría</label>
<select id="eventCategory">
<option value="work">Trabajo</option>
<option value="personal">Personal</option>
<option value="meeting">Reunión</option>
<option value="reminder">Recordatorio</option>
<option value="holiday">Feriado</option>
</select>
</div>
<div class="form-group">
<label for="eventPriority">Prioridad</label>
<select id="eventPriority">
<option value="low">Baja</option>
<option value="medium" selected>Media</option>
<option value="high">Alta</option>
</select>
</div>
</div>
<div class="form-actions">
<button type="button" class="btn-secondary" id="cancelBtn">Cancelar</button>
<button type="submit" class="btn-primary" id="saveBtn">Guardar Evento</button>
<button type="button" class="btn-danger" id="deleteBtn" style="display: none;">Eliminar</button>
</div>
</form>
</div>
</div>
</div>
Compatibilidad del Navegador
Chrome
≥ 60
Firefox
≥ 55
Safari
≥ 10
Edge
≥ 15