cobalt/web/src/components/sidebar/SidebarTab.svelte

82 lines
1.7 KiB
Svelte
Raw Normal View History

2024-06-14 12:33:01 +02:00
<script lang="ts">
import { page } from "$app/stores";
export let tabName: string;
export let tabLink: string;
let tab: HTMLElement;
2024-06-14 12:33:01 +02:00
$: isTabActive = $page.url.pathname === tabLink;
const showTab = (e: HTMLElement | undefined) => {
if (e) {
e.scrollIntoView({});
}
}
$: if (isTabActive) {
showTab(tab)
}
2024-06-14 12:33:01 +02:00
</script>
<a
id="sidebar-tab-{tabName}"
class="sidebar-tab"
class:active={isTabActive}
href={tabLink}
bind:this={tab}
on:focus={() => showTab(tab)}
2024-06-14 12:33:01 +02:00
>
<slot></slot>
{tabName}
</a>
<style>
.sidebar-tab {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 5px;
2024-06-14 17:48:57 +02:00
padding: var(--padding) 5px;
color: var(--sidebar-highlight);
2024-06-14 12:33:01 +02:00
font-size: var(--sidebar-font-size);
opacity: 0.8;
height: fit-content;
border-radius: var(--border-radius);
-webkit-touch-callout: none;
2024-06-14 12:33:01 +02:00
}
2024-06-14 12:38:10 +02:00
2024-06-14 12:33:01 +02:00
.sidebar-tab.active {
color: var(--sidebar-bg);
background: var(--sidebar-highlight);
2024-06-14 12:33:01 +02:00
opacity: 1;
}
2024-06-14 12:38:10 +02:00
2024-06-14 12:33:01 +02:00
.sidebar-tab:hover {
opacity: 1;
}
2024-06-14 13:33:33 +02:00
.sidebar-tab:focus-visible {
box-shadow: 0 0 0 3px var(--blue) inset;
outline: none;
z-index: 1;
}
.sidebar-tab.active:focus-visible {
background: var(--blue);
color: var(--sidebar-highlight);
}
2024-06-14 13:33:33 +02:00
@media screen and (max-width: 535px) {
.sidebar-tab {
2024-06-14 17:48:57 +02:00
padding: 5px var(--padding);
2024-06-14 13:33:33 +02:00
min-width: calc(var(--sidebar-width) / 2);
}
2024-06-14 13:33:33 +02:00
.sidebar-tab.active {
z-index: 2;
}
}
2024-06-14 12:33:01 +02:00
</style>