Spaces:
Running
Running
<script lang="ts" module> | |
import { getContext, setContext } from "svelte"; | |
import type { ToggleVariants } from "@/components/ui/toggle/index.js"; | |
export function setToggleGroupCtx(props: ToggleVariants) { | |
setContext("toggleGroup", props); | |
} | |
export function getToggleGroupCtx() { | |
return getContext<ToggleVariants>("toggleGroup"); | |
} | |
</script> | |
<script lang="ts"> | |
import { ToggleGroup as ToggleGroupPrimitive } from "bits-ui"; | |
import { cn } from "$lib/utils.js"; | |
let { | |
ref = $bindable(null), | |
value = $bindable(), | |
class: className, | |
size = "default", | |
variant = "default", | |
...restProps | |
}: ToggleGroupPrimitive.RootProps & ToggleVariants = $props(); | |
setToggleGroupCtx({ | |
variant, | |
size | |
}); | |
</script> | |
<!-- | |
Discriminated Unions + Destructing (required for bindable) do not | |
get along, so we shut typescript up by casting `value` to `never`. | |
--> | |
<ToggleGroupPrimitive.Root | |
bind:value={value as never} | |
bind:ref | |
data-slot="toggle-group" | |
data-variant={variant} | |
data-size={size} | |
class={cn( | |
"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs", | |
className | |
)} | |
{...restProps} | |
/> | |