summaryrefslogblamecommitdiffstatshomepage
path: root/frontend/src/lib/components/ArchiveCard.svelte
blob: c9d283ba859239258e4e4096f622adac25d151aa (plain) (tree)






































                                                                                                                 
<script lang="ts">
	import type { ArchiveFragment } from '$gql/graphql';
	import FooterPill from '$lib/pills/FooterPill.svelte';
	import { filesize } from 'filesize';
	import { type Snippet } from 'svelte';
	import Card from './Card.svelte';

	interface Props {
		archive: ArchiveFragment;
		overlay?: Snippet;
		onclick?: (event: MouseEvent) => void;
	}

	let { archive, overlay, onclick }: Props = $props();

	let details = $derived({
		title: archive.name,
		cover: archive.cover
	});
	let href = $derived(`/archives/${archive.id.toString()}`);
</script>

<Card {details} {href} {onclick} {overlay}>
	{#snippet footer()}
		<div class="flex flex-wrap gap-1">
			<FooterPill text={`${archive.pageCount} pages`}>
				{#snippet icon()}
					<span class="icon-[material-symbols--description] mr-0.5 text-sm"></span>
				{/snippet}
			</FooterPill>
			<div class="flex grow"></div>
			<FooterPill text={filesize(archive.size, { base: 2 })}>
				{#snippet icon()}
					<span class="icon-[material-symbols--hard-drive] mr-0.5 text-sm"></span>
				{/snippet}
			</FooterPill>
		</div>
	{/snippet}
</Card>