mirror of
https://github.com/vercel/commerce.git
synced 2025-03-27 15:55:54 +00:00
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import React, { FC } from 'react'
|
|
import { Switch } from '@headlessui/react'
|
|
import { HiSun, HiMoon } from 'react-icons/hi'
|
|
interface Props {
|
|
className?: string
|
|
checked: boolean
|
|
onChange: any
|
|
}
|
|
|
|
const Toggle: FC<Props> = ({ className, checked, onChange }) => {
|
|
return (
|
|
<Switch
|
|
checked={checked}
|
|
onChange={onChange}
|
|
className="focus:outline-none"
|
|
>
|
|
<span
|
|
role="checkbox"
|
|
aria-checked="false"
|
|
tabIndex={0}
|
|
className={`${
|
|
checked ? 'bg-gray-800' : 'bg-gray-200'
|
|
} relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:shadow-outline`}
|
|
>
|
|
<span
|
|
aria-hidden="true"
|
|
className={`${
|
|
checked ? 'translate-x-5' : 'translate-x-0'
|
|
} translate-x-0 relative inline-block h-5 w-5 rounded-full bg-white shadow transform transition ease-in-out duration-200`}
|
|
>
|
|
<span
|
|
className={`${
|
|
checked
|
|
? 'opacity-0 ease-out duration-100'
|
|
: 'opacity-100 ease-in duration-200'
|
|
} absolute inset-0 h-full w-full flex items-center justify-center transition-opacity`}
|
|
>
|
|
<HiSun className="h-3 w-3 text-gray-400" />
|
|
</span>
|
|
<span
|
|
className={`${
|
|
checked
|
|
? 'opacity-100 ease-in duration-200'
|
|
: 'opacity-0 ease-out duration-100'
|
|
} opacity-0 ease-out duration-100 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity`}
|
|
>
|
|
<HiMoon className="h-3 w-3 text-yellow-400" />
|
|
</span>
|
|
</span>
|
|
</span>
|
|
</Switch>
|
|
)
|
|
}
|
|
|
|
export default Toggle
|