import * as yup from "yup" import {useFormik} from "formik" import {MdCheckCircle, MdChevronRight, MdLock} from "react-icons/md" import {generateKey} from "openpgp" import React, {ReactElement, useMemo} from "react" import passwordGenerator from "secure-random-password" import {LoadingButton} from "@mui/lab" import {Box, Grid, InputAdornment, Typography} from "@mui/material" import {useMutation} from "@tanstack/react-query" import {PasswordField} from "~/components" import {buildEncryptionPassword, encryptString} from "~/utils" import {isDev} from "~/constants/development" import {useUser} from "~/hooks" import {MASTER_PASSWORD_LENGTH} from "~/constants/values" interface Form { password: string passwordConfirmation: string detail?: string } const schema = yup.object().shape({ password: yup.string().required(), passwordConfirmation: yup .string() .required() .oneOf([yup.ref("password"), null], "Passwords must match"), }) export default function PasswordForm(): ReactElement { const user = useUser() const {} = useMutation<>() const awaitGenerateKey = useMemo( () => generateKey({ type: "rsa", format: "armored", curve: "curve25519", userIDs: [{name: "John Smith", email: "john@example.com"}], passphrase: "", rsaBits: isDev ? 2048 : 4096, }), [], ) const formik = useFormik