hensei-web/components/common/Switch/index.tsx

58 lines
1.1 KiB
TypeScript

import React from 'react'
import * as RadixSwitch from '@radix-ui/react-switch'
import classNames from 'classnames'
import styles from './index.module.scss'
interface Props
extends React.DetailedHTMLProps<
React.InputHTMLAttributes<HTMLInputElement>,
HTMLInputElement
> {
thumbClass?: string
onCheckedChange: (checked: boolean) => void
}
const Switch = (props: Props) => {
const {
checked,
className,
disabled,
name,
onCheckedChange,
required,
thumbClass,
value,
} = props
const mainClasses = classNames(
{
[styles.switch]: true,
},
className?.split(' ').map((c) => styles[c])
)
const thumbClasses = classNames(
{
[styles.thumb]: true,
},
thumbClass?.split(' ').map((c) => styles[c])
)
return (
<RadixSwitch.Root
className={mainClasses}
checked={checked}
name={name}
disabled={disabled}
required={required}
value={value}
tabIndex={props.tabIndex}
onCheckedChange={onCheckedChange}
>
<RadixSwitch.Thumb className={thumbClasses} />
</RadixSwitch.Root>
)
}
export default Switch