{t('nav.photos', 'Photos')}
(tab = 'moments')} > {t('photos.tab_moments', 'Moments')}
(tab = 'places')} > {t('photos.tab_places', 'Places')}
{#if peopleAvailable}
(tab = 'people')} > {t('photos.tab_people', 'People')}
{/if}
{#if tab === 'moments'}
{#each MODES as m (m)}
setGroupMode(m)}> {t(`photos.${m}`, m)}
{/each}
setLayoutMode('square')}>
setLayoutMode('justified')}>
{#if selected.size > 0}
{t('files.selected_count', { n: selected.size }, '{{n}} selected')}
{t('common.download', 'Download')}
selected.clear()}>{t('common.clear', 'Clear')}
{t('common.delete', 'Delete')}
{/if} {#if error}
{error}
{:else if items.length === 0 && exhausted}
{:else}
{#if photoRows.length}
{#snippet row(r)} {#if r.kind === 'header'}
{r.label}
{r.count}
{:else}
{#each r.tiles as cell (cell.file.id)} {@render tile(cell.file, `width:${cell.w}px;height:${cell.h}px`)} {/each}
{/if} {/snippet}
{/if}
{/if}
{#if loading}
{t('common.loading', 'Loading…')}
{/if}
{:else if tab === 'places'}
{:else if tab === 'people'}
{/if} {#snippet tile(photo: PhotoItem, sizeStyle?: string)}
onTileClick(photo)}> {#if videoThumbs[photo.id]}
{:else}
generateVideoThumb(photo) : undefined} /> {/if} {#if isVideo(photo)}
{/if}
selected.toggle(photo.id)} >
{/snippet}