Skip to content

Commit 3b5935f

Browse files
refactor: move the sidebar into the layout
1 parent 0d7aeb5 commit 3b5935f

File tree

3 files changed

+65
-47
lines changed

3 files changed

+65
-47
lines changed

src/routes/package/+layout.svelte

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<script lang="ts">
2+
import { page } from "$app/state";
3+
import { Menu } from "@lucide/svelte";
4+
import { Button } from "$lib/components/ui/button";
5+
import * as Sheet from "$lib/components/ui/sheet";
6+
import SidePanel from "./SidePanel.svelte";
7+
8+
let { data, children } = $props();
9+
10+
let showPrereleases = $state(true);
11+
</script>
12+
13+
<div class="mt-8 flex gap-8 lg:mt-0">
14+
<div class="flex-1">
15+
{@render children()}
16+
</div>
17+
18+
<Sheet.Root>
19+
<Sheet.Trigger>
20+
{#snippet child({ props })}
21+
<Button {...props} variant="secondary" class="ml-auto lg:hidden">
22+
<Menu />
23+
<span class="sr-only">Menu</span>
24+
</Button>
25+
{/snippet}
26+
</Sheet.Trigger>
27+
<Sheet.Content class="overflow-y-auto">
28+
<Sheet.Header>
29+
<Sheet.Title>Packages</Sheet.Title>
30+
</Sheet.Header>
31+
<SidePanel
32+
headless
33+
packageName={page.data.currentPackage.pkg.name}
34+
allPackages={data.displayablePackages}
35+
otherReleases={data.allReleases}
36+
bind:showPrereleases
37+
class="my-8"
38+
/>
39+
</Sheet.Content>
40+
</Sheet.Root>
41+
42+
<SidePanel
43+
packageName={page.data.currentPackage.pkg.name}
44+
allPackages={data.displayablePackages}
45+
otherReleases={data.allReleases}
46+
class={[
47+
"mt-35 hidden h-fit w-100 shrink-0 lg:block",
48+
page.data.currentPackage.pkg.description?.length && "mt-45"
49+
]}
50+
bind:showPrereleases
51+
/>
52+
</div>

src/routes/package/[...package]/SidePanel.svelte renamed to src/routes/package/SidePanel.svelte

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,11 @@
5252
}: Props = $props();
5353
let id = $props.id();
5454
55-
let storedPrereleaseState = persisted(`show-${packageName}-prereleases`, showPrereleases);
5655
$effect(() => {
57-
storedPrereleaseState.value = showPrereleases;
56+
let storedPrereleaseState = persisted(`show-${packageName}-prereleases`, showPrereleases);
57+
$effect(() => {
58+
storedPrereleaseState.value = showPrereleases;
59+
});
5860
});
5961
</script>
6062

src/routes/package/[...package]/+page.svelte

Lines changed: 9 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
<script lang="ts">
22
import { navigating } from "$app/state";
3-
import { LoaderCircle, Menu } from "@lucide/svelte";
3+
import { LoaderCircle } from "@lucide/svelte";
44
import semver from "semver";
55
import ReleaseCard from "./ReleaseCard.svelte";
6-
import SidePanel from "./SidePanel.svelte";
7-
import * as Accordion from "$lib/components/ui/accordion";
8-
import * as Sheet from "$lib/components/ui/sheet";
9-
import { Button } from "$lib/components/ui/button";
106
import { Skeleton } from "$lib/components/ui/skeleton";
7+
import * as Accordion from "$lib/components/ui/accordion";
118
129
let { data } = $props();
1310
let latestRelease = $derived(
@@ -27,11 +24,11 @@
2724
</script>
2825

2926
{#snippet loading()}
30-
<div class="my-8 space-y-2">
31-
<Skeleton class="h-16 w-64" />
32-
<Skeleton class="h-8 w-32" />
33-
</div>
34-
<div class="flex gap-8">
27+
<div class="flex flex-col">
28+
<div class="my-8 space-y-2">
29+
<Skeleton class="h-16 w-64" />
30+
<Skeleton class="h-8 w-32" />
31+
</div>
3532
<div class="relative w-full space-y-2">
3633
<p
3734
class="absolute top-18 left-1/2 z-10 inline-flex -translate-x-1/2 -translate-y-1/2 items-center justify-center text-xl"
@@ -44,7 +41,6 @@
4441
<Skeleton class="h-16 w-full" />
4542
<Skeleton class="h-80 w-full" />
4643
</div>
47-
<Skeleton class="hidden h-96 w-140 lg:block" />
4844
</div>
4945
{/snippet}
5046

@@ -58,8 +54,8 @@
5854
{@const displayableReleases = data.releases.filter(release =>
5955
showPrereleases ? true : !release.prerelease
6056
)}
61-
<div class="my-8 flex gap-8">
62-
<div>
57+
<div class="flex flex-col">
58+
<div class="my-8">
6359
<h1 class="text-3xl font-semibold text-primary text-shadow-sm md:text-5xl">
6460
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
6561
{@html data.currentPackage.pkg.name.replace(/\//g, "/<wbr />")}
@@ -77,31 +73,6 @@
7773
<h3 class="mt-4 italic">{data.currentPackage.pkg.description}</h3>
7874
{/if}
7975
</div>
80-
<Sheet.Root>
81-
<Sheet.Trigger>
82-
{#snippet child({ props })}
83-
<Button {...props} variant="secondary" class="ml-auto lg:hidden">
84-
<Menu />
85-
<span class="sr-only">Menu</span>
86-
</Button>
87-
{/snippet}
88-
</Sheet.Trigger>
89-
<Sheet.Content class="overflow-y-auto">
90-
<Sheet.Header>
91-
<Sheet.Title>Packages</Sheet.Title>
92-
</Sheet.Header>
93-
<SidePanel
94-
headless
95-
packageName={data.currentPackage.pkg.name}
96-
allPackages={data.displayablePackages}
97-
otherReleases={data.allReleases}
98-
bind:showPrereleases
99-
class="my-8"
100-
/>
101-
</Sheet.Content>
102-
</Sheet.Root>
103-
</div>
104-
<div class="flex gap-8">
10576
<Accordion.Root
10677
type="multiple"
10778
value={displayableReleases
@@ -139,13 +110,6 @@
139110
/>
140111
{/each}
141112
</Accordion.Root>
142-
<SidePanel
143-
packageName={data.currentPackage.pkg.name}
144-
allPackages={data.displayablePackages}
145-
otherReleases={data.allReleases}
146-
class="hidden h-fit w-140 lg:block"
147-
bind:showPrereleases
148-
/>
149113
</div>
150114
{/await}
151115
{/if}

0 commit comments

Comments
 (0)