import { alpha, type Theme, type Components } from "@mui/material/styles"; import { outlinedInputClasses } from "@mui/material/OutlinedInput"; import { svgIconClasses } from "@mui/material/SvgIcon"; import { toggleButtonGroupClasses } from "@mui/material/ToggleButtonGroup"; import { toggleButtonClasses } from "@mui/material/ToggleButton"; import CheckBoxOutlineBlankRoundedIcon from "@mui/icons-material/CheckBoxOutlineBlankRounded"; import CheckRoundedIcon from "@mui/icons-material/CheckRounded"; import RemoveRoundedIcon from "@mui/icons-material/RemoveRounded"; import { gray, brand } from "../themePrimitives"; /* eslint-disable import/prefer-default-export */ export const inputsCustomizations: Components = { MuiButtonBase: { defaultProps: { disableTouchRipple: true, disableRipple: true, }, styleOverrides: { root: ({ theme }) => ({ boxSizing: "border-box", transition: "all 100ms ease-in", "&:focus-visible": { outline: `3px solid ${alpha(theme.palette.primary.main, 0.5)}`, outlineOffset: "2px", }, }), }, }, MuiButton: { styleOverrides: { root: ({ theme }) => ({ boxShadow: "none", borderRadius: (theme.vars || theme).shape.borderRadius, textTransform: "none", variants: [ { props: { size: "small", }, style: { height: "2.25rem", padding: "8px 12px", }, }, { props: { size: "medium", }, style: { height: "2.5rem", // 40px }, }, { props: { color: "primary", variant: "contained", }, style: { color: "white", backgroundColor: gray[900], backgroundImage: `linear-gradient(to bottom, ${gray[700]}, ${gray[800]})`, boxShadow: `inset 0 1px 0 ${gray[600]}, inset 0 -1px 0 1px hsl(220, 0%, 0%)`, border: `1px solid ${gray[700]}`, "&:hover": { backgroundImage: "none", backgroundColor: gray[700], boxShadow: "none", }, "&:active": { backgroundColor: gray[800], }, ...theme.applyStyles("dark", { color: "black", backgroundColor: gray[50], backgroundImage: `linear-gradient(to bottom, ${gray[100]}, ${gray[50]})`, boxShadow: "inset 0 -1px 0 hsl(220, 30%, 80%)", border: `1px solid ${gray[50]}`, "&:hover": { backgroundImage: "none", backgroundColor: gray[300], boxShadow: "none", }, "&:active": { backgroundColor: gray[400], }, }), }, }, { props: { color: "secondary", variant: "contained", }, style: { color: "white", backgroundColor: brand[300], backgroundImage: `linear-gradient(to bottom, ${alpha( brand[400], 0.8 )}, ${brand[500]})`, boxShadow: `inset 0 2px 0 ${alpha( brand[200], 0.2 )}, inset 0 -2px 0 ${alpha(brand[700], 0.4)}`, border: `1px solid ${brand[500]}`, "&:hover": { backgroundColor: brand[700], boxShadow: "none", }, "&:active": { backgroundColor: brand[700], backgroundImage: "none", }, }, }, { props: { variant: "outlined", }, style: { color: (theme.vars || theme).palette.text.primary, border: "1px solid", borderColor: gray[200], backgroundColor: alpha(gray[50], 0.3), "&:hover": { backgroundColor: gray[100], borderColor: gray[300], }, "&:active": { backgroundColor: gray[200], }, ...theme.applyStyles("dark", { backgroundColor: gray[800], borderColor: gray[700], "&:hover": { backgroundColor: gray[900], borderColor: gray[600], }, "&:active": { backgroundColor: gray[900], }, }), }, }, { props: { color: "secondary", variant: "outlined", }, style: { color: brand[700], border: "1px solid", borderColor: brand[200], backgroundColor: brand[50], "&:hover": { backgroundColor: brand[100], borderColor: brand[400], }, "&:active": { backgroundColor: alpha(brand[200], 0.7), }, ...theme.applyStyles("dark", { color: brand[50], border: "1px solid", borderColor: brand[900], backgroundColor: alpha(brand[900], 0.3), "&:hover": { borderColor: brand[700], backgroundColor: alpha(brand[900], 0.6), }, "&:active": { backgroundColor: alpha(brand[900], 0.5), }, }), }, }, { props: { variant: "text", }, style: { color: gray[600], "&:hover": { backgroundColor: gray[100], }, "&:active": { backgroundColor: gray[200], }, ...theme.applyStyles("dark", { color: gray[50], "&:hover": { backgroundColor: gray[700], }, "&:active": { backgroundColor: alpha(gray[700], 0.7), }, }), }, }, { props: { color: "secondary", variant: "text", }, style: { color: brand[700], "&:hover": { backgroundColor: alpha(brand[100], 0.5), }, "&:active": { backgroundColor: alpha(brand[200], 0.7), }, ...theme.applyStyles("dark", { color: brand[100], "&:hover": { backgroundColor: alpha(brand[900], 0.5), }, "&:active": { backgroundColor: alpha(brand[900], 0.3), }, }), }, }, ], }), }, }, MuiIconButton: { styleOverrides: { root: ({ theme }) => ({ boxShadow: "none", borderRadius: (theme.vars || theme).shape.borderRadius, textTransform: "none", fontWeight: theme.typography.fontWeightMedium, letterSpacing: 0, color: (theme.vars || theme).palette.text.primary, border: "1px solid ", borderColor: gray[200], backgroundColor: alpha(gray[50], 0.3), "&:hover": { backgroundColor: gray[100], borderColor: gray[300], }, "&:active": { backgroundColor: gray[200], }, ...theme.applyStyles("dark", { backgroundColor: gray[800], borderColor: gray[700], "&:hover": { backgroundColor: gray[900], borderColor: gray[600], }, "&:active": { backgroundColor: gray[900], }, }), variants: [ { props: { size: "small", }, style: { width: "2.25rem", height: "2.25rem", padding: "0.25rem", [`& .${svgIconClasses.root}`]: { fontSize: "1rem" }, }, }, { props: { size: "medium", }, style: { width: "2.5rem", height: "2.5rem", }, }, ], }), }, }, MuiToggleButtonGroup: { styleOverrides: { root: ({ theme }) => ({ borderRadius: "10px", boxShadow: `0 4px 16px ${alpha(gray[400], 0.2)}`, [`& .${toggleButtonGroupClasses.selected}`]: { color: brand[500], }, ...theme.applyStyles("dark", { [`& .${toggleButtonGroupClasses.selected}`]: { color: "#fff", }, boxShadow: `0 4px 16px ${alpha(brand[700], 0.5)}`, }), }), }, }, MuiToggleButton: { styleOverrides: { root: ({ theme }) => ({ padding: "12px 16px", textTransform: "none", borderRadius: "10px", fontWeight: 500, ...theme.applyStyles("dark", { color: gray[400], boxShadow: "0 4px 16px rgba(0, 0, 0, 0.5)", [`&.${toggleButtonClasses.selected}`]: { color: brand[300], }, }), }), }, }, MuiCheckbox: { defaultProps: { disableRipple: true, icon: ( ), checkedIcon: , indeterminateIcon: , }, styleOverrides: { root: ({ theme }) => ({ margin: 10, height: 16, width: 16, borderRadius: 5, border: "1px solid ", borderColor: alpha(gray[300], 0.8), boxShadow: "0 0 0 1.5px hsla(210, 0%, 0%, 0.04) inset", backgroundColor: alpha(gray[100], 0.4), transition: "border-color, background-color, 120ms ease-in", "&:hover": { borderColor: brand[300], }, "&.Mui-focusVisible": { outline: `3px solid ${alpha(brand[500], 0.5)}`, outlineOffset: "2px", borderColor: brand[400], }, "&.Mui-checked": { color: "white", backgroundColor: brand[500], borderColor: brand[500], boxShadow: `none`, "&:hover": { backgroundColor: brand[600], }, }, ...theme.applyStyles("dark", { borderColor: alpha(gray[700], 0.8), boxShadow: "0 0 0 1.5px hsl(210, 0%, 0%) inset", backgroundColor: alpha(gray[900], 0.8), "&:hover": { borderColor: brand[300], }, "&.Mui-focusVisible": { borderColor: brand[400], outline: `3px solid ${alpha(brand[500], 0.5)}`, outlineOffset: "2px", }, }), }), }, }, MuiInputBase: { styleOverrides: { root: { border: "none", }, input: { "&::placeholder": { opacity: 0.7, color: gray[500], }, }, }, }, MuiOutlinedInput: { styleOverrides: { input: { padding: 0, }, root: ({ theme }) => ({ padding: "8px 12px", color: (theme.vars || theme).palette.text.primary, borderRadius: (theme.vars || theme).shape.borderRadius, border: `1px solid ${(theme.vars || theme).palette.divider}`, backgroundColor: (theme.vars || theme).palette.background.default, transition: "border 120ms ease-in", "&:hover": { borderColor: gray[400], }, [`&.${outlinedInputClasses.focused}`]: { outline: `3px solid ${alpha(brand[500], 0.5)}`, borderColor: brand[400], }, ...theme.applyStyles("dark", { "&:hover": { borderColor: gray[500], }, }), variants: [ { props: { size: "small", }, style: { height: "2.25rem", }, }, { props: { size: "medium", }, style: { height: "2.5rem", }, }, ], }), notchedOutline: { border: "none", }, }, }, MuiInputAdornment: { styleOverrides: { root: ({ theme }) => ({ color: (theme.vars || theme).palette.grey[500], ...theme.applyStyles("dark", { color: (theme.vars || theme).palette.grey[400], }), }), }, }, MuiFormLabel: { styleOverrides: { root: ({ theme }) => ({ typography: theme.typography.caption, marginBottom: 8, }), }, }, };