import { Label } from "@/components/ui/label";
import { Switch } from "@/components/ui/switch";
export function SwitchDemo() {
return (
<div className="flex items-center space-x-2">
<Switch id="airplane-mode" />
<Label htmlFor="airplane-mode">Airplane Mode</Label>
</div>
);
}
pnpm dlx shadcn@latest add https://herocn.dev/r/switch.jsonimport { Switch } from "@/components/ui/switch"<Switch />Focus is shared across devices, and turns off when you leave the app.
import {
Field,
FieldContent,
FieldDescription,
FieldLabel,
} from "@/components/ui/field";
import { Switch } from "@/components/ui/switch";
export function SwitchDescription() {
return (
<Field orientation="horizontal" className="max-w-sm">
<FieldContent>
<FieldLabel htmlFor="switch-focus-mode">
Share across devices
</FieldLabel>
<FieldDescription>
Focus is shared across devices, and turns off when you leave the app.
</FieldDescription>
</FieldContent>
<Switch id="switch-focus-mode" />
</Field>
);
}
Card-style selection where FieldLabel wraps the entire Field for a clickable card pattern.
import {
Field,
FieldContent,
FieldDescription,
FieldGroup,
FieldLabel,
FieldTitle,
} from "@/components/ui/field";
import { Switch } from "@/components/ui/switch";
export function SwitchChoiceCard() {
return (
<FieldGroup className="w-full max-w-sm">
<FieldLabel htmlFor="switch-share">
<Field orientation="horizontal">
<FieldContent>
<FieldTitle>Share across devices</FieldTitle>
<FieldDescription>
Focus is shared across devices, and turns off when you leave the
app.
</FieldDescription>
</FieldContent>
<Switch id="switch-share" />
</Field>
</FieldLabel>
<FieldLabel htmlFor="switch-notifications">
<Field orientation="horizontal">
<FieldContent>
<FieldTitle>Enable notifications</FieldTitle>
<FieldDescription>
Receive notifications when focus mode is enabled or disabled.
</FieldDescription>
</FieldContent>
<Switch id="switch-notifications" defaultChecked />
</Field>
</FieldLabel>
</FieldGroup>
);
}
Add the disabled prop to the Switch component to disable the switch. Add the data-disabled prop to the Field component for styling.
import { Field, FieldLabel } from "@/components/ui/field";
import { Switch } from "@/components/ui/switch";
export function SwitchDisabled() {
return (
<Field orientation="horizontal" data-disabled className="w-fit">
<Switch id="switch-disabled-unchecked" disabled />
<FieldLabel htmlFor="switch-disabled-unchecked">Disabled</FieldLabel>
</Field>
);
}
Add the aria-invalid prop to the Switch component to indicate an invalid state. Add the data-invalid prop to the Field component for styling.
You must accept the terms and conditions to continue.
import {
Field,
FieldContent,
FieldDescription,
FieldLabel,
} from "@/components/ui/field";
import { Switch } from "@/components/ui/switch";
export function SwitchInvalid() {
return (
<Field orientation="horizontal" className="max-w-sm" data-invalid>
<FieldContent>
<FieldLabel htmlFor="switch-terms">
Accept terms and conditions
</FieldLabel>
<FieldDescription>
You must accept the terms and conditions to continue.
</FieldDescription>
</FieldContent>
<Switch id="switch-terms" aria-invalid />
</Field>
);
}
Use the size prop to change the size of the switch.
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field";
import { Switch } from "@/components/ui/switch";
export function SwitchSizes() {
return (
<FieldGroup className="w-full max-w-[10rem]">
<Field orientation="horizontal">
<Switch id="switch-size-sm" size="sm" />
<FieldLabel htmlFor="switch-size-sm">Small</FieldLabel>
</Field>
<Field orientation="horizontal">
<Switch id="switch-size-default" size="default" />
<FieldLabel htmlFor="switch-size-default">Default</FieldLabel>
</Field>
<Field orientation="horizontal">
<Switch id="switch-size-large" size="lg" />
<FieldLabel htmlFor="switch-size-large">Large</FieldLabel>
</Field>
</FieldGroup>
);
}
يتم مشاركة التركيز عبر الأجهزة، ويتم إيقاف تشغيله عند مغادرة التطبيق.
"use client";
import {
type Translations,
useTranslation,
} from "@/components/language-selector";
import {
Field,
FieldContent,
FieldDescription,
FieldLabel,
} from "@/components/ui/field";
import { Switch } from "@/components/ui/switch";
const translations: Translations = {
en: {
dir: "ltr",
values: {
label: "Share across devices",
description:
"Focus is shared across devices, and turns off when you leave the app.",
},
},
ar: {
dir: "rtl",
values: {
label: "المشاركة عبر الأجهزة",
description:
"يتم مشاركة التركيز عبر الأجهزة، ويتم إيقاف تشغيله عند مغادرة التطبيق.",
},
},
he: {
dir: "rtl",
values: {
label: "שיתוף בין מכשירים",
description: "המיקוד משותף בין מכשירים, וכבה כשאתה עוזב את האפליקציה.",
},
},
};
export function SwitchRtl() {
const { dir, language, t } = useTranslation(translations, "ar");
return (
<div lang={language} dir={dir}>
<Field orientation="horizontal" className="max-w-sm">
<FieldContent>
<FieldLabel htmlFor="switch-focus-mode-rtl">{t.label}</FieldLabel>
<FieldDescription>{t.description}</FieldDescription>
</FieldContent>
<Switch id="switch-focus-mode-rtl" />
</Field>
</div>
);
}
| Prop | Type | Default |
|---|---|---|
| size | "default" | "sm" | "lg" | "default" |
| disabled | boolean | false |
| checked | boolean | — |
| defaultChecked | boolean | false |
| onCheckedChange | (checked: boolean) => void | — |