{#if prioMenuFor || dueMenuFor} {/if}
{ if (e.key === 'Escape') taskQuery = ''; }} aria-label="Filter tasks by text" /> {#if !isAndroid}
{/if} {#if viewLayout === 'list'}
{#each [['due', 'Due'], ['priority', 'Priority'], ['note', 'Note']] as [v, label]} {/each}
{/if}
{#snippet taskRow(t: TaskItem, dragMode: boolean)}
{ if (!dragMode) return; draggedTask = t; if (e.dataTransfer) { e.dataTransfer.effectAllowed = 'move'; e.dataTransfer.setData('text/plain', rowKey(t)); } }} ondragend={() => { draggedTask = null; dragOverDate = null; }} >
onOpenTask(t)}>
{#if prioMenuFor === rowKey(t)} {/if} {t.text} {#if dueMenuFor === rowKey(t)}
e.stopPropagation()} onchange={(e) => { e.stopPropagation(); chooseDue(t, (e.target as HTMLInputElement).value || null); }} /> {#if t.due}{/if}
{/if}
{t.note_title}
{/snippet} {#if loading}
Loading...
{:else if viewLayout === 'calendar'}
{#each calDayNames as name}
{name}
{/each} {#each calDays() as cell} {#if cell.day === 0}
{:else} {@const cnt = (tasksByDate.get(cell.date) ?? []).length} {/if} {/each}
{agendaTitle(selectedDate)}
{#if selectedDayTasks.length === 0}
Nothing due.
{:else} {#each selectedDayTasks as t (rowKey(t))}{@render taskRow(t, true)}{/each} {/if}
{#if undatedTasks.length}
No due date ({undatedTasks.length})
{#each undatedTasks as t (rowKey(t))}{@render taskRow(t, true)}{/each}
{/if}
{:else if filtered.length === 0}
No tasks. Add - [ ] something to any note.{#if openCount === 0 && tasks.length}{' '}All done!{/if}
{:else}
{#each filtered as t (rowKey(t))}{@render taskRow(t, false)}{/each}
{/if}