improve styles & adapt brand colors
							
								
								
									
										
											BIN
										
									
								
								public/devices/cznic_turris-omnia.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 95 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/optimcloud_d50.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 17 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/devices/xunison_d50.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 586 KiB | 
| Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 586 KiB | 
| @@ -14,6 +14,7 @@ import { | ||||
| import { useTranslation } from 'react-i18next'; | ||||
| import { ConfigurationFieldExplanation } from '../../ConfigurationFieldExplanation'; | ||||
| import { FieldInputProps } from 'models/Form'; | ||||
| import {Eye, EyeSlash } from 'iconsax-react'; | ||||
|  | ||||
| export interface StringInputProps extends FieldInputProps<string | undefined | string[]>, LayoutProps { | ||||
|   isError: boolean; | ||||
| @@ -77,12 +78,13 @@ const _StringInput: React.FC<StringInputProps> = ({ | ||||
|             value={value} | ||||
|             onChange={onChange} | ||||
|             onBlur={onBlur} | ||||
|             borderRadius="15px" | ||||
|             borderRadius="5px" | ||||
|             fontSize="sm" | ||||
|             type={hideButton && !show ? 'password' : 'text'} | ||||
|             autoComplete="off" | ||||
|             border="2px solid" | ||||
|             _disabled={{ opacity: 0.8, cursor: 'not-allowed' }} | ||||
|             boxShadow="-1px -1px 1px 0px #F0F0F3 inset, 1px 1px 1px 0px rgba(174, 174, 192, 0.25) inset" | ||||
|           /> | ||||
|           {hideButton && ( | ||||
|             <InputRightElement width="4.5rem"> | ||||
| @@ -91,8 +93,10 @@ const _StringInput: React.FC<StringInputProps> = ({ | ||||
|                 size="sm" | ||||
|                 onClick={setShow.toggle} | ||||
|                 _disabled={{ opacity: 0.8, cursor: 'not-allowed' }} | ||||
|                 border="none" | ||||
|                 bg="transparent" | ||||
|               > | ||||
|                 {show ? t('common.hide') : t('common.show')} | ||||
|                 {show ? <EyeSlash/> : <Eye/>} | ||||
|               </Button> | ||||
|             </InputRightElement> | ||||
|           )} | ||||
|   | ||||
| @@ -42,7 +42,7 @@ export const NavLinkButton = ({ isActive, route, toggleSidebar }: Props) => { | ||||
|             }} | ||||
|           > | ||||
|             <Flex alignItems="center" w="100%"> | ||||
|               <IconBox color="blue.300" h="30px" w="30px" me="6px" transition={variantChange} fontWeight="bold"> | ||||
|               <IconBox color="#489BFF" h="30px" w="30px" me="6px" transition={variantChange} fontWeight="bold"> | ||||
|                 {route.icon(false)} | ||||
|               </IconBox> | ||||
|               <Text color={activeTextColor} fontSize="md" fontWeight="bold"> | ||||
| @@ -66,7 +66,7 @@ export const NavLinkButton = ({ isActive, route, toggleSidebar }: Props) => { | ||||
|             }} | ||||
|           > | ||||
|             <Flex alignItems="center" w="100%"> | ||||
|               <IconBox color="blue.300" h="30px" w="30px" me="6px" transition={variantChange} fontWeight="bold"> | ||||
|               <IconBox color="#489BFF" h="30px" w="30px" me="6px" transition={variantChange} fontWeight="bold"> | ||||
|                 {route.icon(false)} | ||||
|               </IconBox> | ||||
|               <Text color={inactiveTextColor} fontSize="md" fontWeight="bold"> | ||||
|   | ||||
| @@ -11,10 +11,10 @@ type Props = { | ||||
|  | ||||
| const SubNavigationButton = ({ isActive, route }: Props) => { | ||||
|   const { t } = useTranslation(); | ||||
|   const activeTextColor = useColorModeValue('gray.700', 'white'); | ||||
|   const activeTextColor = useColorModeValue('white', 'white'); | ||||
|   const inactiveTextColor = useColorModeValue('gray.600', 'gray.200'); | ||||
|   const activeBg = useColorModeValue('blue.50', 'blue.900'); | ||||
|   const hoverBg = useColorModeValue('blue.100', 'blue.800'); | ||||
|   const activeBg = useColorModeValue('#67ACFF', 'blue.900'); | ||||
|   const hoverBg = useColorModeValue('#4499FF', 'blue.800'); | ||||
|  | ||||
|   const isCurrentlyActive = isActive(route.path); | ||||
|  | ||||
| @@ -27,7 +27,11 @@ const SubNavigationButton = ({ isActive, route }: Props) => { | ||||
|         bg={isCurrentlyActive ? activeBg : 'transparent'} | ||||
|         _hover={{ | ||||
|           bg: hoverBg, | ||||
|           boxShadow: "1.5px 1.5px 3px 0px rgba(174, 174, 192, 0.40), -1px -1px 3px 0px #FFF" | ||||
|         }} | ||||
|         borderStartRadius="0px" | ||||
|         borderRadius="10px" | ||||
|         mb="1px" | ||||
|         border="none" | ||||
|       > | ||||
|         {t(route.name)} | ||||
|   | ||||
| @@ -24,7 +24,7 @@ type Props = { | ||||
| const NestedNavButton = ({ isActive, route }: Props) => { | ||||
|   const { t } = useTranslation(); | ||||
|   const inactiveTextColor = useColorModeValue('gray.600', 'gray.200'); | ||||
|   const hoverBg = useColorModeValue('blue.100', 'blue.800'); | ||||
|   const hoverBg = useColorModeValue('#C6E0FF', 'blue.800'); | ||||
|  | ||||
|   return ( | ||||
|     <AccordionItem w="152px" borderTop="0px" borderBottom="0px"> | ||||
| @@ -37,11 +37,11 @@ const NestedNavButton = ({ isActive, route }: Props) => { | ||||
|         _hover={{ | ||||
|           bg: hoverBg, | ||||
|         }} | ||||
|         borderRadius="15px" | ||||
|         borderRadius="0px" | ||||
|         w="100%" | ||||
|       > | ||||
|         <Flex alignItems="center" w="100%"> | ||||
|           <IconBox color="blue.300" h="30px" w="30px" me="6px" transition={variantChange} fontWeight="bold"> | ||||
|           <IconBox color="#489BFF" h="30px" w="30px" me="6px" transition={variantChange} fontWeight="bold"> | ||||
|             {route.icon(false)} | ||||
|           </IconBox> | ||||
|           <Text size="md" fontWeight="bold" color={inactiveTextColor}> | ||||
| @@ -51,7 +51,7 @@ const NestedNavButton = ({ isActive, route }: Props) => { | ||||
|         <AccordionIcon /> | ||||
|       </AccordionButton> | ||||
|       <AccordionPanel pl="18px" paddingEnd={0} pr="-18px"> | ||||
|         <Box pl={1} pr={-1} borderLeft="1px solid #63b3ed"> | ||||
|         <Box pl={1} pr={-1} borderLeft="1px solid #489BFF"> | ||||
|           {route.children.map((subRoute) => ( | ||||
|             <SubNavigationButton key={subRoute.path} route={subRoute} isActive={isActive} /> | ||||
|           ))} | ||||
|   | ||||
| @@ -122,18 +122,19 @@ export const Sidebar = ({ routes, isOpen, toggle, logo, version, topNav, childre | ||||
|         <Box hidden={isCompact} position="fixed"> | ||||
|           <Box | ||||
|             shadow={navbarShadow} | ||||
|             bg={useColorModeValue('white', 'gray.700')} | ||||
|             bg={useColorModeValue('#FEFEFE', 'gray.700')} | ||||
|             transition={variantChange} | ||||
|             w="200px" | ||||
|             maxW="200px" | ||||
|             h="calc(100vh - 32px)" | ||||
|             my="16px" | ||||
|             ml="16px" | ||||
|             borderRadius="15px" | ||||
|             border="0.5px solid" | ||||
|             borderRadius="10px" | ||||
|             border="0.5px solid none" | ||||
|             boxShadow="4px 4px 6px 0px rgba(174, 174, 192, 0.40), -1px -1px 3px 0px #FFF;" | ||||
|           > | ||||
|             {brand} | ||||
|             <Flex direction="column" h="calc(100vh - 160px)" alignItems="center" overflowY="auto"> | ||||
|             <Flex direction="column" h="calc(100vh - 185px)" alignItems="center" overflowY="auto"> | ||||
|               {sidebarContent} | ||||
|             </Flex> | ||||
|           </Box> | ||||
|   | ||||
| @@ -40,7 +40,7 @@ const _LoginForm: React.FC<_LoginFormProps> = ({ setActiveForm }) => { | ||||
|   const { t } = useTranslation(); | ||||
|   const { setToken } = useAuth(); | ||||
|   const { accessPolicyLink, passwordPolicyLink } = useApiRequirements(); | ||||
|   const titleColor = useColorModeValue('blue.300', 'white'); | ||||
|   const titleColor = useColorModeValue('#489BFF', 'white'); | ||||
|   const textColor = useColorModeValue('gray.400', 'white'); | ||||
|   const { mutateAsync: login, error } = useLogin(); | ||||
|   const forgotPassword = () => setActiveForm({ form: 'forgot-password' }); | ||||
| @@ -129,8 +129,11 @@ const _LoginForm: React.FC<_LoginFormProps> = ({ setActiveForm }) => { | ||||
|                 color={textColor} | ||||
|                 onClick={forgotPassword} | ||||
|                 fontWeight="medium" | ||||
|                 variant="ghost" | ||||
|                 variant="none" | ||||
|                 pl={{ base: '0px' }} | ||||
|                 _hover={{ | ||||
|                 bg:"none" | ||||
|                 }} | ||||
|               > | ||||
|                 {t('login.forgot_password')} | ||||
|               </Button> | ||||
| @@ -143,17 +146,18 @@ const _LoginForm: React.FC<_LoginFormProps> = ({ setActiveForm }) => { | ||||
|             <Button | ||||
|               fontSize="15px" | ||||
|               type="submit" | ||||
|               bg="blue.300" | ||||
|               bg="#489BFF" | ||||
|               w="100%" | ||||
|               h="45" | ||||
|               mb="20px" | ||||
|               color="white" | ||||
|               mt="20px" | ||||
|               borderRadius="5px" | ||||
|               _hover={{ | ||||
|                 bg: 'blue.500', | ||||
|                 bg: '#489BFF', | ||||
|               }} | ||||
|               _active={{ | ||||
|                 bg: 'blue.300', | ||||
|                 bg:  "#489BFF", | ||||
|               }} | ||||
|               isLoading={isSubmitting} | ||||
|               isDisabled={!isValid} | ||||
|   | ||||
| @@ -14,7 +14,7 @@ interface LoginPageProps { | ||||
| const LoginPage = ({ lightLogo, darkLogo }: LoginPageProps) => { | ||||
|   const [activeForm, setActiveForm] = useState<LoginFormProps>({ form: 'login' }); | ||||
|   const { colorMode } = useColorMode(); | ||||
|   const loginBg = useColorModeValue('gray.100', 'gray.700'); | ||||
|   const loginBg = useColorModeValue('#F0F0F3', 'gray.700'); | ||||
|  | ||||
|   const getForm = React.useCallback(() => { | ||||
|     if (activeForm.form === 'login') return <LoginForm setActiveForm={setActiveForm} />; | ||||
| @@ -29,16 +29,16 @@ const LoginPage = ({ lightLogo, darkLogo }: LoginPageProps) => { | ||||
|     <Box px="5%" h="100vh" display="flex" alignItems="center"> | ||||
|       <Center display="block" w="100%"> | ||||
|         <Center h="100%" w="100%" mb={6} alignItems="center"> | ||||
|           <Image maxH="300px" w="100%" maxW="600px" src={colorMode === 'light' ? lightLogo : darkLogo} /> | ||||
|           <Image maxH="185px" w="100%" maxW="600px" src={colorMode === 'light' ? lightLogo : darkLogo} /> | ||||
|         </Center> | ||||
|         <Center> | ||||
|           <Flex | ||||
|             borderRadius="40px" | ||||
|             borderRadius="15px" | ||||
|             w="100%" | ||||
|             maxW="600px" | ||||
|             bgColor={loginBg} | ||||
|             p="48px" | ||||
|             boxShadow={colorMode === 'light' ? 'xl' : 'dark-lg'} | ||||
|             boxShadow="1.5px 1.5px 3px 0px rgba(174, 174, 192, 0.40), -1px -1px 3px 0px #FFF" | ||||
|             direction="column" | ||||
|           > | ||||
|             {getForm()} | ||||
|   | ||||
| @@ -12,16 +12,16 @@ const Card = { | ||||
|     panel: (props: { colorMode: string }) => ({ | ||||
|       bg: props.colorMode === 'dark' ? 'gray.700' : 'white', | ||||
|       width: '100%', | ||||
|       boxShadow: '0px 4px 12px rgba(0, 0, 0, 0.05)', | ||||
|       borderRadius: '15px', | ||||
|       border: '0.5px solid', | ||||
|       boxShadow: '1.5px 1.5px 3px 0px rgba(174, 174, 192, 0.40), -1px -1px 3px 0px #FFF', | ||||
|       borderRadius: '10px', | ||||
|       border: '0.5px solid none', | ||||
|     }), | ||||
|     widget: (props: { colorMode: string }) => ({ | ||||
|       bg: props.colorMode === 'dark' ? 'gray.800' : 'gray.100', | ||||
|       width: '100%', | ||||
|       boxShadow: '0px 4px 6px rgba(0, 0, 0, 0.1)', | ||||
|       borderRadius: '15px', | ||||
|       border: '0.5px solid', | ||||
|       borderRadius: '5px', | ||||
|       border: '0.5px solid none', | ||||
|     }), | ||||
|   }, | ||||
|   defaultProps: { | ||||
|   | ||||
| @@ -45,7 +45,7 @@ export default { | ||||
|   styles: { | ||||
|     global: (props: { colorMode: string }) => ({ | ||||
|       body: { | ||||
|         bg: mode('gray.50', 'gray.800')(props), | ||||
|         bg: mode('#F0F0F3', 'gray.800')(props), | ||||
|         fontFamily: 'Inter, sans-serif', | ||||
|       }, | ||||
|       html: { | ||||
|   | ||||
 praveenkumarsirisolla
					praveenkumarsirisolla