{heading} {#if weekNumber}{t('view.weekNumber', { n: weekNumber })}{/if}

{#each grid as date (date.toISOString())} {@const dayEvents = eventsOn(date)} {@const tasks = tasksOn(date).slice(0, Math.max(0, chipLimit - dayEvents.length))} {@const hidden = tasksOn(date).length - tasks.length + Math.max(0, dayEvents.length - chipLimit)} {@const outside = span !== 'week' && date.getMonth() !== cursor.getMonth()}
onDragOver(e, date)} ondragleave={() => (over = null)} ondrop={(e) => onDrop(e, date)} > {#if span === 'week'} {WEEKDAYS[(date.getDay() + 6) % 7]} {/if} {date.getDate()} {#each dayEvents.slice(0, chipLimit) as event (event.id)} {@const link = linkOf(event)} {@const label = t('cal.eventCannotMove', { name: event.summary, calendar: event.calendar_name || t('cal.title') })} {#if timeOn(event, date)}{timeOn(event, date)}{/if} {event.summary} {/each} {#each tasks as task (task.id)} {/each} {#if hidden > 0} {t('view.more', { n: hidden })} {/if}
{/each}