import { useState } from "react"; import VisibilityOutlinedIcon from "@mui/icons-material/VisibilityOutlined"; import VisibilityOffOutlinedIcon from "@mui/icons-material/VisibilityOffOutlined"; import { IconButton, InputAdornment } from "@mui/material"; import { TextField, type UiTextFieldProps } from "@/components/ui/text-field"; export type PasswordFieldProps = Omit & { visible?: boolean; onVisibleChange?: (visible: boolean) => void; }; const passwordFieldSx = { "& .MuiInputAdornment-positionEnd": { marginRight: "-8px", }, } as const; export function PasswordField({ visible: visibleProp, onVisibleChange, sx, slotProps, ...props }: PasswordFieldProps) { const [internalVisible, setInternalVisible] = useState(false); const isControlled = visibleProp !== undefined; const showPassword = isControlled ? visibleProp : internalVisible; const toggleVisibility = () => { const next = !showPassword; if (!isControlled) { setInternalVisible(next); } onVisibleChange?.(next); }; return ( {showPassword ? ( ) : ( )} ), }, }} {...props} /> ); }