Spaces:
Runtime error
Runtime error
<script lang="ts"> | |
import CitationsModal from './CitationsModal.svelte'; | |
export let citations = []; | |
let _citations = []; | |
$: _citations = citations.reduce((acc, citation) => { | |
citation.document.forEach((document, index) => { | |
const metadata = citation.metadata?.[index]; | |
const id = metadata?.source ?? 'N/A'; | |
let source = citation?.source; | |
if (metadata?.name) { | |
source = { ...source, name: metadata.name }; | |
} | |
// Check if ID looks like a URL | |
if (id.startsWith('http://') || id.startsWith('https://')) { | |
source = { name: id }; | |
} | |
const existingSource = acc.find((item) => item.id === id); | |
if (existingSource) { | |
existingSource.document.push(document); | |
existingSource.metadata.push(metadata); | |
} else { | |
acc.push({ | |
id: id, | |
source: source, | |
document: [document], | |
metadata: metadata ? [metadata] : [] | |
}); | |
} | |
}); | |
return acc; | |
}, []); | |
let showCitationModal = false; | |
let selectedCitation = null; | |
</script> | |
<CitationsModal bind:show={showCitationModal} citation={selectedCitation} /> | |
{#if _citations.length > 0} | |
<div class="mt-1 mb-2 w-full flex gap-1 items-center flex-wrap"> | |
{#each _citations as citation, idx} | |
<div class="flex gap-1 text-xs font-semibold"> | |
<button | |
class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl max-w-96" | |
on:click={() => { | |
showCitationModal = true; | |
selectedCitation = citation; | |
}} | |
> | |
<div class="bg-white dark:bg-gray-700 rounded-full size-4"> | |
{idx + 1} | |
</div> | |
<div class="flex-1 mx-2 line-clamp-1"> | |
{citation.source.name} | |
</div> | |
</button> | |
</div> | |
{/each} | |
</div> | |
{/if} | |