/* SPDX-FileCopyrightText: © 2025 Hornwitser SPDX-License-Identifier: AGPL-3.0-or-later */ export function useStringSort() { const accountStore = useAccountStore(); const localeCompare = computed(() => Intl.Collator( accountStore.activeLocale, { usage: "sort", numeric: true, sensitivity: "base", }, ).compare); return function stringSort(a: string, b: string) { return localeCompare.value(a, b); } } export function useFuzzyMatch() { const accountStore = useAccountStore(); const localeCompare = computed(() => Intl.Collator( accountStore.activeLocale, { usage: "search", sensitivity: "base", }, ).compare); return function fuzzyMatch(pattern: string, text: string) { let pos = 0; for (const char of text) { if (localeCompare.value(char, pattern[pos]) === 0) { pos += 1; if (pos === pattern.length) { return true; } } } return pos === pattern.length; } }