diff --git a/i18n/en.json b/i18n/en.json
index 9741c10b2970f..073d4ba893eaf 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -736,6 +736,7 @@
"external": "External",
"external_libraries": "External Libraries",
"face_unassigned": "Unassigned",
+ "failed_to_load_assets": "Failed to load assets",
"favorite": "Favorite",
"favorite_or_unfavorite_photo": "Favorite or unfavorite photo",
"favorites": "Favorites",
@@ -1036,6 +1037,7 @@
"reassing_hint": "Assign selected assets to an existing person",
"recent": "Recent",
"recent_searches": "Recent searches",
+ "recent-albums": "Recent albums",
"refresh": "Refresh",
"refresh_encoded_videos": "Refresh encoded videos",
"refresh_faces": "Refresh faces",
diff --git a/web/src/lib/components/shared-components/side-bar/recent-albums.svelte b/web/src/lib/components/shared-components/side-bar/recent-albums.svelte
new file mode 100644
index 0000000000000..a412d5cc42ed5
--- /dev/null
+++ b/web/src/lib/components/shared-components/side-bar/recent-albums.svelte
@@ -0,0 +1,40 @@
+
+
+{#each albums as album}
+
+
+
+ {album.albumName}
+
+
+{/each}
diff --git a/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte b/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte
index 13f08533c5262..4da73b6288408 100644
--- a/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte
+++ b/web/src/lib/components/shared-components/side-bar/side-bar-link.svelte
@@ -1,7 +1,10 @@
-
+ {#if hasDropdown}
+
+
+
+ {/if}
+
-
-
- {title}
-
-
-
+ >
+
+
+ {title}
+
+
+
+
+{#if hasDropdown && dropdownOpen}
+ {@render hasDropdown?.()}
+{/if}
diff --git a/web/src/lib/components/shared-components/side-bar/side-bar.svelte b/web/src/lib/components/shared-components/side-bar/side-bar.svelte
index 000afa5d1a302..9c49b971bae0e 100644
--- a/web/src/lib/components/shared-components/side-bar/side-bar.svelte
+++ b/web/src/lib/components/shared-components/side-bar/side-bar.svelte
@@ -27,6 +27,9 @@
import { t } from 'svelte-i18n';
import BottomInfo from '$lib/components/shared-components/side-bar/bottom-info.svelte';
import { preferences } from '$lib/stores/user.store';
+ import { recentAlbumsDropdown } from '$lib/stores/preferences.store';
+ import RecentAlbums from '$lib/components/shared-components/side-bar/recent-albums.svelte';
+ import { fly } from 'svelte/transition';
let isArchiveSelected: boolean = $state(false);
let isFavoritesSelected: boolean = $state(false);
@@ -88,7 +91,19 @@
bind:isSelected={isFavoritesSelected}
>
-
+
+ {#snippet dropDownContent()}
+
+
+
+ {/snippet}
+
{#if $preferences.tags.enabled && $preferences.tags.sidebarWeb}
diff --git a/web/src/lib/stores/preferences.store.ts b/web/src/lib/stores/preferences.store.ts
index 87f4a7ba44708..2b3ff86c2f7e8 100644
--- a/web/src/lib/stores/preferences.store.ts
+++ b/web/src/lib/stores/preferences.store.ts
@@ -144,3 +144,5 @@ export const alwaysLoadOriginalFile = persisted('always-load-original-f
export const playVideoThumbnailOnHover = persisted('play-video-thumbnail-on-hover', true, {});
export const loopVideo = persisted('loop-video', true, {});
+
+export const recentAlbumsDropdown = persisted('recent-albums-open', true, {});