diff --git a/web/src/lib/components/server-statistics/ServerStatisticsPanel.svelte b/web/src/lib/components/server-statistics/ServerStatisticsPanel.svelte index 6c188d3fea..4d66142e44 100644 --- a/web/src/lib/components/server-statistics/ServerStatisticsPanel.svelte +++ b/web/src/lib/components/server-statistics/ServerStatisticsPanel.svelte @@ -1,9 +1,21 @@ {#snippet row(viewName: string, stats: AssetStatsResponseDto)} - - {viewName} - {stats.images.toLocaleString($locale)} - {stats.videos.toLocaleString($locale)} - {stats.total.toLocaleString($locale)} - + + {viewName} + {stats.images.toLocaleString($locale)} + {stats.videos.toLocaleString($locale)} + {stats.total.toLocaleString($locale)} + {/snippet} -
-

{$t('photos_and_videos')}

-
- - - - - - - - - - - {@render row($t('timeline'), timelineStats)} - {@render row($t('favorites'), favoriteStats)} - {@render row($t('archive'), archiveStats)} - {@render row($t('trash'), trashStats)} - -
{$t('view_name')}{$t('photos')}{$t('videos')}{$t('total')}
-
+
+ {$t('photos_and_videos')} + + + {$t('view_name')} + {$t('photos')} + {$t('videos')} + {$t('total')} + + + {@render row($t('timeline'), timelineStats)} + {@render row($t('favorites'), favoriteStats)} + {@render row($t('archive'), archiveStats)} + {@render row($t('trash'), trashStats)} + +
-
-

{$t('albums')}

-
-
- - - - - - - - - - - - - -
{$t('owned')}{$t('shared')}
{albumStats.owned.toLocaleString($locale)}{albumStats.shared.toLocaleString($locale)}
-
+ {$t('albums')} + + + {$t('owned')} + {$t('shared')} + + + + {albumStats.owned.toLocaleString($locale)} + {albumStats.shared.toLocaleString($locale)} + + +
diff --git a/web/src/routes/admin/library-management/(list)/+layout.svelte b/web/src/routes/admin/library-management/(list)/+layout.svelte index 3f9374283f..a8fa49c38d 100644 --- a/web/src/routes/admin/library-management/(list)/+layout.svelte +++ b/web/src/routes/admin/library-management/(list)/+layout.svelte @@ -8,7 +8,17 @@ import { locale } from '$lib/stores/preferences.store'; import { getBytesWithUnit } from '$lib/utils/byte-units'; import { getLibrary, getLibraryStatistics, type LibraryResponseDto } from '@immich/sdk'; - import { Button, CommandPaletteDefaultProvider } from '@immich/ui'; + import { + Button, + CommandPaletteDefaultProvider, + Container, + Table, + TableBody, + TableCell, + TableHeader, + TableHeading, + TableRow, + } from '@immich/ui'; import type { Snippet } from 'svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; @@ -47,6 +57,15 @@ }; const { Create, ScanAll } = $derived(getLibrariesActions($t, libraries)); + + const classes = { + column1: 'w-4/12', + column2: 'w-4/12', + column3: 'w-2/12', + column4: 'w-2/12', + column5: 'w-2/12', + column6: 'w-2/12', + }; @@ -54,51 +73,35 @@ -
+
{#if libraries.length > 0} - - - - - - - - - - - - +
{$t('name')}{$t('owner')}{$t('photos')}{$t('videos')}{$t('size')}
+ + {$t('name')} + {$t('owner')} + {$t('photos')} + {$t('videos')} + {$t('size')} + + + {#each libraries as library (library.id + library.name)} {@const { photos, usage, videos } = statistics[library.id]} {@const [diskUsage, diskUsageUnit] = getBytesWithUnit(usage, 0)} - - - - - - - - - + + {/each} - -
{library.name} - {owners[library.id].name} - - {photos.toLocaleString($locale)} - - {videos.toLocaleString($locale)} - - {diskUsage} - {diskUsageUnit} - + + {library.name} + {owners[library.id].name} + {photos.toLocaleString($locale)} + {videos.toLocaleString($locale)} + {diskUsage} {diskUsageUnit} + -
+ + {:else} -
+
diff --git a/web/src/routes/admin/users/(list)/+layout.svelte b/web/src/routes/admin/users/(list)/+layout.svelte index 1979054014..206265acba 100644 --- a/web/src/routes/admin/users/(list)/+layout.svelte +++ b/web/src/routes/admin/users/(list)/+layout.svelte @@ -5,7 +5,18 @@ import { locale } from '$lib/stores/preferences.store'; import { getByteUnitString } from '$lib/utils/byte-units'; import { searchUsersAdmin, type UserAdminResponseDto } from '@immich/sdk'; - import { Button, CommandPaletteDefaultProvider, Container, Icon } from '@immich/ui'; + import { + Button, + CommandPaletteDefaultProvider, + Container, + Icon, + Table, + TableBody, + TableCell, + TableHeader, + TableHeading, + TableRow, + } from '@immich/ui'; import { mdiInfinity } from '@mdi/js'; import type { Snippet } from 'svelte'; import { t } from 'svelte-i18n'; @@ -34,6 +45,13 @@ }; const { Create } = $derived(getUserAdminsActions($t)); + + const classes = { + column1: 'w-8/12 sm:w-5/12 lg:w-6/12 xl:w-4/12 2xl:w-5/12', + column2: 'hidden sm:block w-3/12', + column3: 'hidden xl:block w-3/12 2xl:w-2/12', + column4: 'w-4/12 lg:w-3/12 xl:w-2/12', + }; - - - - - - - - - +
{$t('email')}
+ + {$t('email')} + {$t('name')} + {$t('has_quota')} + + + {#each users as user (user.id)} - - - - - - + + {/each} - -
- {user.email} - + + -
+ + {@render children?.()}