svchat/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte
April Hall 6fd8f0f85f
Some checks failed
ESLint / lint (push) Has been cancelled
Push to GHCR / build (push) Has been cancelled
Tests / Tests (push) Has been cancelled
Prettier / checkformat (push) Has been cancelled
fix: Make icon import style consistent
2025-03-05 16:31:11 -05:00

40 lines
1.3 KiB
Svelte

<script lang="ts">
import { DropdownMenu as DropdownMenuPrimitive, type WithoutChildrenOrChild } from 'bits-ui';
import { Check, Minus } from 'lucide-svelte';
import { cn } from '$lib/utils.js';
import type { Snippet } from 'svelte';
let {
ref = $bindable(null),
class: className,
children: childrenProp,
checked = $bindable(false),
indeterminate = $bindable(false),
...restProps
}: WithoutChildrenOrChild<DropdownMenuPrimitive.CheckboxItemProps> & {
children?: Snippet;
} = $props();
</script>
<DropdownMenuPrimitive.CheckboxItem
bind:ref
bind:checked
bind:indeterminate
class={cn(
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50',
className,
)}
{...restProps}
>
{#snippet children({ checked, indeterminate })}
<span class="absolute left-2 flex size-3.5 items-center justify-center">
{#if indeterminate}
<Minus class="size-4" />
{:else}
<Check class={cn('size-4', !checked && 'text-transparent')} />
{/if}
</span>
{@render childrenProp?.()}
{/snippet}
</DropdownMenuPrimitive.CheckboxItem>