Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 46 lines 1.3 kB view raw
1import { Switch } from "@headlessui/react"; 2import { cva } from "class-variance-authority"; 3import { memo } from "react"; 4 5interface ToggleProps { 6 disabled?: boolean; 7 on: boolean; 8 setOn: (on: boolean) => void; 9} 10 11const switchVariants = cva( 12 "inline-flex h-[22px] w-[42.5px] min-w-[42.5px] items-center rounded-full border-2 border-transparent outline-hidden duration-200 ease-in-out", 13 { 14 defaultVariants: { checked: false, disabled: false }, 15 variants: { 16 checked: { 17 false: "bg-gray-200 dark:bg-gray-500", 18 true: "bg-black dark:bg-white" 19 }, 20 disabled: { false: "", true: "cursor-not-allowed opacity-50" } 21 } 22 } 23); 24 25const thumbVariants = cva( 26 "pointer-events-none inline-block size-[18px] transform rounded-full bg-white shadow-lg ring-0 transition duration-200 ease-in-out dark:bg-black", 27 { 28 defaultVariants: { checked: false }, 29 variants: { checked: { false: "translate-x-0", true: "translate-x-5" } } 30 } 31); 32 33const Toggle = ({ disabled = false, on, setOn }: ToggleProps) => { 34 return ( 35 <Switch 36 checked={on} 37 className={switchVariants({ checked: on, disabled })} 38 disabled={disabled} 39 onChange={setOn} 40 > 41 <span className={thumbVariants({ checked: on })} /> 42 </Switch> 43 ); 44}; 45 46export default memo(Toggle);