Switch
The iOS toggle with the springy knob.
SwiftUI: Toggle
Installation
npx shadcn@latest add https://cupertino-ui.baltoon.jp/r/switch.jsonRequires the theme tokens — see Installation if this is your first component.
Source
"use client";
import * as React from "react";
import { Switch as SwitchPrimitive } from "radix-ui";
import { cn } from "@/lib/utils";
/**
* SwiftUI Toggle. iOS switch dimensions (51x31pt) with the
* springy knob and systemGreen on-state.
*/
function Switch({
className,
...props
}: React.ComponentProps<typeof SwitchPrimitive.Root>) {
return (
<SwitchPrimitive.Root
data-slot="switch"
className={cn(
"peer inline-flex h-[31px] w-[51px] shrink-0 cursor-default items-center rounded-full bg-fill outline-none transition-colors duration-200 ease-out focus-visible:ring-[3px] focus-visible:ring-blue/40 disabled:opacity-40 data-[state=checked]:bg-green",
className
)}
{...props}
>
<SwitchPrimitive.Thumb
data-slot="switch-thumb"
className={cn(
"pointer-events-none block size-[27px] rounded-full bg-white shadow-[0_0_0_0.5px_rgba(0,0,0,0.04),0_3px_8px_rgba(0,0,0,0.15),0_3px_1px_rgba(0,0,0,0.06)] transition-transform duration-200 ease-out data-[state=checked]:translate-x-[22px] data-[state=unchecked]:translate-x-[2px]"
)}
/>
</SwitchPrimitive.Root>
);
}
export { Switch };