{#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}