summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/lib/tabs/Tabs.svelte
blob: 09cdbddc59c324a555f0dc5bc5e9acbb9566930e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<script lang="ts">
	import { getTabContext } from '$lib/Tabs';
	import { fadeFast } from '$lib/Transitions';
	import { fade } from 'svelte/transition';

	const context = getTabContext();
</script>

<div class="flex h-full max-h-full flex-col">
	<nav>
		<ul class="me-3 flex border-b-2 border-slate-700 text-sm">
			{#each Object.entries($context.tabs) as [id, { title, badge }]}
				<li class="-mb-0.5">
					<button
						type="button"
						class:active={$context.current === id}
						class="relative flex gap-1 p-1 px-3 hover:border-b-2 hover:border-slate-200"
						on:click={() => ($context.current = id)}
					>
						{#if badge}
							<div
								class="absolute right-0 top-1 h-2 w-2 rounded-full bg-emerald-400"
								title="There are pending changes"
								transition:fade={fadeFast}
							/>
						{/if}
						<span>{title}</span>
					</button>
				</li>
			{/each}
		</ul>
	</nav>
	<slot />
</div>

<style lang="postcss">
	button.active {
		@apply border-b-2 border-indigo-500;
	}
</style>