{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "base-switch", "type": "registry:ui", "title": "Base Switch", "description": "A control that indicates whether a setting is on or off.", "dependencies": [ "motion", "@base-ui-components/react" ], "files": [ { "path": "registry/base/switch/index.tsx", "content": "'use client';\n\nimport * as React from 'react';\nimport { Switch as SwitchPrimitives } from '@base-ui-components/react/switch';\nimport { motion, type HTMLMotionProps } from 'motion/react';\n\nimport { cn } from '@/lib/utils';\n\ntype SwitchProps = Omit<\n React.ComponentProps,\n 'render'\n> & {\n motionProps?: HTMLMotionProps<'button'>;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n thumbIcon?: React.ReactNode;\n};\n\nfunction Switch({\n className,\n leftIcon,\n rightIcon,\n thumbIcon,\n onCheckedChange,\n motionProps,\n ...props\n}: SwitchProps) {\n const [isChecked, setIsChecked] = React.useState(\n props?.checked ?? props?.defaultChecked ?? false,\n );\n const [isTapped, setIsTapped] = React.useState(false);\n\n React.useEffect(() => {\n if (props?.checked !== undefined) setIsChecked(props.checked);\n }, [props?.checked]);\n\n const handleCheckedChange = React.useCallback(\n (checked: boolean, event: Event) => {\n setIsChecked(checked);\n onCheckedChange?.(checked, event);\n },\n [onCheckedChange],\n );\n\n return (\n setIsTapped(true)}\n onTapCancel={() => setIsTapped(false)}\n onTap={() => setIsTapped(false)}\n {...motionProps}\n />\n }\n >\n {leftIcon && (\n \n {typeof leftIcon !== 'string' ? leftIcon : null}\n \n )}\n\n {rightIcon && (\n \n {typeof rightIcon !== 'string' ? rightIcon : null}\n \n )}\n\n \n }\n >\n {thumbIcon && typeof thumbIcon !== 'string' ? thumbIcon : null}\n \n \n );\n}\n\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch, type SwitchProps };\n", "type": "registry:ui", "target": "components/animate-ui/base/switch.tsx" } ] }