import { getColors } from '@/themes/getColors'; import { CheckSquareFilled, MinusSquareFilled } from '@ant-design/icons'; import { Box } from '@mui/material'; function getColorStyle({ color, theme }: { color: 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success'; theme: any; }): any { const colors = getColors(theme, color); // @ts-ignore const { lighter, main, dark } = colors; return { '&:hover': { backgroundColor: lighter, '& .icon': { borderColor: main } }, '&.Mui-focusVisible': { outline: `2px solid ${dark}`, outlineOffset: -4 } }; } function getSizeStyle(size: 'small' | 'medium' | 'large'): any { switch (size) { case 'small': return { size: 16, fontSize: 1, position: 1 }; case 'large': return { size: 24, fontSize: 1.6, position: 2 }; case 'medium': default: return { size: 20, fontSize: 1.35, position: 2 }; } } function checkboxStyle(size: 'small' | 'medium' | 'large'): any { const sizes = getSizeStyle(size); return { '& .icon': { width: sizes.size, height: sizes.size, '& .filled': { fontSize: `${sizes.fontSize}rem`, top: -sizes.position, left: -sizes.position } } }; } function Checkbox(theme: any): any { const { palette } = theme; return { MuiCheckbox: { defaultProps: { className: 'size-small', icon: ( ), checkedIcon: ( ), indeterminateIcon: ( ) }, styleOverrides: { root: { borderRadius: 0, color: palette.secondary[300], '&.size-small': { ...checkboxStyle('small') }, '&.size-medium': { ...checkboxStyle('medium') }, '&.size-large': { ...checkboxStyle('large') } }, colorPrimary: getColorStyle({ color: 'primary', theme }), colorSecondary: getColorStyle({ color: 'secondary', theme }), colorSuccess: getColorStyle({ color: 'success', theme }), colorWarning: getColorStyle({ color: 'warning', theme }), colorInfo: getColorStyle({ color: 'info', theme }), colorError: getColorStyle({ color: 'error', theme }) } } }; } export { Checkbox };