{data.board.title} {#if showSettings} (showSettings = false)} onsave={(updated) => { data.board.title = updated.title; data.board.visibility = updated.visibility; data.board.description = updated.description; data.board.background = updated.background; data.board.categoryId = updated.categoryId; showSettings = false; }} /> {/if} {#if selectedCard} c.cards.some((card: any) => card.id === selectedCard.id))?.id ?? archivedCards.find((c: any) => c.id === selectedCard.id)?.columnId} canEdit={data.canEdit} boardMembers={data.board.members} currentUserId={data.user?.id || ''} cardPrefix={data.board.cardPrefix} onclose={() => (selectedCard = null)} ondelete={(cardId) => { const col = columns.find((c: any) => c.cards.some((card: any) => card.id === cardId)); if (col) deleteCard(col.id, cardId); }} onupdate={handleCardUpdate} oncopied={(newCard) => { const col = columns.find((c: any) => c.id === newCard.columnId); if (col) col.cards = [...col.cards, newCard]; toast.success('Card copied'); }} /> {/if}

{data.board.title}

{data.board.visibility === 'PUBLIC' ? 'Public' : 'Private'} {data.board.members.length} {data.board.members.length === 1 ? 'member' : 'members'} {#if viewingUsers.filter((u) => u.id !== data.user?.id).length > 0}
Also here:
{#each viewingUsers.filter((u) => u.id !== data.user?.id) as viewer} {/each}
{/if} Export {#if data.canEdit} {/if}
(activeFilters = f)} />
{#each columns as column (column.id)} {@const colSort = columnSorts[column.id] ?? null} {@const visibleCards = sortCards(filterCards(column.cards), colSort)}
{#if data.canEdit && editingColumnId !== column.id} {/if} {#if editingColumnId === column.id}
{ e.preventDefault(); renameColumn(column.id); }} class="flex-1 flex gap-1" > renameColumn(column.id)} />
{:else} {/if} (columnSorts[column.id] = sort)} /> {#if data.canEdit} {/if}
handleCardSort(column.id, e)} onfinalize={(e) => handleCardSort(column.id, e)} > {#each visibleCards as card (card.id)} {@const progress = getChecklistProgress(card)} {@const dueUrgency = getDueUrgency(card.dueDate)}
{ if (selectMode) { const next = new Set(selectedCardIds); if (next.has(card.id)) next.delete(card.id); else next.add(card.id); selectedCardIds = next; } else { selectedCard = card; } }} role="button" tabindex="0" onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); selectedCard = card; } }} > {#if data.canEdit}
{ e.stopPropagation(); const next = new Set(selectedCardIds); if (next.has(card.id)) next.delete(card.id); else next.add(card.id); selectedCardIds = next; }} >
{#if selectedCardIds.has(card.id)} {/if}
{/if} {#if card.labels && card.labels.length > 0}
{#each card.labels as label} {label.tag.name} {/each}
{/if} {#if data.board.cardPrefix && card.cardNumber} {data.board.cardPrefix}-{card.cardNumber} {/if} {card.title} {#if card.dueDate || card._count?.comments > 0 || card._count?.attachments > 0 || progress}
{#if card.dueDate} {formatDueDate(card.dueDate)} {/if} {#if progress} {progress.done}/{progress.total} {/if} {#if card._count?.comments > 0} {card._count.comments} {/if} {#if card._count?.attachments > 0} {card._count.attachments} {/if}
{/if} {#if card.assignees && card.assignees.length > 0}
{#each card.assignees.slice(0, 3) as assignee} {/each} {#if card.assignees.length > 3}
+{card.assignees.length - 3}
{/if}
{/if}
{/each}
{#if showArchivedCards} {@const archivedInCol = getArchivedCardsForColumn(column.id)} {#if archivedInCol.length > 0}
Archived
{#each archivedInCol as card} {/each}
{/if} {/if} {#if data.canEdit} {#if addingCardColumnId === column.id}
{ e.preventDefault(); addCard(column.id); }} >
{:else} {/if} {/if}
{/each} {#if data.canEdit}
{#if showAddColumn}
{ e.preventDefault(); addColumn(); }}> { if (e.key === 'Escape') { showAddColumn = false; addingColumnTitle = ''; } }} />
{:else} {/if}
{/if}
{#if showActivity}

Activity

{/if}
{#if selectMode && selectedCardIds.size > 0} { selectedCardIds = new Set(); window.location.reload(); }} oncancel={() => { selectedCardIds = new Set(); }} /> {/if}