2026-03-02 22:20:48 +03:00
|
|
|
<!--
|
|
|
|
|
Component: LayoutSwitch
|
|
|
|
|
Toggles between list and grid layout modes
|
|
|
|
|
-->
|
2026-02-27 18:40:46 +03:00
|
|
|
<script lang="ts">
|
|
|
|
|
import { ButtonGroup } from '$shared/ui';
|
|
|
|
|
import { IconButton } from '$shared/ui';
|
|
|
|
|
import GridIcon from '@lucide/svelte/icons/layout-grid';
|
|
|
|
|
import ListIcon from '@lucide/svelte/icons/stretch-horizontal';
|
2026-06-02 09:09:20 +03:00
|
|
|
import { getLayoutManager } from '../../model';
|
2026-02-27 18:40:46 +03:00
|
|
|
|
|
|
|
|
interface Props {
|
2026-03-02 22:20:48 +03:00
|
|
|
/**
|
|
|
|
|
* CSS classes
|
|
|
|
|
*/
|
2026-02-27 18:40:46 +03:00
|
|
|
class?: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { class: className }: Props = $props();
|
|
|
|
|
|
2026-06-02 09:09:20 +03:00
|
|
|
const layoutManager = getLayoutManager();
|
|
|
|
|
const mode = $derived(layoutManager.mode);
|
|
|
|
|
|
2026-02-27 18:40:46 +03:00
|
|
|
function handleClick() {
|
|
|
|
|
layoutManager.toggleMode();
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<ButtonGroup class={className}>
|
2026-06-02 09:09:20 +03:00
|
|
|
<IconButton active={mode === 'list'} onclick={handleClick}>
|
2026-02-27 18:40:46 +03:00
|
|
|
{#snippet icon()}
|
|
|
|
|
<ListIcon class="size-4" />
|
|
|
|
|
{/snippet}
|
|
|
|
|
</IconButton>
|
2026-06-02 09:09:20 +03:00
|
|
|
<IconButton active={mode === 'grid'} onclick={handleClick}>
|
2026-02-27 18:40:46 +03:00
|
|
|
{#snippet icon()}
|
|
|
|
|
<GridIcon class="size-4" />
|
|
|
|
|
{/snippet}
|
|
|
|
|
</IconButton>
|
|
|
|
|
</ButtonGroup>
|