row.key}
bufferSize={600}
startMargin={headerHeight}
onscroll={handleScroll}
onscrollend={handleScrollEnd}
as="ul"
item="li"
>
{#snippet children(
row,
)}
{#if row.kind === "section"}
{#snippet actions()}
{#if row.key === "browse"}
{/if}
{/snippet}
{:else if row.kind === "offline-status"}
{#if auth.authFailed}
{t("offline.auth_failed_notice")}
{:else}
{t(
effectiveAutoSyncMode() === "none"
? "offline.offline_notice"
: "offline.offline_notice_auto_sync",
)}
{/if}
{:else if row.kind === "download-status"}
{t("offline.download_progress", {
current: offlineManager.downloadProgress.current,
total: offlineManager.downloadProgress.total,
})}
{:else if row.kind === "item"}
{@const state = nodeStates[row.key]}
activateNode(row)}
onAdd={(asNext) => addNode(row, asNext)}
onMenu={(nextMenu) => (menu = nextMenu)}
onUpdate={row.onUpdate}
onDelete={row.onDelete}
entryIndex={pendingEntryIndex(row.key)}
entryGen={searchGen}
onEntryAnimationEnd={finishEntryAnimation}
/>
{/if}
{/snippet}