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

{#snippet eventChip(event, date, kind, extra = '', at = '')} {@const link = linkOf(event)} {@const label = t('cal.eventCannotMove', { name: event.summary, calendar: event.calendar_name || t('cal.title') })} {#if at}{at}{:else if timeOn(event, date)}{timeOn(event, date)}{/if} {event.summary} {/snippet} {#snippet taskChip(task, kind, extra = '', at = '', date = null)} {/snippet} {#if span === 'week'}
{#each grid as date (date.toISOString())}
{WEEKDAYS[(date.getDay() + 6) % 7]} {date.getDate()}
{/each}
{t('cal.allDay')}
{#each grid as date (date.toISOString())}
onDragOver(e, date)} ondragleave={() => (over = null)} ondrop={(e) => onDropAllDay(e, date)} > {#each untimedOn(date) as item (item.kind + item.ref.id)} {#if item.kind === 'event'} {@render eventChip(item.ref, date, 'event')} {:else} {@render taskChip(item.ref, 'chip')} {/if} {/each}
{/each}
{#each Array(hours.count) as _, i} {clock((hours.from + i) * 60)} {/each}
{#each grid as date (date.toISOString())}
onDragOver(e, date)} ondragleave={() => (over = null)} ondrop={(e) => onDropAt(e, date)} > {#each Array(hours.count) as _, i}
{/each} {#each packed(timedOn(date)) as item (item.kind + item.ref.id)} {#if item.kind === 'event'} {@render eventChip(item.ref, date, 'tevent', place(item))} {:else} {@render taskChip(item.ref, 'tevent task', place(item), clock(item.from), date)} {/if} {/each}
{/each}
{:else}
{#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)} {@render eventChip(event, date, 'event')} {/each} {#each tasks as task (task.id)} {@render taskChip(task, 'chip')} {/each} {#if hidden > 0} {t('view.more', { n: hidden })} {/if}
{/each}
{/if}