{#if form?.error}

{form.error}

{/if}

Templates — Drag to assign

{#each templates as t}
handleDragStart(e, t.id)}>
openEditTemplate(t)} role="button" tabindex="0"> {t.name} {t.defaultFrequency} {t.defaultType}
{t.defaultType === 'money' ? `£${Number(t.defaultValue).toFixed(2)}` : t.defaultValue}
{/each} {#if templates.length === 0}

No templates yet

{/if}
{#each members as m}
handleDrop(e, m.id)} >

{m.name}

{#if accordionState[m.id]?.todos ?? true}
{#each sortedTodosForMember(m.id) as a} {@const completed = isTodoCompleted(a.id)} {@const urgency = todoUrgency(a)}
!completed && openEdit(a)} role="button" tabindex={completed ? -1 : 0} >
{a.customName || 'Todo'}
{#if a.type === 'emoji'} 🎯 emoji {:else} {a.value} pts {/if} {#if a.completeBy} due {formatHumanDate(a.completeBy)} {/if}
{#if completed} ✅ TBC completed {:else} {/if}
{/each}
{/if}
{#if accordionState[m.id]?.chores ?? true}
{#each assignedForMember(m.id) as a} {@const tName = templateName(a.templateId)}
openEdit(a)} role="button" tabindex="0">
{a.customName || tName} {a.frequency} {a.type} {#if seasonFilter !== 'all' && isGlobalChore(a)} Add to {/if}
{a.type === 'money' ? `£${Number(a.value).toFixed(2)}` : `${a.value} pts`}
{/each} {#if assignedForMember(m.id).length === 0}

Drop a chore here

{/if}
{/if}
{/each} {#if members.length < 3} {#each Array(3 - members.length) as _}
{/each} {/if}
{#if showCreateModal}
(showCreateModal = false)} role="presentation">
{/if} {#if showEditTemplateModal && editingTemplate} {/if} {#if showEditModal && editingAssignment} {/if} {#if showTodoModal && todoMemberId}
(showTodoModal = false)} role="presentation">
{/if}