mirror of
https://github.com/maxdorninger/MediaManager.git
synced 2026-04-25 07:15:15 +02:00
55 lines
1.4 KiB
Svelte
55 lines
1.4 KiB
Svelte
<script lang="ts">
|
|
import * as Sidebar from '$lib/components/ui/sidebar/index.js';
|
|
import type {ComponentProps} from 'svelte';
|
|
import Sun from "@lucide/svelte/icons/sun";
|
|
import Moon from "@lucide/svelte/icons/moon";
|
|
|
|
import {toggleMode} from "mode-watcher";
|
|
import {Button} from "$lib/components/ui/button/index.js";
|
|
let {
|
|
ref = $bindable(null),
|
|
items,
|
|
...restProps
|
|
}: {
|
|
items: {
|
|
title: string;
|
|
url: string;
|
|
// This should be `Component` after @lucide/svelte updates types
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
icon: any;
|
|
}[];
|
|
} & ComponentProps<typeof Sidebar.Group> = $props();
|
|
</script>
|
|
|
|
<Sidebar.Group bind:ref {...restProps}>
|
|
<Sidebar.GroupContent>
|
|
<Sidebar.Menu>
|
|
<Sidebar.MenuItem>
|
|
<Sidebar.MenuButton size="sm">
|
|
{#snippet child({props})}
|
|
<div on:click={()=>toggleMode()} {...props}>
|
|
|
|
<Sun class="dark:hidden "/>
|
|
<Moon class="hidden dark:inline"/>
|
|
<span>Toggle mode</span>
|
|
</div>
|
|
{/snippet}
|
|
</Sidebar.MenuButton>
|
|
</Sidebar.MenuItem>
|
|
|
|
{#each items as item (item.title)}
|
|
<Sidebar.MenuItem>
|
|
<Sidebar.MenuButton size="sm">
|
|
{#snippet child({props})}
|
|
<a href={item.url} {...props}>
|
|
<item.icon/>
|
|
<span>{item.title}</span>
|
|
</a>
|
|
{/snippet}
|
|
</Sidebar.MenuButton>
|
|
</Sidebar.MenuItem>
|
|
{/each}
|
|
</Sidebar.Menu>
|
|
</Sidebar.GroupContent>
|
|
</Sidebar.Group>
|