mirror of
https://github.com/maxdorninger/MediaManager.git
synced 2026-04-20 12:55:15 +02:00
55 lines
1.5 KiB
Svelte
55 lines
1.5 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';
|
|
|
|
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 {...restProps} bind:ref>
|
|
<Sidebar.GroupContent>
|
|
<Sidebar.Menu>
|
|
<Sidebar.MenuItem>
|
|
<Sidebar.MenuButton size="sm">
|
|
{#snippet child({ props })}
|
|
<div onclick={() => toggleMode()} {...props}>
|
|
<Sun class="dark:hidden " />
|
|
<span class="dark:hidden">Switch to dark mode</span>
|
|
<Moon class="hidden dark:inline" />
|
|
<span class="hidden dark:inline">Switch to light 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}>
|
|
<!-- eslint-disable-line svelte/no-navigation-without-resolve -->
|
|
<item.icon />
|
|
<span>{item.title}</span>
|
|
</a>
|
|
{/snippet}
|
|
</Sidebar.MenuButton>
|
|
</Sidebar.MenuItem>
|
|
{/each}
|
|
</Sidebar.Menu>
|
|
</Sidebar.GroupContent>
|
|
</Sidebar.Group>
|