{#if $mobile}
showSidebar.set(!$showSidebar)} >
{/if}
{headerText}
navigate(-1)} aria-label="Previous">
navigate(1)} aria-label="Next">
{$i18n.t('Today')}
dispatch('viewChange', view)} triggerClass="relative flex items-center gap-1.5 px-3 py-1.5 bg-gray-50 dark:bg-gray-850 rounded-xl text-xs" contentClass="rounded-2xl w-40 p-1 border border-gray-100 dark:border-gray-800 bg-white dark:bg-gray-850 dark:text-white shadow-lg" align="end" >
{selectedLabel}
{item.label}
dispatch('newEvent')} >
{#if view === 'month'}
{#each DAY_NAMES as day}
{$i18n.t(day)}
{/each}
{#each monthDays as day, i} {@const dayKey = new Date(day.getFullYear(), day.getMonth(), day.getDate()).getTime().toString()} {@const dayEvents = eventsByDay[dayKey] || []} {@const col = i % 7} {@const row = Math.floor(i / 7)}
handleDayClick(day)} >
{day.getDate()}
{#each dayEvents.slice(0, 3) as evt (evt.instance_id || evt.id)}
handleEventClick(evt)} /> {/each} {#if dayEvents.length > 3}
goToDayView(day)} > +{dayEvents.length - 3} more
{/if}
{/each}
{:else if view === 'week'}
{#each weekDays as day}
{DAY_NAMES[day.getDay()]}
{day.getDate()}
{/each}
{#each hours as hour}
{hour > 0 ? formatHour(hour) : ''}
{#each weekDays as day} {@const hourEvents = getEventsForHour(day, hour, filteredEvents)}
handleHourClick(day, hour)} >
{#each hourEvents.slice(0, 3) as evt (evt.instance_id || evt.id)}
handleEventClick(evt)} /> {/each} {#if hourEvents.length > 3}
goToDayView(day)} > +{hourEvents.length - 3} more
{/if}
{/each}
{/each}
{:else}
{#each hours as hour} {@const hourEvents = getEventsForHour(currentDate, hour, filteredEvents)}
{hour > 0 ? formatHour(hour) : ''}
handleHourClick(currentDate, hour)} >
{#each hourEvents as evt (evt.instance_id || evt.id)}
handleEventClick(evt)} /> {/each}
{/each}
{/if}