Command Palette
Search for a command to run...
Switch
A control that allows the user to toggle between checked and not checked.
A switch component built on top of Radix UI Switch.
Installation
npx shadcn@latest add switch
Usage
import { Switch } from "@/components/ui/switch"
<Switch />
Examples
Default
import { Label } from "@/components/ui/label"import { Switch } from "@/components/ui/switch"export default function SwitchDemo() {return ( <div className="flex items-center space-x-2"> <Switch id="airplane-mode" /> <Label htmlFor="airplane-mode">Airplane Mode</Label> </div>)}
Form
"use client"import { zodResolver } from "@hookform/resolvers/zod"import { useForm } from "react-hook-form"import { z } from "zod"import { toast } from "sonner"import { Button } from "@/components/xfork-ui/button"import {Form,FormControl,FormDescription,FormField,FormItem,FormLabel,} from "@/components/ui/form"import { Switch } from "@/components/ui/switch"const FormSchema = z.object({marketing_emails: z.boolean().default(false).optional(),security_emails: z.boolean(),})export default function SwitchForm() {const form = useForm<z.infer<typeof FormSchema>>({ resolver: zodResolver(FormSchema), defaultValues: { security_emails: true, },})function onSubmit(data: z.infer<typeof FormSchema>) { toast({ title: "You submitted the following values:", description: ( <pre className="mt-2 w-[340px] rounded-md bg-slate-950 p-4"> <code className="text-white">{JSON.stringify(data, null, 2)}</code> </pre> ), })}return ( <Form {...form}> <form onSubmit={form.handleSubmit(onSubmit)} className="w-full space-y-6"> <div> <h3 className="mb-4 text-lg font-medium">Email Notifications</h3> <div className="space-y-4"> <FormField control={form.control} name="marketing_emails" render={({ field }) => ( <FormItem className="flex flex-row items-center justify-between rounded-lg border p-4"> <div className="space-y-0.5"> <FormLabel className="text-base"> Marketing emails </FormLabel> <FormDescription> Receive emails about new products, features, and more. </FormDescription> </div> <FormControl> <Switch checked={field.value} onCheckedChange={field.onChange} /> </FormControl> </FormItem> )} /> <FormField control={form.control} name="security_emails" render={({ field }) => ( <FormItem className="flex flex-row items-center justify-between rounded-lg border p-4"> <div className="space-y-0.5"> <FormLabel className="text-base">Security emails</FormLabel> <FormDescription> Receive emails about your account security. </FormDescription> </div> <FormControl> <Switch checked={field.value} onCheckedChange={field.onChange} disabled aria-readonly /> </FormControl> </FormItem> )} /> </div> </div> <Button type="submit">Submit</Button> </form> </Form>)}
Props
Switch
Extends React.ComponentProps<typeof SwitchPrimitive.Root>
| Prop | Type | Default | Description |
| :-- | :-- | :-- | :-- |
| checked
| boolean
| undefined
| The controlled state of the switch. |
| defaultChecked
| boolean
| undefined
| The default state when initially rendered. |
| onCheckedChange
| (checked: boolean) => void
| undefined
| Event handler called when the checked state changes. |
| disabled
| boolean
| false
| When true
, prevents the user from interacting with the switch. |