|
|
@ -6,16 +6,17 @@ import { useCopyToClipboard } from "@core/hooks/useCopyToClipboard.ts"; |
|
|
import { usePasswordVisibilityToggle } from "@core/hooks/usePasswordVisibilityToggle.ts"; |
|
|
import { usePasswordVisibilityToggle } from "@core/hooks/usePasswordVisibilityToggle.ts"; |
|
|
import { useTranslation } from "react-i18next"; |
|
|
import { useTranslation } from "react-i18next"; |
|
|
|
|
|
|
|
|
|
|
|
const cnInvalidBase = "border-2 border-red-500 dark:border-red-500"; |
|
|
|
|
|
const cnDirtyBase = "border-2 border-sky-500 dark:border-sky-500"; |
|
|
|
|
|
|
|
|
const inputVariants = cva( |
|
|
const inputVariants = cva( |
|
|
"flex h-10 w-full rounded-md border border-slate-300 bg-transparent py-2 px-3 text-sm placeholder:text-slate-400 focus:outline-none focus:ring-1 focus:ring-slate-400 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-500 dark:bg-transparet dark:text-slate-100 dark:focus:ring-slate-400 dark:focus:ring-offset-slate-600", |
|
|
"flex h-10 w-full rounded-md border border-slate-300 bg-transparent py-2 px-3 text-sm placeholder:text-slate-400 focus:outline-none focus:ring-1 focus:ring-slate-400 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-500 dark:bg-transparet dark:text-slate-100 dark:focus:ring-slate-400 dark:focus:ring-offset-slate-600", |
|
|
{ |
|
|
{ |
|
|
variants: { |
|
|
variants: { |
|
|
variant: { |
|
|
variant: { |
|
|
default: "border-slate-300 dark:border-slate-500", |
|
|
default: "border-slate-300 dark:border-slate-500", |
|
|
invalid: |
|
|
invalid: `${cnInvalidBase} focus:ring-red-500 dark:focus:ring-red-500`, |
|
|
"border-2 border-red-500 dark:border-red-500 focus:ring-red-500 dark:focus:ring-red-500", |
|
|
dirty: `${cnDirtyBase} focus:ring-sky-500 dark:focus:ring-sky-500`, |
|
|
dirty: |
|
|
|
|
|
"border-2 border-sky-500 dark:border-sky-500 focus:ring-sky-500 dark:focus:ring-sky-500", |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
defaultVariants: { |
|
|
defaultVariants: { |
|
|
@ -140,6 +141,11 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>( |
|
|
className, |
|
|
className, |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
const extrasClassName = cn([ |
|
|
|
|
|
variant === "invalid" && `${cnInvalidBase} border-l-0`, |
|
|
|
|
|
variant === "dirty" && `${cnDirtyBase} border-l-0`, |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
return ( |
|
|
return ( |
|
|
<div |
|
|
<div |
|
|
className={cn("relative flex w-full items-stretch", containerClassName)} |
|
|
className={cn("relative flex w-full items-stretch", containerClassName)} |
|
|
@ -165,10 +171,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>( |
|
|
<span |
|
|
<span |
|
|
className={cn( |
|
|
className={cn( |
|
|
"inline-flex items-center border border-l-0 border-slate-300 bg-slate-100/80 px-3 text-sm text-slate-600 dark:border-slate-700 dark:bg-slate-700 dark:text-slate-300", |
|
|
"inline-flex items-center border border-l-0 border-slate-300 bg-slate-100/80 px-3 text-sm text-slate-600 dark:border-slate-700 dark:bg-slate-700 dark:text-slate-300", |
|
|
variant === "invalid" && |
|
|
extrasClassName, |
|
|
"border-2 border-l-0 border-red-500 dark:border-red-500", |
|
|
|
|
|
variant === "dirty" && |
|
|
|
|
|
"border-2 border-l-0 border-sky-500 dark:border-sky-500", |
|
|
|
|
|
!hasActions && "rounded-r-md", |
|
|
!hasActions && "rounded-r-md", |
|
|
)} |
|
|
)} |
|
|
> |
|
|
> |
|
|
@ -180,10 +183,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>( |
|
|
<div |
|
|
<div |
|
|
className={cn( |
|
|
className={cn( |
|
|
"flex items-center divide-x divide-slate-300 border border-l-0 border-slate-300 dark:divide-slate-700 dark:border-slate-500", |
|
|
"flex items-center divide-x divide-slate-300 border border-l-0 border-slate-300 dark:divide-slate-700 dark:border-slate-500", |
|
|
variant === "invalid" && |
|
|
extrasClassName, |
|
|
"border-2 border-l-0 border-red-500 dark:border-red-500", |
|
|
|
|
|
variant === "dirty" && |
|
|
|
|
|
"border-2 border-l-0 border-sky-500 dark:border-sky-500", |
|
|
|
|
|
disabled && |
|
|
disabled && |
|
|
"border-slate-200 dark:border-slate-700 divide-slate-200", |
|
|
"border-slate-200 dark:border-slate-700 divide-slate-200", |
|
|
!hasSuffix && "rounded-r-md", |
|
|
!hasSuffix && "rounded-r-md", |
|
|
|