import * as React from "react"; import { styled } from '@mui/material/styles'; import InputBase from '@mui/material/InputBase'; import Badge, { BadgeProps } from '@mui/material/Badge'; import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; import { createTheme } from "@mui/material/styles"; import { Unstable_NumberInput as BaseNumberInput, NumberInputProps, numberInputClasses, } from '@mui/base/Unstable_NumberInput'; const Search =styled('div')(({ theme }) => ({ position: 'relative', borderRadius: theme.shape.borderRadius, backgroundColor: 'var(--alertGrayForeground)', marginRight: theme.spacing(2), marginLeft: 0, width: '100%', [theme.breakpoints.up('sm')]: { marginLeft: theme.spacing(3), width: 'auto', }, })) const SearchIconWrapper = styled('div')(({ theme }) => ({ padding: theme.spacing(0, 2), height: '100%', position: 'absolute', pointerEvents: 'none', display: 'flex', alignItems: 'center', justifyContent: 'center', })) const StyledInputBase = styled(InputBase)(({ theme }) => ({ color: 'inherit', '& .MuiInputBase-input': { padding: theme.spacing(1, 1, 1, 0), paddingLeft: `calc(1em + ${theme.spacing(4)})`, transition: theme.transitions.create('width'), width: '100%', [theme.breakpoints.up('md')]: { width: '100%', }, }, })) const StyledBadge = styled(Badge)(({ theme }) => ({ '& .MuiBadge-badge': { backgroundColor:'var(--alertAmberBackground)', right: 5, top: 0, border: `2px solid ${theme.palette.background.paper}`, padding: '0 4px', }, })) const grey = { 50: '#F3F6F9', 100: '#E5EAF2', 200: '#DAE2ED', 300: '#C7D0DD', 400: '#B0B8C4', 500: '#9DA8B7', 600: '#6B7A90', 700: '#434D5B', 800: '#303740', 900: '#1C2025', }; const StyledButton = styled('button')( ({ theme }) => ` display: flex; flex-flow: row nowrap; justify-content: center; align-items: center; appearance: none; padding: 0; width: 19px; height: 19px; font-family: system-ui, sans-serif; font-size: 0.875rem; line-height: 1; box-sizing: border-box; background: var(--accentIconForeground) !important; border: 0; color: var(--accentIconBorder); transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 120ms; &:hover { cursor: pointer; color: #FFF; background: var(--accentIconForeground) !important; border-color: var(--accentIconBorder) !important; } &.${numberInputClasses.incrementButton} { grid-column: 2/3; grid-row: 1/2; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid; border-bottom: 0; border-color: ${theme.palette.mode === 'dark' ? grey[700] : grey[200]}; background: ${theme.palette.mode === 'dark' ? grey[900] : grey[50]}; color: ${theme.palette.mode === 'dark' ? grey[200] : grey[900]}; &:hover { cursor: pointer; color: #FFF; background: var(--accentIconForeground) !important; border-color: var(--accentIconBorder); } } &.${numberInputClasses.decrementButton} { grid-column: 2/3; grid-row: 2/3; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border: 1px solid; border-color: ${theme.palette.mode === 'dark' ? grey[700] : grey[200]}; background: ${theme.palette.mode === 'dark' ? grey[900] : grey[50]}; color: ${theme.palette.mode === 'dark' ? grey[200] : grey[900]}; } & .arrow { transform: translateY(-1px); } `, ) const LightTooltip = styled(({ className, ...props }: TooltipProps) => ( ))(({ theme }) => ({ [`& .${tooltipClasses.tooltip}`]: { boxShadow: theme.shadows[1], fontSize: 15, }, })); const defaultTheme = createTheme({ components: { MuiListItemText: { styleOverrides: { secondary: { color: 'inherit', }, }, }, }, typography: { fontSize: 18 }, }); const CustomNumberInput =React.forwardRef(function CustomNumberInputfunction( props: NumberInputProps, ref: React.ForwardedRef, ) { return ( ); }) const StyledInputElement = styled('input')( () => ` font-size: 0.875rem; font-family: inherit; font-weight: 400; line-height: 1.5; grid-column: 1/2; grid-row: 1/3; color: var(--buttonBorderHover); background: inherit; border: none; border-radius: inherit; padding: 8px 12px; outline: 0; `, ); const StyledInputRoot: React.ElementType = styled('div')( ({ theme }) => ` font-family: 'IBM Plex Sans', sans-serif; font-weight: 400; border-radius: 8px; color: var(--accentIconBorder) ; background: ${theme.palette.mode === 'dark' ? grey[900] : '#fff'}; border: 1px solid var(--accentIconBorder); box-shadow: 0 2px 4px ${ theme.palette.mode === 'dark' ? 'rgba(0,0,0, 0.5)' : 'rgba(0,0,0, 0.05)' }; display: grid; grid-template-columns: 1fr 19px; grid-template-rows: 1fr 1fr; overflow: hidden; column-gap: 8px; padding: 4px; &.focused { border-color: var(--accentIconForeground)}; box-shadow: 0 0 0 3px var(--buttonBackgroundHover); & button:hover { background: var(--accentIconForeground) !important; } /* firefox */ &:focus-visible { outline: 0; } } `, ); export default {Search,SearchIconWrapper,StyledInputBase,StyledBadge,StyledInputRoot,StyledInputElement,StyledButton,CustomNumberInput,defaultTheme,LightTooltip}