(suggestOpen = suggestions.length > 0)} onblur={() => setTimeout(() => (suggestOpen = false), 150)} placeholder={t('actions.search', 'Search files, folders...')} autocomplete="off" /> {#if searchQuery} {/if} {#if suggestOpen}
    {#each suggestions as s (s.kind + s.item.id)}
  • {/each}
{:else if suggestBusy}
  • {t('common.loading', 'Loading…')}
{/if}
{t('notifications.title', 'Notifications')} {#if ui.notifications.length > 0} {/if}
{#if ui.notifications.length === 0}
{t('notifications.empty', 'No notifications')}
{:else} {#each ui.notifications as n (n.id)}
{n.message}
{#if n.currentFile}
{n.currentFile}
{/if} {#if n.progress !== undefined}
{n.progress}% {#if n.total !== undefined} {t( 'upload.files_counter', { done: n.completed ?? 0, total: n.total }, `${n.completed ?? 0} / ${n.total} files` )} {/if}
{:else}
{formatTime(n.at)}
{/if}
{/each} {/if}
{#if session.user}
{@render avatar(true)}
{session.user.username || session.user.email}
{session.user.email}
{#if isAdmin}
{t('user_menu.admin', 'Admin')}
{/if}
{t('storage.title', 'Storage')}
{#if session.user.storage_quota_bytes > 0} {t( 'storage.used', { percentage: Math.round(storagePct), used: formatBytes(session.user.storage_used_bytes), total: formatBytes(session.user.storage_quota_bytes) }, '{{percentage}}% used ({{used}} / {{total}})' )} {:else} {formatBytes(session.user.storage_used_bytes)} {/if}
{/if}
{#if isAdmin} (menuOpen = false)} > {t('user_menu.admin_panel', 'Admin panel')} (menuOpen = false)} > {t('user_menu.manage_groups', 'Manage groups')} {/if} (menuOpen = false)} > {t('user_menu.profile', 'My profile')}
{t('settings.language', 'Language')}
{#if langOpen}
    {#each LANGUAGES as lang (lang.code)}
  • {/each}
{/if}
{t('user_menu.appearance', 'Appearance')}
{#each THEMES as th (th.mode)} {/each}
{@render children()}