{ if ((e.target as HTMLElement).closest('button')) return e.preventDefault() emptyCtx = { x: e.clientX - SIDEBAR_W, y: e.clientY - TITLEBAR_H } }} > {#if libraryState.error}
Could not load library
{libraryState.error}
{ loadLibrary(); loadCategories() }}>Retry
{:else}
libraryState.tab = t} onSearchChange={(q) => libraryState.filter.query = q} onSortChange={(mode) => libraryState.setTabSort(libraryState.tab, mode)} onSortDirToggle={() => libraryState.toggleTabSortDir(libraryState.tab)} onSortPanelToggle={() => sortPanelOpen = !sortPanelOpen} onStatusChange={(s) => libraryState.setTabStatus(libraryState.tab, s)} onFilterToggle={(f) => libraryState.toggleTabFilter(libraryState.tab, f)} onFiltersClear={() => libraryState.clearTabFilters(libraryState.tab)} onFilterPanelToggle={() => filterPanelOpen = !filterPanelOpen} onRefresh={startRefresh} onCancelRefresh={cancelRefresh} onOpenDownloadsFolder={openDownloadsFolder} onTabDragStart={onTabDragStart} onTabDragOver={onTabDragOver} onTabDragLeave={onTabDragLeave} onTabDrop={onTabDrop} onTabDragEnd={onTabDragEnd} /> {#if libraryState.refreshing && libraryState.refreshProgress.total > 0} {@const pct = Math.round((libraryState.refreshProgress.finished / libraryState.refreshProgress.total) * 100)}
{/if}
libraryState.selectAll(libraryState.filteredItems.map(m => m.id))} onExitSelect={() => libraryState.exitSelect()} onBulkRemove={onBulkRemove} onBulkMove={bulkMove} /> {/if}
{#if ctx}
ctx = null} /> {/if} {#if emptyCtx}
emptyCtx = null} /> {/if}