Files
gpx.studio/website/src/lib/components/AlgoliaDocSearch.svelte

67 lines
2.2 KiB
Svelte
Raw Normal View History

2024-09-13 13:58:48 +02:00
<script lang="ts">
import docsearch from '@docsearch/js';
import '@docsearch/css';
import { onMount } from 'svelte';
2025-06-21 21:07:36 +02:00
import { i18n } from '$lib/i18n.svelte';
let props: {
class?: string;
} = $props();
2024-09-13 13:58:48 +02:00
let mounted = false;
2024-09-13 13:58:48 +02:00
function initDocsearch() {
docsearch({
appId: '21XLD94PE3',
apiKey: 'd2c1ed6cb0ed12adb2bd84eb2a38494d',
indexName: 'gpx',
container: '#docsearch',
searchParameters: {
2025-06-21 21:07:36 +02:00
facetFilters: ['lang:' + i18n.lang],
},
2025-06-21 21:07:36 +02:00
placeholder: i18n._('docs.search.search'),
disableUserPersonalization: true,
translations: {
button: {
2025-06-21 21:07:36 +02:00
buttonText: i18n._('docs.search.search'),
buttonAriaLabel: i18n._('docs.search.search'),
},
modal: {
searchBox: {
2025-06-21 21:07:36 +02:00
resetButtonTitle: i18n._('docs.search.clear'),
resetButtonAriaLabel: i18n._('docs.search.clear'),
cancelButtonText: i18n._('docs.search.cancel'),
cancelButtonAriaLabel: i18n._('docs.search.cancel'),
searchInputLabel: i18n._('docs.search.search'),
},
footer: {
2025-06-21 21:07:36 +02:00
selectText: i18n._('docs.search.to_select'),
navigateText: i18n._('docs.search.to_navigate'),
closeText: i18n._('docs.search.to_close'),
},
noResultsScreen: {
2025-06-21 21:07:36 +02:00
noResultsText: i18n._('docs.search.no_results'),
suggestedQueryText: i18n._('docs.search.no_results_suggestion'),
},
},
},
});
}
2024-09-13 13:58:48 +02:00
onMount(() => {
mounted = true;
});
2024-09-13 13:58:48 +02:00
2025-06-21 21:07:36 +02:00
$effect(() => {
if (mounted && i18n.lang && !i18n.isLoading) {
initDocsearch();
}
});
2024-09-13 13:58:48 +02:00
</script>
<svelte:head>
<link rel="preconnect" href="https://21XLD94PE3-dsn.algolia.net" crossorigin />
2024-09-13 13:58:48 +02:00
</svelte:head>
2025-06-21 21:07:36 +02:00
<div id="docsearch" class={props.class ?? ''}></div>