You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
spa_instat_tv/src/features/AuthServiceApp/components/PasswordInput/index.tsx

77 lines
1.5 KiB

import type { ComponentProps } from 'react'
import styled, { css } from 'styled-components/macro'
import { isMobileDevice } from 'config/userAgent'
import { useToggle } from 'hooks/useToggle'
import { Input } from '../Input'
const VisibilityButton = styled.button`
border: none;
background: none;
background-color: transparent;
padding: 0;
display: flex;
cursor: pointer;
width: 50px;
height: 100%;
opacity: 0.4;
transition: background-color 0.3s;
:hover {
background-color: rgba(255, 255, 255, 0.22);
}
::after {
content: '';
width: 100%;
height: 100%;
background-image: url(/images/visibility.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 22px 15px;
}
${isMobileDevice
? css`
position: unset;
width: 50px;
height: 100%;
`
: ''};
`
type Props = ComponentProps<typeof Input>
export const PasswordInput = ({
autoComplete,
className,
leftContent,
name,
onBlur,
onChange,
onFocus,
placeholder,
placeholderLexic,
value,
}: Props) => {
const { isOpen: showPassword, toggle } = useToggle()
return (
<Input
autoComplete={autoComplete}
className={className}
onBlur={onBlur}
onChange={onChange}
onFocus={onFocus}
placeholder={placeholder}
placeholderLexic={placeholderLexic}
value={value}
name={name}
type={showPassword ? 'text' : 'password'}
leftContent={leftContent}
rightContent={<VisibilityButton type='button' onClick={toggle} />}
/>
)
}