mirror of
https://github.com/wukko/cobalt.git
synced 2025-05-03 07:34:26 +02:00

at the time of this commit, there are no models that are good enough and can run in a web browser. this feature might come back when web onnx gets support for beefier models.
129 lines
4.0 KiB
Svelte
129 lines
4.0 KiB
Svelte
<script lang="ts">
|
|
import { t } from "$lib/i18n/translations";
|
|
import { defaultNavPage } from "$lib/subnav";
|
|
|
|
import CobaltLogo from "$components/sidebar/CobaltLogo.svelte";
|
|
import SidebarTab from "$components/sidebar/SidebarTab.svelte";
|
|
|
|
import IconDownload from "@tabler/icons-svelte/IconDownload.svelte";
|
|
import IconSettings from "@tabler/icons-svelte/IconSettings.svelte";
|
|
|
|
import IconRepeat from "@tabler/icons-svelte/IconRepeat.svelte";
|
|
|
|
import IconComet from "@tabler/icons-svelte/IconComet.svelte";
|
|
import IconHeart from "@tabler/icons-svelte/IconHeart.svelte";
|
|
import IconInfoCircle from "@tabler/icons-svelte/IconInfoCircle.svelte";
|
|
|
|
let screenWidth: number;
|
|
let settingsLink = defaultNavPage("settings");
|
|
let aboutLink = defaultNavPage("about");
|
|
|
|
$: screenWidth,
|
|
(settingsLink = defaultNavPage("settings")),
|
|
(aboutLink = defaultNavPage("about"));
|
|
</script>
|
|
|
|
<svelte:window bind:innerWidth={screenWidth} />
|
|
|
|
<nav id="sidebar" aria-label={$t("a11y.tabs.tab_panel")}>
|
|
<CobaltLogo />
|
|
<div id="sidebar-tabs" role="tablist">
|
|
<div id="sidebar-actions" class="sidebar-inner-container">
|
|
<SidebarTab name="save" path="/" icon={IconDownload} />
|
|
<SidebarTab name="remux" path="/remux" icon={IconRepeat} beta />
|
|
</div>
|
|
<div id="sidebar-info" class="sidebar-inner-container">
|
|
<SidebarTab name="settings" path={settingsLink} icon={IconSettings} />
|
|
<SidebarTab name="donate" path="/donate" icon={IconHeart} />
|
|
<SidebarTab name="updates" path="/updates" icon={IconComet} />
|
|
<SidebarTab name="about" path={aboutLink} icon={IconInfoCircle} />
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<style>
|
|
#sidebar,
|
|
#sidebar-tabs,
|
|
.sidebar-inner-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
#sidebar {
|
|
background: var(--sidebar-bg);
|
|
height: 100vh;
|
|
width: calc(var(--sidebar-width) + var(--sidebar-inner-padding) * 2);
|
|
position: sticky;
|
|
}
|
|
|
|
#sidebar-tabs {
|
|
height: 100%;
|
|
justify-content: space-between;
|
|
padding: var(--sidebar-inner-padding);
|
|
padding-bottom: var(--sidebar-tab-padding);
|
|
overflow-y: scroll;
|
|
}
|
|
|
|
@media screen and (max-width: 535px) {
|
|
#sidebar,
|
|
#sidebar-tabs,
|
|
.sidebar-inner-container {
|
|
flex-direction: row;
|
|
}
|
|
|
|
#sidebar {
|
|
width: 100%;
|
|
height: var(--sidebar-height-mobile);
|
|
position: fixed;
|
|
bottom: 0;
|
|
justify-content: center;
|
|
align-items: flex-start;
|
|
z-index: 3;
|
|
padding: var(--sidebar-inner-padding) 0;
|
|
}
|
|
|
|
#sidebar::before {
|
|
content: "";
|
|
z-index: 1;
|
|
width: 100%;
|
|
height: 100%;
|
|
display: block;
|
|
position: absolute;
|
|
pointer-events: none;
|
|
background: var(--sidebar-mobile-gradient);
|
|
}
|
|
|
|
#sidebar-tabs {
|
|
overflow-y: visible;
|
|
overflow-x: scroll;
|
|
padding: 0;
|
|
height: fit-content;
|
|
}
|
|
|
|
#sidebar :global(.sidebar-inner-container:first-child) {
|
|
padding-left: calc(var(--border-radius) * 1.5);
|
|
}
|
|
|
|
#sidebar :global(.sidebar-inner-container:last-child) {
|
|
padding-right: calc(var(--border-radius) * 1.5);
|
|
}
|
|
|
|
#sidebar :global(.sidebar-inner-container:first-child:dir(rtl)) {
|
|
padding-left: 0;
|
|
padding-right: calc(var(--border-radius) * 1.5);
|
|
}
|
|
|
|
#sidebar :global(.sidebar-inner-container:last-child:dir(rtl)) {
|
|
padding-right: 0;
|
|
padding-left: calc(var(--border-radius) * 1.5);
|
|
}
|
|
}
|
|
|
|
/* add padding for notch / dynamic island in landscape */
|
|
@media screen and (orientation: landscape) {
|
|
:global([data-iphone="true"]) #sidebar {
|
|
padding-left: env(safe-area-inset-left);
|
|
}
|
|
}
|
|
</style>
|