import clsx from 'clsx'; import { useMemo } from 'react'; import { globals } from '@/utils/constants'; import { CheckboxChecked } from '../Icons'; import { CProps } from '../props'; export interface CheckboxProps extends Omit { /** Label to display next to the checkbox. */ label?: string; /** Indicates whether the checkbox is disabled. */ disabled?: boolean; /** Current value - `true` or `false`. */ value: boolean; /** Callback to set the `value`. */ setValue?: (newValue: boolean) => void; } /** * Checkbox component that allows users to toggle a boolean value. */ function Checkbox({ disabled, label, title, titleHtml, hideTitle, className, value, setValue, ...restProps }: CheckboxProps) { const cursor = useMemo(() => { if (disabled) { return 'cursor-arrow'; } else if (setValue) { return 'cursor-pointer'; } else { return ''; } }, [disabled, setValue]); function handleClick(event: CProps.EventMouse): void { event.preventDefault(); event.stopPropagation(); if (disabled || !setValue) { return; } setValue(!value); } return ( ); } export default Checkbox;