Skip to content

Commit bf90439

Browse files
committed
🎨 Add switch UI component
1 parent 44fd09e commit bf90439

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/components/ui/switch/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Root from "./switch.svelte";
2+
3+
export { Root, Root as Switch };
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<script lang="ts">
2+
import type { WithoutChildrenOrChild } from "@/types/components";
3+
4+
import { cn } from "@/utils/cn";
5+
import { Switch as SwitchPrimitive } from "bits-ui";
6+
7+
let {
8+
ref = $bindable(null),
9+
class: className,
10+
checked = $bindable(false),
11+
...restProps
12+
}: WithoutChildrenOrChild<SwitchPrimitive.RootProps> = $props();
13+
</script>
14+
15+
<SwitchPrimitive.Root
16+
bind:ref
17+
bind:checked
18+
data-slot="switch"
19+
class={cn(
20+
"peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-neutral-500 focus-visible:ring-[3px] focus-visible:ring-neutral-300/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-neutral-900 data-[state=unchecked]:bg-neutral-200 dark:focus-visible:ring-neutral-500/50 dark:data-[state=checked]:bg-neutral-100 dark:data-[state=unchecked]:bg-neutral-700",
21+
className,
22+
)}
23+
{...restProps}
24+
>
25+
<SwitchPrimitive.Thumb
26+
data-slot="switch-thumb"
27+
class={cn(
28+
"pointer-events-none block size-4 rounded-full bg-white ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0 dark:bg-neutral-900 dark:data-[state=checked]:bg-neutral-900",
29+
)}
30+
/>
31+
</SwitchPrimitive.Root>

0 commit comments

Comments
 (0)