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 };