From 7412079f88d8974efc7af8e45e95a42555781758 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Aug 2026 15:11:23 -0500 Subject: [PATCH] chore: search filter animation improvement and reactive search cue example (#30866) * chore: better animation for search form and search cue * better search cue example * chore: revert mise.lock changes --- i18n/en.json | 1 + .../search-bar/SearchBar.svelte | 6 +++- .../search-bar/SearchFilters.svelte | 36 +++++++++++-------- .../search-bar/search-bar-utils.ts | 24 +++++++++++++ 4 files changed, 52 insertions(+), 15 deletions(-) diff --git a/i18n/en.json b/i18n/en.json index a6dc28fba..f0761e209 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -1845,6 +1845,7 @@ "search": "Search", "search_albums": "Search albums", "search_by_context": "Search by context", + "search_by_context_example": "Describe the photo you want to find, e.g. \"Children jumping on a trampoline\"", "search_by_description": "Search by description", "search_by_description_example": "Hiking day in Sapa", "search_by_filename": "Search by file name or extension", diff --git a/web/src/lib/components/shared-components/search-bar/SearchBar.svelte b/web/src/lib/components/shared-components/search-bar/SearchBar.svelte index fc6e6f6e2..a126a7526 100644 --- a/web/src/lib/components/shared-components/search-bar/SearchBar.svelte +++ b/web/src/lib/components/shared-components/search-bar/SearchBar.svelte @@ -11,6 +11,7 @@ import { t } from 'svelte-i18n'; import SearchFilters from './SearchFilters.svelte'; import { searchManager } from '$lib/managers/search-manager.svelte'; + import { getSearchTypePlaceholder } from './search-bar-utils'; type Props = { grayTheme: boolean; @@ -19,6 +20,9 @@ let { grayTheme }: Props = $props(); let showClearIcon = $derived(searchManager.filter.query.length > 0); + let placeholder = $derived( + searchStore.isSearchEnabled ? getSearchTypePlaceholder(searchManager.filter.queryType) : $t('search_your_photos'), + ); let input = $state(); let searchFilters = $state>(); @@ -145,7 +149,7 @@ {grayTheme || showSuggestions ? 'dark:bg-immich-dark-gray' : 'dark:bg-immich-dark-bg'} {showSuggestions ? 'rounded-t-3xl shadow-[0_8px_20px_rgba(0,0,0,0.12)]' : 'rounded-3xl bg-gray-200'} {searchStore.isSearchEnabled ? 'border-light-200 bg-white dark:border-dark-600' : 'border-transparent'}" - placeholder={$t('search_your_photos')} + {placeholder} required pattern="^(?!m:$).*$" bind:value={searchManager.filter.query} diff --git a/web/src/lib/components/shared-components/search-bar/SearchFilters.svelte b/web/src/lib/components/shared-components/search-bar/SearchFilters.svelte index a3dc10a6d..d475eeb21 100644 --- a/web/src/lib/components/shared-components/search-bar/SearchFilters.svelte +++ b/web/src/lib/components/shared-components/search-bar/SearchFilters.svelte @@ -62,6 +62,7 @@ let searchHistory = $state(); let activeFilter = $state('type'); + let showAdvanced = $state(false); let peoplePromise = $state>(); let people = $state(); let tagsPromise = $state>(); @@ -187,7 +188,7 @@
{#if isOpen}
- {#if activeFilter === 'advanced'} -
-
- - {#if authManager.authenticated && authManager.preferences.ratings.enabled} - - {/if} - -
- {:else if activeFilter} + {#if activeFilter}
{#if activeFilter === 'type'} @@ -238,15 +230,31 @@ {/if}
{/if} +
+
+
+
+ + {#if authManager.authenticated && authManager.preferences.ratings.enabled} + + {/if} + +
+
+
(showAdvanced = !showAdvanced)}>{$t('advanced_filters')}