{#if form?.error}

{form.error}

{/if}

Templates โ€” Drag to assign

{#each templates as t}
handleDragStart(e, t.id)} style="border-left-color:{outlineColor(t.color)}; background:{accentBg(t.color)}" >
{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}

{visibleTodosForMember(m.id).length} {#if accordionState[m.id]?.todos ?? true}
{#each visibleTodosForMember(m.id) as a} {@const completed = isTodoCompleted(a.id)} {@const expired = isTodoExpired(a)} {@const urgency = todoUrgency(a)}
!completed && !expired && openEdit(a)} role="button" tabindex={completed || expired ? -1 : 0} >
{a.customName || 'Todo'}
{#if a.type === 'emoji'} {a.emoji || '๐ŸŽ‰'} celebration {:else if a.type === 'money'} ยฃ{Number(a.value).toFixed(2)} cash {:else} {a.value} pts {/if} {#if a.completeBy} due {formatHumanDate(a.completeBy)} {/if}
{#if completed} {@html checkCircleIcon} TBC completed {:else if expired} EXPIRED {:else} {/if}
{/each}
{/if}
{assignedForMember(m.id).length} {#if accordionState[m.id]?.chores ?? true}
{#each assignedForMember(m.id) as a} {@const tName = templateName(a.templateId)}
openEdit(a)} role="button" tabindex="0" style="border-left-color:{outlineColor(a.color)}; background:{accentBg( a.color )}" >
{a.customName || tName} {a.frequency} {#each a.seasonIds || [] as sid} {/each} {#if (a.seasonIds || []).length === 0} All year {/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}
handleDrop(e, '')} >

Everyone

{sharedChoresFiltered().length} {#if accordionState.shared?.chores ?? true}
{#each sharedChoresFiltered() as a} {@const tName = templateName(a.templateId)}
openEdit(a)} role="button" tabindex="0" style="border-left-color:{outlineColor(a.color)}; background:{accentBg(a.color)}" >
{a.customName || tName} {a.frequency} {#each a.seasonIds || [] as sid} {/each} {#if (a.seasonIds || []).length === 0} All year {/if}
{a.type === 'money' ? `ยฃ${Number(a.value).toFixed(2)}` : `${a.value} pts`}
{:else}

Drop a chore here

{/each}
{/if}
{#if members.length < 3} {#each Array(3 - members.length) as _}
{/each} {/if}
{#snippet seasonPills(list: Season[] = [], selected: string[] = [], set: (v: string[]) => void)}
{#each list as s} {/each}
{/snippet} {#if assignModal}
{ if (e.target === e.currentTarget) { assignModal = null; assignStep = 1; } }} role="presentation" >
{/if} {#if showEditModal && editingAssignment}
{ if (e.target === e.currentTarget) closeEdit(); }} role="presentation" >
{/if} {#if showTodoModal && todoMemberId}
{ if (e.target === e.currentTarget) showTodoModal = false; }} role="presentation" >
{/if}