From de2c8cdc777299096cc1171074edf5396888a1a0 Mon Sep 17 00:00:00 2001 From: whidix Date: Tue, 3 Mar 2026 23:38:07 +0100 Subject: [PATCH] feat: improve search functionality by normalizing input and character names --- src/lib/components/CharacterSearchInput.svelte | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib/components/CharacterSearchInput.svelte b/src/lib/components/CharacterSearchInput.svelte index d2a880d..a856ee0 100644 --- a/src/lib/components/CharacterSearchInput.svelte +++ b/src/lib/components/CharacterSearchInput.svelte @@ -11,6 +11,13 @@ let highlightedIndex = 0; let dropdownContainer: HTMLDivElement; let searchContainer: HTMLDivElement; + + function normalizeSearchText(value: string): string { + return value + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase(); + } onMount(() => { // Add click outside listener @@ -22,8 +29,8 @@ }); $: filteredCharacters = characters.filter(char => { - const searchTerm = searchInput.toLowerCase(); - const nameMatches = char.name.toLowerCase().includes(searchTerm); + const searchTerm = normalizeSearchText(searchInput); + const nameMatches = normalizeSearchText(char.name).includes(searchTerm); let epithetsMatches = false; if (char.epithets) { @@ -34,13 +41,13 @@ if (Array.isArray(parsedEpithets)) { epithetsMatches = parsedEpithets.some((epithet: string) => - epithet.toLowerCase().includes(searchTerm) + normalizeSearchText(epithet).includes(searchTerm) ); } else if (typeof parsedEpithets === 'string') { - epithetsMatches = parsedEpithets.toLowerCase().includes(searchTerm); + epithetsMatches = normalizeSearchText(parsedEpithets).includes(searchTerm); } } catch { - epithetsMatches = String(char.epithets).toLowerCase().includes(searchTerm); + epithetsMatches = normalizeSearchText(String(char.epithets)).includes(searchTerm); } }