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); } }