Files
yaak/src-web/components/core/Checkbox.tsx
2023-03-20 01:08:41 -07:00

36 lines
1022 B
TypeScript

import type { CheckedState } from '@radix-ui/react-checkbox';
import * as CB from '@radix-ui/react-checkbox';
import classnames from 'classnames';
import { Icon } from './Icon';
interface Props {
checked: CheckedState;
onChange: (checked: CheckedState) => void;
disabled?: boolean;
className?: string;
}
export function Checkbox({ checked, onChange, className, disabled }: Props) {
return (
<CB.Root
disabled={disabled}
checked={checked}
onCheckedChange={onChange}
className={classnames(
className,
'flex-shrink-0 w-4 h-4 border border-gray-200 rounded',
'focus:border-focus',
'disabled:opacity-disabled',
'outline-none',
checked && 'bg-gray-200/10',
// Remove focus style
)}
>
<CB.Indicator className="flex items-center justify-center">
{checked === 'indeterminate' && <Icon icon="dividerH" />}
{checked === true && <Icon size="sm" icon="check" />}
</CB.Indicator>
</CB.Root>
);
}