add: seperate password input component
This commit is contained in:
+3
-3
@@ -29,7 +29,7 @@ input[type="number"] {
|
|||||||
-moz-appearance: textfield;
|
-moz-appearance: textfield;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="password"] {
|
input[type="password"]:not(:placeholder-shown) {
|
||||||
font-family: "irancell";
|
font-family: "irancell";
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@@ -91,7 +91,7 @@ input[type="password"] {
|
|||||||
input:-webkit-autofill {
|
input:-webkit-autofill {
|
||||||
-webkit-box-shadow: 0 0 0px 0px transparent inset !important;
|
-webkit-box-shadow: 0 0 0px 0px transparent inset !important;
|
||||||
box-shadow: 0 0 0px 0px transparent inset !important;
|
box-shadow: 0 0 0px 0px transparent inset !important;
|
||||||
-webkit-text-fill-color: #000 !important;
|
-webkit-text-fill-color: #b6b6b6da !important;
|
||||||
background: currentColor !important;
|
background: currentColor !important;
|
||||||
transition: background-color 10000s ease-in-out 0s;
|
transition: background-color 10000s ease-in-out 0s;
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ input:-webkit-autofill {
|
|||||||
input:autofill {
|
input:autofill {
|
||||||
-webkit-box-shadow: 0 0 0px 0px transparent inset !important;
|
-webkit-box-shadow: 0 0 0px 0px transparent inset !important;
|
||||||
box-shadow: 0 0 0px 0px transparent inset !important;
|
box-shadow: 0 0 0px 0px transparent inset !important;
|
||||||
-webkit-text-fill-color: #000 !important;
|
-webkit-text-fill-color: #b6b6b6da !important;
|
||||||
background: currentColor !important;
|
background: currentColor !important;
|
||||||
transition: background-color 10000s ease-in-out 0s;
|
transition: background-color 10000s ease-in-out 0s;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import React from 'react'
|
||||||
|
import Tooltip from '../utils/Tooltip';
|
||||||
|
import clsx from 'clsx';
|
||||||
|
import { EyeToggleIcon } from '../icons/EyeToggleIcon';
|
||||||
|
import useToggle from '@/hooks/helpers/useToggle';
|
||||||
|
import { AUTH_PAGE_ELEMENT } from '@/enums';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
htmlFor: string;
|
||||||
|
labelText?: React.ReactNode;
|
||||||
|
value?: string;
|
||||||
|
valid?: boolean
|
||||||
|
} & Omit<React.InputHTMLAttributes<HTMLInputElement>, "id">;
|
||||||
|
|
||||||
|
|
||||||
|
function PasswordField({ onChange, htmlFor, labelText, children, valid = true, className, ...inputProps }: Props) {
|
||||||
|
const { state, toggle } = useToggle();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
spellCheck={false}
|
||||||
|
className={`${className} ${valid ? 'border-border' : 'border-invalid'} h-11 inline-flex relative border px-3 w-full rounded-normal group focus-within:border`}>
|
||||||
|
<label
|
||||||
|
className='absolute start-2 -top-2.5 px-2 bg-inherit text-[12px] text-foreground'
|
||||||
|
htmlFor={htmlFor}>
|
||||||
|
{labelText}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<Tooltip content={inputProps['aria-errormessage']} hidden={!inputProps['aria-errormessage']}>
|
||||||
|
<input
|
||||||
|
type={state ? 'text' : 'password'}
|
||||||
|
onChange={onChange}
|
||||||
|
className={clsx(
|
||||||
|
inputProps['aria-errormessage'] && '!text-red-300',
|
||||||
|
'py-2.5 pt-3.5 text-sm2 w-full outline-0 !leading-6'
|
||||||
|
)}
|
||||||
|
name={htmlFor}
|
||||||
|
{...inputProps} />
|
||||||
|
<button className='ps-3' id={AUTH_PAGE_ELEMENT.TOGGLE_PASSWORD} type='button' onClick={toggle}>
|
||||||
|
<EyeToggleIcon slash={state} className="pointer-events-none" />
|
||||||
|
</button>
|
||||||
|
{children}
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PasswordField
|
||||||
Reference in New Issue
Block a user