/* * @Author: ZhaoYing * @Date: 2026-02-02 15:01:59 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-03-17 15:35:34 */ /** * ButtonCheckbox - A custom checkbox component styled as a button * * This component provides a button-like interface for checkbox functionality, * with support for custom icons and visual states (checked/unchecked). * * @component */ import { type FC, type ReactNode, useEffect } from 'react'; import { type RadioGroupProps, Flex } from 'antd'; import clsx from 'clsx' // Button checkbox component props interface ButtonCheckboxProps extends Omit { /** Whether the checkbox is checked */ checked?: boolean; /** Callback fired when value changes (for side effects) */ onValueChange?: (checked: boolean) => void; /** Callback fired when checkbox state changes */ onChange?: (checked: boolean) => void; /** Icon path for unchecked state */ icon?: string; /** Icon path for checked state */ checkedIcon?: string; /** Button content */ children?: ReactNode cicle?: boolean; } const ButtonCheckbox: FC = ({ checked = false, onValueChange, onChange, icon, checkedIcon, children, cicle = false }) => { // Listen to value changes and trigger side effects via onValueChange callback useEffect(() => { if (onValueChange) { onValueChange(checked); } }, [checked, onValueChange]); // Toggle checked state when button is clicked const handleChange = () => { if (onChange) { onChange(!checked); } } return ( {/* Display unchecked icon when not checked */} {icon && !checked && } {/* Display checked icon when checked */} {checkedIcon && checked && } {children} ); }; export default ButtonCheckbox;