| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
							- 'use client'
 
- import React, { useEffect, useState } from 'react'
 
- import { Switch as OriginalSwitch } from '@headlessui/react'
 
- import classNames from '@/utils/classnames'
 
- type SwitchProps = {
 
-   onChange?: (value: boolean) => void
 
-   size?: 'sm' | 'md' | 'lg' | 'l'
 
-   defaultValue?: boolean
 
-   disabled?: boolean
 
-   className?: string
 
- }
 
- const Switch = React.forwardRef(
 
-   ({ onChange, size = 'md', defaultValue = false, disabled = false, className }: SwitchProps,
 
-     propRef: React.Ref<HTMLButtonElement>) => {
 
-     const [enabled, setEnabled] = useState(defaultValue)
 
-     useEffect(() => {
 
-       setEnabled(defaultValue)
 
-     }, [defaultValue])
 
-     const wrapStyle = {
 
-       lg: 'h-6 w-11',
 
-       l: 'h-5 w-9',
 
-       md: 'h-4 w-7',
 
-       sm: 'h-3 w-5',
 
-     }
 
-     const circleStyle = {
 
-       lg: 'h-5 w-5',
 
-       l: 'h-4 w-4',
 
-       md: 'h-3 w-3',
 
-       sm: 'h-2 w-2',
 
-     }
 
-     const translateLeft = {
 
-       lg: 'translate-x-5',
 
-       l: 'translate-x-4',
 
-       md: 'translate-x-3',
 
-       sm: 'translate-x-2',
 
-     }
 
-     return (
 
-       <OriginalSwitch
 
-         ref={propRef}
 
-         checked={enabled}
 
-         onChange={(checked: boolean) => {
 
-           if (disabled)
 
-             return
 
-           setEnabled(checked)
 
-           onChange?.(checked)
 
-         }}
 
-         className={classNames(
 
-           wrapStyle[size],
 
-           enabled ? 'bg-components-toggle-bg' : 'bg-components-toggle-bg-unchecked',
 
-           'relative inline-flex  flex-shrink-0 cursor-pointer rounded-[5px] border-2 border-transparent transition-colors duration-200 ease-in-out',
 
-           disabled ? '!opacity-50 !cursor-not-allowed' : '',
 
-           className,
 
-         )}
 
-       >
 
-         <span
 
-           aria-hidden="true"
 
-           className={classNames(
 
-             circleStyle[size],
 
-             enabled ? translateLeft[size] : 'translate-x-0',
 
-             'pointer-events-none inline-block transform rounded-[3px] bg-components-toggle-knob shadow ring-0 transition duration-200 ease-in-out',
 
-           )}
 
-         />
 
-       </OriginalSwitch>
 
-     )
 
-   })
 
- Switch.displayName = 'Switch'
 
- export default React.memo(Switch)
 
 
  |