Skip to content

Commit d3666b3

Browse files
feat: add sidebar
1 parent c42f390 commit d3666b3

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<script lang="ts">
2+
import { page } from "$app/state";
3+
import { Menu } from "@lucide/svelte";
4+
import { uniqueRepos } from "$lib/repositories";
5+
import { Button } from "$lib/components/ui/button";
6+
import * as Sheet from "$lib/components/ui/sheet";
7+
import RepoSidePanel from "./RepoSidePanel.svelte";
8+
9+
let { children } = $props();
10+
</script>
11+
12+
{#snippet repoList()}
13+
<ul class="space-y-1">
14+
{#each uniqueRepos as repo (repo)}
15+
{@const active = repo.owner === page.params.org && repo.name === page.params.repo}
16+
<li>
17+
{#if active}
18+
<span class="font-bold underline underline-offset-2">{repo.owner}/<wbr />{repo.name}</span
19+
>
20+
{:else}
21+
<a
22+
href="../{repo.owner}/{repo.name}"
23+
class="hover:underline hover:text-primary underline-offset-2"
24+
>
25+
{repo.owner}/<wbr />{repo.name}
26+
</a>
27+
{/if}
28+
</li>
29+
{/each}
30+
</ul>
31+
{/snippet}
32+
33+
<div class="relative flex gap-8">
34+
<div class="min-w-0">
35+
{@render children()}
36+
</div>
37+
38+
<Sheet.Root>
39+
<Sheet.Trigger>
40+
{#snippet child({ props })}
41+
<Button
42+
{...props}
43+
variant="secondary"
44+
class="absolute right-0 mt-12 ml-auto lg:hidden sm:mt-16"
45+
>
46+
<Menu />
47+
<span class="sr-only">Menu</span>
48+
</Button>
49+
{/snippet}
50+
</Sheet.Trigger>
51+
<Sheet.Content class="overflow-y-auto">
52+
<Sheet.Header>
53+
<Sheet.Title>Repositories</Sheet.Title>
54+
</Sheet.Header>
55+
<RepoSidePanel headless title="Repositories" class="my-8">
56+
{@render repoList()}
57+
</RepoSidePanel>
58+
</Sheet.Content>
59+
</Sheet.Root>
60+
61+
<RepoSidePanel title="Repositories" class="mt-43 shrink-0 hidden h-fit w-80 lg:flex flex-col">
62+
{@render repoList()}
63+
</RepoSidePanel>
64+
</div>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<script lang="ts">
2+
import type { Snippet } from "svelte";
3+
import type { ClassValue } from "svelte/elements";
4+
import * as Card from "$lib/components/ui/card";
5+
6+
type Props = {
7+
title?: string;
8+
headless?: boolean;
9+
class?: ClassValue;
10+
children?: Snippet;
11+
};
12+
let { title = "", headless = false, class: className, children }: Props = $props();
13+
</script>
14+
15+
<Card.Root
16+
class={[
17+
{
18+
"z-10 border border-muted-foreground/25 bg-secondary shadow-lg dark:shadow-black": !headless,
19+
"border-0 bg-inherit shadow-none": headless
20+
},
21+
className
22+
]}
23+
>
24+
{#if !headless}
25+
<Card.Header>
26+
<Card.Title class="font-display">{title}</Card.Title>
27+
</Card.Header>
28+
{/if}
29+
<Card.Content class={{ "p-0": headless }}>
30+
{@render children?.()}
31+
</Card.Content>
32+
</Card.Root>

0 commit comments

Comments
 (0)