Skip to content

Commit 086c7a6

Browse files
committed
refactor: responsive navbar
1 parent 07bf9de commit 086c7a6

File tree

4 files changed

+82
-50
lines changed

4 files changed

+82
-50
lines changed

frontend/package-lock.json

+28-28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@sveltejs/vite-plugin-svelte": "^3.0.2",
1919
"@tailwindcss/typography": "^0.5.12",
2020
"@types/eslint": "^8.56.7",
21-
"@types/node": "^20.12.3",
21+
"@types/node": "^20.12.5",
2222
"@typescript-eslint/eslint-plugin": "^7.5.0",
2323
"@typescript-eslint/parser": "^7.5.0",
2424
"autoprefixer": "^10.4.19",
@@ -32,8 +32,8 @@
3232
"svelte-check": "^3.6.9",
3333
"tailwindcss": "^3.4.3",
3434
"tslib": "^2.6.2",
35-
"typescript": "^5.4.3",
36-
"vite": "^5.2.7"
35+
"typescript": "^5.4.4",
36+
"vite": "^5.2.8"
3737
},
3838
"type": "module",
3939
"dependencies": {
@@ -43,7 +43,7 @@
4343
"cmdk-sv": "^0.0.17",
4444
"dompurify": "^3.0.11",
4545
"ky": "^1.2.3",
46-
"lucide-svelte": "^0.364.0",
46+
"lucide-svelte": "^0.365.0",
4747
"mode-watcher": "^0.3.0",
4848
"moment": "^2.30.1",
4949
"svelte-sonner": "^0.3.21",

frontend/src/lib/components/Navbar.svelte

+47-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import { page } from '$app/stores';
33
import { Button } from '$lib/components/ui/button';
4+
import { MenuIcon, XIcon } from 'lucide-svelte';
45
import ThemeToggler from './ThemeToggler.svelte';
56
interface link {
67
label: string;
@@ -28,28 +29,57 @@
2829
}
2930
links = links;
3031
}
31-
// TODO: responsive navbar
32+
let showMenu = false;
3233
</script>
3334

3435
<nav class="block w-full sm:mt-3 mb-6">
35-
<div
36-
class="flex justify-around items-center w-full sm:max-w-[500px] mx-auto px-6 py-4 sm:rounded-2xl shadow-md sm:border bg-background"
37-
>
38-
<div class="flex items-center">
36+
<div class="flex flex-col items-center w-full sm:max-w-[500px] sm:mx-auto bg-background">
37+
<div
38+
class="flex justify-between sm:justify-around w-full px-2 sm:px-6 py-2 sm:py-4 sm:rounded-2xl shadow-md sm:border"
39+
>
3940
<img src="/icon-96.png" alt="icon" class="w-10" />
40-
<!-- <h2 class="font-bold text-xl">Fusion</h2> -->
41+
<div class="hidden sm:block">
42+
{#each links as l}
43+
<Button
44+
variant="ghost"
45+
href={l.url}
46+
class={l.highlight ? 'bg-accent text-accent-foreground' : ''}
47+
>
48+
{l.label}
49+
</Button>
50+
{/each}
51+
</div>
52+
<ThemeToggler className="hidden sm:flex" />
53+
<Button
54+
variant="ghost"
55+
size="icon"
56+
on:click={() => (showMenu = !showMenu)}
57+
class="flex sm:hidden"
58+
>
59+
{#if showMenu}
60+
<XIcon size="15" />
61+
{:else}
62+
<MenuIcon size="15" />
63+
{/if}
64+
</Button>
4165
</div>
42-
<div>
43-
{#each links as l}
44-
<Button
45-
variant="ghost"
46-
href={l.url}
47-
class={l.highlight ? 'bg-accent text-accent-foreground' : ''}
48-
>
49-
{l.label}
50-
</Button>
51-
{/each}
66+
67+
<div class="relative w-full">
68+
{#if showMenu}
69+
<div class="flex flex-col w-full absolute top-0 bg-background shadow-md">
70+
{#each links as l}
71+
<Button
72+
variant="ghost"
73+
href={l.url}
74+
on:click={() => (showMenu = false)}
75+
class="w-full {l.highlight ? 'bg-accent text-accent-foreground' : ''}"
76+
>
77+
{l.label}
78+
</Button>
79+
{/each}
80+
<ThemeToggler className="w-full" />
81+
</div>
82+
{/if}
5283
</div>
53-
<ThemeToggler />
5484
</div>
5585
</nav>

frontend/src/lib/components/ThemeToggler.svelte

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import Moon from 'lucide-svelte/icons/moon';
66
77
import { setMode, resetMode } from 'mode-watcher';
8+
9+
export let className = '';
810
</script>
911

1012
<DropdownMenu.Root>
1113
<DropdownMenu.Trigger asChild let:builder>
12-
<Button builders={[builder]} variant="ghost" size="icon">
14+
<Button builders={[builder]} variant="ghost" size="icon" class={className}>
1315
<Sun
1416
class="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0"
1517
/>

0 commit comments

Comments
 (0)